diff --git a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/enums.pb.go b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/enums.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..2513966533fc00a4c1d7465c6e9a13d986eea507 --- /dev/null +++ b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/enums.pb.go @@ -0,0 +1,151 @@ +// openconfig.enums is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: openconfig/enums/enums.proto + +package gosdn + +import ( + proto "github.com/golang/protobuf/proto" + _ "github.com/openconfig/ygot/proto/yext" + _ "github.com/openconfig/ygot/proto/ywrapper" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// IETFInterfacesInterfaceType represents an enumerated type generated for the YANG identity interface-type. +type IETFInterfacesInterfaceType int32 + +const ( + IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET IETFInterfacesInterfaceType = 0 +) + +// Enum value maps for IETFInterfacesInterfaceType. +var ( + IETFInterfacesInterfaceType_name = map[int32]string{ + 0: "IETFINTERFACESINTERFACETYPE_UNSET", + } + IETFInterfacesInterfaceType_value = map[string]int32{ + "IETFINTERFACESINTERFACETYPE_UNSET": 0, + } +) + +func (x IETFInterfacesInterfaceType) Enum() *IETFInterfacesInterfaceType { + p := new(IETFInterfacesInterfaceType) + *p = x + return p +} + +func (x IETFInterfacesInterfaceType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IETFInterfacesInterfaceType) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_enums_enums_proto_enumTypes[0].Descriptor() +} + +func (IETFInterfacesInterfaceType) Type() protoreflect.EnumType { + return &file_openconfig_enums_enums_proto_enumTypes[0] +} + +func (x IETFInterfacesInterfaceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IETFInterfacesInterfaceType.Descriptor instead. +func (IETFInterfacesInterfaceType) EnumDescriptor() ([]byte, []int) { + return file_openconfig_enums_enums_proto_rawDescGZIP(), []int{0} +} + +var File_openconfig_enums_enums_proto protoreflect.FileDescriptor + +var file_openconfig_enums_enums_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, + 0x6d, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, + 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, + 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, 0x44, 0x0a, 0x1b, + 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x49, + 0x45, 0x54, 0x46, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x53, 0x49, 0x4e, 0x54, + 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, + 0x10, 0x00, 0x42, 0x20, 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, + 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, + 0x6f, 0x73, 0x64, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openconfig_enums_enums_proto_rawDescOnce sync.Once + file_openconfig_enums_enums_proto_rawDescData = file_openconfig_enums_enums_proto_rawDesc +) + +func file_openconfig_enums_enums_proto_rawDescGZIP() []byte { + file_openconfig_enums_enums_proto_rawDescOnce.Do(func() { + file_openconfig_enums_enums_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_enums_enums_proto_rawDescData) + }) + return file_openconfig_enums_enums_proto_rawDescData +} + +var file_openconfig_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_openconfig_enums_enums_proto_goTypes = []interface{}{ + (IETFInterfacesInterfaceType)(0), // 0: openconfig.enums.IETFInterfacesInterfaceType +} +var file_openconfig_enums_enums_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_openconfig_enums_enums_proto_init() } +func file_openconfig_enums_enums_proto_init() { + if File_openconfig_enums_enums_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_openconfig_enums_enums_proto_rawDesc, + NumEnums: 1, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openconfig_enums_enums_proto_goTypes, + DependencyIndexes: file_openconfig_enums_enums_proto_depIdxs, + EnumInfos: file_openconfig_enums_enums_proto_enumTypes, + }.Build() + File_openconfig_enums_enums_proto = out.File + file_openconfig_enums_enums_proto_rawDesc = nil + file_openconfig_enums_enums_proto_goTypes = nil + file_openconfig_enums_enums_proto_depIdxs = nil +} diff --git a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig.pb.go b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..fda5833bb53a461835874bcff8b76a4140dc11c4 --- /dev/null +++ b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig.pb.go @@ -0,0 +1,177 @@ +// openconfig is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: openconfig/openconfig.proto + +package gosdn + +import ( + proto "github.com/golang/protobuf/proto" + _ "github.com/openconfig/ygot/proto/yext" + _ "github.com/openconfig/ygot/proto/ywrapper" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type Device struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Interfaces *Interfaces `protobuf:"bytes,85031486,opt,name=interfaces,proto3" json:"interfaces,omitempty"` +} + +func (x *Device) Reset() { + *x = Device{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Device) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Device) ProtoMessage() {} + +func (x *Device) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_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 Device.ProtoReflect.Descriptor instead. +func (*Device) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_proto_rawDescGZIP(), []int{0} +} + +func (x *Device) GetInterfaces() *Interfaces { + if x != nil { + return x.Interfaces + } + return nil +} + +var File_openconfig_openconfig_proto protoreflect.FileDescriptor + +var file_openconfig_openconfig_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x69, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, + 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xbe, 0xf4, 0xc5, 0x28, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x42, 0x20, + 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, + 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openconfig_openconfig_proto_rawDescOnce sync.Once + file_openconfig_openconfig_proto_rawDescData = file_openconfig_openconfig_proto_rawDesc +) + +func file_openconfig_openconfig_proto_rawDescGZIP() []byte { + file_openconfig_openconfig_proto_rawDescOnce.Do(func() { + file_openconfig_openconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_proto_rawDescData) + }) + return file_openconfig_openconfig_proto_rawDescData +} + +var file_openconfig_openconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_openconfig_openconfig_proto_goTypes = []interface{}{ + (*Device)(nil), // 0: openconfig.Device + (*Interfaces)(nil), // 1: openconfig.openconfig_interfaces.Interfaces +} +var file_openconfig_openconfig_proto_depIdxs = []int32{ + 1, // 0: openconfig.Device.interfaces:type_name -> openconfig.openconfig_interfaces.Interfaces + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_openconfig_openconfig_proto_init() } +func file_openconfig_openconfig_proto_init() { + if File_openconfig_openconfig_proto != nil { + return + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() + if !protoimpl.UnsafeEnabled { + file_openconfig_openconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Device); 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_openconfig_openconfig_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openconfig_openconfig_proto_goTypes, + DependencyIndexes: file_openconfig_openconfig_proto_depIdxs, + MessageInfos: file_openconfig_openconfig_proto_msgTypes, + }.Build() + File_openconfig_openconfig_proto = out.File + file_openconfig_openconfig_proto_rawDesc = nil + file_openconfig_openconfig_proto_goTypes = nil + file_openconfig_openconfig_proto_depIdxs = nil +} diff --git a/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig_interfaces.pb.go b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig_interfaces.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..9802a14b71ad60f6bd5de8f298286a553d3a1c0e --- /dev/null +++ b/api/proto/gitlab.fbi.h-da.de/cocsn/gosdn/openconfig_interfaces.pb.go @@ -0,0 +1,2622 @@ +// openconfig.openconfig_interfaces is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: openconfig/openconfig_interfaces/openconfig_interfaces.proto + +package gosdn + +import ( + proto "github.com/golang/protobuf/proto" + _ "github.com/openconfig/ygot/proto/yext" + ywrapper "github.com/openconfig/ygot/proto/ywrapper" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type Interfaces_Interface_State_AdminStatus int32 + +const ( + Interfaces_Interface_State_ADMINSTATUS_UNSET Interfaces_Interface_State_AdminStatus = 0 + Interfaces_Interface_State_ADMINSTATUS_UP Interfaces_Interface_State_AdminStatus = 1 + Interfaces_Interface_State_ADMINSTATUS_DOWN Interfaces_Interface_State_AdminStatus = 2 + Interfaces_Interface_State_ADMINSTATUS_TESTING Interfaces_Interface_State_AdminStatus = 3 +) + +// Enum value maps for Interfaces_Interface_State_AdminStatus. +var ( + Interfaces_Interface_State_AdminStatus_name = map[int32]string{ + 0: "ADMINSTATUS_UNSET", + 1: "ADMINSTATUS_UP", + 2: "ADMINSTATUS_DOWN", + 3: "ADMINSTATUS_TESTING", + } + Interfaces_Interface_State_AdminStatus_value = map[string]int32{ + "ADMINSTATUS_UNSET": 0, + "ADMINSTATUS_UP": 1, + "ADMINSTATUS_DOWN": 2, + "ADMINSTATUS_TESTING": 3, + } +) + +func (x Interfaces_Interface_State_AdminStatus) Enum() *Interfaces_Interface_State_AdminStatus { + p := new(Interfaces_Interface_State_AdminStatus) + *p = x + return p +} + +func (x Interfaces_Interface_State_AdminStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0].Descriptor() +} + +func (Interfaces_Interface_State_AdminStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0] +} + +func (x Interfaces_Interface_State_AdminStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_State_AdminStatus.Descriptor instead. +func (Interfaces_Interface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} +} + +type Interfaces_Interface_State_OperStatus int32 + +const ( + Interfaces_Interface_State_OPERSTATUS_UNSET Interfaces_Interface_State_OperStatus = 0 + Interfaces_Interface_State_OPERSTATUS_UP Interfaces_Interface_State_OperStatus = 2 + Interfaces_Interface_State_OPERSTATUS_DOWN Interfaces_Interface_State_OperStatus = 3 + Interfaces_Interface_State_OPERSTATUS_TESTING Interfaces_Interface_State_OperStatus = 4 + Interfaces_Interface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_State_OperStatus = 5 + Interfaces_Interface_State_OPERSTATUS_DORMANT Interfaces_Interface_State_OperStatus = 6 + Interfaces_Interface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_State_OperStatus = 7 + Interfaces_Interface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_State_OperStatus = 8 +) + +// Enum value maps for Interfaces_Interface_State_OperStatus. +var ( + Interfaces_Interface_State_OperStatus_name = map[int32]string{ + 0: "OPERSTATUS_UNSET", + 2: "OPERSTATUS_UP", + 3: "OPERSTATUS_DOWN", + 4: "OPERSTATUS_TESTING", + 5: "OPERSTATUS_UNKNOWN", + 6: "OPERSTATUS_DORMANT", + 7: "OPERSTATUS_NOT_PRESENT", + 8: "OPERSTATUS_LOWER_LAYER_DOWN", + } + Interfaces_Interface_State_OperStatus_value = map[string]int32{ + "OPERSTATUS_UNSET": 0, + "OPERSTATUS_UP": 2, + "OPERSTATUS_DOWN": 3, + "OPERSTATUS_TESTING": 4, + "OPERSTATUS_UNKNOWN": 5, + "OPERSTATUS_DORMANT": 6, + "OPERSTATUS_NOT_PRESENT": 7, + "OPERSTATUS_LOWER_LAYER_DOWN": 8, + } +) + +func (x Interfaces_Interface_State_OperStatus) Enum() *Interfaces_Interface_State_OperStatus { + p := new(Interfaces_Interface_State_OperStatus) + *p = x + return p +} + +func (x Interfaces_Interface_State_OperStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1].Descriptor() +} + +func (Interfaces_Interface_State_OperStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1] +} + +func (x Interfaces_Interface_State_OperStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_State_OperStatus.Descriptor instead. +func (Interfaces_Interface_State_OperStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 1} +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus int32 + +const ( + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 0 + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 1 + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 2 + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 3 +) + +// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus. +var ( + Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_name = map[int32]string{ + 0: "ADMINSTATUS_UNSET", + 1: "ADMINSTATUS_UP", + 2: "ADMINSTATUS_DOWN", + 3: "ADMINSTATUS_TESTING", + } + Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_value = map[string]int32{ + "ADMINSTATUS_UNSET": 0, + "ADMINSTATUS_UP": 1, + "ADMINSTATUS_DOWN": 2, + "ADMINSTATUS_TESTING": 3, + } +) + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { + p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) + *p = x + return p +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2].Descriptor() +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2] +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus.Descriptor instead. +func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus int32 + +const ( + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 0 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 2 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 3 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 4 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 5 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DORMANT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 6 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 7 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 8 +) + +// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus. +var ( + Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_name = map[int32]string{ + 0: "OPERSTATUS_UNSET", + 2: "OPERSTATUS_UP", + 3: "OPERSTATUS_DOWN", + 4: "OPERSTATUS_TESTING", + 5: "OPERSTATUS_UNKNOWN", + 6: "OPERSTATUS_DORMANT", + 7: "OPERSTATUS_NOT_PRESENT", + 8: "OPERSTATUS_LOWER_LAYER_DOWN", + } + Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_value = map[string]int32{ + "OPERSTATUS_UNSET": 0, + "OPERSTATUS_UP": 2, + "OPERSTATUS_DOWN": 3, + "OPERSTATUS_TESTING": 4, + "OPERSTATUS_UNKNOWN": 5, + "OPERSTATUS_DORMANT": 6, + "OPERSTATUS_NOT_PRESENT": 7, + "OPERSTATUS_LOWER_LAYER_DOWN": 8, + } +) + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { + p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) + *p = x + return p +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3].Descriptor() +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3] +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus.Descriptor instead. +func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 1} +} + +type Interfaces struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Interface []*Interfaces_InterfaceKey `protobuf:"bytes,422482938,rep,name=interface,proto3" json:"interface,omitempty"` +} + +func (x *Interfaces) Reset() { + *x = Interfaces{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces) ProtoMessage() {} + +func (x *Interfaces) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces.ProtoReflect.Descriptor instead. +func (*Interfaces) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0} +} + +func (x *Interfaces) GetInterface() []*Interfaces_InterfaceKey { + if x != nil { + return x.Interface + } + return nil +} + +type Interfaces_Interface struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Config *Interfaces_Interface_Config `protobuf:"bytes,334174827,opt,name=config,proto3" json:"config,omitempty"` + HoldTime *Interfaces_Interface_HoldTime `protobuf:"bytes,175931092,opt,name=hold_time,json=holdTime,proto3" json:"hold_time,omitempty"` + State *Interfaces_Interface_State `protobuf:"bytes,387556140,opt,name=state,proto3" json:"state,omitempty"` + Subinterfaces *Interfaces_Interface_Subinterfaces `protobuf:"bytes,327798165,opt,name=subinterfaces,proto3" json:"subinterfaces,omitempty"` +} + +func (x *Interfaces_Interface) Reset() { + *x = Interfaces_Interface{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface) ProtoMessage() {} + +func (x *Interfaces_Interface) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *Interfaces_Interface) GetConfig() *Interfaces_Interface_Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *Interfaces_Interface) GetHoldTime() *Interfaces_Interface_HoldTime { + if x != nil { + return x.HoldTime + } + return nil +} + +func (x *Interfaces_Interface) GetState() *Interfaces_Interface_State { + if x != nil { + return x.State + } + return nil +} + +func (x *Interfaces_Interface) GetSubinterfaces() *Interfaces_Interface_Subinterfaces { + if x != nil { + return x.Subinterfaces + } + return nil +} + +type Interfaces_InterfaceKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Interface *Interfaces_Interface `protobuf:"bytes,2,opt,name=interface,proto3" json:"interface,omitempty"` +} + +func (x *Interfaces_InterfaceKey) Reset() { + *x = Interfaces_InterfaceKey{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_InterfaceKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_InterfaceKey) ProtoMessage() {} + +func (x *Interfaces_InterfaceKey) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_InterfaceKey.ProtoReflect.Descriptor instead. +func (*Interfaces_InterfaceKey) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *Interfaces_InterfaceKey) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Interfaces_InterfaceKey) GetInterface() *Interfaces_Interface { + if x != nil { + return x.Interface + } + return nil +} + +type Interfaces_Interface_Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description *ywrapper.StringValue `protobuf:"bytes,418535860,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,37224301,opt,name=enabled,proto3" json:"enabled,omitempty"` + LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,253516347,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` + Mtu *ywrapper.UintValue `protobuf:"bytes,376210342,opt,name=mtu,proto3" json:"mtu,omitempty"` + Name *ywrapper.StringValue `protobuf:"bytes,51804187,opt,name=name,proto3" json:"name,omitempty"` + Type IETFInterfacesInterfaceType `protobuf:"varint,144596894,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` +} + +func (x *Interfaces_Interface_Config) Reset() { + *x = Interfaces_Interface_Config{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Config) ProtoMessage() {} + +func (x *Interfaces_Interface_Config) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Config.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Config) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *Interfaces_Interface_Config) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_Config) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_Config) GetLoopbackMode() *ywrapper.BoolValue { + if x != nil { + return x.LoopbackMode + } + return nil +} + +func (x *Interfaces_Interface_Config) GetMtu() *ywrapper.UintValue { + if x != nil { + return x.Mtu + } + return nil +} + +func (x *Interfaces_Interface_Config) GetName() *ywrapper.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *Interfaces_Interface_Config) GetType() IETFInterfacesInterfaceType { + if x != nil { + return x.Type + } + return IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET +} + +type Interfaces_Interface_HoldTime struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Config *Interfaces_Interface_HoldTime_Config `protobuf:"bytes,316512729,opt,name=config,proto3" json:"config,omitempty"` + State *Interfaces_Interface_HoldTime_State `protobuf:"bytes,483010990,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *Interfaces_Interface_HoldTime) Reset() { + *x = Interfaces_Interface_HoldTime{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_HoldTime) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_HoldTime) ProtoMessage() {} + +func (x *Interfaces_Interface_HoldTime) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_HoldTime.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_HoldTime) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1} +} + +func (x *Interfaces_Interface_HoldTime) GetConfig() *Interfaces_Interface_HoldTime_Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *Interfaces_Interface_HoldTime) GetState() *Interfaces_Interface_HoldTime_State { + if x != nil { + return x.State + } + return nil +} + +type Interfaces_Interface_State struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdminStatus Interfaces_Interface_State_AdminStatus `protobuf:"varint,474494763,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_AdminStatus" json:"admin_status,omitempty"` + Counters *Interfaces_Interface_State_Counters `protobuf:"bytes,83645964,opt,name=counters,proto3" json:"counters,omitempty"` + Description *ywrapper.StringValue `protobuf:"bytes,389435287,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,330927518,opt,name=enabled,proto3" json:"enabled,omitempty"` + Ifindex *ywrapper.UintValue `protobuf:"bytes,116108202,opt,name=ifindex,proto3" json:"ifindex,omitempty"` + LastChange *ywrapper.UintValue `protobuf:"bytes,127348880,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` + Logical *ywrapper.BoolValue `protobuf:"bytes,440460216,opt,name=logical,proto3" json:"logical,omitempty"` + LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,372935512,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` + Mtu *ywrapper.UintValue `protobuf:"bytes,96390485,opt,name=mtu,proto3" json:"mtu,omitempty"` + Name *ywrapper.StringValue `protobuf:"bytes,503495278,opt,name=name,proto3" json:"name,omitempty"` + OperStatus Interfaces_Interface_State_OperStatus `protobuf:"varint,470394226,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_OperStatus" json:"oper_status,omitempty"` + Type IETFInterfacesInterfaceType `protobuf:"varint,358148579,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` +} + +func (x *Interfaces_Interface_State) Reset() { + *x = Interfaces_Interface_State{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_State) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_State) ProtoMessage() {} + +func (x *Interfaces_Interface_State) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_State.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_State) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2} +} + +func (x *Interfaces_Interface_State) GetAdminStatus() Interfaces_Interface_State_AdminStatus { + if x != nil { + return x.AdminStatus + } + return Interfaces_Interface_State_ADMINSTATUS_UNSET +} + +func (x *Interfaces_Interface_State) GetCounters() *Interfaces_Interface_State_Counters { + if x != nil { + return x.Counters + } + return nil +} + +func (x *Interfaces_Interface_State) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_State) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_State) GetIfindex() *ywrapper.UintValue { + if x != nil { + return x.Ifindex + } + return nil +} + +func (x *Interfaces_Interface_State) GetLastChange() *ywrapper.UintValue { + if x != nil { + return x.LastChange + } + return nil +} + +func (x *Interfaces_Interface_State) GetLogical() *ywrapper.BoolValue { + if x != nil { + return x.Logical + } + return nil +} + +func (x *Interfaces_Interface_State) GetLoopbackMode() *ywrapper.BoolValue { + if x != nil { + return x.LoopbackMode + } + return nil +} + +func (x *Interfaces_Interface_State) GetMtu() *ywrapper.UintValue { + if x != nil { + return x.Mtu + } + return nil +} + +func (x *Interfaces_Interface_State) GetName() *ywrapper.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *Interfaces_Interface_State) GetOperStatus() Interfaces_Interface_State_OperStatus { + if x != nil { + return x.OperStatus + } + return Interfaces_Interface_State_OPERSTATUS_UNSET +} + +func (x *Interfaces_Interface_State) GetType() IETFInterfacesInterfaceType { + if x != nil { + return x.Type + } + return IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET +} + +type Interfaces_Interface_Subinterfaces struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Subinterface []*Interfaces_Interface_Subinterfaces_SubinterfaceKey `protobuf:"bytes,464802819,rep,name=subinterface,proto3" json:"subinterface,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces) Reset() { + *x = Interfaces_Interface_Subinterfaces{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3} +} + +func (x *Interfaces_Interface_Subinterfaces) GetSubinterface() []*Interfaces_Interface_Subinterfaces_SubinterfaceKey { + if x != nil { + return x.Subinterface + } + return nil +} + +type Interfaces_Interface_HoldTime_Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Down *ywrapper.UintValue `protobuf:"bytes,171181656,opt,name=down,proto3" json:"down,omitempty"` + Up *ywrapper.UintValue `protobuf:"bytes,62026235,opt,name=up,proto3" json:"up,omitempty"` +} + +func (x *Interfaces_Interface_HoldTime_Config) Reset() { + *x = Interfaces_Interface_HoldTime_Config{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_HoldTime_Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_HoldTime_Config) ProtoMessage() {} + +func (x *Interfaces_Interface_HoldTime_Config) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_HoldTime_Config.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_HoldTime_Config) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 0} +} + +func (x *Interfaces_Interface_HoldTime_Config) GetDown() *ywrapper.UintValue { + if x != nil { + return x.Down + } + return nil +} + +func (x *Interfaces_Interface_HoldTime_Config) GetUp() *ywrapper.UintValue { + if x != nil { + return x.Up + } + return nil +} + +type Interfaces_Interface_HoldTime_State struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Down *ywrapper.UintValue `protobuf:"bytes,167887721,opt,name=down,proto3" json:"down,omitempty"` + Up *ywrapper.UintValue `protobuf:"bytes,223847598,opt,name=up,proto3" json:"up,omitempty"` +} + +func (x *Interfaces_Interface_HoldTime_State) Reset() { + *x = Interfaces_Interface_HoldTime_State{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_HoldTime_State) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_HoldTime_State) ProtoMessage() {} + +func (x *Interfaces_Interface_HoldTime_State) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_HoldTime_State.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_HoldTime_State) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 1} +} + +func (x *Interfaces_Interface_HoldTime_State) GetDown() *ywrapper.UintValue { + if x != nil { + return x.Down + } + return nil +} + +func (x *Interfaces_Interface_HoldTime_State) GetUp() *ywrapper.UintValue { + if x != nil { + return x.Up + } + return nil +} + +type Interfaces_Interface_State_Counters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,270803130,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` + InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,280201989,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` + InDiscards *ywrapper.UintValue `protobuf:"bytes,11979514,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` + InErrors *ywrapper.UintValue `protobuf:"bytes,456697578,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` + InFcsErrors *ywrapper.UintValue `protobuf:"bytes,501559027,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` + InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,113269128,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` + InOctets *ywrapper.UintValue `protobuf:"bytes,333138891,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` + InPkts *ywrapper.UintValue `protobuf:"bytes,412843491,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` + InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,272792307,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` + InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,241475497,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` + LastClear *ywrapper.UintValue `protobuf:"bytes,186014919,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` + OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,338589668,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` + OutDiscards *ywrapper.UintValue `protobuf:"bytes,254055111,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` + OutErrors *ywrapper.UintValue `protobuf:"bytes,471103047,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` + OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,457840757,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` + OutOctets *ywrapper.UintValue `protobuf:"bytes,201005514,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` + OutPkts *ywrapper.UintValue `protobuf:"bytes,437582090,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` + OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,36542246,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` +} + +func (x *Interfaces_Interface_State_Counters) Reset() { + *x = Interfaces_Interface_State_Counters{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_State_Counters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_State_Counters) ProtoMessage() {} + +func (x *Interfaces_Interface_State_Counters) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_State_Counters.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_State_Counters) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} +} + +func (x *Interfaces_Interface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { + if x != nil { + return x.CarrierTransitions + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.InBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInDiscards() *ywrapper.UintValue { + if x != nil { + return x.InDiscards + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInErrors() *ywrapper.UintValue { + if x != nil { + return x.InErrors + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { + if x != nil { + return x.InFcsErrors + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.InMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInOctets() *ywrapper.UintValue { + if x != nil { + return x.InOctets + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInPkts() *ywrapper.UintValue { + if x != nil { + return x.InPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.InUnicastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { + if x != nil { + return x.InUnknownProtos + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetLastClear() *ywrapper.UintValue { + if x != nil { + return x.LastClear + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutDiscards() *ywrapper.UintValue { + if x != nil { + return x.OutDiscards + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutErrors() *ywrapper.UintValue { + if x != nil { + return x.OutErrors + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutOctets() *ywrapper.UintValue { + if x != nil { + return x.OutOctets + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutPkts() *ywrapper.UintValue { + if x != nil { + return x.OutPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutUnicastPkts + } + return nil +} + +type Interfaces_Interface_Subinterfaces_Subinterface struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Config *Interfaces_Interface_Subinterfaces_Subinterface_Config `protobuf:"bytes,175001476,opt,name=config,proto3" json:"config,omitempty"` + State *Interfaces_Interface_Subinterfaces_Subinterface_State `protobuf:"bytes,501974173,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetConfig() *Interfaces_Interface_Subinterfaces_Subinterface_Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetState() *Interfaces_Interface_Subinterfaces_Subinterface_State { + if x != nil { + return x.State + } + return nil +} + +type Interfaces_Interface_Subinterfaces_SubinterfaceKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + Subinterface *Interfaces_Interface_Subinterfaces_Subinterface `protobuf:"bytes,2,opt,name=subinterface,proto3" json:"subinterface,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) Reset() { + *x = Interfaces_Interface_Subinterfaces_SubinterfaceKey{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_SubinterfaceKey.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 1} +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetSubinterface() *Interfaces_Interface_Subinterfaces_Subinterface { + if x != nil { + return x.Subinterface + } + return nil +} + +type Interfaces_Interface_Subinterfaces_Subinterface_Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description *ywrapper.StringValue `protobuf:"bytes,280671199,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,297236390,opt,name=enabled,proto3" json:"enabled,omitempty"` + Index *ywrapper.UintValue `protobuf:"bytes,279269781,opt,name=index,proto3" json:"index,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface_Config{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface_Config.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 0} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetIndex() *ywrapper.UintValue { + if x != nil { + return x.Index + } + return nil +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdminStatus Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus `protobuf:"varint,250658952,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus" json:"admin_status,omitempty"` + Counters *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters `protobuf:"bytes,483442783,opt,name=counters,proto3" json:"counters,omitempty"` + Description *ywrapper.StringValue `protobuf:"bytes,49943526,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,468513843,opt,name=enabled,proto3" json:"enabled,omitempty"` + Ifindex *ywrapper.UintValue `protobuf:"bytes,511987815,opt,name=ifindex,proto3" json:"ifindex,omitempty"` + Index *ywrapper.UintValue `protobuf:"bytes,80745756,opt,name=index,proto3" json:"index,omitempty"` + LastChange *ywrapper.UintValue `protobuf:"bytes,29904521,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` + Logical *ywrapper.BoolValue `protobuf:"bytes,294124401,opt,name=logical,proto3" json:"logical,omitempty"` + Name *ywrapper.StringValue `protobuf:"bytes,279346681,opt,name=name,proto3" json:"name,omitempty"` + OperStatus Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus `protobuf:"varint,401969247,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus" json:"oper_status,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface_State{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface_State.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface_State) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetAdminStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { + if x != nil { + return x.AdminStatus + } + return Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetCounters() *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters { + if x != nil { + return x.Counters + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIfindex() *ywrapper.UintValue { + if x != nil { + return x.Ifindex + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIndex() *ywrapper.UintValue { + if x != nil { + return x.Index + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLastChange() *ywrapper.UintValue { + if x != nil { + return x.LastChange + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLogical() *ywrapper.BoolValue { + if x != nil { + return x.Logical + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetName() *ywrapper.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetOperStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { + if x != nil { + return x.OperStatus + } + return Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State_Counters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,141120277,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` + InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,120244022,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` + InDiscards *ywrapper.UintValue `protobuf:"bytes,307490461,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` + InErrors *ywrapper.UintValue `protobuf:"bytes,319720873,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` + InFcsErrors *ywrapper.UintValue `protobuf:"bytes,169858424,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` + InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,320618859,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` + InOctets *ywrapper.UintValue `protobuf:"bytes,530205868,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` + InPkts *ywrapper.UintValue `protobuf:"bytes,441153352,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` + InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,177838880,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` + InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,146059814,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` + LastClear *ywrapper.UintValue `protobuf:"bytes,518046966,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` + OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,501221245,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` + OutDiscards *ywrapper.UintValue `protobuf:"bytes,159539762,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` + OutErrors *ywrapper.UintValue `protobuf:"bytes,466636898,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` + OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,326155776,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` + OutOctets *ywrapper.UintValue `protobuf:"bytes,50579235,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` + OutPkts *ywrapper.UintValue `protobuf:"bytes,29497115,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` + OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,297910971,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface_State_Counters{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface_State_Counters.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { + if x != nil { + return x.CarrierTransitions + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.InBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInDiscards() *ywrapper.UintValue { + if x != nil { + return x.InDiscards + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInErrors() *ywrapper.UintValue { + if x != nil { + return x.InErrors + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { + if x != nil { + return x.InFcsErrors + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.InMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInOctets() *ywrapper.UintValue { + if x != nil { + return x.InOctets + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInPkts() *ywrapper.UintValue { + if x != nil { + return x.InPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.InUnicastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { + if x != nil { + return x.InUnknownProtos + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetLastClear() *ywrapper.UintValue { + if x != nil { + return x.LastClear + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutDiscards() *ywrapper.UintValue { + if x != nil { + return x.OutDiscards + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutErrors() *ywrapper.UintValue { + if x != nil { + return x.OutErrors + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutOctets() *ywrapper.UintValue { + if x != nil { + return x.OutOctets + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutPkts() *ywrapper.UintValue { + if x != nil { + return x.OutPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutUnicastPkts + } + return nil +} + +var File_openconfig_openconfig_interfaces_openconfig_interfaces_proto protoreflect.FileDescriptor + +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = []byte{ + 0x0a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, + 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2f, 0x65, + 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x5a, 0x0a, 0x0a, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x09, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0xfa, 0xa7, 0xba, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x1a, 0xd3, 0x58, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x7a, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xeb, 0xb4, 0xac, 0x9f, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x42, 0x1f, 0x82, 0x41, 0x1c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x68, + 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0xd4, 0xfd, 0xf1, 0x53, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, + 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x76, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0xac, 0xc6, 0xe6, 0xb8, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x42, 0x1e, 0x82, 0x41, 0x1b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x95, 0x9b, 0xa7, 0x9c, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x1a, 0xc9, 0x04, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x68, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, 0xb3, 0xc9, 0xc7, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, + 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0xed, 0xfe, 0xdf, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0xbb, 0xb4, 0xf1, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x52, + 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4e, 0x0a, + 0x03, 0x6d, 0x74, 0x75, 0x18, 0xa6, 0x87, 0xb2, 0xb3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x9b, 0xf0, 0xd9, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x9e, 0xbf, 0xf9, 0x44, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x9d, 0x05, + 0x0a, 0x08, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xd9, 0xb3, 0xf6, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x46, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x29, 0x82, 0x41, 0x26, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x89, 0x01, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0xae, 0xd3, 0xa8, 0xe6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x28, 0x82, 0x41, 0x25, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x5a, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xd8, 0x8c, 0xd0, 0x51, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, + 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2e, 0x82, 0x41, 0x2b, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x54, 0x0a, + 0x02, 0x75, 0x70, 0x18, 0xfb, 0xe3, 0xc9, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x52, + 0x02, 0x75, 0x70, 0x1a, 0xb7, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, + 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xe9, 0x86, 0x87, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, + 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x6f, + 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x53, 0x0a, 0x02, 0x75, 0x70, 0x18, 0xae, + 0xc9, 0xde, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, + 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x75, 0x70, 0x52, 0x02, 0x75, 0x70, 0x1a, 0x9b, 0x1e, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xab, 0xee, 0xa0, 0xe2, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2b, 0x82, 0x41, + 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x8c, 0xac, 0xf1, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x42, 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x67, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x97, 0x9f, 0xd9, 0xb9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x9e, 0x9b, 0xe6, 0x9d, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x07, 0x69, 0x66, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xaa, 0xd7, 0xae, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x63, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x18, 0x90, 0xe1, 0xdc, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, + 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x59, 0x0a, 0x07, 0x6c, 0x6f, 0x67, + 0x69, 0x63, 0x61, 0x6c, 0x18, 0xb8, 0xc7, 0x83, 0xd2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, 0x6f, 0x67, + 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xd8, 0x96, 0xea, 0xb1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, + 0x64, 0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, + 0x12, 0x4c, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0xd5, 0x9a, 0xfb, 0x2d, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xee, 0xf4, 0x8a, 0xf0, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0xf2, 0xca, 0xa6, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6a, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0xe3, 0xd3, 0xe3, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, + 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x23, + 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbe, 0x10, 0x0a, 0x08, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, + 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xba, + 0xc1, 0x90, 0x81, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3b, 0x82, + 0x41, 0x38, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, + 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7e, + 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, + 0x6b, 0x74, 0x73, 0x18, 0x85, 0x96, 0xce, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x62, + 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, + 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6c, + 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xfa, 0x95, + 0xdb, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x33, 0x82, 0x41, 0x30, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, + 0x52, 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x09, + 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xea, 0xcd, 0xe2, 0xd9, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xf3, 0xdd, 0x94, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, + 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, + 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x7d, 0x0a, 0x11, 0x69, 0x6e, 0x5f, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x88, + 0xb3, 0x81, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, + 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x67, 0x0a, 0x09, 0x69, 0x6e, 0x5f, 0x6f, + 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xcb, 0x97, 0xed, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, + 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, + 0x73, 0x12, 0x61, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xe3, 0xfb, 0xed, + 0xc4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2f, 0x82, 0x41, 0x2c, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, + 0x50, 0x6b, 0x74, 0x73, 0x12, 0x78, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xf3, 0xf5, 0x89, 0x82, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x37, 0x82, 0x41, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, + 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, + 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7d, + 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x73, 0x18, 0xa9, 0xbf, 0x92, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, + 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, 0x6e, + 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x69, 0x0a, + 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xc7, 0xb9, 0xd9, 0x58, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, + 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, + 0xe4, 0xef, 0xb9, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3a, + 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, + 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, + 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6f, 0x0a, 0x0c, + 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xc7, 0xa5, 0x92, + 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x34, 0x82, 0x41, 0x31, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, + 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x6a, 0x0a, + 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xc7, 0xec, 0xd1, 0xe0, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x09, + 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, + 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, + 0x18, 0xf5, 0xb0, 0xa8, 0xda, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x69, 0x0a, + 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xca, 0xb3, 0xec, 0x5f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, + 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x12, 0x64, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, + 0x70, 0x6b, 0x74, 0x73, 0x18, 0x8a, 0xf2, 0xd3, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x30, 0x82, 0x41, 0x2d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, + 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7a, + 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, + 0x74, 0x73, 0x18, 0xa6, 0xae, 0xb6, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x38, 0x82, 0x41, 0x35, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, + 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, + 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, + 0x00, 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, + 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, + 0x10, 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, + 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, + 0x22, 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, + 0x1c, 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, + 0x57, 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, + 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, + 0x47, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, + 0x41, 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, + 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, + 0x45, 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, + 0x45, 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, + 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, + 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xa8, 0x2c, 0x0a, 0x0d, + 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0xb1, 0x01, + 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x83, + 0xa8, 0xd1, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x33, + 0x82, 0x41, 0x30, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x1a, 0x86, 0x29, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x84, 0x9f, + 0xb9, 0x53, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x42, 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0xac, 0x01, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x9d, + 0x89, 0xae, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x1a, 0xf6, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, + 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xdf, + 0xe7, 0xea, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0xa6, 0xef, 0xdd, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x42, + 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x6f, 0x0a, 0x05, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x95, 0xa3, 0x95, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x40, 0x82, 0x41, 0x3d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x9b, 0x23, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0xd1, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x88, 0x81, 0xc3, 0x77, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x63, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x08, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0xdf, 0x80, 0xc3, 0xe6, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x60, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x42, 0x42, 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x81, 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe6, 0xa7, 0xe8, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0xb3, 0xe8, 0xb3, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x74, 0x0a, 0x07, 0x69, + 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xe7, 0xa0, 0x91, 0xf4, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x6d, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x9c, 0xaa, 0xc0, 0x26, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3f, 0x82, 0x41, 0x3c, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x7e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, + 0x89, 0x9d, 0xa1, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x45, 0x82, + 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x12, 0x74, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x18, 0xf1, 0xf6, 0x9f, 0x8c, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xf9, + 0xfb, 0x99, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x3e, 0x82, 0x41, 0x3b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xce, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xdf, 0xa0, 0xd6, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x62, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, + 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xb0, 0x14, 0x0a, 0x08, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x95, 0xa6, 0xa5, 0x43, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x56, 0x82, 0x41, 0x53, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, + 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, + 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xb6, 0x8e, 0xab, 0x39, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, + 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, + 0x0f, 0x69, 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, + 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, + 0x18, 0x9d, 0xdd, 0xcf, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x4e, 0x82, 0x41, 0x4b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, + 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, + 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xa9, 0x9b, 0xba, 0x98, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x18, 0xf8, 0xaa, 0xff, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x50, 0x82, 0x41, 0x4d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, + 0x99, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xeb, 0x82, 0xf1, 0x98, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, + 0x69, 0x6e, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xac, 0x99, 0xe9, 0xfc, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, + 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, + 0x12, 0x7c, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xc8, 0xee, 0xad, 0xd2, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4a, 0x82, 0x41, 0x47, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, + 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x92, + 0x01, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, + 0x74, 0x73, 0x18, 0xa0, 0xb6, 0xe6, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x52, 0x82, 0x41, 0x4f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, + 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, + 0x6b, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, + 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x18, 0xa6, 0xe4, 0xd2, 0x45, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, + 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, + 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, + 0x6e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x85, + 0x01, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xf6, 0x89, + 0x83, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, + 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, 0x61, 0x73, + 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x5f, 0x62, + 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xfd, 0x8e, + 0x80, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x55, 0x82, 0x41, + 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, + 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, + 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xb2, 0xc4, 0x89, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4f, 0x82, 0x41, 0x4c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, + 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x18, 0xe2, 0xa0, 0xc1, 0xde, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, + 0x09, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, + 0x75, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, + 0x73, 0x18, 0x80, 0xfc, 0xc2, 0x9b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x55, 0x82, 0x41, 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x6f, 0x75, + 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xa3, 0x8e, 0x8f, 0x18, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, + 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, + 0x12, 0x7e, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x9b, 0xae, 0x88, + 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4b, 0x82, 0x41, 0x48, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, + 0x75, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, + 0x12, 0x96, 0x01, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xbb, 0x85, 0x87, 0x8e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x53, 0x82, 0x41, 0x50, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, 0x6e, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, 0x4d, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, + 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, 0x41, + 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, + 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, 0x44, + 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x22, + 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, + 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, + 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1c, + 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, + 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, + 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, + 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, 0x41, + 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, 0x52, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, + 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, + 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, + 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xd9, 0x01, 0x0a, 0x0f, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4f, + 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x39, 0x82, + 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x75, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1a, 0x97, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x82, 0x41, 0x1a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x42, 0x20, 0x5a, 0x1e, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, + 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, 0x2f, 0x63, 0x6f, 0x63, 0x73, 0x6e, 0x2f, 0x67, 0x6f, 0x73, + 0x64, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce sync.Once + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc +) + +func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP() []byte { + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce.Do(func() { + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData) + }) + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData +} + +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = []interface{}{ + (Interfaces_Interface_State_AdminStatus)(0), // 0: openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus + (Interfaces_Interface_State_OperStatus)(0), // 1: openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus + (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus)(0), // 2: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus + (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus)(0), // 3: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus + (*Interfaces)(nil), // 4: openconfig.openconfig_interfaces.Interfaces + (*Interfaces_Interface)(nil), // 5: openconfig.openconfig_interfaces.Interfaces.Interface + (*Interfaces_InterfaceKey)(nil), // 6: openconfig.openconfig_interfaces.Interfaces.InterfaceKey + (*Interfaces_Interface_Config)(nil), // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config + (*Interfaces_Interface_HoldTime)(nil), // 8: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime + (*Interfaces_Interface_State)(nil), // 9: openconfig.openconfig_interfaces.Interfaces.Interface.State + (*Interfaces_Interface_Subinterfaces)(nil), // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces + (*Interfaces_Interface_HoldTime_Config)(nil), // 11: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config + (*Interfaces_Interface_HoldTime_State)(nil), // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State + (*Interfaces_Interface_State_Counters)(nil), // 13: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters + (*Interfaces_Interface_Subinterfaces_Subinterface)(nil), // 14: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface + (*Interfaces_Interface_Subinterfaces_SubinterfaceKey)(nil), // 15: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey + (*Interfaces_Interface_Subinterfaces_Subinterface_Config)(nil), // 16: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config + (*Interfaces_Interface_Subinterfaces_Subinterface_State)(nil), // 17: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State + (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters)(nil), // 18: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters + (*ywrapper.StringValue)(nil), // 19: ywrapper.StringValue + (*ywrapper.BoolValue)(nil), // 20: ywrapper.BoolValue + (*ywrapper.UintValue)(nil), // 21: ywrapper.UintValue + (IETFInterfacesInterfaceType)(0), // 22: openconfig.enums.IETFInterfacesInterfaceType +} +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = []int32{ + 6, // 0: openconfig.openconfig_interfaces.Interfaces.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.InterfaceKey + 7, // 1: openconfig.openconfig_interfaces.Interfaces.Interface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Config + 8, // 2: openconfig.openconfig_interfaces.Interfaces.Interface.hold_time:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime + 9, // 3: openconfig.openconfig_interfaces.Interfaces.Interface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State + 10, // 4: openconfig.openconfig_interfaces.Interfaces.Interface.subinterfaces:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces + 5, // 5: openconfig.openconfig_interfaces.Interfaces.InterfaceKey.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface + 19, // 6: openconfig.openconfig_interfaces.Interfaces.Interface.Config.description:type_name -> ywrapper.StringValue + 20, // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config.enabled:type_name -> ywrapper.BoolValue + 20, // 8: openconfig.openconfig_interfaces.Interfaces.Interface.Config.loopback_mode:type_name -> ywrapper.BoolValue + 21, // 9: openconfig.openconfig_interfaces.Interfaces.Interface.Config.mtu:type_name -> ywrapper.UintValue + 19, // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Config.name:type_name -> ywrapper.StringValue + 22, // 11: openconfig.openconfig_interfaces.Interfaces.Interface.Config.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType + 11, // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config + 12, // 13: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State + 0, // 14: openconfig.openconfig_interfaces.Interfaces.Interface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus + 13, // 15: openconfig.openconfig_interfaces.Interfaces.Interface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters + 19, // 16: openconfig.openconfig_interfaces.Interfaces.Interface.State.description:type_name -> ywrapper.StringValue + 20, // 17: openconfig.openconfig_interfaces.Interfaces.Interface.State.enabled:type_name -> ywrapper.BoolValue + 21, // 18: openconfig.openconfig_interfaces.Interfaces.Interface.State.ifindex:type_name -> ywrapper.UintValue + 21, // 19: openconfig.openconfig_interfaces.Interfaces.Interface.State.last_change:type_name -> ywrapper.UintValue + 20, // 20: openconfig.openconfig_interfaces.Interfaces.Interface.State.logical:type_name -> ywrapper.BoolValue + 20, // 21: openconfig.openconfig_interfaces.Interfaces.Interface.State.loopback_mode:type_name -> ywrapper.BoolValue + 21, // 22: openconfig.openconfig_interfaces.Interfaces.Interface.State.mtu:type_name -> ywrapper.UintValue + 19, // 23: openconfig.openconfig_interfaces.Interfaces.Interface.State.name:type_name -> ywrapper.StringValue + 1, // 24: openconfig.openconfig_interfaces.Interfaces.Interface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus + 22, // 25: openconfig.openconfig_interfaces.Interfaces.Interface.State.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType + 15, // 26: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey + 21, // 27: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.down:type_name -> ywrapper.UintValue + 21, // 28: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.up:type_name -> ywrapper.UintValue + 21, // 29: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.down:type_name -> ywrapper.UintValue + 21, // 30: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.up:type_name -> ywrapper.UintValue + 21, // 31: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue + 21, // 32: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 33: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_discards:type_name -> ywrapper.UintValue + 21, // 34: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_errors:type_name -> ywrapper.UintValue + 21, // 35: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue + 21, // 36: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 37: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_octets:type_name -> ywrapper.UintValue + 21, // 38: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_pkts:type_name -> ywrapper.UintValue + 21, // 39: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue + 21, // 40: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue + 21, // 41: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.last_clear:type_name -> ywrapper.UintValue + 21, // 42: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 43: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_discards:type_name -> ywrapper.UintValue + 21, // 44: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_errors:type_name -> ywrapper.UintValue + 21, // 45: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 46: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_octets:type_name -> ywrapper.UintValue + 21, // 47: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_pkts:type_name -> ywrapper.UintValue + 21, // 48: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue + 16, // 49: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config + 17, // 50: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State + 14, // 51: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface + 19, // 52: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.description:type_name -> ywrapper.StringValue + 20, // 53: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.enabled:type_name -> ywrapper.BoolValue + 21, // 54: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.index:type_name -> ywrapper.UintValue + 2, // 55: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus + 18, // 56: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters + 19, // 57: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.description:type_name -> ywrapper.StringValue + 20, // 58: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.enabled:type_name -> ywrapper.BoolValue + 21, // 59: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.ifindex:type_name -> ywrapper.UintValue + 21, // 60: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.index:type_name -> ywrapper.UintValue + 21, // 61: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.last_change:type_name -> ywrapper.UintValue + 20, // 62: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.logical:type_name -> ywrapper.BoolValue + 19, // 63: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.name:type_name -> ywrapper.StringValue + 3, // 64: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus + 21, // 65: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue + 21, // 66: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 67: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_discards:type_name -> ywrapper.UintValue + 21, // 68: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_errors:type_name -> ywrapper.UintValue + 21, // 69: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue + 21, // 70: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 71: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_octets:type_name -> ywrapper.UintValue + 21, // 72: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_pkts:type_name -> ywrapper.UintValue + 21, // 73: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue + 21, // 74: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue + 21, // 75: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.last_clear:type_name -> ywrapper.UintValue + 21, // 76: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 77: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_discards:type_name -> ywrapper.UintValue + 21, // 78: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_errors:type_name -> ywrapper.UintValue + 21, // 79: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 80: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_octets:type_name -> ywrapper.UintValue + 21, // 81: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_pkts:type_name -> ywrapper.UintValue + 21, // 82: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue + 83, // [83:83] is the sub-list for method output_type + 83, // [83:83] is the sub-list for method input_type + 83, // [83:83] is the sub-list for extension type_name + 83, // [83:83] is the sub-list for extension extendee + 0, // [0:83] is the sub-list for field type_name +} + +func init() { file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() } +func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() { + if File_openconfig_openconfig_interfaces_openconfig_interfaces_proto != nil { + return + } + file_openconfig_enums_enums_proto_init() + if !protoimpl.UnsafeEnabled { + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_InterfaceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_HoldTime); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_State); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_HoldTime_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_HoldTime_State); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_State_Counters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_SubinterfaceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters); 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_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc, + NumEnums: 4, + NumMessages: 15, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes, + DependencyIndexes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs, + EnumInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes, + MessageInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes, + }.Build() + File_openconfig_openconfig_interfaces_openconfig_interfaces_proto = out.File + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = nil + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = nil + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = nil +} diff --git a/api/proto/gosdnCLI.pb.go b/api/proto/gosdnCLI.pb.go index 62d48d12717bcf3c036da4dfebc74546d248f3f4..e6b62456650a6a4ca00bb9def32281e9752180f1 100644 --- a/api/proto/gosdnCLI.pb.go +++ b/api/proto/gosdnCLI.pb.go @@ -1,20 +1,19 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0-devel -// protoc v3.12.4 +// protoc v3.14.0 // source: gosdnCLI.proto package gosdn import ( context "context" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" reflect "reflect" sync "sync" ) @@ -26,10 +25,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - // The request message containing the user's name. type HelloRequest struct { state protoimpl.MessageState @@ -218,44 +213,600 @@ func (x *ShutdownReply) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ShutdownReply.ProtoReflect.Descriptor instead. -func (*ShutdownReply) Descriptor() ([]byte, []int) { - return file_gosdnCLI_proto_rawDescGZIP(), []int{3} +// Deprecated: Use ShutdownReply.ProtoReflect.Descriptor instead. +func (*ShutdownReply) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{3} +} + +func (x *ShutdownReply) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +// Request with no meaning by now +type TAPIRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *TAPIRequest) Reset() { + *x = TAPIRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TAPIRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TAPIRequest) ProtoMessage() {} + +func (x *TAPIRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 TAPIRequest.ProtoReflect.Descriptor instead. +func (*TAPIRequest) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{4} +} + +func (x *TAPIRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// The response message containing a string with no meaning by now +type TAPIReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *TAPIReply) Reset() { + *x = TAPIReply{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TAPIReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TAPIReply) ProtoMessage() {} + +func (x *TAPIReply) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 TAPIReply.ProtoReflect.Descriptor instead. +func (*TAPIReply) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{5} +} + +func (x *TAPIReply) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +// +type CreatePNDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Sbi string `protobuf:"bytes,3,opt,name=sbi,proto3" json:"sbi,omitempty"` +} + +func (x *CreatePNDRequest) Reset() { + *x = CreatePNDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreatePNDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreatePNDRequest) ProtoMessage() {} + +func (x *CreatePNDRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 CreatePNDRequest.ProtoReflect.Descriptor instead. +func (*CreatePNDRequest) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{6} +} + +func (x *CreatePNDRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CreatePNDRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *CreatePNDRequest) GetSbi() string { + if x != nil { + return x.Sbi + } + return "" +} + +type AllSBINamesReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SbiNames []string `protobuf:"bytes,1,rep,name=sbiNames,proto3" json:"sbiNames,omitempty"` +} + +func (x *AllSBINamesReply) Reset() { + *x = AllSBINamesReply{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AllSBINamesReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AllSBINamesReply) ProtoMessage() {} + +func (x *AllSBINamesReply) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 AllSBINamesReply.ProtoReflect.Descriptor instead. +func (*AllSBINamesReply) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{7} +} + +func (x *AllSBINamesReply) GetSbiNames() []string { + if x != nil { + return x.SbiNames + } + return nil +} + +// +type CreatePNDReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *CreatePNDReply) Reset() { + *x = CreatePNDReply{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreatePNDReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreatePNDReply) ProtoMessage() {} + +func (x *CreatePNDReply) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 CreatePNDReply.ProtoReflect.Descriptor instead. +func (*CreatePNDReply) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{8} +} + +func (x *CreatePNDReply) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +// +type AllPNDsReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pnds []*PND `protobuf:"bytes,1,rep,name=pnds,proto3" json:"pnds,omitempty"` +} + +func (x *AllPNDsReply) Reset() { + *x = AllPNDsReply{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AllPNDsReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AllPNDsReply) ProtoMessage() {} + +func (x *AllPNDsReply) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 AllPNDsReply.ProtoReflect.Descriptor instead. +func (*AllPNDsReply) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{9} +} + +func (x *AllPNDsReply) GetPnds() []*PND { + if x != nil { + return x.Pnds + } + return nil +} + +type PND struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Sbi string `protobuf:"bytes,4,opt,name=sbi,proto3" json:"sbi,omitempty"` + Devices []*Device `protobuf:"bytes,5,rep,name=devices,proto3" json:"devices,omitempty"` +} + +func (x *PND) Reset() { + *x = PND{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PND) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PND) ProtoMessage() {} + +func (x *PND) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 PND.ProtoReflect.Descriptor instead. +func (*PND) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{10} +} + +func (x *PND) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *PND) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PND) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *PND) GetSbi() string { + if x != nil { + return x.Sbi + } + return "" +} + +func (x *PND) GetDevices() []*Device { + if x != nil { + return x.Devices + } + return nil +} + +type Device struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"` +} + +func (x *Device) Reset() { + *x = Device{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Device) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Device) ProtoMessage() {} + +func (x *Device) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 Device.ProtoReflect.Descriptor instead. +func (*Device) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{11} +} + +func (x *Device) GetUuid() string { + if x != nil { + return x.Uuid + } + return "" +} + +func (x *Device) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *Device) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *Device) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +type AddDeviceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UuidPND string `protobuf:"bytes,1,opt,name=uuidPND,proto3" json:"uuidPND,omitempty"` + Device *Device `protobuf:"bytes,2,opt,name=device,proto3" json:"device,omitempty"` +} + +func (x *AddDeviceRequest) Reset() { + *x = AddDeviceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddDeviceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddDeviceRequest) ProtoMessage() {} + +func (x *AddDeviceRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 AddDeviceRequest.ProtoReflect.Descriptor instead. +func (*AddDeviceRequest) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{12} +} + +func (x *AddDeviceRequest) GetUuidPND() string { + if x != nil { + return x.UuidPND + } + return "" +} + +func (x *AddDeviceRequest) GetDevice() *Device { + if x != nil { + return x.Device + } + return nil +} + +type AddDeviceReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *AddDeviceReply) Reset() { + *x = AddDeviceReply{} + if protoimpl.UnsafeEnabled { + mi := &file_gosdnCLI_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddDeviceReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddDeviceReply) ProtoMessage() {} + +func (x *AddDeviceReply) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_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 AddDeviceReply.ProtoReflect.Descriptor instead. +func (*AddDeviceReply) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{13} } -func (x *ShutdownReply) GetMessage() string { +func (x *AddDeviceReply) GetMessage() string { if x != nil { return x.Message } return "" } -// Request with no meaning by now -type TAPIRequest struct { +type DeviceGetRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + UuidPND string `protobuf:"bytes,1,opt,name=uuidPND,proto3" json:"uuidPND,omitempty"` + UuidDevice string `protobuf:"bytes,2,opt,name=uuidDevice,proto3" json:"uuidDevice,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` } -func (x *TAPIRequest) Reset() { - *x = TAPIRequest{} +func (x *DeviceGetRequest) Reset() { + *x = DeviceGetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gosdnCLI_proto_msgTypes[4] + mi := &file_gosdnCLI_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TAPIRequest) String() string { +func (x *DeviceGetRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TAPIRequest) ProtoMessage() {} +func (*DeviceGetRequest) ProtoMessage() {} -func (x *TAPIRequest) ProtoReflect() protoreflect.Message { - mi := &file_gosdnCLI_proto_msgTypes[4] +func (x *DeviceGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -266,20 +817,33 @@ func (x *TAPIRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TAPIRequest.ProtoReflect.Descriptor instead. -func (*TAPIRequest) Descriptor() ([]byte, []int) { - return file_gosdnCLI_proto_rawDescGZIP(), []int{4} +// Deprecated: Use DeviceGetRequest.ProtoReflect.Descriptor instead. +func (*DeviceGetRequest) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{14} } -func (x *TAPIRequest) GetName() string { +func (x *DeviceGetRequest) GetUuidPND() string { if x != nil { - return x.Name + return x.UuidPND } return "" } -// The response message containing a string with no meaning by now -type TAPIReply struct { +func (x *DeviceGetRequest) GetUuidDevice() string { + if x != nil { + return x.UuidDevice + } + return "" +} + +func (x *DeviceGetRequest) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +type DeviceGetReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -287,23 +851,23 @@ type TAPIReply struct { Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` } -func (x *TAPIReply) Reset() { - *x = TAPIReply{} +func (x *DeviceGetReply) Reset() { + *x = DeviceGetReply{} if protoimpl.UnsafeEnabled { - mi := &file_gosdnCLI_proto_msgTypes[5] + mi := &file_gosdnCLI_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *TAPIReply) String() string { +func (x *DeviceGetReply) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TAPIReply) ProtoMessage() {} +func (*DeviceGetReply) ProtoMessage() {} -func (x *TAPIReply) ProtoReflect() protoreflect.Message { - mi := &file_gosdnCLI_proto_msgTypes[5] +func (x *DeviceGetReply) ProtoReflect() protoreflect.Message { + mi := &file_gosdnCLI_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -314,12 +878,12 @@ func (x *TAPIReply) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TAPIReply.ProtoReflect.Descriptor instead. -func (*TAPIReply) Descriptor() ([]byte, []int) { - return file_gosdnCLI_proto_rawDescGZIP(), []int{5} +// Deprecated: Use DeviceGetReply.ProtoReflect.Descriptor instead. +func (*DeviceGetReply) Descriptor() ([]byte, []int) { + return file_gosdnCLI_proto_rawDescGZIP(), []int{15} } -func (x *TAPIReply) GetMessage() string { +func (x *DeviceGetReply) GetMessage() string { if x != nil { return x.Message } @@ -338,7 +902,7 @@ type LogReply struct { func (x *LogReply) Reset() { *x = LogReply{} if protoimpl.UnsafeEnabled { - mi := &file_gosdnCLI_proto_msgTypes[6] + mi := &file_gosdnCLI_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -351,7 +915,7 @@ func (x *LogReply) String() string { func (*LogReply) ProtoMessage() {} func (x *LogReply) ProtoReflect() protoreflect.Message { - mi := &file_gosdnCLI_proto_msgTypes[6] + mi := &file_gosdnCLI_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -364,7 +928,7 @@ func (x *LogReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LogReply.ProtoReflect.Descriptor instead. func (*LogReply) Descriptor() ([]byte, []int) { - return file_gosdnCLI_proto_rawDescGZIP(), []int{6} + return file_gosdnCLI_proto_rawDescGZIP(), []int{16} } func (x *LogReply) GetLog() string { @@ -396,31 +960,99 @@ var file_gosdnCLI_proto_rawDesc = []byte{ 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x25, 0x0a, 0x09, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1c, 0x0a, 0x08, 0x4c, 0x6f, - 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x32, 0xe4, 0x02, 0x0a, 0x07, 0x47, 0x72, 0x70, - 0x63, 0x43, 0x6c, 0x69, 0x12, 0x34, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, 0x65, 0x6c, 0x6c, 0x6f, - 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, - 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 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, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x41, 0x50, 0x49, 0x47, 0x65, - 0x74, 0x45, 0x64, 0x67, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, - 0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, - 0x0f, 0x54, 0x41, 0x50, 0x49, 0x47, 0x65, 0x74, 0x45, 0x64, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, - 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x41, 0x50, 0x49, - 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5a, 0x0a, 0x10, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x50, 0x4e, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x73, 0x62, 0x69, 0x22, 0x2e, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x53, 0x42, 0x49, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x62, + 0x69, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x62, + 0x69, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x2a, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x50, 0x4e, 0x44, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x2e, 0x0a, 0x0c, 0x41, 0x6c, 0x6c, 0x50, 0x4e, 0x44, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x04, 0x70, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x4e, 0x44, 0x52, 0x04, 0x70, 0x6e, + 0x64, 0x73, 0x22, 0x8a, 0x01, 0x0a, 0x03, 0x50, 0x4e, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x62, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x73, 0x62, 0x69, 0x12, 0x27, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, + 0x6e, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, + 0x53, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x75, 0x69, 0x64, 0x50, 0x4e, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x75, 0x69, 0x64, 0x50, 0x4e, 0x44, 0x12, 0x25, 0x0a, + 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x22, 0x2a, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x60, 0x0a, 0x10, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x75, 0x69, 0x64, 0x50, 0x4e, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x75, 0x69, 0x64, 0x50, 0x4e, 0x44, 0x12, 0x1e, + 0x0a, 0x0a, 0x75, 0x75, 0x69, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x75, 0x75, 0x69, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x22, 0x2a, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1c, + 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, + 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x32, 0xb0, 0x05, 0x0a, + 0x07, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, 0x69, 0x12, 0x34, 0x0a, 0x08, 0x53, 0x61, 0x79, 0x48, + 0x65, 0x6c, 0x6c, 0x6f, 0x12, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x6c, + 0x6c, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3a, + 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, + 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 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, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, + 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x41, + 0x50, 0x49, 0x47, 0x65, 0x74, 0x45, 0x64, 0x67, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x12, 0x39, 0x0a, 0x0f, 0x54, 0x41, 0x50, 0x49, 0x47, 0x65, 0x74, 0x45, 0x64, 0x67, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, + 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0b, + 0x54, 0x41, 0x50, 0x49, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x12, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x41, 0x50, 0x49, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x4e, 0x44, + 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, + 0x4e, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x4e, 0x44, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x50, 0x4e, 0x44, 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, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x41, 0x6c, 0x6c, 0x50, 0x4e, 0x44, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, + 0x43, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x53, 0x42, 0x49, 0x4e, 0x61, 0x6d, 0x65, + 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, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x41, 0x6c, 0x6c, 0x53, 0x42, 0x49, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x16, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x50, 0x0a, 0x1e, 0x64, 0x65, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x63, 0x6c, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x42, 0x0c, 0x63, 0x6c, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x50, @@ -441,35 +1073,58 @@ func file_gosdnCLI_proto_rawDescGZIP() []byte { return file_gosdnCLI_proto_rawDescData } -var file_gosdnCLI_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_gosdnCLI_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_gosdnCLI_proto_goTypes = []interface{}{ - (*HelloRequest)(nil), // 0: proto.HelloRequest - (*HelloReply)(nil), // 1: proto.HelloReply - (*ShutdownRequest)(nil), // 2: proto.ShutdownRequest - (*ShutdownReply)(nil), // 3: proto.ShutdownReply - (*TAPIRequest)(nil), // 4: proto.TAPIRequest - (*TAPIReply)(nil), // 5: proto.TAPIReply - (*LogReply)(nil), // 6: proto.LogReply - (*empty.Empty)(nil), // 7: google.protobuf.Empty + (*HelloRequest)(nil), // 0: proto.HelloRequest + (*HelloReply)(nil), // 1: proto.HelloReply + (*ShutdownRequest)(nil), // 2: proto.ShutdownRequest + (*ShutdownReply)(nil), // 3: proto.ShutdownReply + (*TAPIRequest)(nil), // 4: proto.TAPIRequest + (*TAPIReply)(nil), // 5: proto.TAPIReply + (*CreatePNDRequest)(nil), // 6: proto.CreatePNDRequest + (*AllSBINamesReply)(nil), // 7: proto.AllSBINamesReply + (*CreatePNDReply)(nil), // 8: proto.CreatePNDReply + (*AllPNDsReply)(nil), // 9: proto.AllPNDsReply + (*PND)(nil), // 10: proto.PND + (*Device)(nil), // 11: proto.Device + (*AddDeviceRequest)(nil), // 12: proto.AddDeviceRequest + (*AddDeviceReply)(nil), // 13: proto.AddDeviceReply + (*DeviceGetRequest)(nil), // 14: proto.DeviceGetRequest + (*DeviceGetReply)(nil), // 15: proto.DeviceGetReply + (*LogReply)(nil), // 16: proto.LogReply + (*emptypb.Empty)(nil), // 17: google.protobuf.Empty } var file_gosdnCLI_proto_depIdxs = []int32{ - 0, // 0: proto.GrpcCli.SayHello:input_type -> proto.HelloRequest - 2, // 1: proto.GrpcCli.Shutdown:input_type -> proto.ShutdownRequest - 7, // 2: proto.GrpcCli.CreateLogStream:input_type -> google.protobuf.Empty - 4, // 3: proto.GrpcCli.TAPIGetEdge:input_type -> proto.TAPIRequest - 4, // 4: proto.GrpcCli.TAPIGetEdgeNode:input_type -> proto.TAPIRequest - 4, // 5: proto.GrpcCli.TAPIGetLink:input_type -> proto.TAPIRequest - 1, // 6: proto.GrpcCli.SayHello:output_type -> proto.HelloReply - 3, // 7: proto.GrpcCli.Shutdown:output_type -> proto.ShutdownReply - 6, // 8: proto.GrpcCli.CreateLogStream:output_type -> proto.LogReply - 5, // 9: proto.GrpcCli.TAPIGetEdge:output_type -> proto.TAPIReply - 5, // 10: proto.GrpcCli.TAPIGetEdgeNode:output_type -> proto.TAPIReply - 5, // 11: proto.GrpcCli.TAPIGetLink:output_type -> proto.TAPIReply - 6, // [6:12] is the sub-list for method output_type - 0, // [0:6] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 10, // 0: proto.AllPNDsReply.pnds:type_name -> proto.PND + 11, // 1: proto.PND.devices:type_name -> proto.Device + 11, // 2: proto.AddDeviceRequest.device:type_name -> proto.Device + 0, // 3: proto.GrpcCli.SayHello:input_type -> proto.HelloRequest + 2, // 4: proto.GrpcCli.Shutdown:input_type -> proto.ShutdownRequest + 17, // 5: proto.GrpcCli.CreateLogStream:input_type -> google.protobuf.Empty + 4, // 6: proto.GrpcCli.TAPIGetEdge:input_type -> proto.TAPIRequest + 4, // 7: proto.GrpcCli.TAPIGetEdgeNode:input_type -> proto.TAPIRequest + 4, // 8: proto.GrpcCli.TAPIGetLink:input_type -> proto.TAPIRequest + 6, // 9: proto.GrpcCli.CreatePND:input_type -> proto.CreatePNDRequest + 17, // 10: proto.GrpcCli.GetAllPNDs:input_type -> google.protobuf.Empty + 17, // 11: proto.GrpcCli.GetAllSBINames:input_type -> google.protobuf.Empty + 12, // 12: proto.GrpcCli.AddDevice:input_type -> proto.AddDeviceRequest + 14, // 13: proto.GrpcCli.HandleDeviceGetRequest:input_type -> proto.DeviceGetRequest + 1, // 14: proto.GrpcCli.SayHello:output_type -> proto.HelloReply + 3, // 15: proto.GrpcCli.Shutdown:output_type -> proto.ShutdownReply + 16, // 16: proto.GrpcCli.CreateLogStream:output_type -> proto.LogReply + 5, // 17: proto.GrpcCli.TAPIGetEdge:output_type -> proto.TAPIReply + 5, // 18: proto.GrpcCli.TAPIGetEdgeNode:output_type -> proto.TAPIReply + 5, // 19: proto.GrpcCli.TAPIGetLink:output_type -> proto.TAPIReply + 8, // 20: proto.GrpcCli.CreatePND:output_type -> proto.CreatePNDReply + 9, // 21: proto.GrpcCli.GetAllPNDs:output_type -> proto.AllPNDsReply + 7, // 22: proto.GrpcCli.GetAllSBINames:output_type -> proto.AllSBINamesReply + 13, // 23: proto.GrpcCli.AddDevice:output_type -> proto.AddDeviceReply + 15, // 24: proto.GrpcCli.HandleDeviceGetRequest:output_type -> proto.DeviceGetReply + 14, // [14:25] is the sub-list for method output_type + 3, // [3:14] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_gosdnCLI_proto_init() } @@ -551,6 +1206,126 @@ func file_gosdnCLI_proto_init() { } } file_gosdnCLI_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreatePNDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AllSBINamesReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreatePNDReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AllPNDsReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PND); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Device); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddDeviceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddDeviceReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeviceGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeviceGetReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gosdnCLI_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogReply); i { case 0: return &v.state @@ -569,7 +1344,7 @@ func file_gosdnCLI_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gosdnCLI_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 17, NumExtensions: 0, NumServices: 1, }, @@ -600,7 +1375,7 @@ type GrpcCliClient interface { // Shutdown goSDN Shutdown(ctx context.Context, in *ShutdownRequest, opts ...grpc.CallOption) (*ShutdownReply, error) // creates a stream to receive goSDN logs - CreateLogStream(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error) + CreateLogStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error) // By now solely TAPI specific calls can be issued from the grpc-cli // TAPIGetEdge TAPIGetEdge(ctx context.Context, in *TAPIRequest, opts ...grpc.CallOption) (*TAPIReply, error) @@ -608,6 +1383,16 @@ type GrpcCliClient interface { TAPIGetEdgeNode(ctx context.Context, in *TAPIRequest, opts ...grpc.CallOption) (*TAPIReply, error) // TAPIGetLink TAPIGetLink(ctx context.Context, in *TAPIRequest, opts ...grpc.CallOption) (*TAPIReply, error) + // CreatePND + CreatePND(ctx context.Context, in *CreatePNDRequest, opts ...grpc.CallOption) (*CreatePNDReply, error) + // GetAllPNDs + GetAllPNDs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*AllPNDsReply, error) + // GetAllSBIs + GetAllSBINames(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*AllSBINamesReply, error) + // AddDevice + AddDevice(ctx context.Context, in *AddDeviceRequest, opts ...grpc.CallOption) (*AddDeviceReply, error) + // HandleDeviceGetRequest + HandleDeviceGetRequest(ctx context.Context, in *DeviceGetRequest, opts ...grpc.CallOption) (*DeviceGetReply, error) } type grpcCliClient struct { @@ -636,7 +1421,7 @@ func (c *grpcCliClient) Shutdown(ctx context.Context, in *ShutdownRequest, opts return out, nil } -func (c *grpcCliClient) CreateLogStream(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error) { +func (c *grpcCliClient) CreateLogStream(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (GrpcCli_CreateLogStreamClient, error) { stream, err := c.cc.NewStream(ctx, &_GrpcCli_serviceDesc.Streams[0], "/proto.GrpcCli/CreateLogStream", opts...) if err != nil { return nil, err @@ -695,6 +1480,51 @@ func (c *grpcCliClient) TAPIGetLink(ctx context.Context, in *TAPIRequest, opts . return out, nil } +func (c *grpcCliClient) CreatePND(ctx context.Context, in *CreatePNDRequest, opts ...grpc.CallOption) (*CreatePNDReply, error) { + out := new(CreatePNDReply) + err := c.cc.Invoke(ctx, "/proto.GrpcCli/CreatePND", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *grpcCliClient) GetAllPNDs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*AllPNDsReply, error) { + out := new(AllPNDsReply) + err := c.cc.Invoke(ctx, "/proto.GrpcCli/GetAllPNDs", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *grpcCliClient) GetAllSBINames(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*AllSBINamesReply, error) { + out := new(AllSBINamesReply) + err := c.cc.Invoke(ctx, "/proto.GrpcCli/GetAllSBINames", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *grpcCliClient) AddDevice(ctx context.Context, in *AddDeviceRequest, opts ...grpc.CallOption) (*AddDeviceReply, error) { + out := new(AddDeviceReply) + err := c.cc.Invoke(ctx, "/proto.GrpcCli/AddDevice", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *grpcCliClient) HandleDeviceGetRequest(ctx context.Context, in *DeviceGetRequest, opts ...grpc.CallOption) (*DeviceGetReply, error) { + out := new(DeviceGetReply) + err := c.cc.Invoke(ctx, "/proto.GrpcCli/HandleDeviceGetRequest", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // GrpcCliServer is the server API for GrpcCli service. type GrpcCliServer interface { // Sends a greeting @@ -702,7 +1532,7 @@ type GrpcCliServer interface { // Shutdown goSDN Shutdown(context.Context, *ShutdownRequest) (*ShutdownReply, error) // creates a stream to receive goSDN logs - CreateLogStream(*empty.Empty, GrpcCli_CreateLogStreamServer) error + CreateLogStream(*emptypb.Empty, GrpcCli_CreateLogStreamServer) error // By now solely TAPI specific calls can be issued from the grpc-cli // TAPIGetEdge TAPIGetEdge(context.Context, *TAPIRequest) (*TAPIReply, error) @@ -710,6 +1540,16 @@ type GrpcCliServer interface { TAPIGetEdgeNode(context.Context, *TAPIRequest) (*TAPIReply, error) // TAPIGetLink TAPIGetLink(context.Context, *TAPIRequest) (*TAPIReply, error) + // CreatePND + CreatePND(context.Context, *CreatePNDRequest) (*CreatePNDReply, error) + // GetAllPNDs + GetAllPNDs(context.Context, *emptypb.Empty) (*AllPNDsReply, error) + // GetAllSBIs + GetAllSBINames(context.Context, *emptypb.Empty) (*AllSBINamesReply, error) + // AddDevice + AddDevice(context.Context, *AddDeviceRequest) (*AddDeviceReply, error) + // HandleDeviceGetRequest + HandleDeviceGetRequest(context.Context, *DeviceGetRequest) (*DeviceGetReply, error) } // UnimplementedGrpcCliServer can be embedded to have forward compatible implementations. @@ -722,7 +1562,7 @@ func (*UnimplementedGrpcCliServer) SayHello(context.Context, *HelloRequest) (*He func (*UnimplementedGrpcCliServer) Shutdown(context.Context, *ShutdownRequest) (*ShutdownReply, error) { return nil, status.Errorf(codes.Unimplemented, "method Shutdown not implemented") } -func (*UnimplementedGrpcCliServer) CreateLogStream(*empty.Empty, GrpcCli_CreateLogStreamServer) error { +func (*UnimplementedGrpcCliServer) CreateLogStream(*emptypb.Empty, GrpcCli_CreateLogStreamServer) error { return status.Errorf(codes.Unimplemented, "method CreateLogStream not implemented") } func (*UnimplementedGrpcCliServer) TAPIGetEdge(context.Context, *TAPIRequest) (*TAPIReply, error) { @@ -734,6 +1574,21 @@ func (*UnimplementedGrpcCliServer) TAPIGetEdgeNode(context.Context, *TAPIRequest func (*UnimplementedGrpcCliServer) TAPIGetLink(context.Context, *TAPIRequest) (*TAPIReply, error) { return nil, status.Errorf(codes.Unimplemented, "method TAPIGetLink not implemented") } +func (*UnimplementedGrpcCliServer) CreatePND(context.Context, *CreatePNDRequest) (*CreatePNDReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreatePND not implemented") +} +func (*UnimplementedGrpcCliServer) GetAllPNDs(context.Context, *emptypb.Empty) (*AllPNDsReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAllPNDs not implemented") +} +func (*UnimplementedGrpcCliServer) GetAllSBINames(context.Context, *emptypb.Empty) (*AllSBINamesReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAllSBINames not implemented") +} +func (*UnimplementedGrpcCliServer) AddDevice(context.Context, *AddDeviceRequest) (*AddDeviceReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddDevice not implemented") +} +func (*UnimplementedGrpcCliServer) HandleDeviceGetRequest(context.Context, *DeviceGetRequest) (*DeviceGetReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method HandleDeviceGetRequest not implemented") +} func RegisterGrpcCliServer(s *grpc.Server, srv GrpcCliServer) { s.RegisterService(&_GrpcCli_serviceDesc, srv) @@ -776,7 +1631,7 @@ func _GrpcCli_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(in } func _GrpcCli_CreateLogStream_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(empty.Empty) + m := new(emptypb.Empty) if err := stream.RecvMsg(m); err != nil { return err } @@ -850,6 +1705,96 @@ func _GrpcCli_TAPIGetLink_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _GrpcCli_CreatePND_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreatePNDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GrpcCliServer).CreatePND(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.GrpcCli/CreatePND", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GrpcCliServer).CreatePND(ctx, req.(*CreatePNDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GrpcCli_GetAllPNDs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(emptypb.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GrpcCliServer).GetAllPNDs(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.GrpcCli/GetAllPNDs", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GrpcCliServer).GetAllPNDs(ctx, req.(*emptypb.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _GrpcCli_GetAllSBINames_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(emptypb.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GrpcCliServer).GetAllSBINames(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.GrpcCli/GetAllSBINames", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GrpcCliServer).GetAllSBINames(ctx, req.(*emptypb.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _GrpcCli_AddDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddDeviceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GrpcCliServer).AddDevice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.GrpcCli/AddDevice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GrpcCliServer).AddDevice(ctx, req.(*AddDeviceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GrpcCli_HandleDeviceGetRequest_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeviceGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GrpcCliServer).HandleDeviceGetRequest(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/proto.GrpcCli/HandleDeviceGetRequest", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GrpcCliServer).HandleDeviceGetRequest(ctx, req.(*DeviceGetRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _GrpcCli_serviceDesc = grpc.ServiceDesc{ ServiceName: "proto.GrpcCli", HandlerType: (*GrpcCliServer)(nil), @@ -874,6 +1819,26 @@ var _GrpcCli_serviceDesc = grpc.ServiceDesc{ MethodName: "TAPIGetLink", Handler: _GrpcCli_TAPIGetLink_Handler, }, + { + MethodName: "CreatePND", + Handler: _GrpcCli_CreatePND_Handler, + }, + { + MethodName: "GetAllPNDs", + Handler: _GrpcCli_GetAllPNDs_Handler, + }, + { + MethodName: "GetAllSBINames", + Handler: _GrpcCli_GetAllSBINames_Handler, + }, + { + MethodName: "AddDevice", + Handler: _GrpcCli_AddDevice_Handler, + }, + { + MethodName: "HandleDeviceGetRequest", + Handler: _GrpcCli_HandleDeviceGetRequest_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/api/proto/gosdnCLI.proto b/api/proto/gosdnCLI.proto index 0e3636675e4f584194cbad5414ddd28ba3156520..355d8e7455f009d2b35e8bc34c079ce31466bbdd 100644 --- a/api/proto/gosdnCLI.proto +++ b/api/proto/gosdnCLI.proto @@ -2,10 +2,6 @@ syntax = "proto3"; import "google/protobuf/empty.proto"; option go_package = "gitlab.fbi.h-da.de/cocsn/gosdn"; -option java_multiple_files = true; -option java_package = "de.h-da.fbi.gosdn.cliInterface"; -option java_outer_classname = "cliInterface"; - package proto; @@ -25,6 +21,16 @@ service GrpcCli { rpc TAPIGetEdgeNode (TAPIRequest) returns (TAPIReply) {} // TAPIGetLink rpc TAPIGetLink (TAPIRequest) returns (TAPIReply) {} + // CreatePND + rpc CreatePND (CreatePNDRequest) returns (CreatePNDReply) {} + // GetAllPNDs + rpc GetAllPNDs(google.protobuf.Empty) returns (AllPNDsReply) {} + // GetAllSBIs + rpc GetAllSBINames(google.protobuf.Empty) returns (AllSBINamesReply) {} + // AddDevice + rpc AddDevice(AddDeviceRequest) returns (AddDeviceReply) {} + // HandleDeviceGetRequest + rpc HandleDeviceGetRequest(DeviceGetRequest) returns (DeviceGetReply) {} } // The request message containing the user's name. @@ -58,6 +64,61 @@ message TAPIReply { string message = 1; } +// +message CreatePNDRequest { + string name = 1; + string description = 2; + string sbi = 3; +} + +message AllSBINamesReply { + repeated string sbiNames = 1; +} + +// +message CreatePNDReply { + string message = 1; +} + +// +message AllPNDsReply { + repeated PND pnds = 1; +} + +message PND { + string uuid = 1; + string name = 2; + string description = 3; + string sbi = 4; + repeated Device devices = 5; +} + +message Device { + string uuid = 1; + string address = 2; + string username = 3; + string password = 4; +} + +message AddDeviceRequest { + string uuidPND = 1; + Device device = 2; +} + +message AddDeviceReply { + string message = 1; +} + +message DeviceGetRequest { + string uuidPND = 1; + string uuidDevice = 2; + string path = 3; +} + +message DeviceGetReply { + string message = 1; +} + // The response message containing a string with a goSDN log message LogReply { string log = 1; diff --git a/api/proto/openconfig/enums/enums.pb.go b/api/proto/openconfig/enums/enums.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..3ebe5d22cb235af6c9be0a89d56ccb33c9604f4c --- /dev/null +++ b/api/proto/openconfig/enums/enums.pb.go @@ -0,0 +1,149 @@ +// openconfig.enums is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: openconfig/enums/enums.proto + +package openconfig_enums + +import ( + proto "github.com/golang/protobuf/proto" + _ "github.com/openconfig/ygot/proto/yext" + _ "github.com/openconfig/ygot/proto/ywrapper" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// IETFInterfacesInterfaceType represents an enumerated type generated for the YANG identity interface-type. +type IETFInterfacesInterfaceType int32 + +const ( + IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET IETFInterfacesInterfaceType = 0 +) + +// Enum value maps for IETFInterfacesInterfaceType. +var ( + IETFInterfacesInterfaceType_name = map[int32]string{ + 0: "IETFINTERFACESINTERFACETYPE_UNSET", + } + IETFInterfacesInterfaceType_value = map[string]int32{ + "IETFINTERFACESINTERFACETYPE_UNSET": 0, + } +) + +func (x IETFInterfacesInterfaceType) Enum() *IETFInterfacesInterfaceType { + p := new(IETFInterfacesInterfaceType) + *p = x + return p +} + +func (x IETFInterfacesInterfaceType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IETFInterfacesInterfaceType) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_enums_enums_proto_enumTypes[0].Descriptor() +} + +func (IETFInterfacesInterfaceType) Type() protoreflect.EnumType { + return &file_openconfig_enums_enums_proto_enumTypes[0] +} + +func (x IETFInterfacesInterfaceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IETFInterfacesInterfaceType.Descriptor instead. +func (IETFInterfacesInterfaceType) EnumDescriptor() ([]byte, []int) { + return file_openconfig_enums_enums_proto_rawDescGZIP(), []int{0} +} + +var File_openconfig_enums_enums_proto protoreflect.FileDescriptor + +var file_openconfig_enums_enums_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, + 0x6d, 0x73, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, + 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, + 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, 0x44, 0x0a, 0x1b, + 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x49, + 0x45, 0x54, 0x46, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x53, 0x49, 0x4e, 0x54, + 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, + 0x10, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openconfig_enums_enums_proto_rawDescOnce sync.Once + file_openconfig_enums_enums_proto_rawDescData = file_openconfig_enums_enums_proto_rawDesc +) + +func file_openconfig_enums_enums_proto_rawDescGZIP() []byte { + file_openconfig_enums_enums_proto_rawDescOnce.Do(func() { + file_openconfig_enums_enums_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_enums_enums_proto_rawDescData) + }) + return file_openconfig_enums_enums_proto_rawDescData +} + +var file_openconfig_enums_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_openconfig_enums_enums_proto_goTypes = []interface{}{ + (IETFInterfacesInterfaceType)(0), // 0: openconfig.enums.IETFInterfacesInterfaceType +} +var file_openconfig_enums_enums_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_openconfig_enums_enums_proto_init() } +func file_openconfig_enums_enums_proto_init() { + if File_openconfig_enums_enums_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_openconfig_enums_enums_proto_rawDesc, + NumEnums: 1, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openconfig_enums_enums_proto_goTypes, + DependencyIndexes: file_openconfig_enums_enums_proto_depIdxs, + EnumInfos: file_openconfig_enums_enums_proto_enumTypes, + }.Build() + File_openconfig_enums_enums_proto = out.File + file_openconfig_enums_enums_proto_rawDesc = nil + file_openconfig_enums_enums_proto_goTypes = nil + file_openconfig_enums_enums_proto_depIdxs = nil +} diff --git a/api/proto/openconfig/enums/enums.proto b/api/proto/openconfig/enums/enums.proto new file mode 100644 index 0000000000000000000000000000000000000000..9e536252c00769cef506fdd5a9278d66403a00fd --- /dev/null +++ b/api/proto/openconfig/enums/enums.proto @@ -0,0 +1,19 @@ +// openconfig.enums is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... +syntax = "proto3"; + +package openconfig.enums; +option go_package = "code.fbi.h-da.de/cocsn/gosdn"; + +import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; +import "github.com/openconfig/ygot/proto/yext/yext.proto"; + +// IETFInterfacesInterfaceType represents an enumerated type generated for the YANG identity interface-type. +enum IETFInterfacesInterfaceType { + IETFINTERFACESINTERFACETYPE_UNSET = 0; +} diff --git a/api/proto/openconfig/openconfig.pb.go b/api/proto/openconfig/openconfig.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..e52dc21419f2a632f463b6d7af4dbc430d89235c --- /dev/null +++ b/api/proto/openconfig/openconfig.pb.go @@ -0,0 +1,175 @@ +// openconfig is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: openconfig/openconfig.proto + +package openconfig + +import ( + openconfig_interfaces "code.fbi.h-da.de/cocsn/gosdn/api/proto/openconfig/openconfig_interfaces" + proto "github.com/golang/protobuf/proto" + _ "github.com/openconfig/ygot/proto/yext" + _ "github.com/openconfig/ygot/proto/ywrapper" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type Device struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Interfaces *openconfig_interfaces.Interfaces `protobuf:"bytes,85031486,opt,name=interfaces,proto3" json:"interfaces,omitempty"` +} + +func (x *Device) Reset() { + *x = Device{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Device) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Device) ProtoMessage() {} + +func (x *Device) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_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 Device.ProtoReflect.Descriptor instead. +func (*Device) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_proto_rawDescGZIP(), []int{0} +} + +func (x *Device) GetInterfaces() *openconfig_interfaces.Interfaces { + if x != nil { + return x.Interfaces + } + return nil +} + +var File_openconfig_openconfig_proto protoreflect.FileDescriptor + +var file_openconfig_openconfig_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x69, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, + 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0xbe, 0xf4, 0xc5, 0x28, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openconfig_openconfig_proto_rawDescOnce sync.Once + file_openconfig_openconfig_proto_rawDescData = file_openconfig_openconfig_proto_rawDesc +) + +func file_openconfig_openconfig_proto_rawDescGZIP() []byte { + file_openconfig_openconfig_proto_rawDescOnce.Do(func() { + file_openconfig_openconfig_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_proto_rawDescData) + }) + return file_openconfig_openconfig_proto_rawDescData +} + +var file_openconfig_openconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_openconfig_openconfig_proto_goTypes = []interface{}{ + (*Device)(nil), // 0: openconfig.Device + (*openconfig_interfaces.Interfaces)(nil), // 1: openconfig.openconfig_interfaces.Interfaces +} +var file_openconfig_openconfig_proto_depIdxs = []int32{ + 1, // 0: openconfig.Device.interfaces:type_name -> openconfig.openconfig_interfaces.Interfaces + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_openconfig_openconfig_proto_init() } +func file_openconfig_openconfig_proto_init() { + if File_openconfig_openconfig_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_openconfig_openconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Device); 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_openconfig_openconfig_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openconfig_openconfig_proto_goTypes, + DependencyIndexes: file_openconfig_openconfig_proto_depIdxs, + MessageInfos: file_openconfig_openconfig_proto_msgTypes, + }.Build() + File_openconfig_openconfig_proto = out.File + file_openconfig_openconfig_proto_rawDesc = nil + file_openconfig_openconfig_proto_goTypes = nil + file_openconfig_openconfig_proto_depIdxs = nil +} diff --git a/api/proto/openconfig/openconfig.proto b/api/proto/openconfig/openconfig.proto new file mode 100644 index 0000000000000000000000000000000000000000..c2b37bb0386d95ed45beea0ca8ee920049928253 --- /dev/null +++ b/api/proto/openconfig/openconfig.proto @@ -0,0 +1,20 @@ +// openconfig is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... +syntax = "proto3"; + +package openconfig; +option go_package = "code.fbi.h-da.de/cocsn/gosdn"; + + +import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; +import "github.com/openconfig/ygot/proto/yext/yext.proto"; +import "openconfig/openconfig_interfaces/openconfig_interfaces.proto"; + +message Device { + openconfig_interfaces.Interfaces interfaces = 85031486 [(yext.schemapath) = "/interfaces"]; +} diff --git a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..26ca33432b263e485c6c7ca994bb76caf72992d6 --- /dev/null +++ b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go @@ -0,0 +1,2620 @@ +// openconfig.openconfig_interfaces is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0-devel +// protoc v3.13.0 +// source: openconfig/openconfig_interfaces/openconfig_interfaces.proto + +package openconfig_openconfig_interfaces + +import ( + enums "code.fbi.h-da.de/cocsn/gosdn/api/proto/openconfig/enums" + proto "github.com/golang/protobuf/proto" + _ "github.com/openconfig/ygot/proto/yext" + ywrapper "github.com/openconfig/ygot/proto/ywrapper" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type Interfaces_Interface_State_AdminStatus int32 + +const ( + Interfaces_Interface_State_ADMINSTATUS_UNSET Interfaces_Interface_State_AdminStatus = 0 + Interfaces_Interface_State_ADMINSTATUS_UP Interfaces_Interface_State_AdminStatus = 1 + Interfaces_Interface_State_ADMINSTATUS_DOWN Interfaces_Interface_State_AdminStatus = 2 + Interfaces_Interface_State_ADMINSTATUS_TESTING Interfaces_Interface_State_AdminStatus = 3 +) + +// Enum value maps for Interfaces_Interface_State_AdminStatus. +var ( + Interfaces_Interface_State_AdminStatus_name = map[int32]string{ + 0: "ADMINSTATUS_UNSET", + 1: "ADMINSTATUS_UP", + 2: "ADMINSTATUS_DOWN", + 3: "ADMINSTATUS_TESTING", + } + Interfaces_Interface_State_AdminStatus_value = map[string]int32{ + "ADMINSTATUS_UNSET": 0, + "ADMINSTATUS_UP": 1, + "ADMINSTATUS_DOWN": 2, + "ADMINSTATUS_TESTING": 3, + } +) + +func (x Interfaces_Interface_State_AdminStatus) Enum() *Interfaces_Interface_State_AdminStatus { + p := new(Interfaces_Interface_State_AdminStatus) + *p = x + return p +} + +func (x Interfaces_Interface_State_AdminStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0].Descriptor() +} + +func (Interfaces_Interface_State_AdminStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[0] +} + +func (x Interfaces_Interface_State_AdminStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_State_AdminStatus.Descriptor instead. +func (Interfaces_Interface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} +} + +type Interfaces_Interface_State_OperStatus int32 + +const ( + Interfaces_Interface_State_OPERSTATUS_UNSET Interfaces_Interface_State_OperStatus = 0 + Interfaces_Interface_State_OPERSTATUS_UP Interfaces_Interface_State_OperStatus = 2 + Interfaces_Interface_State_OPERSTATUS_DOWN Interfaces_Interface_State_OperStatus = 3 + Interfaces_Interface_State_OPERSTATUS_TESTING Interfaces_Interface_State_OperStatus = 4 + Interfaces_Interface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_State_OperStatus = 5 + Interfaces_Interface_State_OPERSTATUS_DORMANT Interfaces_Interface_State_OperStatus = 6 + Interfaces_Interface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_State_OperStatus = 7 + Interfaces_Interface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_State_OperStatus = 8 +) + +// Enum value maps for Interfaces_Interface_State_OperStatus. +var ( + Interfaces_Interface_State_OperStatus_name = map[int32]string{ + 0: "OPERSTATUS_UNSET", + 2: "OPERSTATUS_UP", + 3: "OPERSTATUS_DOWN", + 4: "OPERSTATUS_TESTING", + 5: "OPERSTATUS_UNKNOWN", + 6: "OPERSTATUS_DORMANT", + 7: "OPERSTATUS_NOT_PRESENT", + 8: "OPERSTATUS_LOWER_LAYER_DOWN", + } + Interfaces_Interface_State_OperStatus_value = map[string]int32{ + "OPERSTATUS_UNSET": 0, + "OPERSTATUS_UP": 2, + "OPERSTATUS_DOWN": 3, + "OPERSTATUS_TESTING": 4, + "OPERSTATUS_UNKNOWN": 5, + "OPERSTATUS_DORMANT": 6, + "OPERSTATUS_NOT_PRESENT": 7, + "OPERSTATUS_LOWER_LAYER_DOWN": 8, + } +) + +func (x Interfaces_Interface_State_OperStatus) Enum() *Interfaces_Interface_State_OperStatus { + p := new(Interfaces_Interface_State_OperStatus) + *p = x + return p +} + +func (x Interfaces_Interface_State_OperStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1].Descriptor() +} + +func (Interfaces_Interface_State_OperStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[1] +} + +func (x Interfaces_Interface_State_OperStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_State_OperStatus.Descriptor instead. +func (Interfaces_Interface_State_OperStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 1} +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus int32 + +const ( + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 0 + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 1 + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 2 + Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus = 3 +) + +// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus. +var ( + Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_name = map[int32]string{ + 0: "ADMINSTATUS_UNSET", + 1: "ADMINSTATUS_UP", + 2: "ADMINSTATUS_DOWN", + 3: "ADMINSTATUS_TESTING", + } + Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus_value = map[string]int32{ + "ADMINSTATUS_UNSET": 0, + "ADMINSTATUS_UP": 1, + "ADMINSTATUS_DOWN": 2, + "ADMINSTATUS_TESTING": 3, + } +) + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { + p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) + *p = x + return p +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2].Descriptor() +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[2] +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus.Descriptor instead. +func (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus int32 + +const ( + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 0 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UP Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 2 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 3 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_TESTING Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 4 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNKNOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 5 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_DORMANT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 6 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_NOT_PRESENT Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 7 + Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_LOWER_LAYER_DOWN Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus = 8 +) + +// Enum value maps for Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus. +var ( + Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_name = map[int32]string{ + 0: "OPERSTATUS_UNSET", + 2: "OPERSTATUS_UP", + 3: "OPERSTATUS_DOWN", + 4: "OPERSTATUS_TESTING", + 5: "OPERSTATUS_UNKNOWN", + 6: "OPERSTATUS_DORMANT", + 7: "OPERSTATUS_NOT_PRESENT", + 8: "OPERSTATUS_LOWER_LAYER_DOWN", + } + Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus_value = map[string]int32{ + "OPERSTATUS_UNSET": 0, + "OPERSTATUS_UP": 2, + "OPERSTATUS_DOWN": 3, + "OPERSTATUS_TESTING": 4, + "OPERSTATUS_UNKNOWN": 5, + "OPERSTATUS_DORMANT": 6, + "OPERSTATUS_NOT_PRESENT": 7, + "OPERSTATUS_LOWER_LAYER_DOWN": 8, + } +) + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Enum() *Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { + p := new(Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) + *p = x + return p +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Descriptor() protoreflect.EnumDescriptor { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3].Descriptor() +} + +func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Type() protoreflect.EnumType { + return &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes[3] +} + +func (x Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus.Descriptor instead. +func (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus) EnumDescriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 1} +} + +type Interfaces struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Interface []*Interfaces_InterfaceKey `protobuf:"bytes,422482938,rep,name=interface,proto3" json:"interface,omitempty"` +} + +func (x *Interfaces) Reset() { + *x = Interfaces{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces) ProtoMessage() {} + +func (x *Interfaces) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces.ProtoReflect.Descriptor instead. +func (*Interfaces) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0} +} + +func (x *Interfaces) GetInterface() []*Interfaces_InterfaceKey { + if x != nil { + return x.Interface + } + return nil +} + +type Interfaces_Interface struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Config *Interfaces_Interface_Config `protobuf:"bytes,334174827,opt,name=config,proto3" json:"config,omitempty"` + HoldTime *Interfaces_Interface_HoldTime `protobuf:"bytes,175931092,opt,name=hold_time,json=holdTime,proto3" json:"hold_time,omitempty"` + State *Interfaces_Interface_State `protobuf:"bytes,387556140,opt,name=state,proto3" json:"state,omitempty"` + Subinterfaces *Interfaces_Interface_Subinterfaces `protobuf:"bytes,327798165,opt,name=subinterfaces,proto3" json:"subinterfaces,omitempty"` +} + +func (x *Interfaces_Interface) Reset() { + *x = Interfaces_Interface{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface) ProtoMessage() {} + +func (x *Interfaces_Interface) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *Interfaces_Interface) GetConfig() *Interfaces_Interface_Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *Interfaces_Interface) GetHoldTime() *Interfaces_Interface_HoldTime { + if x != nil { + return x.HoldTime + } + return nil +} + +func (x *Interfaces_Interface) GetState() *Interfaces_Interface_State { + if x != nil { + return x.State + } + return nil +} + +func (x *Interfaces_Interface) GetSubinterfaces() *Interfaces_Interface_Subinterfaces { + if x != nil { + return x.Subinterfaces + } + return nil +} + +type Interfaces_InterfaceKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Interface *Interfaces_Interface `protobuf:"bytes,2,opt,name=interface,proto3" json:"interface,omitempty"` +} + +func (x *Interfaces_InterfaceKey) Reset() { + *x = Interfaces_InterfaceKey{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_InterfaceKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_InterfaceKey) ProtoMessage() {} + +func (x *Interfaces_InterfaceKey) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_InterfaceKey.ProtoReflect.Descriptor instead. +func (*Interfaces_InterfaceKey) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *Interfaces_InterfaceKey) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Interfaces_InterfaceKey) GetInterface() *Interfaces_Interface { + if x != nil { + return x.Interface + } + return nil +} + +type Interfaces_Interface_Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description *ywrapper.StringValue `protobuf:"bytes,418535860,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,37224301,opt,name=enabled,proto3" json:"enabled,omitempty"` + LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,253516347,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` + Mtu *ywrapper.UintValue `protobuf:"bytes,376210342,opt,name=mtu,proto3" json:"mtu,omitempty"` + Name *ywrapper.StringValue `protobuf:"bytes,51804187,opt,name=name,proto3" json:"name,omitempty"` + Type enums.IETFInterfacesInterfaceType `protobuf:"varint,144596894,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` +} + +func (x *Interfaces_Interface_Config) Reset() { + *x = Interfaces_Interface_Config{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Config) ProtoMessage() {} + +func (x *Interfaces_Interface_Config) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Config.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Config) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *Interfaces_Interface_Config) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_Config) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_Config) GetLoopbackMode() *ywrapper.BoolValue { + if x != nil { + return x.LoopbackMode + } + return nil +} + +func (x *Interfaces_Interface_Config) GetMtu() *ywrapper.UintValue { + if x != nil { + return x.Mtu + } + return nil +} + +func (x *Interfaces_Interface_Config) GetName() *ywrapper.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *Interfaces_Interface_Config) GetType() enums.IETFInterfacesInterfaceType { + if x != nil { + return x.Type + } + return enums.IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET +} + +type Interfaces_Interface_HoldTime struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Config *Interfaces_Interface_HoldTime_Config `protobuf:"bytes,316512729,opt,name=config,proto3" json:"config,omitempty"` + State *Interfaces_Interface_HoldTime_State `protobuf:"bytes,483010990,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *Interfaces_Interface_HoldTime) Reset() { + *x = Interfaces_Interface_HoldTime{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_HoldTime) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_HoldTime) ProtoMessage() {} + +func (x *Interfaces_Interface_HoldTime) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_HoldTime.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_HoldTime) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1} +} + +func (x *Interfaces_Interface_HoldTime) GetConfig() *Interfaces_Interface_HoldTime_Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *Interfaces_Interface_HoldTime) GetState() *Interfaces_Interface_HoldTime_State { + if x != nil { + return x.State + } + return nil +} + +type Interfaces_Interface_State struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdminStatus Interfaces_Interface_State_AdminStatus `protobuf:"varint,474494763,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_AdminStatus" json:"admin_status,omitempty"` + Counters *Interfaces_Interface_State_Counters `protobuf:"bytes,83645964,opt,name=counters,proto3" json:"counters,omitempty"` + Description *ywrapper.StringValue `protobuf:"bytes,389435287,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,330927518,opt,name=enabled,proto3" json:"enabled,omitempty"` + Ifindex *ywrapper.UintValue `protobuf:"bytes,116108202,opt,name=ifindex,proto3" json:"ifindex,omitempty"` + LastChange *ywrapper.UintValue `protobuf:"bytes,127348880,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` + Logical *ywrapper.BoolValue `protobuf:"bytes,440460216,opt,name=logical,proto3" json:"logical,omitempty"` + LoopbackMode *ywrapper.BoolValue `protobuf:"bytes,372935512,opt,name=loopback_mode,json=loopbackMode,proto3" json:"loopback_mode,omitempty"` + Mtu *ywrapper.UintValue `protobuf:"bytes,96390485,opt,name=mtu,proto3" json:"mtu,omitempty"` + Name *ywrapper.StringValue `protobuf:"bytes,503495278,opt,name=name,proto3" json:"name,omitempty"` + OperStatus Interfaces_Interface_State_OperStatus `protobuf:"varint,470394226,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_State_OperStatus" json:"oper_status,omitempty"` + Type enums.IETFInterfacesInterfaceType `protobuf:"varint,358148579,opt,name=type,proto3,enum=openconfig.enums.IETFInterfacesInterfaceType" json:"type,omitempty"` +} + +func (x *Interfaces_Interface_State) Reset() { + *x = Interfaces_Interface_State{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_State) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_State) ProtoMessage() {} + +func (x *Interfaces_Interface_State) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_State.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_State) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2} +} + +func (x *Interfaces_Interface_State) GetAdminStatus() Interfaces_Interface_State_AdminStatus { + if x != nil { + return x.AdminStatus + } + return Interfaces_Interface_State_ADMINSTATUS_UNSET +} + +func (x *Interfaces_Interface_State) GetCounters() *Interfaces_Interface_State_Counters { + if x != nil { + return x.Counters + } + return nil +} + +func (x *Interfaces_Interface_State) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_State) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_State) GetIfindex() *ywrapper.UintValue { + if x != nil { + return x.Ifindex + } + return nil +} + +func (x *Interfaces_Interface_State) GetLastChange() *ywrapper.UintValue { + if x != nil { + return x.LastChange + } + return nil +} + +func (x *Interfaces_Interface_State) GetLogical() *ywrapper.BoolValue { + if x != nil { + return x.Logical + } + return nil +} + +func (x *Interfaces_Interface_State) GetLoopbackMode() *ywrapper.BoolValue { + if x != nil { + return x.LoopbackMode + } + return nil +} + +func (x *Interfaces_Interface_State) GetMtu() *ywrapper.UintValue { + if x != nil { + return x.Mtu + } + return nil +} + +func (x *Interfaces_Interface_State) GetName() *ywrapper.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *Interfaces_Interface_State) GetOperStatus() Interfaces_Interface_State_OperStatus { + if x != nil { + return x.OperStatus + } + return Interfaces_Interface_State_OPERSTATUS_UNSET +} + +func (x *Interfaces_Interface_State) GetType() enums.IETFInterfacesInterfaceType { + if x != nil { + return x.Type + } + return enums.IETFInterfacesInterfaceType_IETFINTERFACESINTERFACETYPE_UNSET +} + +type Interfaces_Interface_Subinterfaces struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Subinterface []*Interfaces_Interface_Subinterfaces_SubinterfaceKey `protobuf:"bytes,464802819,rep,name=subinterface,proto3" json:"subinterface,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces) Reset() { + *x = Interfaces_Interface_Subinterfaces{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3} +} + +func (x *Interfaces_Interface_Subinterfaces) GetSubinterface() []*Interfaces_Interface_Subinterfaces_SubinterfaceKey { + if x != nil { + return x.Subinterface + } + return nil +} + +type Interfaces_Interface_HoldTime_Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Down *ywrapper.UintValue `protobuf:"bytes,171181656,opt,name=down,proto3" json:"down,omitempty"` + Up *ywrapper.UintValue `protobuf:"bytes,62026235,opt,name=up,proto3" json:"up,omitempty"` +} + +func (x *Interfaces_Interface_HoldTime_Config) Reset() { + *x = Interfaces_Interface_HoldTime_Config{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_HoldTime_Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_HoldTime_Config) ProtoMessage() {} + +func (x *Interfaces_Interface_HoldTime_Config) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_HoldTime_Config.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_HoldTime_Config) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 0} +} + +func (x *Interfaces_Interface_HoldTime_Config) GetDown() *ywrapper.UintValue { + if x != nil { + return x.Down + } + return nil +} + +func (x *Interfaces_Interface_HoldTime_Config) GetUp() *ywrapper.UintValue { + if x != nil { + return x.Up + } + return nil +} + +type Interfaces_Interface_HoldTime_State struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Down *ywrapper.UintValue `protobuf:"bytes,167887721,opt,name=down,proto3" json:"down,omitempty"` + Up *ywrapper.UintValue `protobuf:"bytes,223847598,opt,name=up,proto3" json:"up,omitempty"` +} + +func (x *Interfaces_Interface_HoldTime_State) Reset() { + *x = Interfaces_Interface_HoldTime_State{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_HoldTime_State) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_HoldTime_State) ProtoMessage() {} + +func (x *Interfaces_Interface_HoldTime_State) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_HoldTime_State.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_HoldTime_State) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 1, 1} +} + +func (x *Interfaces_Interface_HoldTime_State) GetDown() *ywrapper.UintValue { + if x != nil { + return x.Down + } + return nil +} + +func (x *Interfaces_Interface_HoldTime_State) GetUp() *ywrapper.UintValue { + if x != nil { + return x.Up + } + return nil +} + +type Interfaces_Interface_State_Counters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,270803130,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` + InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,280201989,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` + InDiscards *ywrapper.UintValue `protobuf:"bytes,11979514,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` + InErrors *ywrapper.UintValue `protobuf:"bytes,456697578,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` + InFcsErrors *ywrapper.UintValue `protobuf:"bytes,501559027,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` + InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,113269128,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` + InOctets *ywrapper.UintValue `protobuf:"bytes,333138891,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` + InPkts *ywrapper.UintValue `protobuf:"bytes,412843491,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` + InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,272792307,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` + InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,241475497,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` + LastClear *ywrapper.UintValue `protobuf:"bytes,186014919,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` + OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,338589668,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` + OutDiscards *ywrapper.UintValue `protobuf:"bytes,254055111,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` + OutErrors *ywrapper.UintValue `protobuf:"bytes,471103047,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` + OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,457840757,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` + OutOctets *ywrapper.UintValue `protobuf:"bytes,201005514,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` + OutPkts *ywrapper.UintValue `protobuf:"bytes,437582090,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` + OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,36542246,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` +} + +func (x *Interfaces_Interface_State_Counters) Reset() { + *x = Interfaces_Interface_State_Counters{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_State_Counters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_State_Counters) ProtoMessage() {} + +func (x *Interfaces_Interface_State_Counters) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_State_Counters.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_State_Counters) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 2, 0} +} + +func (x *Interfaces_Interface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { + if x != nil { + return x.CarrierTransitions + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.InBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInDiscards() *ywrapper.UintValue { + if x != nil { + return x.InDiscards + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInErrors() *ywrapper.UintValue { + if x != nil { + return x.InErrors + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { + if x != nil { + return x.InFcsErrors + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.InMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInOctets() *ywrapper.UintValue { + if x != nil { + return x.InOctets + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInPkts() *ywrapper.UintValue { + if x != nil { + return x.InPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.InUnicastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { + if x != nil { + return x.InUnknownProtos + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetLastClear() *ywrapper.UintValue { + if x != nil { + return x.LastClear + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutDiscards() *ywrapper.UintValue { + if x != nil { + return x.OutDiscards + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutErrors() *ywrapper.UintValue { + if x != nil { + return x.OutErrors + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutOctets() *ywrapper.UintValue { + if x != nil { + return x.OutOctets + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutPkts() *ywrapper.UintValue { + if x != nil { + return x.OutPkts + } + return nil +} + +func (x *Interfaces_Interface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutUnicastPkts + } + return nil +} + +type Interfaces_Interface_Subinterfaces_Subinterface struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Config *Interfaces_Interface_Subinterfaces_Subinterface_Config `protobuf:"bytes,175001476,opt,name=config,proto3" json:"config,omitempty"` + State *Interfaces_Interface_Subinterfaces_Subinterface_State `protobuf:"bytes,501974173,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetConfig() *Interfaces_Interface_Subinterfaces_Subinterface_Config { + if x != nil { + return x.Config + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface) GetState() *Interfaces_Interface_Subinterfaces_Subinterface_State { + if x != nil { + return x.State + } + return nil +} + +type Interfaces_Interface_Subinterfaces_SubinterfaceKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Index uint64 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + Subinterface *Interfaces_Interface_Subinterfaces_Subinterface `protobuf:"bytes,2,opt,name=subinterface,proto3" json:"subinterface,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) Reset() { + *x = Interfaces_Interface_Subinterfaces_SubinterfaceKey{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_SubinterfaceKey.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_SubinterfaceKey) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 1} +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *Interfaces_Interface_Subinterfaces_SubinterfaceKey) GetSubinterface() *Interfaces_Interface_Subinterfaces_Subinterface { + if x != nil { + return x.Subinterface + } + return nil +} + +type Interfaces_Interface_Subinterfaces_Subinterface_Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description *ywrapper.StringValue `protobuf:"bytes,280671199,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,297236390,opt,name=enabled,proto3" json:"enabled,omitempty"` + Index *ywrapper.UintValue `protobuf:"bytes,279269781,opt,name=index,proto3" json:"index,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface_Config{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface_Config.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface_Config) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 0} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_Config) GetIndex() *ywrapper.UintValue { + if x != nil { + return x.Index + } + return nil +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdminStatus Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus `protobuf:"varint,250658952,opt,name=admin_status,json=adminStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus" json:"admin_status,omitempty"` + Counters *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters `protobuf:"bytes,483442783,opt,name=counters,proto3" json:"counters,omitempty"` + Description *ywrapper.StringValue `protobuf:"bytes,49943526,opt,name=description,proto3" json:"description,omitempty"` + Enabled *ywrapper.BoolValue `protobuf:"bytes,468513843,opt,name=enabled,proto3" json:"enabled,omitempty"` + Ifindex *ywrapper.UintValue `protobuf:"bytes,511987815,opt,name=ifindex,proto3" json:"ifindex,omitempty"` + Index *ywrapper.UintValue `protobuf:"bytes,80745756,opt,name=index,proto3" json:"index,omitempty"` + LastChange *ywrapper.UintValue `protobuf:"bytes,29904521,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"` + Logical *ywrapper.BoolValue `protobuf:"bytes,294124401,opt,name=logical,proto3" json:"logical,omitempty"` + Name *ywrapper.StringValue `protobuf:"bytes,279346681,opt,name=name,proto3" json:"name,omitempty"` + OperStatus Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus `protobuf:"varint,401969247,opt,name=oper_status,json=operStatus,proto3,enum=openconfig.openconfig_interfaces.Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus" json:"oper_status,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface_State{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface_State.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface_State) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetAdminStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus { + if x != nil { + return x.AdminStatus + } + return Interfaces_Interface_Subinterfaces_Subinterface_State_ADMINSTATUS_UNSET +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetCounters() *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters { + if x != nil { + return x.Counters + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetDescription() *ywrapper.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetEnabled() *ywrapper.BoolValue { + if x != nil { + return x.Enabled + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIfindex() *ywrapper.UintValue { + if x != nil { + return x.Ifindex + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetIndex() *ywrapper.UintValue { + if x != nil { + return x.Index + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLastChange() *ywrapper.UintValue { + if x != nil { + return x.LastChange + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetLogical() *ywrapper.BoolValue { + if x != nil { + return x.Logical + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetName() *ywrapper.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State) GetOperStatus() Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus { + if x != nil { + return x.OperStatus + } + return Interfaces_Interface_Subinterfaces_Subinterface_State_OPERSTATUS_UNSET +} + +type Interfaces_Interface_Subinterfaces_Subinterface_State_Counters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CarrierTransitions *ywrapper.UintValue `protobuf:"bytes,141120277,opt,name=carrier_transitions,json=carrierTransitions,proto3" json:"carrier_transitions,omitempty"` + InBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,120244022,opt,name=in_broadcast_pkts,json=inBroadcastPkts,proto3" json:"in_broadcast_pkts,omitempty"` + InDiscards *ywrapper.UintValue `protobuf:"bytes,307490461,opt,name=in_discards,json=inDiscards,proto3" json:"in_discards,omitempty"` + InErrors *ywrapper.UintValue `protobuf:"bytes,319720873,opt,name=in_errors,json=inErrors,proto3" json:"in_errors,omitempty"` + InFcsErrors *ywrapper.UintValue `protobuf:"bytes,169858424,opt,name=in_fcs_errors,json=inFcsErrors,proto3" json:"in_fcs_errors,omitempty"` + InMulticastPkts *ywrapper.UintValue `protobuf:"bytes,320618859,opt,name=in_multicast_pkts,json=inMulticastPkts,proto3" json:"in_multicast_pkts,omitempty"` + InOctets *ywrapper.UintValue `protobuf:"bytes,530205868,opt,name=in_octets,json=inOctets,proto3" json:"in_octets,omitempty"` + InPkts *ywrapper.UintValue `protobuf:"bytes,441153352,opt,name=in_pkts,json=inPkts,proto3" json:"in_pkts,omitempty"` + InUnicastPkts *ywrapper.UintValue `protobuf:"bytes,177838880,opt,name=in_unicast_pkts,json=inUnicastPkts,proto3" json:"in_unicast_pkts,omitempty"` + InUnknownProtos *ywrapper.UintValue `protobuf:"bytes,146059814,opt,name=in_unknown_protos,json=inUnknownProtos,proto3" json:"in_unknown_protos,omitempty"` + LastClear *ywrapper.UintValue `protobuf:"bytes,518046966,opt,name=last_clear,json=lastClear,proto3" json:"last_clear,omitempty"` + OutBroadcastPkts *ywrapper.UintValue `protobuf:"bytes,501221245,opt,name=out_broadcast_pkts,json=outBroadcastPkts,proto3" json:"out_broadcast_pkts,omitempty"` + OutDiscards *ywrapper.UintValue `protobuf:"bytes,159539762,opt,name=out_discards,json=outDiscards,proto3" json:"out_discards,omitempty"` + OutErrors *ywrapper.UintValue `protobuf:"bytes,466636898,opt,name=out_errors,json=outErrors,proto3" json:"out_errors,omitempty"` + OutMulticastPkts *ywrapper.UintValue `protobuf:"bytes,326155776,opt,name=out_multicast_pkts,json=outMulticastPkts,proto3" json:"out_multicast_pkts,omitempty"` + OutOctets *ywrapper.UintValue `protobuf:"bytes,50579235,opt,name=out_octets,json=outOctets,proto3" json:"out_octets,omitempty"` + OutPkts *ywrapper.UintValue `protobuf:"bytes,29497115,opt,name=out_pkts,json=outPkts,proto3" json:"out_pkts,omitempty"` + OutUnicastPkts *ywrapper.UintValue `protobuf:"bytes,297910971,opt,name=out_unicast_pkts,json=outUnicastPkts,proto3" json:"out_unicast_pkts,omitempty"` +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Reset() { + *x = Interfaces_Interface_Subinterfaces_Subinterface_State_Counters{} + if protoimpl.UnsafeEnabled { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoMessage() {} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ProtoReflect() protoreflect.Message { + mi := &file_openconfig_openconfig_interfaces_openconfig_interfaces_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 Interfaces_Interface_Subinterfaces_Subinterface_State_Counters.ProtoReflect.Descriptor instead. +func (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Descriptor() ([]byte, []int) { + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP(), []int{0, 0, 3, 0, 1, 0} +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetCarrierTransitions() *ywrapper.UintValue { + if x != nil { + return x.CarrierTransitions + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.InBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInDiscards() *ywrapper.UintValue { + if x != nil { + return x.InDiscards + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInErrors() *ywrapper.UintValue { + if x != nil { + return x.InErrors + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInFcsErrors() *ywrapper.UintValue { + if x != nil { + return x.InFcsErrors + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.InMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInOctets() *ywrapper.UintValue { + if x != nil { + return x.InOctets + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInPkts() *ywrapper.UintValue { + if x != nil { + return x.InPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.InUnicastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetInUnknownProtos() *ywrapper.UintValue { + if x != nil { + return x.InUnknownProtos + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetLastClear() *ywrapper.UintValue { + if x != nil { + return x.LastClear + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutBroadcastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutBroadcastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutDiscards() *ywrapper.UintValue { + if x != nil { + return x.OutDiscards + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutErrors() *ywrapper.UintValue { + if x != nil { + return x.OutErrors + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutMulticastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutMulticastPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutOctets() *ywrapper.UintValue { + if x != nil { + return x.OutOctets + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutPkts() *ywrapper.UintValue { + if x != nil { + return x.OutPkts + } + return nil +} + +func (x *Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) GetOutUnicastPkts() *ywrapper.UintValue { + if x != nil { + return x.OutUnicastPkts + } + return nil +} + +var File_openconfig_openconfig_interfaces_openconfig_interfaces_proto protoreflect.FileDescriptor + +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = []byte{ + 0x0a, 0x3c, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x1a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x30, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x79, 0x65, 0x78, + 0x74, 0x2f, 0x79, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2f, 0x65, + 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x5a, 0x0a, 0x0a, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x09, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0xfa, 0xa7, 0xba, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x1a, 0xd3, 0x58, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x7a, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xeb, 0xb4, 0xac, 0x9f, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x42, 0x1f, 0x82, 0x41, 0x1c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, 0x01, 0x0a, 0x09, 0x68, + 0x6f, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0xd4, 0xfd, 0xf1, 0x53, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, + 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x08, 0x68, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x76, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0xac, 0xc6, 0xe6, 0xb8, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x42, 0x1e, 0x82, 0x41, 0x1b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x0d, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x95, 0x9b, 0xa7, 0x9c, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x1a, 0xc9, 0x04, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x68, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xb4, 0xb3, 0xc9, 0xc7, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, + 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0xed, 0xfe, 0xdf, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0xbb, 0xb4, 0xf1, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x52, + 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4e, 0x0a, + 0x03, 0x6d, 0x74, 0x75, 0x18, 0xa6, 0x87, 0xb2, 0xb3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x9b, 0xf0, 0xd9, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x6a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x9e, 0xbf, 0xf9, 0x44, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x42, 0x24, 0x82, 0x41, 0x21, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x9d, 0x05, + 0x0a, 0x08, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xd9, 0xb3, 0xf6, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x46, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x29, 0x82, 0x41, 0x26, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x89, 0x01, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0xae, 0xd3, 0xa8, 0xe6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x28, 0x82, 0x41, 0x25, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x5a, 0x0a, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xd8, 0x8c, 0xd0, 0x51, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, + 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2e, 0x82, 0x41, 0x2b, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x54, 0x0a, + 0x02, 0x75, 0x70, 0x18, 0xfb, 0xe3, 0xc9, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x52, + 0x02, 0x75, 0x70, 0x1a, 0xb7, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x59, 0x0a, + 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0xe9, 0x86, 0x87, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, + 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x6f, + 0x77, 0x6e, 0x52, 0x04, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x53, 0x0a, 0x02, 0x75, 0x70, 0x18, 0xae, + 0xc9, 0xde, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2b, 0x82, 0x41, + 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x68, 0x6f, 0x6c, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x75, 0x70, 0x52, 0x02, 0x75, 0x70, 0x1a, 0x9b, 0x1e, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xab, 0xee, 0xa0, 0xe2, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x48, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2b, 0x82, 0x41, + 0x28, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x18, 0x8c, 0xac, 0xf1, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x42, 0x27, 0x82, 0x41, 0x24, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x67, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x97, 0x9f, 0xd9, 0xb9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x9e, 0x9b, 0xe6, 0x9d, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x07, 0x69, 0x66, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xaa, 0xd7, 0xae, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x63, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x18, 0x90, 0xe1, 0xdc, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, + 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x59, 0x0a, 0x07, 0x6c, 0x6f, 0x67, + 0x69, 0x63, 0x61, 0x6c, 0x18, 0xb8, 0xc7, 0x83, 0xd2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x26, 0x82, 0x41, 0x23, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, 0x6f, 0x67, + 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6a, 0x0a, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xd8, 0x96, 0xea, 0xb1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2c, 0x82, 0x41, 0x29, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x2d, 0x6d, 0x6f, + 0x64, 0x65, 0x52, 0x0c, 0x6c, 0x6f, 0x6f, 0x70, 0x62, 0x61, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, + 0x12, 0x4c, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0xd5, 0x9a, 0xfb, 0x2d, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x22, 0x82, 0x41, 0x1f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6d, 0x74, 0x75, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x52, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xee, 0xf4, 0x8a, 0xf0, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x23, 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0xf2, 0xca, 0xa6, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x47, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x2a, 0x82, 0x41, 0x27, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x6a, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0xe3, 0xd3, 0xe3, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2d, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x6e, 0x75, + 0x6d, 0x73, 0x2e, 0x49, 0x45, 0x54, 0x46, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x23, + 0x82, 0x41, 0x20, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x1a, 0xbe, 0x10, 0x0a, 0x08, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, + 0x65, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xba, + 0xc1, 0x90, 0x81, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3b, 0x82, + 0x41, 0x38, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, + 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x7e, + 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, + 0x6b, 0x74, 0x73, 0x18, 0x85, 0x96, 0xce, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x62, + 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, + 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6c, + 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xfa, 0x95, + 0xdb, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x33, 0x82, 0x41, 0x30, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, + 0x52, 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x67, 0x0a, 0x09, + 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xea, 0xcd, 0xe2, 0xd9, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xf3, 0xdd, 0x94, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, + 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, + 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x7d, 0x0a, 0x11, 0x69, 0x6e, 0x5f, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x88, + 0xb3, 0x81, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x39, 0x82, 0x41, + 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x67, 0x0a, 0x09, 0x69, 0x6e, 0x5f, 0x6f, + 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xcb, 0x97, 0xed, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x31, 0x82, 0x41, 0x2e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, + 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, + 0x73, 0x12, 0x61, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xe3, 0xfb, 0xed, + 0xc4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2f, 0x82, 0x41, 0x2c, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, + 0x50, 0x6b, 0x74, 0x73, 0x12, 0x78, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xf3, 0xf5, 0x89, 0x82, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x37, 0x82, 0x41, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, + 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, + 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7d, + 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x73, 0x18, 0xa9, 0xbf, 0x92, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, + 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, 0x6e, + 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x69, 0x0a, + 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xc7, 0xb9, 0xd9, 0x58, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, + 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, + 0xe4, 0xef, 0xb9, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3a, + 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, + 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, + 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x6f, 0x0a, 0x0c, + 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xc7, 0xa5, 0x92, + 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x34, 0x82, 0x41, 0x31, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, + 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x6a, 0x0a, + 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xc7, 0xec, 0xd1, 0xe0, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x09, + 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6f, 0x75, + 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, + 0x18, 0xf5, 0xb0, 0xa8, 0xda, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x69, 0x0a, + 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xca, 0xb3, 0xec, 0x5f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x32, 0x82, 0x41, 0x2f, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, + 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x12, 0x64, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, + 0x70, 0x6b, 0x74, 0x73, 0x18, 0x8a, 0xf2, 0xd3, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x30, 0x82, 0x41, 0x2d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, + 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x7a, + 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, + 0x74, 0x73, 0x18, 0xa6, 0xae, 0xb6, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x38, 0x82, 0x41, 0x35, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, + 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, + 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, + 0x00, 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, + 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, + 0x10, 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, + 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, + 0x22, 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x14, 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, + 0x1c, 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, + 0x57, 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, + 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, + 0x49, 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, + 0x47, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, + 0x41, 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, + 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, + 0x45, 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, + 0x45, 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, + 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, + 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xa8, 0x2c, 0x0a, 0x0d, + 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x12, 0xb1, 0x01, + 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x83, + 0xa8, 0xd1, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x33, + 0x82, 0x41, 0x30, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x1a, 0x86, 0x29, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x12, 0xaf, 0x01, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x84, 0x9f, + 0xb9, 0x53, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x58, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x42, 0x3a, 0x82, 0x41, 0x37, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0xac, 0x01, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x9d, + 0x89, 0xae, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x42, 0x39, 0x82, 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x1a, 0xf6, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x83, + 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xdf, + 0xe7, 0xea, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0xa6, 0xef, 0xdd, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x42, + 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x6f, 0x0a, 0x05, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x95, 0xa3, 0x95, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x40, 0x82, 0x41, 0x3d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x9b, 0x23, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0xd1, 0x01, 0x0a, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x88, 0x81, 0xc3, 0x77, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x63, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x46, 0x82, 0x41, 0x43, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x08, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0xdf, 0x80, 0xc3, 0xe6, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x60, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x42, 0x42, 0x82, 0x41, 0x3f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x81, 0x01, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0xe6, 0xa7, 0xe8, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x18, 0xb3, 0xe8, 0xb3, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x74, 0x0a, 0x07, 0x69, + 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0xe7, 0xa0, 0x91, 0xf4, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x2f, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x69, 0x66, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x6d, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x9c, 0xaa, 0xc0, 0x26, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x3f, 0x82, 0x41, 0x3c, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x7e, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, + 0x89, 0x9d, 0xa1, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x45, 0x82, + 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x12, 0x74, 0x0a, 0x07, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x18, 0xf1, 0xf6, 0x9f, 0x8c, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x41, 0x82, 0x41, 0x3e, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x07, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x6d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xf9, + 0xfb, 0x99, 0x85, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x3e, 0x82, 0x41, 0x3b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xce, 0x01, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xdf, 0xa0, 0xd6, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x62, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x42, 0x45, 0x82, 0x41, 0x42, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x6f, + 0x70, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0xb0, 0x14, 0x0a, 0x08, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x13, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x95, 0xa6, 0xa5, 0x43, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x56, 0x82, 0x41, 0x53, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x63, 0x61, + 0x72, 0x72, 0x69, 0x65, 0x72, 0x2d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x12, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x62, 0x72, 0x6f, + 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xb6, 0x8e, 0xab, 0x39, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, + 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, + 0x0f, 0x69, 0x6e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, + 0x12, 0x88, 0x01, 0x0a, 0x0b, 0x69, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, + 0x18, 0x9d, 0xdd, 0xcf, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, + 0x4e, 0x82, 0x41, 0x4b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, + 0x0a, 0x69, 0x6e, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, + 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0xa9, 0x9b, 0xba, 0x98, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x66, 0x63, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x18, 0xf8, 0xaa, 0xff, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x50, 0x82, 0x41, 0x4d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x66, 0x63, 0x73, 0x2d, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x52, 0x0b, 0x69, 0x6e, 0x46, 0x63, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, + 0x99, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xeb, 0x82, 0xf1, 0x98, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0f, 0x69, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x09, + 0x69, 0x6e, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xac, 0x99, 0xe9, 0xfc, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, + 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4c, 0x82, 0x41, 0x49, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, + 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x08, 0x69, 0x6e, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, + 0x12, 0x7c, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xc8, 0xee, 0xad, 0xd2, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4a, 0x82, 0x41, 0x47, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, + 0x6e, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x06, 0x69, 0x6e, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x92, + 0x01, 0x0a, 0x0f, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, + 0x74, 0x73, 0x18, 0xa0, 0xb6, 0xe6, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x52, 0x82, 0x41, 0x4f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x2d, + 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0d, 0x69, 0x6e, 0x55, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, + 0x6b, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, + 0x77, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x18, 0xa6, 0xe4, 0xd2, 0x45, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, + 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x54, 0x82, 0x41, 0x51, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x69, 0x6e, 0x2d, 0x75, + 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x52, 0x0f, 0x69, + 0x6e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x12, 0x85, + 0x01, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x18, 0xf6, 0x89, + 0x83, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, + 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x2d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x52, 0x09, 0x6c, 0x61, 0x73, + 0x74, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x5f, 0x62, + 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xfd, 0x8e, + 0x80, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x55, 0x82, 0x41, + 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, + 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, + 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x61, 0x72, 0x64, 0x73, 0x18, 0xb2, 0xc4, 0x89, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4f, 0x82, 0x41, 0x4c, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x64, 0x69, 0x73, + 0x63, 0x61, 0x72, 0x64, 0x73, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x18, 0xe2, 0xa0, 0xc1, 0xde, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x52, + 0x09, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x12, 0x6f, + 0x75, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6b, 0x74, + 0x73, 0x18, 0x80, 0xfc, 0xc2, 0x9b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x55, 0x82, 0x41, 0x52, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, + 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x12, 0x84, 0x01, 0x0a, 0x0a, 0x6f, 0x75, + 0x74, 0x5f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, 0xa3, 0x8e, 0x8f, 0x18, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4d, 0x82, 0x41, 0x4a, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x6f, + 0x63, 0x74, 0x65, 0x74, 0x73, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x73, + 0x12, 0x7e, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0x9b, 0xae, 0x88, + 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x4b, 0x82, 0x41, 0x48, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, + 0x75, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x50, 0x6b, 0x74, 0x73, + 0x12, 0x96, 0x01, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x5f, 0x70, 0x6b, 0x74, 0x73, 0x18, 0xbb, 0x85, 0x87, 0x8e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x55, 0x69, 0x6e, 0x74, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x53, 0x82, 0x41, 0x50, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x6f, 0x75, 0x74, 0x2d, 0x75, 0x6e, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x2d, 0x70, 0x6b, 0x74, 0x73, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x55, 0x6e, + 0x69, 0x63, 0x61, 0x73, 0x74, 0x50, 0x6b, 0x74, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x44, 0x4d, + 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, + 0x12, 0x19, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x50, 0x10, 0x01, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1d, 0x0a, 0x10, 0x41, + 0x44, 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, + 0x02, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x23, 0x0a, 0x13, 0x41, 0x44, + 0x4d, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x03, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, 0x22, + 0xa8, 0x02, 0x0a, 0x0a, 0x4f, 0x70, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, + 0x0a, 0x10, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, + 0x45, 0x54, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x0d, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x50, 0x10, 0x02, 0x1a, 0x05, 0x82, 0x41, 0x02, 0x55, 0x50, 0x12, 0x1c, + 0x0a, 0x0f, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x57, + 0x4e, 0x10, 0x03, 0x1a, 0x07, 0x82, 0x41, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, + 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x04, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x54, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x47, + 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x12, 0x22, 0x0a, 0x12, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x10, 0x06, 0x1a, 0x0a, 0x82, 0x41, + 0x07, 0x44, 0x4f, 0x52, 0x4d, 0x41, 0x4e, 0x54, 0x12, 0x2a, 0x0a, 0x16, 0x4f, 0x50, 0x45, 0x52, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, + 0x4e, 0x54, 0x10, 0x07, 0x1a, 0x0e, 0x82, 0x41, 0x0b, 0x4e, 0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, + 0x53, 0x45, 0x4e, 0x54, 0x12, 0x34, 0x0a, 0x1b, 0x4f, 0x50, 0x45, 0x52, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, + 0x4f, 0x57, 0x4e, 0x10, 0x08, 0x1a, 0x13, 0x82, 0x41, 0x10, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x1a, 0xd9, 0x01, 0x0a, 0x0f, 0x53, + 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x4f, + 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x39, 0x82, + 0x41, 0x36, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x75, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x75, + 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1a, 0x97, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x82, 0x41, 0x1a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x66, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce sync.Once + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc +) + +func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescGZIP() []byte { + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescOnce.Do(func() { + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData = protoimpl.X.CompressGZIP(file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData) + }) + return file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDescData +} + +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = []interface{}{ + (Interfaces_Interface_State_AdminStatus)(0), // 0: openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus + (Interfaces_Interface_State_OperStatus)(0), // 1: openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus + (Interfaces_Interface_Subinterfaces_Subinterface_State_AdminStatus)(0), // 2: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus + (Interfaces_Interface_Subinterfaces_Subinterface_State_OperStatus)(0), // 3: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus + (*Interfaces)(nil), // 4: openconfig.openconfig_interfaces.Interfaces + (*Interfaces_Interface)(nil), // 5: openconfig.openconfig_interfaces.Interfaces.Interface + (*Interfaces_InterfaceKey)(nil), // 6: openconfig.openconfig_interfaces.Interfaces.InterfaceKey + (*Interfaces_Interface_Config)(nil), // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config + (*Interfaces_Interface_HoldTime)(nil), // 8: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime + (*Interfaces_Interface_State)(nil), // 9: openconfig.openconfig_interfaces.Interfaces.Interface.State + (*Interfaces_Interface_Subinterfaces)(nil), // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces + (*Interfaces_Interface_HoldTime_Config)(nil), // 11: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config + (*Interfaces_Interface_HoldTime_State)(nil), // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State + (*Interfaces_Interface_State_Counters)(nil), // 13: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters + (*Interfaces_Interface_Subinterfaces_Subinterface)(nil), // 14: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface + (*Interfaces_Interface_Subinterfaces_SubinterfaceKey)(nil), // 15: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey + (*Interfaces_Interface_Subinterfaces_Subinterface_Config)(nil), // 16: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config + (*Interfaces_Interface_Subinterfaces_Subinterface_State)(nil), // 17: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State + (*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters)(nil), // 18: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters + (*ywrapper.StringValue)(nil), // 19: ywrapper.StringValue + (*ywrapper.BoolValue)(nil), // 20: ywrapper.BoolValue + (*ywrapper.UintValue)(nil), // 21: ywrapper.UintValue + (enums.IETFInterfacesInterfaceType)(0), // 22: openconfig.enums.IETFInterfacesInterfaceType +} +var file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = []int32{ + 6, // 0: openconfig.openconfig_interfaces.Interfaces.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.InterfaceKey + 7, // 1: openconfig.openconfig_interfaces.Interfaces.Interface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Config + 8, // 2: openconfig.openconfig_interfaces.Interfaces.Interface.hold_time:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime + 9, // 3: openconfig.openconfig_interfaces.Interfaces.Interface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State + 10, // 4: openconfig.openconfig_interfaces.Interfaces.Interface.subinterfaces:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces + 5, // 5: openconfig.openconfig_interfaces.Interfaces.InterfaceKey.interface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface + 19, // 6: openconfig.openconfig_interfaces.Interfaces.Interface.Config.description:type_name -> ywrapper.StringValue + 20, // 7: openconfig.openconfig_interfaces.Interfaces.Interface.Config.enabled:type_name -> ywrapper.BoolValue + 20, // 8: openconfig.openconfig_interfaces.Interfaces.Interface.Config.loopback_mode:type_name -> ywrapper.BoolValue + 21, // 9: openconfig.openconfig_interfaces.Interfaces.Interface.Config.mtu:type_name -> ywrapper.UintValue + 19, // 10: openconfig.openconfig_interfaces.Interfaces.Interface.Config.name:type_name -> ywrapper.StringValue + 22, // 11: openconfig.openconfig_interfaces.Interfaces.Interface.Config.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType + 11, // 12: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config + 12, // 13: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State + 0, // 14: openconfig.openconfig_interfaces.Interfaces.Interface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.AdminStatus + 13, // 15: openconfig.openconfig_interfaces.Interfaces.Interface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters + 19, // 16: openconfig.openconfig_interfaces.Interfaces.Interface.State.description:type_name -> ywrapper.StringValue + 20, // 17: openconfig.openconfig_interfaces.Interfaces.Interface.State.enabled:type_name -> ywrapper.BoolValue + 21, // 18: openconfig.openconfig_interfaces.Interfaces.Interface.State.ifindex:type_name -> ywrapper.UintValue + 21, // 19: openconfig.openconfig_interfaces.Interfaces.Interface.State.last_change:type_name -> ywrapper.UintValue + 20, // 20: openconfig.openconfig_interfaces.Interfaces.Interface.State.logical:type_name -> ywrapper.BoolValue + 20, // 21: openconfig.openconfig_interfaces.Interfaces.Interface.State.loopback_mode:type_name -> ywrapper.BoolValue + 21, // 22: openconfig.openconfig_interfaces.Interfaces.Interface.State.mtu:type_name -> ywrapper.UintValue + 19, // 23: openconfig.openconfig_interfaces.Interfaces.Interface.State.name:type_name -> ywrapper.StringValue + 1, // 24: openconfig.openconfig_interfaces.Interfaces.Interface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.State.OperStatus + 22, // 25: openconfig.openconfig_interfaces.Interfaces.Interface.State.type:type_name -> openconfig.enums.IETFInterfacesInterfaceType + 15, // 26: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey + 21, // 27: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.down:type_name -> ywrapper.UintValue + 21, // 28: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.Config.up:type_name -> ywrapper.UintValue + 21, // 29: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.down:type_name -> ywrapper.UintValue + 21, // 30: openconfig.openconfig_interfaces.Interfaces.Interface.HoldTime.State.up:type_name -> ywrapper.UintValue + 21, // 31: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue + 21, // 32: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 33: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_discards:type_name -> ywrapper.UintValue + 21, // 34: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_errors:type_name -> ywrapper.UintValue + 21, // 35: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue + 21, // 36: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 37: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_octets:type_name -> ywrapper.UintValue + 21, // 38: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_pkts:type_name -> ywrapper.UintValue + 21, // 39: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue + 21, // 40: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue + 21, // 41: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.last_clear:type_name -> ywrapper.UintValue + 21, // 42: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 43: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_discards:type_name -> ywrapper.UintValue + 21, // 44: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_errors:type_name -> ywrapper.UintValue + 21, // 45: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 46: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_octets:type_name -> ywrapper.UintValue + 21, // 47: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_pkts:type_name -> ywrapper.UintValue + 21, // 48: openconfig.openconfig_interfaces.Interfaces.Interface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue + 16, // 49: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.config:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config + 17, // 50: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.state:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State + 14, // 51: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.SubinterfaceKey.subinterface:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface + 19, // 52: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.description:type_name -> ywrapper.StringValue + 20, // 53: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.enabled:type_name -> ywrapper.BoolValue + 21, // 54: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.Config.index:type_name -> ywrapper.UintValue + 2, // 55: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.admin_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.AdminStatus + 18, // 56: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.counters:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters + 19, // 57: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.description:type_name -> ywrapper.StringValue + 20, // 58: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.enabled:type_name -> ywrapper.BoolValue + 21, // 59: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.ifindex:type_name -> ywrapper.UintValue + 21, // 60: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.index:type_name -> ywrapper.UintValue + 21, // 61: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.last_change:type_name -> ywrapper.UintValue + 20, // 62: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.logical:type_name -> ywrapper.BoolValue + 19, // 63: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.name:type_name -> ywrapper.StringValue + 3, // 64: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.oper_status:type_name -> openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.OperStatus + 21, // 65: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.carrier_transitions:type_name -> ywrapper.UintValue + 21, // 66: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 67: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_discards:type_name -> ywrapper.UintValue + 21, // 68: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_errors:type_name -> ywrapper.UintValue + 21, // 69: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_fcs_errors:type_name -> ywrapper.UintValue + 21, // 70: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 71: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_octets:type_name -> ywrapper.UintValue + 21, // 72: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_pkts:type_name -> ywrapper.UintValue + 21, // 73: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unicast_pkts:type_name -> ywrapper.UintValue + 21, // 74: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.in_unknown_protos:type_name -> ywrapper.UintValue + 21, // 75: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.last_clear:type_name -> ywrapper.UintValue + 21, // 76: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_broadcast_pkts:type_name -> ywrapper.UintValue + 21, // 77: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_discards:type_name -> ywrapper.UintValue + 21, // 78: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_errors:type_name -> ywrapper.UintValue + 21, // 79: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_multicast_pkts:type_name -> ywrapper.UintValue + 21, // 80: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_octets:type_name -> ywrapper.UintValue + 21, // 81: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_pkts:type_name -> ywrapper.UintValue + 21, // 82: openconfig.openconfig_interfaces.Interfaces.Interface.Subinterfaces.Subinterface.State.Counters.out_unicast_pkts:type_name -> ywrapper.UintValue + 83, // [83:83] is the sub-list for method output_type + 83, // [83:83] is the sub-list for method input_type + 83, // [83:83] is the sub-list for extension type_name + 83, // [83:83] is the sub-list for extension extendee + 0, // [0:83] is the sub-list for field type_name +} + +func init() { file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() } +func file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_init() { + if File_openconfig_openconfig_interfaces_openconfig_interfaces_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_InterfaceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_HoldTime); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_State); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_HoldTime_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_HoldTime_State); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_State_Counters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_SubinterfaceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Interfaces_Interface_Subinterfaces_Subinterface_State_Counters); 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_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc, + NumEnums: 4, + NumMessages: 15, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes, + DependencyIndexes: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs, + EnumInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_enumTypes, + MessageInfos: file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_msgTypes, + }.Build() + File_openconfig_openconfig_interfaces_openconfig_interfaces_proto = out.File + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_rawDesc = nil + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_goTypes = nil + file_openconfig_openconfig_interfaces_openconfig_interfaces_proto_depIdxs = nil +} diff --git a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto new file mode 100644 index 0000000000000000000000000000000000000000..82e99cf6a44d260a1b0b115802b4f55a214c9561 --- /dev/null +++ b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto @@ -0,0 +1,163 @@ +// openconfig.openconfig_interfaces is generated by proto_generator as a protobuf +// representation of a YANG schema. +// +// Input schema modules: +// - ../yang-models/models/openconfig/release/models/interfaces/openconfig-interfaces.yang +// Include paths: +// - ../yang-models/models/... +syntax = "proto3"; + +package openconfig.openconfig_interfaces; +option go_package = "code.fbi.h-da.de/cocsn/gosdn"; + +import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; +import "github.com/openconfig/ygot/proto/yext/yext.proto"; +import "openconfig/enums/enums.proto"; + +message Interfaces { + message Interface { + message Config { + ywrapper.StringValue description = 418535860 [(yext.schemapath) = "/interfaces/interface/config/description"]; + ywrapper.BoolValue enabled = 37224301 [(yext.schemapath) = "/interfaces/interface/config/enabled"]; + ywrapper.BoolValue loopback_mode = 253516347 [(yext.schemapath) = "/interfaces/interface/config/loopback-mode"]; + ywrapper.UintValue mtu = 376210342 [(yext.schemapath) = "/interfaces/interface/config/mtu"]; + ywrapper.StringValue name = 51804187 [(yext.schemapath) = "/interfaces/interface/config/name"]; + openconfig.enums.IETFInterfacesInterfaceType type = 144596894 [(yext.schemapath) = "/interfaces/interface/config/type"]; + } + message HoldTime { + message Config { + ywrapper.UintValue down = 171181656 [(yext.schemapath) = "/interfaces/interface/hold-time/config/down"]; + ywrapper.UintValue up = 62026235 [(yext.schemapath) = "/interfaces/interface/hold-time/config/up"]; + } + message State { + ywrapper.UintValue down = 167887721 [(yext.schemapath) = "/interfaces/interface/hold-time/state/down"]; + ywrapper.UintValue up = 223847598 [(yext.schemapath) = "/interfaces/interface/hold-time/state/up"]; + } + Config config = 316512729 [(yext.schemapath) = "/interfaces/interface/hold-time/config"]; + State state = 483010990 [(yext.schemapath) = "/interfaces/interface/hold-time/state"]; + } + message State { + message Counters { + ywrapper.UintValue carrier_transitions = 270803130 [(yext.schemapath) = "/interfaces/interface/state/counters/carrier-transitions"]; + ywrapper.UintValue in_broadcast_pkts = 280201989 [(yext.schemapath) = "/interfaces/interface/state/counters/in-broadcast-pkts"]; + ywrapper.UintValue in_discards = 11979514 [(yext.schemapath) = "/interfaces/interface/state/counters/in-discards"]; + ywrapper.UintValue in_errors = 456697578 [(yext.schemapath) = "/interfaces/interface/state/counters/in-errors"]; + ywrapper.UintValue in_fcs_errors = 501559027 [(yext.schemapath) = "/interfaces/interface/state/counters/in-fcs-errors"]; + ywrapper.UintValue in_multicast_pkts = 113269128 [(yext.schemapath) = "/interfaces/interface/state/counters/in-multicast-pkts"]; + ywrapper.UintValue in_octets = 333138891 [(yext.schemapath) = "/interfaces/interface/state/counters/in-octets"]; + ywrapper.UintValue in_pkts = 412843491 [(yext.schemapath) = "/interfaces/interface/state/counters/in-pkts"]; + ywrapper.UintValue in_unicast_pkts = 272792307 [(yext.schemapath) = "/interfaces/interface/state/counters/in-unicast-pkts"]; + ywrapper.UintValue in_unknown_protos = 241475497 [(yext.schemapath) = "/interfaces/interface/state/counters/in-unknown-protos"]; + ywrapper.UintValue last_clear = 186014919 [(yext.schemapath) = "/interfaces/interface/state/counters/last-clear"]; + ywrapper.UintValue out_broadcast_pkts = 338589668 [(yext.schemapath) = "/interfaces/interface/state/counters/out-broadcast-pkts"]; + ywrapper.UintValue out_discards = 254055111 [(yext.schemapath) = "/interfaces/interface/state/counters/out-discards"]; + ywrapper.UintValue out_errors = 471103047 [(yext.schemapath) = "/interfaces/interface/state/counters/out-errors"]; + ywrapper.UintValue out_multicast_pkts = 457840757 [(yext.schemapath) = "/interfaces/interface/state/counters/out-multicast-pkts"]; + ywrapper.UintValue out_octets = 201005514 [(yext.schemapath) = "/interfaces/interface/state/counters/out-octets"]; + ywrapper.UintValue out_pkts = 437582090 [(yext.schemapath) = "/interfaces/interface/state/counters/out-pkts"]; + ywrapper.UintValue out_unicast_pkts = 36542246 [(yext.schemapath) = "/interfaces/interface/state/counters/out-unicast-pkts"]; + } + enum AdminStatus { + ADMINSTATUS_UNSET = 0; + ADMINSTATUS_UP = 1 [(yext.yang_name) = "UP"]; + ADMINSTATUS_DOWN = 2 [(yext.yang_name) = "DOWN"]; + ADMINSTATUS_TESTING = 3 [(yext.yang_name) = "TESTING"]; + } + enum OperStatus { + OPERSTATUS_UNSET = 0; + OPERSTATUS_UP = 2 [(yext.yang_name) = "UP"]; + OPERSTATUS_DOWN = 3 [(yext.yang_name) = "DOWN"]; + OPERSTATUS_TESTING = 4 [(yext.yang_name) = "TESTING"]; + OPERSTATUS_UNKNOWN = 5 [(yext.yang_name) = "UNKNOWN"]; + OPERSTATUS_DORMANT = 6 [(yext.yang_name) = "DORMANT"]; + OPERSTATUS_NOT_PRESENT = 7 [(yext.yang_name) = "NOT_PRESENT"]; + OPERSTATUS_LOWER_LAYER_DOWN = 8 [(yext.yang_name) = "LOWER_LAYER_DOWN"]; + } + AdminStatus admin_status = 474494763 [(yext.schemapath) = "/interfaces/interface/state/admin-status"]; + Counters counters = 83645964 [(yext.schemapath) = "/interfaces/interface/state/counters"]; + ywrapper.StringValue description = 389435287 [(yext.schemapath) = "/interfaces/interface/state/description"]; + ywrapper.BoolValue enabled = 330927518 [(yext.schemapath) = "/interfaces/interface/state/enabled"]; + ywrapper.UintValue ifindex = 116108202 [(yext.schemapath) = "/interfaces/interface/state/ifindex"]; + ywrapper.UintValue last_change = 127348880 [(yext.schemapath) = "/interfaces/interface/state/last-change"]; + ywrapper.BoolValue logical = 440460216 [(yext.schemapath) = "/interfaces/interface/state/logical"]; + ywrapper.BoolValue loopback_mode = 372935512 [(yext.schemapath) = "/interfaces/interface/state/loopback-mode"]; + ywrapper.UintValue mtu = 96390485 [(yext.schemapath) = "/interfaces/interface/state/mtu"]; + ywrapper.StringValue name = 503495278 [(yext.schemapath) = "/interfaces/interface/state/name"]; + OperStatus oper_status = 470394226 [(yext.schemapath) = "/interfaces/interface/state/oper-status"]; + openconfig.enums.IETFInterfacesInterfaceType type = 358148579 [(yext.schemapath) = "/interfaces/interface/state/type"]; + } + message Subinterfaces { + message Subinterface { + message Config { + ywrapper.StringValue description = 280671199 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/description"]; + ywrapper.BoolValue enabled = 297236390 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/enabled"]; + ywrapper.UintValue index = 279269781 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config/index"]; + } + message State { + message Counters { + ywrapper.UintValue carrier_transitions = 141120277 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/carrier-transitions"]; + ywrapper.UintValue in_broadcast_pkts = 120244022 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-broadcast-pkts"]; + ywrapper.UintValue in_discards = 307490461 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-discards"]; + ywrapper.UintValue in_errors = 319720873 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-errors"]; + ywrapper.UintValue in_fcs_errors = 169858424 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-fcs-errors"]; + ywrapper.UintValue in_multicast_pkts = 320618859 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-multicast-pkts"]; + ywrapper.UintValue in_octets = 530205868 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-octets"]; + ywrapper.UintValue in_pkts = 441153352 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-pkts"]; + ywrapper.UintValue in_unicast_pkts = 177838880 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-unicast-pkts"]; + ywrapper.UintValue in_unknown_protos = 146059814 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/in-unknown-protos"]; + ywrapper.UintValue last_clear = 518046966 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/last-clear"]; + ywrapper.UintValue out_broadcast_pkts = 501221245 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-broadcast-pkts"]; + ywrapper.UintValue out_discards = 159539762 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-discards"]; + ywrapper.UintValue out_errors = 466636898 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-errors"]; + ywrapper.UintValue out_multicast_pkts = 326155776 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-multicast-pkts"]; + ywrapper.UintValue out_octets = 50579235 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-octets"]; + ywrapper.UintValue out_pkts = 29497115 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-pkts"]; + ywrapper.UintValue out_unicast_pkts = 297910971 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters/out-unicast-pkts"]; + } + enum AdminStatus { + ADMINSTATUS_UNSET = 0; + ADMINSTATUS_UP = 1 [(yext.yang_name) = "UP"]; + ADMINSTATUS_DOWN = 2 [(yext.yang_name) = "DOWN"]; + ADMINSTATUS_TESTING = 3 [(yext.yang_name) = "TESTING"]; + } + enum OperStatus { + OPERSTATUS_UNSET = 0; + OPERSTATUS_UP = 2 [(yext.yang_name) = "UP"]; + OPERSTATUS_DOWN = 3 [(yext.yang_name) = "DOWN"]; + OPERSTATUS_TESTING = 4 [(yext.yang_name) = "TESTING"]; + OPERSTATUS_UNKNOWN = 5 [(yext.yang_name) = "UNKNOWN"]; + OPERSTATUS_DORMANT = 6 [(yext.yang_name) = "DORMANT"]; + OPERSTATUS_NOT_PRESENT = 7 [(yext.yang_name) = "NOT_PRESENT"]; + OPERSTATUS_LOWER_LAYER_DOWN = 8 [(yext.yang_name) = "LOWER_LAYER_DOWN"]; + } + AdminStatus admin_status = 250658952 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/admin-status"]; + Counters counters = 483442783 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/counters"]; + ywrapper.StringValue description = 49943526 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/description"]; + ywrapper.BoolValue enabled = 468513843 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/enabled"]; + ywrapper.UintValue ifindex = 511987815 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/ifindex"]; + ywrapper.UintValue index = 80745756 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/index"]; + ywrapper.UintValue last_change = 29904521 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/last-change"]; + ywrapper.BoolValue logical = 294124401 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/logical"]; + ywrapper.StringValue name = 279346681 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/name"]; + OperStatus oper_status = 401969247 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state/oper-status"]; + } + Config config = 175001476 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/config"]; + State state = 501974173 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/state"]; + } + message SubinterfaceKey { + uint64 index = 1 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface/index"]; + Subinterface subinterface = 2; + } + repeated SubinterfaceKey subinterface = 464802819 [(yext.schemapath) = "/interfaces/interface/subinterfaces/subinterface"]; + } + Config config = 334174827 [(yext.schemapath) = "/interfaces/interface/config"]; + HoldTime hold_time = 175931092 [(yext.schemapath) = "/interfaces/interface/hold-time"]; + State state = 387556140 [(yext.schemapath) = "/interfaces/interface/state"]; + Subinterfaces subinterfaces = 327798165 [(yext.schemapath) = "/interfaces/interface/subinterfaces"]; + } + message InterfaceKey { + string name = 1 [(yext.schemapath) = "/interfaces/interface/name"]; + Interface interface = 2; + } + repeated InterfaceKey interface = 422482938 [(yext.schemapath) = "/interfaces/interface"]; +} diff --git a/cmd/gnmi-target/target.go b/cmd/gnmi-target/target.go new file mode 100644 index 0000000000000000000000000000000000000000..4239ea9faaa0bb556e3f122cba9441b0e9b352e5 --- /dev/null +++ b/cmd/gnmi-target/target.go @@ -0,0 +1,112 @@ +package main + +import ( + "code.fbi.h-da.de/cocsn/gosdn/forks/google/gnmi" + "code.fbi.h-da.de/cocsn/gosdn/forks/google/gnmi/modeldata" + oc "code.fbi.h-da.de/cocsn/yang-models/generated/arista" + "context" + "flag" + "fmt" + "github.com/google/gnxi/utils/credentials" + pb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/ygot/ygot" + log "github.com/sirupsen/logrus" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/reflection" + "google.golang.org/grpc/status" + "net" + "os" + "reflect" +) + +var ( + bindAddr = flag.String("bind_address", ":9339", "Bind to address:port or just :port") +) + +type server struct { + *gnmi.Server +} + +func callback(newConfig ygot.ValidatedGoStruct) error { + // Apply the config to your device and return nil if success. return error if fails. + // + // Do something ... + return nil +} + +func newServer(model *gnmi.Model, config []byte) (*server, error) { + s, err := gnmi.NewServer(model, config, callback) + if err != nil { + return nil, err + } + return &server{Server: s}, nil +} + +// Get overrides the Get func of gnmi.Target to provide user auth. +func (s *server) Get(ctx context.Context, req *pb.GetRequest) (*pb.GetResponse, error) { + msg, ok := credentials.AuthorizeUser(ctx) + if !ok { + log.Infof("denied a Get request: %v", msg) + return nil, status.Error(codes.PermissionDenied, msg) + } + log.Infof("allowed a Get request: %v", msg) + return s.Server.Get(ctx, req) +} + +// Set overrides the Set func of gnmi.Target to provide user auth. +/* +func (s *server) Set(ctx context.Context, req *pb.SetRequest) (*pb.SetResponse, error) { + msg, ok := credentials.AuthorizeUser(ctx) + if !ok { + log.Infof("denied a Set request: %v", msg) + return nil, status.Error(codes.PermissionDenied, msg) + } + log.Infof("allowed a Set request: %v", msg) + return s.Server.Set(ctx, req) +} +*/ + +func main() { + + // Google stuff from here + model := gnmi.NewModel(modeldata.ModelData, + reflect.TypeOf((*oc.Device)(nil)), + oc.SchemaTree["Device"], + oc.Unmarshal, + oc.ΛEnum) + + flag.Usage = func() { + fmt.Fprintf(os.Stderr, "Supported models:\n") + for _, m := range model.SupportedModels() { + fmt.Fprintf(os.Stderr, " %s\n", m) + } + fmt.Fprintf(os.Stderr, "\n") + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + flag.PrintDefaults() + } + + flag.Set("logtostderr", "true") + flag.Parse() + + g := grpc.NewServer() + + var configData []byte + s, err := newServer(model, configData) + if err != nil { + log.Fatalf("error in creating gnmi target: %v", err) + } + pb.RegisterGNMIServer(g, s) + reflection.Register(g) + + log.Infof("starting to listen on %s", *bindAddr) + listen, err := net.Listen("tcp", *bindAddr) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + + log.Info("starting to serve") + if err := g.Serve(listen); err != nil { + log.Fatalf("failed to serve: %v", err) + } +} diff --git a/cmd/gnmi-telemetry/telemetry.go b/cmd/gnmi-telemetry/telemetry.go new file mode 100644 index 0000000000000000000000000000000000000000..98650bd09d0fda8e12855b17387e2c346f392e43 --- /dev/null +++ b/cmd/gnmi-telemetry/telemetry.go @@ -0,0 +1,72 @@ +package main + +import ( + "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/cocsn/gosdn/nucleus" + "context" + "fmt" + "github.com/google/uuid" + gpb "github.com/openconfig/gnmi/proto/gnmi" + log "github.com/sirupsen/logrus" + "os" + "os/signal" + "syscall" + "time" +) + +func main() { + log.SetLevel(log.DebugLevel) + sbi := &nucleus.AristaOC{} + + device := nucleus.Device{ + GoStruct: sbi.Schema().Root, + SBI: sbi, + Config: nucleus.DeviceConfig{ + Uuid: uuid.New(), + }, + } + pnd := nucleus.NewPND("openconfig", "a simple openconfig PND", sbi) + if err := pnd.AddDevice(&device); err != nil { + log.Fatal(err) + } + + transport := &nucleus.Gnmi{ + SetNode: sbi.SetNode(), + RespChan: make(chan *gpb.SubscribeResponse), + } + cfg := &gnmi.Config{ + Addr: "portainer.danet.fbi.h-da.de:6030", + Username: "admin", + Password: "arista", + Encoding: gpb.Encoding_JSON_IETF, + } + transport.SetConfig(cfg) + + device.Transport = transport + + paths := []string{"/interfaces/interface/name"} + + opts := &gnmi.SubscribeOptions{ + UpdatesOnly: false, + Prefix: "", + Mode: "stream", + StreamMode: "sample", + SampleInterval: uint64(10 * time.Second.Nanoseconds()), + SuppressRedundant: false, + HeartbeatInterval: uint64(time.Second.Nanoseconds()), + Paths: gnmi.SplitPaths(paths), + Origin: "", + Target: device.Config.Address, + } + done := make(chan os.Signal, 1) + signal.Notify(done, syscall.SIGILL, syscall.SIGTERM) + ctx := context.WithValue(context.Background(), "opts", opts) + go func() { + if err := transport.Subscribe(ctx); err != nil { + log.Fatal(err) + } + }() + fmt.Println("awaiting signal") + <-done + fmt.Println("exiting") +} diff --git a/cmd/gnmi/gnmi.go b/cmd/gnmi/gnmi.go new file mode 100644 index 0000000000000000000000000000000000000000..29136c2493a64379c0c7df291a6a433eaa49a600 --- /dev/null +++ b/cmd/gnmi/gnmi.go @@ -0,0 +1,56 @@ +package main + +import ( + "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/cocsn/gosdn/nucleus" + "github.com/google/uuid" + gpb "github.com/openconfig/gnmi/proto/gnmi" + log "github.com/sirupsen/logrus" +) + +/* + Simple gnmi request program. Use with cauton and leaf paths only. + Bootstrapping of pnd, device and transport simplified not idiomatic +*/ + +func main() { + log.SetLevel(log.DebugLevel) + sbi := &nucleus.AristaOC{} + device := &nucleus.Device{ + GoStruct: sbi.Schema().Root, + SBI: sbi, + Config: nucleus.DeviceConfig{ + Uuid: uuid.New(), + }, + } + pnd := nucleus.NewPND("openconfig", "test description", sbi) + if err := pnd.AddDevice(device); err != nil { + log.Fatal(err) + } + + transport := &nucleus.Gnmi{SetNode: sbi.SetNode()} + cfg := &gnmi.Config{ + Addr: "portainer.danet.fbi.h-da.de:6030", + Username: "admin", + Password: "arista", + Encoding: gpb.Encoding_JSON_IETF, + } + transport.SetConfig(cfg) + + device.Transport = transport + + p := []string{"/interfaces/interface[name=*]/state/name"} + errors := 0 + for _, path := range p { + err := pnd.RequestAll(path) + if err != nil { + log.Debug(err) + errors++ + break + } + } + + percentage := float64(errors) / float64(len(p)) * 100.0 + log.Debugf("%v errors", errors) + log.Debugf("%v percent failed", percentage) +} diff --git a/cmd/gosdn-cli/main.go b/cmd/gosdn-cli/main.go index 96d31c4acca436a538a715318dc85d683eb85222..5ed64517e9f1d2f7d63ad9e98d70774e58043abf 100644 --- a/cmd/gosdn-cli/main.go +++ b/cmd/gosdn-cli/main.go @@ -141,7 +141,7 @@ func goSDNTestDB(conn *grpc.ClientConn) { } // TAPIGetEdge triggers the GetEdge function of the Ciena -// flavoured TAPI client +// flavoured TAPI ciena func TAPIGetEdge(conn *grpc.ClientConn) { c := pb.NewGrpcCliClient(conn) @@ -161,7 +161,7 @@ func TAPIGetEdge(conn *grpc.ClientConn) { } // TAPIGetEdgeNode triggers the GetEdgeNode function of the Ciena -// flavoured TAPI client +// flavoured TAPI ciena func TAPIGetEdgeNode(conn *grpc.ClientConn) { c := pb.NewGrpcCliClient(conn) @@ -180,7 +180,7 @@ func TAPIGetEdgeNode(conn *grpc.ClientConn) { } // TAPIGetLink triggers the GetLink function of the Ciena -// flavoured TAPI client +// flavoured TAPI ciena func TAPIGetLink(conn *grpc.ClientConn) { c := pb.NewGrpcCliClient(conn) diff --git a/cmd/gosdn-tview/grpc/commands.go b/cmd/gosdn-tview/grpc/commands.go index 10ba4652b2016af91c839b42f0ef07d7a2b4acbe..b1d4bc6da052cdd8dadc9dc4b84eea825550652d 100644 --- a/cmd/gosdn-tview/grpc/commands.go +++ b/cmd/gosdn-tview/grpc/commands.go @@ -169,7 +169,7 @@ func goSDNTestDB(conn *grpc.ClientConn) string { } // TAPIGetEdge triggers the GetEdge function of the Ciena -// flavoured TAPI client +// flavoured TAPI ciena func TAPIGetEdge(conn *grpc.ClientConn) string { c := pb.NewGrpcCliClient(conn) @@ -186,7 +186,7 @@ func TAPIGetEdge(conn *grpc.ClientConn) string { } // TAPIGetEdgeNode triggers the GetEdgeNode function of the Ciena -// flavoured TAPI client +// flavoured TAPI ciena func TAPIGetEdgeNode(conn *grpc.ClientConn) string { c := pb.NewGrpcCliClient(conn) @@ -202,7 +202,7 @@ func TAPIGetEdgeNode(conn *grpc.ClientConn) string { } // TAPIGetLink triggers the GetLink function of the Ciena -// flavoured TAPI client +// flavoured TAPI ciena func TAPIGetLink(conn *grpc.ClientConn) string { c := pb.NewGrpcCliClient(conn) diff --git a/cmd/gosdn/main.go b/cmd/gosdn/main.go index 7555cd65a66a644d0bdafef8e15a01257b239814..2ba0f61f0edc703b9306dbcc3e733b9900e8912a 100644 --- a/cmd/gosdn/main.go +++ b/cmd/gosdn/main.go @@ -2,27 +2,15 @@ package main import ( "code.fbi.h-da.de/cocsn/gosdn/nucleus" - "flag" log "github.com/sirupsen/logrus" ) func main() { - - // register our supported flags - cliListenAddr := flag.String("cli-listen-addr", "", "The IP address of the grpcCLI.") - cliListenPort := flag.String("cli-server-port", "55055", "The port number of the grpcCLI") - configFileName := flag.String("config-file", "", "Path to the config file") - - flag.Parse() - cliSocket := *cliListenAddr + ":" + *cliListenPort - log.SetLevel(log.DebugLevel) // Setup a channel to communicate if goSDN should shutdown. IsRunningChannel := make(chan bool) // hand off to cmd for further processing - nucleus.StartAndRun(cliSocket, *configFileName, IsRunningChannel) - - // nothing to see here, please move on! + nucleus.StartAndRun(IsRunningChannel) } diff --git a/cmd/path-traversal/path_traversal.go b/cmd/path-traversal/path_traversal.go new file mode 100644 index 0000000000000000000000000000000000000000..353c2b8e1c9fcb2538818651e40e6759af2e22a3 --- /dev/null +++ b/cmd/path-traversal/path_traversal.go @@ -0,0 +1,21 @@ +package main + +import ( + "code.fbi.h-da.de/cocsn/gosdn/nucleus/util" + "code.fbi.h-da.de/cocsn/yang-models/generated/arista" + log "github.com/sirupsen/logrus" +) + +func main() { + log.SetLevel(log.DebugLevel) + schema, _ := arista.Schema() + paths := util.NewPaths() + paths.ParseSchema(schema, "device") + + for _, v := range paths { + v.Print() + } + + p := paths.StringBuilder() + log.Debug(p) +} diff --git a/configs/gosdn.toml b/configs/gosdn.toml index b0ba9553705d34d970728f39669bb770e252487b..229a018b6f844719e7fbb98a3ff18f4f672b6d0d 100644 --- a/configs/gosdn.toml +++ b/configs/gosdn.toml @@ -1,6 +1,5 @@ CliSocket = "localhost:55055" -DatabaseSocket = "bolt://172.17.0.4:7687" -DatabaseUser = "" -DatabasePassword = "" -DatabaseCrypto = false -ConfigPath = "./configs/gosdn.toml" +db.socket = "bolt://172.17.0.4:7687" +db.user = "" +db.password = "" +db.crypto = false diff --git a/database/client.go b/database/client.go index 5910b12c7a8b60c54e6089305b348312adfff59e..ecd24e25c13eb8af4d0522f4bfe00958041cabb3 100644 --- a/database/client.go +++ b/database/client.go @@ -4,6 +4,7 @@ import ( "errors" "github.com/neo4j/neo4j-go-driver/neo4j" log "github.com/sirupsen/logrus" + "github.com/spf13/viper" ) //Database is a database @@ -18,8 +19,12 @@ type PND struct { interfaces []string } -//NewDatabaseClient creates a database client -func NewDatabaseClient(uri, username, password string, encrypted bool) Database { +//NewDatabaseClient creates a database ciena +func NewDatabaseClient() Database { + uri := viper.GetString("db.socket") + username := viper.GetString("db.user") + password := viper.GetString("db.password") + encrypted := viper.GetBool("db.crypto") driver := createDriver(uri, username, password, encrypted) return Database{ diff --git a/forks/goarista/gnmi/arbitration.go b/forks/goarista/gnmi/arbitration.go new file mode 100644 index 0000000000000000000000000000000000000000..78225d70240584b7e4e8b048bd833753b39ebc5e --- /dev/null +++ b/forks/goarista/gnmi/arbitration.go @@ -0,0 +1,58 @@ +// Copyright (c) 2019 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "fmt" + "strconv" + "strings" + + "github.com/openconfig/gnmi/proto/gnmi_ext" +) + +// ArbitrationExt takes a string representation of a master arbitration value +// (e.g. "23", "role:42") and return a *gnmi_ext.Extension. +func ArbitrationExt(s string) (*gnmi_ext.Extension, error) { + if s == "" { + return nil, nil + } + roleID, electionID, err := parseArbitrationString(s) + if err != nil { + return nil, err + } + arb := &gnmi_ext.MasterArbitration{ + Role: &gnmi_ext.Role{Id: roleID}, + ElectionId: &gnmi_ext.Uint128{High: 0, Low: electionID}, + } + ext := gnmi_ext.Extension_MasterArbitration{MasterArbitration: arb} + return &gnmi_ext.Extension{Ext: &ext}, nil +} + +// parseArbitrationString parses the supplied string and returns the role and election id +// values. Input is of the form [<role>:]<election_id>, where election_id is a uint64. +// +// Examples: +// "1" +// "admin:42" +func parseArbitrationString(s string) (string, uint64, error) { + tokens := strings.Split(s, ":") + switch len(tokens) { + case 1: // just election id + id, err := parseElectionID(tokens[0]) + return "", id, err + case 2: // role and election id + id, err := parseElectionID(tokens[1]) + return tokens[0], id, err + } + return "", 0, fmt.Errorf("badly formed arbitration id (%s)", s) +} + +func parseElectionID(s string) (uint64, error) { + id, err := strconv.ParseUint(s, 0, 64) + if err != nil { + return 0, fmt.Errorf("badly formed arbitration id (%s)", s) + } + return id, nil +} diff --git a/forks/goarista/gnmi/arbitration_test.go b/forks/goarista/gnmi/arbitration_test.go new file mode 100644 index 0000000000000000000000000000000000000000..cdcc37c35b8c332f3ae4279b66ddf7b46e8b8798 --- /dev/null +++ b/forks/goarista/gnmi/arbitration_test.go @@ -0,0 +1,73 @@ +// Copyright (c) 2019 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "fmt" + "testing" + + "github.com/aristanetworks/goarista/test" + + "github.com/openconfig/gnmi/proto/gnmi_ext" +) + +func arbitration(role string, id *gnmi_ext.Uint128) *gnmi_ext.Extension { + arb := &gnmi_ext.MasterArbitration{ + Role: &gnmi_ext.Role{Id: role}, + ElectionId: id, + } + ext := gnmi_ext.Extension_MasterArbitration{MasterArbitration: arb} + return &gnmi_ext.Extension{Ext: &ext} +} + +func electionID(high, low uint64) *gnmi_ext.Uint128 { + return &gnmi_ext.Uint128{High: high, Low: low} +} + +func TestArbitrationExt(t *testing.T) { + testCases := map[string]struct { + s string + ext *gnmi_ext.Extension + err error + }{ + "empty": {}, + "no_role": { + s: "1", + ext: arbitration("", electionID(0, 1)), + }, + "with_role": { + s: "admin:1", + ext: arbitration("admin", electionID(0, 1)), + }, + "large_no_role": { + s: "9223372036854775807", + ext: arbitration("", electionID(0, 9223372036854775807)), + }, + "large_with_role": { + s: "admin:18446744073709551615", + ext: arbitration("admin", electionID(0, 18446744073709551615)), + }, + "invalid": { + s: "cat", + err: fmt.Errorf("badly formed arbitration id (%s)", "cat"), + }, + "invalid_too_many_colons": { + s: "dog:1:2", + err: fmt.Errorf("badly formed arbitration id (%s)", "dog:1:2"), + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + ext, err := ArbitrationExt(tc.s) + if !test.DeepEqual(tc.ext, ext) { + t.Errorf("Expected %#v, got %#v", tc.ext, ext) + } + if !test.DeepEqual(tc.err, err) { + t.Errorf("Expected %v, got %v", tc.err, err) + } + }) + } +} diff --git a/forks/goarista/gnmi/client.go b/forks/goarista/gnmi/client.go new file mode 100644 index 0000000000000000000000000000000000000000..bfb404ada10a59f474c993e184a1ade785ef63bf --- /dev/null +++ b/forks/goarista/gnmi/client.go @@ -0,0 +1,338 @@ +// Copyright (c) 2017 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "context" + "crypto/tls" + "crypto/x509" + "errors" + "flag" + "fmt" + "math" + "net" + "os" + + "io/ioutil" + "strings" + + "github.com/golang/protobuf/proto" + pb "github.com/openconfig/gnmi/proto/gnmi" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/encoding/gzip" + "google.golang.org/grpc/metadata" +) + +const ( + defaultPort = "6030" + // HostnameArg is the value to be replaced by the actual hostname + HostnameArg = "HOSTNAME" +) + +// PublishFunc is the method to publish responses +type PublishFunc func(addr string, message proto.Message) + +// ParseHostnames parses a comma-separated list of names and replaces HOSTNAME with the current +// hostname in it +func ParseHostnames(list string) ([]string, error) { + items := strings.Split(list, ",") + hostname, err := os.Hostname() + if err != nil { + return nil, err + } + names := make([]string, len(items)) + for i, name := range items { + if name == HostnameArg { + name = hostname + } + names[i] = name + } + return names, nil +} + +// Config is the gnmi.Client config +type Config struct { + Addr string + CAFile string + CertFile string + KeyFile string + Password string + Username string + TLS bool + Compression string + DialOptions []grpc.DialOption + Token string + Encoding pb.Encoding +} + +// SubscribeOptions is the gNMI subscription request options +type SubscribeOptions struct { + UpdatesOnly bool + Prefix string + Mode string + StreamMode string + SampleInterval uint64 + SuppressRedundant bool + HeartbeatInterval uint64 + Paths [][]string + Origin string + Target string +} + +// ParseFlags reads arguments from stdin and returns a populated Config object and a list of +// paths to subscribe to +func ParseFlags() (*Config, []string) { + // flags + var ( + addrsFlag = flag.String("addrs", "localhost:6030", + "Comma-separated list of addresses of OpenConfig gRPC servers. The address 'HOSTNAME' "+ + "is replaced by the current hostname.") + + caFileFlag = flag.String("cafile", "", + "Path to server TLS certificate file") + + certFileFlag = flag.String("certfile", "", + "Path to ciena TLS certificate file") + + keyFileFlag = flag.String("keyfile", "", + "Path to ciena TLS private key file") + + passwordFlag = flag.String("password", "", + "Password to authenticate with") + + usernameFlag = flag.String("username", "", + "Username to authenticate with") + + tlsFlag = flag.Bool("tls", false, + "Enable TLS") + + compressionFlag = flag.String("compression", "", + "Type of compression to use") + + subscribeFlag = flag.String("subscribe", "", + "Comma-separated list of paths to subscribe to upon connecting to the server") + + token = flag.String("token", "", + "Authentication token") + ) + flag.Parse() + cfg := &Config{ + Addr: *addrsFlag, + CAFile: *caFileFlag, + CertFile: *certFileFlag, + KeyFile: *keyFileFlag, + Password: *passwordFlag, + Username: *usernameFlag, + TLS: *tlsFlag, + Compression: *compressionFlag, + Token: *token, + } + subscriptions := strings.Split(*subscribeFlag, ",") + return cfg, subscriptions + +} + +// accessTokenCred implements credentials.PerRPCCredentials, the gRPC +// interface for credentials that need to attach security information +// to every RPC. +type accessTokenCred struct { + bearerToken string +} + +// newAccessTokenCredential constructs a new per-RPC credential from a token. +func newAccessTokenCredential(token string) credentials.PerRPCCredentials { + bearerFmt := "Bearer %s" + return &accessTokenCred{bearerToken: fmt.Sprintf(bearerFmt, token)} +} + +func (a *accessTokenCred) GetRequestMetadata(ctx context.Context, + uri ...string) (map[string]string, error) { + authHeader := "Authorization" + return map[string]string{ + authHeader: a.bearerToken, + }, nil +} + +func (a *accessTokenCred) RequireTransportSecurity() bool { return true } + +// DialContext connects to a gnmi service and returns a ciena +func DialContext(ctx context.Context, cfg *Config) (pb.GNMIClient, error) { + opts := append([]grpc.DialOption(nil), cfg.DialOptions...) + + switch cfg.Compression { + case "": + case "gzip": + opts = append(opts, grpc.WithDefaultCallOptions(grpc.UseCompressor(gzip.Name))) + default: + return nil, fmt.Errorf("unsupported compression option: %q", cfg.Compression) + } + + if cfg.TLS || cfg.CAFile != "" || cfg.CertFile != "" || cfg.Token != "" { + tlsConfig := &tls.Config{} + if cfg.CAFile != "" { + b, err := ioutil.ReadFile(cfg.CAFile) + if err != nil { + return nil, err + } + cp := x509.NewCertPool() + if !cp.AppendCertsFromPEM(b) { + return nil, fmt.Errorf("credentials: failed to append certificates") + } + tlsConfig.RootCAs = cp + } else { + tlsConfig.InsecureSkipVerify = true + } + if cfg.CertFile != "" { + if cfg.KeyFile == "" { + return nil, fmt.Errorf("please provide both -certfile and -keyfile") + } + cert, err := tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile) + if err != nil { + return nil, err + } + tlsConfig.Certificates = []tls.Certificate{cert} + } + if cfg.Token != "" { + opts = append(opts, + grpc.WithPerRPCCredentials(newAccessTokenCredential(cfg.Token))) + } + opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig))) + } else { + opts = append(opts, grpc.WithInsecure()) + } + + dial := func(ctx context.Context, addrIn string) (conn net.Conn, err error) { + var network, addr string + + split := strings.Split(addrIn, "://") + if l := len(split); l == 2 { + network = split[0] + addr = split[1] + } else { + network = "tcp" + addr = split[0] + } + + conn, err = (&net.Dialer{}).DialContext(ctx, network, addr) + return + } + + opts = append(opts, + grpc.WithContextDialer(dial), + + // Allows received protobuf messages to be larger than 4MB + grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32)), + ) + + grpcconn, err := grpc.DialContext(ctx, cfg.Addr, opts...) + if err != nil { + return nil, fmt.Errorf("failed to dial: %s", err) + } + + return pb.NewGNMIClient(grpcconn), nil +} + +// Dial connects to a gnmi service and returns a ciena +func Dial(cfg *Config) (pb.GNMIClient, error) { + return DialContext(context.Background(), cfg) +} + +// NewContext returns a new context with username and password +// metadata if they are set in cfg. +func NewContext(ctx context.Context, cfg *Config) context.Context { + if cfg.Username != "" { + ctx = metadata.NewOutgoingContext(ctx, metadata.Pairs( + "username", cfg.Username, + "password", cfg.Password)) + } + return ctx +} + +// NewGetRequest returns a GetRequest for the given paths +func NewGetRequest(ctx context.Context, paths [][]string, origin string) (*pb.GetRequest, error) { + val := ctx.Value("config") + cfg, ok := val.(*Config) + if !ok { + return nil, errors.New("invalid type assertion") + } + req := &pb.GetRequest{ + Path: make([]*pb.Path, len(paths)), + Encoding: cfg.Encoding, + } + for i, p := range paths { + gnmiPath, err := ParseGNMIElements(p) + if err != nil { + return nil, err + } + req.Path[i] = gnmiPath + req.Path[i].Origin = origin + } + return req, nil +} + +// NewSubscribeRequest returns a SubscribeRequest for the given paths +func NewSubscribeRequest(subscribeOptions *SubscribeOptions) (*pb.SubscribeRequest, error) { + var mode pb.SubscriptionList_Mode + switch subscribeOptions.Mode { + case "once": + mode = pb.SubscriptionList_ONCE + case "poll": + mode = pb.SubscriptionList_POLL + case "": + fallthrough + case "stream": + mode = pb.SubscriptionList_STREAM + default: + return nil, fmt.Errorf("subscribe mode (%s) invalid", subscribeOptions.Mode) + } + + var streamMode pb.SubscriptionMode + switch subscribeOptions.StreamMode { + case "on_change": + streamMode = pb.SubscriptionMode_ON_CHANGE + case "sample": + streamMode = pb.SubscriptionMode_SAMPLE + case "": + fallthrough + case "target_defined": + streamMode = pb.SubscriptionMode_TARGET_DEFINED + default: + return nil, fmt.Errorf("subscribe stream mode (%s) invalid", subscribeOptions.StreamMode) + } + + prefixPath, err := ParseGNMIElements(SplitPath(subscribeOptions.Prefix)) + if err != nil { + return nil, err + } + subList := &pb.SubscriptionList{ + Subscription: make([]*pb.Subscription, len(subscribeOptions.Paths)), + Mode: mode, + UpdatesOnly: subscribeOptions.UpdatesOnly, + Prefix: prefixPath, + } + if subscribeOptions.Target != "" { + if subList.Prefix == nil { + subList.Prefix = &pb.Path{} + } + subList.Prefix.Target = subscribeOptions.Target + } + for i, p := range subscribeOptions.Paths { + gnmiPath, err := ParseGNMIElements(p) + if err != nil { + return nil, err + } + gnmiPath.Origin = subscribeOptions.Origin + subList.Subscription[i] = &pb.Subscription{ + Path: gnmiPath, + Mode: streamMode, + SampleInterval: subscribeOptions.SampleInterval, + SuppressRedundant: subscribeOptions.SuppressRedundant, + HeartbeatInterval: subscribeOptions.HeartbeatInterval, + } + } + return &pb.SubscribeRequest{Request: &pb.SubscribeRequest_Subscribe{ + Subscribe: subList}}, nil +} diff --git a/forks/goarista/gnmi/json.go b/forks/goarista/gnmi/json.go new file mode 100644 index 0000000000000000000000000000000000000000..30aacd3df8239f39dd1af90a4fca9582cff6de1c --- /dev/null +++ b/forks/goarista/gnmi/json.go @@ -0,0 +1,35 @@ +// Copyright (c) 2017 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "github.com/openconfig/gnmi/proto/gnmi" +) + +// NotificationToMap converts a Notification into a map[string]interface{} +func NotificationToMap(notif *gnmi.Notification) (map[string]interface{}, error) { + m := make(map[string]interface{}, 1) + m["timestamp"] = notif.Timestamp + m["path"] = StrPath(notif.Prefix) + if len(notif.Update) != 0 { + updates := make(map[string]interface{}, len(notif.Update)) + var err error + for _, update := range notif.Update { + updates[StrPath(update.Path)] = StrUpdateVal(update) + if err != nil { + return nil, err + } + } + m["updates"] = updates + } + if len(notif.Delete) != 0 { + deletes := make([]string, len(notif.Delete)) + for i, del := range notif.Delete { + deletes[i] = StrPath(del) + } + m["deletes"] = deletes + } + return m, nil +} diff --git a/forks/goarista/gnmi/operation.go b/forks/goarista/gnmi/operation.go new file mode 100644 index 0000000000000000000000000000000000000000..15ab81fcafee0d693a58bcc265244df7d75de164 --- /dev/null +++ b/forks/goarista/gnmi/operation.go @@ -0,0 +1,541 @@ +// Copyright (c) 2017 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "bufio" + "bytes" + "context" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "math" + "os" + "path" + "strconv" + "strings" + "time" + + pb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/gnmi/proto/gnmi_ext" + "google.golang.org/grpc/codes" +) + +// GetWithRequest takes a fully formed GetRequest, performs the Get, +// and displays any response. +func GetWithRequest(ctx context.Context, client pb.GNMIClient, + req *pb.GetRequest) error { + resp, err := client.Get(ctx, req) + if err != nil { + return err + } + for _, notif := range resp.Notification { + prefix := StrPath(notif.Prefix) + for _, update := range notif.Update { + fmt.Printf("%s:\n", path.Join(prefix, StrPath(update.Path))) + fmt.Println(StrUpdateVal(update)) + } + } + return nil +} + +// Get sends a GetRequest to the given server. +func Get(ctx context.Context, client pb.GNMIClient, paths [][]string, + origin string) error { + req, err := NewGetRequest(ctx, paths, origin) + if err != nil { + return err + } + return GetWithRequest(ctx, client, req) +} + +// Capabilities retuns the capabilities of the ciena. +func Capabilities(ctx context.Context, client pb.GNMIClient) error { + resp, err := client.Capabilities(ctx, &pb.CapabilityRequest{}) + if err != nil { + return err + } + fmt.Printf("Version: %s\n", resp.GNMIVersion) + for _, mod := range resp.SupportedModels { + fmt.Printf("SupportedModel: %s\n", mod) + } + for _, enc := range resp.SupportedEncodings { + fmt.Printf("SupportedEncoding: %s\n", enc) + } + return nil +} + +// val may be a path to a file or it may be json. First see if it is a +// file, if so return its contents, otherwise return val +func extractJSON(val string) []byte { + if jsonBytes, err := ioutil.ReadFile(val); err == nil { + return jsonBytes + } + // Best effort check if the value might a string literal, in which + // case wrap it in quotes. This is to allow a user to do: + // gnmi update ../hostname host1234 + // gnmi update ../description 'This is a description' + // instead of forcing them to quote the string: + // gnmi update ../hostname '"host1234"' + // gnmi update ../description '"This is a description"' + maybeUnquotedStringLiteral := func(s string) bool { + if s == "true" || s == "false" || s == "null" || // JSON reserved words + strings.ContainsAny(s, `"'{}[]`) { // Already quoted or is a JSON object or array + return false + } else if _, err := strconv.ParseInt(s, 0, 32); err == nil { + // Integer. Using byte size of 32 because larger integer + // types are supposed to be sent as strings in JSON. + return false + } else if _, err := strconv.ParseFloat(s, 64); err == nil { + // Float + return false + } + + return true + } + if maybeUnquotedStringLiteral(val) { + out := make([]byte, len(val)+2) + out[0] = '"' + copy(out[1:], val) + out[len(out)-1] = '"' + return out + } + return []byte(val) +} + +// StrUpdateVal will return a string representing the value within the supplied update +func StrUpdateVal(u *pb.Update) string { + if u.Value != nil { + // Backwards compatibility with pre-v0.4 gnmi + switch u.Value.Type { + case pb.Encoding_JSON, pb.Encoding_JSON_IETF: + return strJSON(u.Value.Value) + case pb.Encoding_BYTES, pb.Encoding_PROTO: + return base64.StdEncoding.EncodeToString(u.Value.Value) + case pb.Encoding_ASCII: + return string(u.Value.Value) + default: + return string(u.Value.Value) + } + } + return StrVal(u.Val) +} + +// StrVal will return a string representing the supplied value +func StrVal(val *pb.TypedValue) string { + switch v := val.GetValue().(type) { + case *pb.TypedValue_StringVal: + return v.StringVal + case *pb.TypedValue_JsonIetfVal: + return strJSON(v.JsonIetfVal) + case *pb.TypedValue_JsonVal: + return strJSON(v.JsonVal) + case *pb.TypedValue_IntVal: + return strconv.FormatInt(v.IntVal, 10) + case *pb.TypedValue_UintVal: + return strconv.FormatUint(v.UintVal, 10) + case *pb.TypedValue_BoolVal: + return strconv.FormatBool(v.BoolVal) + case *pb.TypedValue_BytesVal: + return base64.StdEncoding.EncodeToString(v.BytesVal) + case *pb.TypedValue_DecimalVal: + return strDecimal64(v.DecimalVal) + case *pb.TypedValue_FloatVal: + return strconv.FormatFloat(float64(v.FloatVal), 'g', -1, 32) + case *pb.TypedValue_LeaflistVal: + return strLeaflist(v.LeaflistVal) + case *pb.TypedValue_AsciiVal: + return v.AsciiVal + case *pb.TypedValue_AnyVal: + return v.AnyVal.String() + case *pb.TypedValue_ProtoBytes: + return base64.StdEncoding.EncodeToString(v.ProtoBytes) + default: + panic(v) + } +} + +func strJSON(inJSON []byte) string { + var ( + out bytes.Buffer + err error + ) + // Check for ',' as simple heuristic on whether to expand JSON + // onto multiple lines, or compact it to a single line. + if bytes.Contains(inJSON, []byte{','}) { + err = json.Indent(&out, inJSON, "", " ") + } else { + err = json.Compact(&out, inJSON) + } + if err != nil { + return fmt.Sprintf("(error unmarshalling json: %s)\n", err) + string(inJSON) + } + return out.String() +} + +func strDecimal64(d *pb.Decimal64) string { + var i, frac int64 + if d.Precision > 0 { + div := int64(10) + it := d.Precision - 1 + for it > 0 { + div *= 10 + it-- + } + i = d.Digits / div + frac = d.Digits % div + } else { + i = d.Digits + } + if frac < 0 { + frac = -frac + } + return fmt.Sprintf("%d.%d", i, frac) +} + +// strLeafList builds a human-readable form of a leaf-list. e.g. [1, 2, 3] or [a, b, c] +func strLeaflist(v *pb.ScalarArray) string { + var b strings.Builder + b.WriteByte('[') + + for i, elm := range v.Element { + b.WriteString(StrVal(elm)) + if i < len(v.Element)-1 { + b.WriteString(", ") + } + } + + b.WriteByte(']') + return b.String() +} + +// TypedValue marshals an interface into a gNMI TypedValue value +func TypedValue(val interface{}) *pb.TypedValue { + // TODO: handle more types: + // float64 + // maps + // key.Key + // key.Map + // ... etc + switch v := val.(type) { + case string: + return &pb.TypedValue{Value: &pb.TypedValue_StringVal{StringVal: v}} + case int: + return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} + case int8: + return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} + case int16: + return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} + case int32: + return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: int64(v)}} + case int64: + return &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: v}} + case uint: + return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} + case uint8: + return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} + case uint16: + return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} + case uint32: + return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: uint64(v)}} + case uint64: + return &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: v}} + case bool: + return &pb.TypedValue{Value: &pb.TypedValue_BoolVal{BoolVal: v}} + case float32: + return &pb.TypedValue{Value: &pb.TypedValue_FloatVal{FloatVal: v}} + case []interface{}: + gnmiElems := make([]*pb.TypedValue, len(v)) + for i, elem := range v { + gnmiElems[i] = TypedValue(elem) + } + return &pb.TypedValue{ + Value: &pb.TypedValue_LeaflistVal{ + LeaflistVal: &pb.ScalarArray{ + Element: gnmiElems, + }}} + default: + panic(fmt.Sprintf("unexpected type %T for value %v", val, val)) + } +} + +// ExtractValue pulls a value out of a gNMI Update, parsing JSON if present. +// Possible return types: +// string +// int64 +// uint64 +// bool +// []byte +// float32 +// *gnmi.Decimal64 +// json.Number +// *any.Any +// []interface{} +// map[string]interface{} +func ExtractValue(update *pb.Update) (interface{}, error) { + var i interface{} + var err error + if update == nil { + return nil, fmt.Errorf("empty update") + } + if update.Val != nil { + i, err = extractValueV04(update.Val) + } else if update.Value != nil { + i, err = extractValueV03(update.Value) + } + return i, err +} + +func extractValueV04(val *pb.TypedValue) (interface{}, error) { + switch v := val.Value.(type) { + case *pb.TypedValue_StringVal: + return v.StringVal, nil + case *pb.TypedValue_IntVal: + return v.IntVal, nil + case *pb.TypedValue_UintVal: + return v.UintVal, nil + case *pb.TypedValue_BoolVal: + return v.BoolVal, nil + case *pb.TypedValue_BytesVal: + return v.BytesVal, nil + case *pb.TypedValue_FloatVal: + return v.FloatVal, nil + case *pb.TypedValue_DecimalVal: + return v.DecimalVal, nil + case *pb.TypedValue_LeaflistVal: + elementList := v.LeaflistVal.Element + l := make([]interface{}, len(elementList)) + for i, element := range elementList { + el, err := extractValueV04(element) + if err != nil { + return nil, err + } + l[i] = el + } + return l, nil + case *pb.TypedValue_AnyVal: + return v.AnyVal, nil + case *pb.TypedValue_JsonVal: + return decode(v.JsonVal) + case *pb.TypedValue_JsonIetfVal: + return decode(v.JsonIetfVal) + case *pb.TypedValue_AsciiVal: + return v.AsciiVal, nil + case *pb.TypedValue_ProtoBytes: + return v.ProtoBytes, nil + } + return nil, fmt.Errorf("unhandled type of value %v", val.GetValue()) +} + +func extractValueV03(val *pb.Value) (interface{}, error) { + switch val.Type { + case pb.Encoding_JSON, pb.Encoding_JSON_IETF: + return decode(val.Value) + case pb.Encoding_BYTES, pb.Encoding_PROTO: + return val.Value, nil + case pb.Encoding_ASCII: + return string(val.Value), nil + } + return nil, fmt.Errorf("unhandled type of value %v", val.GetValue()) +} + +func decode(byteArr []byte) (interface{}, error) { + decoder := json.NewDecoder(bytes.NewReader(byteArr)) + decoder.UseNumber() + var value interface{} + err := decoder.Decode(&value) + return value, err +} + +// DecimalToFloat converts a gNMI Decimal64 to a float64 +func DecimalToFloat(dec *pb.Decimal64) float64 { + return float64(dec.Digits) / math.Pow10(int(dec.Precision)) +} + +func update(p *pb.Path, val string) (*pb.Update, error) { + var v *pb.TypedValue + switch p.Origin { + case "": + v = &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: extractJSON(val)}} + case "eos_native": + v = &pb.TypedValue{ + Value: &pb.TypedValue_JsonVal{JsonVal: extractJSON(val)}} + case "cli", "test-regen-cli": + v = &pb.TypedValue{ + Value: &pb.TypedValue_AsciiVal{AsciiVal: val}} + case "p4_config": + b, err := ioutil.ReadFile(val) + if err != nil { + return nil, err + } + v = &pb.TypedValue{ + Value: &pb.TypedValue_ProtoBytes{ProtoBytes: b}} + default: + return nil, fmt.Errorf("unexpected origin: %q", p.Origin) + } + + return &pb.Update{Path: p, Val: v}, nil +} + +// Operation describes an gNMI operation. +type Operation struct { + Type string + Origin string + Target string + Path []string + Val string +} + +func newSetRequest(setOps []*Operation, exts ...*gnmi_ext.Extension) (*pb.SetRequest, error) { + req := &pb.SetRequest{} + for _, op := range setOps { + p, err := ParseGNMIElements(op.Path) + if err != nil { + return nil, err + } + p.Origin = op.Origin + + // Target must apply to the entire SetRequest. + if op.Target != "" { + req.Prefix = &pb.Path{ + Target: op.Target, + } + } + + switch op.Type { + case "delete": + req.Delete = append(req.Delete, p) + case "update": + u, err := update(p, op.Val) + if err != nil { + return nil, err + } + req.Update = append(req.Update, u) + case "replace": + u, err := update(p, op.Val) + if err != nil { + return nil, err + } + req.Replace = append(req.Replace, u) + } + } + for _, ext := range exts { + req.Extension = append(req.Extension, ext) + } + return req, nil +} + +// Set sends a SetRequest to the given ciena. +func Set(ctx context.Context, client pb.GNMIClient, setOps []*Operation, + exts ...*gnmi_ext.Extension) error { + req, err := newSetRequest(setOps, exts...) + if err != nil { + return err + } + resp, err := client.Set(ctx, req) + if err != nil { + return err + } + if resp.Message != nil && codes.Code(resp.Message.Code) != codes.OK { + return errors.New(resp.Message.Message) + } + return nil +} + +// Subscribe sends a SubscribeRequest to the given ciena. +// Deprecated: Use SubscribeErr instead. +func Subscribe(ctx context.Context, client pb.GNMIClient, subscribeOptions *SubscribeOptions, + respChan chan<- *pb.SubscribeResponse, errChan chan<- error) { + defer close(errChan) + if err := SubscribeErr(ctx, client, subscribeOptions, respChan); err != nil { + errChan <- err + } +} + +// SubscribeErr makes a gNMI.Subscribe call and writes the responses +// to the respChan. Before returning respChan will be closed. +func SubscribeErr(ctx context.Context, client pb.GNMIClient, subscribeOptions *SubscribeOptions, + respChan chan<- *pb.SubscribeResponse) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + defer close(respChan) + + stream, err := client.Subscribe(ctx) + if err != nil { + return err + } + req, err := NewSubscribeRequest(subscribeOptions) + if err != nil { + return err + } + if err := stream.Send(req); err != nil { + return err + } + + for { + resp, err := stream.Recv() + if err != nil { + if err == io.EOF { + return nil + } + return err + } + respChan <- resp + + // For POLL subscriptions, initiate a poll request by pressing ENTER + if subscribeOptions.Mode == "poll" { + switch resp.Response.(type) { + case *pb.SubscribeResponse_SyncResponse: + fmt.Print("Press ENTER to send a poll request: ") + reader := bufio.NewReader(os.Stdin) + reader.ReadString('\n') + + pollReq := &pb.SubscribeRequest{ + Request: &pb.SubscribeRequest_Poll{ + Poll: &pb.Poll{}, + }, + } + if err := stream.Send(pollReq); err != nil { + return err + } + } + } + } +} + +// LogSubscribeResponse logs update responses to stderr. +func LogSubscribeResponse(response *pb.SubscribeResponse) error { + switch resp := response.Response.(type) { + case *pb.SubscribeResponse_Error: + return errors.New(resp.Error.Message) + case *pb.SubscribeResponse_SyncResponse: + if !resp.SyncResponse { + return errors.New("initial sync failed") + } + case *pb.SubscribeResponse_Update: + t := time.Unix(0, resp.Update.Timestamp).UTC() + prefix := StrPath(resp.Update.Prefix) + var target string + if t := resp.Update.Prefix.GetTarget(); t != "" { + target = "(" + t + ") " + } + for _, update := range resp.Update.Update { + fmt.Printf("[%s] %s%s = %s\n", t.Format(time.RFC3339Nano), + target, + path.Join(prefix, StrPath(update.Path)), + StrUpdateVal(update)) + } + for _, del := range resp.Update.Delete { + fmt.Printf("[%s] %sDeleted %s\n", t.Format(time.RFC3339Nano), + target, + path.Join(prefix, StrPath(del))) + } + } + return nil +} diff --git a/forks/goarista/gnmi/operation_test.go b/forks/goarista/gnmi/operation_test.go new file mode 100644 index 0000000000000000000000000000000000000000..fd575d10aa5ea2766b9da07a4c4865ee101d923c --- /dev/null +++ b/forks/goarista/gnmi/operation_test.go @@ -0,0 +1,423 @@ +// Copyright (c) 2017 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "bytes" + "encoding/json" + "io/ioutil" + "os" + "testing" + + "github.com/aristanetworks/goarista/test" + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/any" + + pb "github.com/openconfig/gnmi/proto/gnmi" +) + +func TestNewSetRequest(t *testing.T) { + pathFoo := &pb.Path{ + Element: []string{"foo"}, + Elem: []*pb.PathElem{{Name: "foo"}}, + } + pathCli := &pb.Path{ + Origin: "cli", + } + pathP4 := &pb.Path{ + Origin: "p4_config", + } + + p4FileContent := "p4_config test" + p4TestFile, err := ioutil.TempFile("", "p4TestFile") + if err != nil { + t.Errorf("cannot create test file for p4_config") + } + p4Filename := p4TestFile.Name() + + defer os.Remove(p4Filename) + + if _, err := p4TestFile.WriteString(p4FileContent); err != nil { + t.Errorf("cannot write test file for p4_config") + } + p4TestFile.Close() + + testCases := map[string]struct { + setOps []*Operation + exp pb.SetRequest + }{ + "delete": { + setOps: []*Operation{{Type: "delete", Path: []string{"foo"}}}, + exp: pb.SetRequest{Delete: []*pb.Path{pathFoo}}, + }, + "update": { + setOps: []*Operation{{Type: "update", Path: []string{"foo"}, Val: "true"}}, + exp: pb.SetRequest{ + Update: []*pb.Update{{ + Path: pathFoo, + Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("true")}}, + }}, + }, + }, + "replace": { + setOps: []*Operation{{Type: "replace", Path: []string{"foo"}, Val: "true"}}, + exp: pb.SetRequest{ + Replace: []*pb.Update{{ + Path: pathFoo, + Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("true")}}, + }}, + }, + }, + "cli-replace": { + setOps: []*Operation{{Type: "replace", Origin: "cli", + Val: "hostname foo\nip routing"}}, + exp: pb.SetRequest{ + Replace: []*pb.Update{{ + Path: pathCli, + Val: &pb.TypedValue{ + Value: &pb.TypedValue_AsciiVal{AsciiVal: "hostname foo\nip routing"}}, + }}, + }, + }, + "p4_config": { + setOps: []*Operation{{Type: "replace", Origin: "p4_config", + Val: p4Filename}}, + exp: pb.SetRequest{ + Replace: []*pb.Update{{ + Path: pathP4, + Val: &pb.TypedValue{ + Value: &pb.TypedValue_ProtoBytes{ProtoBytes: []byte(p4FileContent)}}, + }}, + }, + }, + "target": { + setOps: []*Operation{{Type: "replace", Target: "JPE1234567", + Path: []string{"foo"}, Val: "true"}}, + exp: pb.SetRequest{ + Prefix: &pb.Path{Target: "JPE1234567"}, + Replace: []*pb.Update{{ + Path: pathFoo, + Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte("true")}}, + }}, + }, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + got, err := newSetRequest(tc.setOps) + if err != nil { + t.Fatal(err) + } + if diff := test.Diff(tc.exp, *got); diff != "" { + t.Errorf("unexpected diff: %s", diff) + } + }) + } +} + +func TestStrUpdateVal(t *testing.T) { + anyBytes, err := proto.Marshal(&pb.ModelData{Name: "foobar"}) + if err != nil { + t.Fatal(err) + } + anyMessage := &any.Any{TypeUrl: "gnmi/ModelData", Value: anyBytes} + anyString := proto.CompactTextString(anyMessage) + + for name, tc := range map[string]struct { + update *pb.Update + exp string + }{ + "JSON Value": { + update: &pb.Update{ + Value: &pb.Value{ + Value: []byte(`{"foo":"bar"}`), + Type: pb.Encoding_JSON}}, + exp: `{"foo":"bar"}`, + }, + "JSON_IETF Value": { + update: &pb.Update{ + Value: &pb.Value{ + Value: []byte(`{"foo":"bar"}`), + Type: pb.Encoding_JSON_IETF}}, + exp: `{"foo":"bar"}`, + }, + "BYTES Value": { + update: &pb.Update{ + Value: &pb.Value{ + Value: []byte{0xde, 0xad}, + Type: pb.Encoding_BYTES}}, + exp: "3q0=", + }, + "PROTO Value": { + update: &pb.Update{ + Value: &pb.Value{ + Value: []byte{0xde, 0xad}, + Type: pb.Encoding_PROTO}}, + exp: "3q0=", + }, + "ASCII Value": { + update: &pb.Update{ + Value: &pb.Value{ + Value: []byte("foobar"), + Type: pb.Encoding_ASCII}}, + exp: "foobar", + }, + "INVALID Value": { + update: &pb.Update{ + Value: &pb.Value{ + Value: []byte("foobar"), + Type: pb.Encoding(42)}}, + exp: "foobar", + }, + "StringVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_StringVal{StringVal: "foobar"}}}, + exp: "foobar", + }, + "IntVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_IntVal{IntVal: -42}}}, + exp: "-42", + }, + "UintVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_UintVal{UintVal: 42}}}, + exp: "42", + }, + "BoolVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_BoolVal{BoolVal: true}}}, + exp: "true", + }, + "BytesVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_BytesVal{BytesVal: []byte{0xde, 0xad}}}}, + exp: "3q0=", + }, + "FloatVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_FloatVal{FloatVal: 3.14}}}, + exp: "3.14", + }, + "DecimalVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_DecimalVal{ + DecimalVal: &pb.Decimal64{Digits: 314, Precision: 2}, + }}}, + exp: "3.14", + }, + "LeafListVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_LeaflistVal{ + LeaflistVal: &pb.ScalarArray{Element: []*pb.TypedValue{ + {Value: &pb.TypedValue_BoolVal{BoolVal: true}}, + {Value: &pb.TypedValue_AsciiVal{AsciiVal: "foobar"}}, + }}, + }}}, + exp: "[true, foobar]", + }, + "AnyVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_AnyVal{AnyVal: anyMessage}}}, + exp: anyString, + }, + "JsonVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":"bar"}`)}}}, + exp: `{"foo":"bar"}`, + }, + "JsonVal_complex": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":"bar","baz":"qux"}`)}}}, + exp: `{ + "foo": "bar", + "baz": "qux" +}`, + }, + "JsonIetfVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(`{"foo":"bar"}`)}}}, + exp: `{"foo":"bar"}`, + }, + "AsciiVal": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_AsciiVal{AsciiVal: "foobar"}}}, + exp: "foobar", + }, + "ProtoBytes": { + update: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_ProtoBytes{ProtoBytes: anyBytes}}}, + exp: "CgZmb29iYXI=", + }, + } { + t.Run(name, func(t *testing.T) { + got := StrUpdateVal(tc.update) + if got != tc.exp { + t.Errorf("Expected: %q Got: %q", tc.exp, got) + } + }) + } +} + +func TestTypedValue(t *testing.T) { + for tname, tcase := range map[string]struct { + in interface{} + exp *pb.TypedValue + }{ + "string": { + in: "foo", + exp: &pb.TypedValue{Value: &pb.TypedValue_StringVal{StringVal: "foo"}}, + }, + "int": { + in: 42, + exp: &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: 42}}, + }, + "int64": { + in: int64(42), + exp: &pb.TypedValue{Value: &pb.TypedValue_IntVal{IntVal: 42}}, + }, + "uint": { + in: uint(42), + exp: &pb.TypedValue{Value: &pb.TypedValue_UintVal{UintVal: 42}}, + }, + "bool": { + in: true, + exp: &pb.TypedValue{Value: &pb.TypedValue_BoolVal{BoolVal: true}}, + }, + "slice": { + in: []interface{}{"foo", 1, uint(2), true}, + exp: &pb.TypedValue{Value: &pb.TypedValue_LeaflistVal{LeaflistVal: &pb.ScalarArray{ + Element: []*pb.TypedValue{ + {Value: &pb.TypedValue_StringVal{StringVal: "foo"}}, + {Value: &pb.TypedValue_IntVal{IntVal: 1}}, + {Value: &pb.TypedValue_UintVal{UintVal: 2}}, + {Value: &pb.TypedValue_BoolVal{BoolVal: true}}, + }}}}, + }, + } { + t.Run(tname, func(t *testing.T) { + if got := TypedValue(tcase.in); !test.DeepEqual(got, tcase.exp) { + t.Errorf("Expected: %q Got: %q", tcase.exp, got) + } + }) + } +} + +func TestExtractJSON(t *testing.T) { + jsonFile, err := ioutil.TempFile("", "extractJSON") + if err != nil { + t.Fatal(err) + } + defer os.Remove(jsonFile.Name()) + if _, err := jsonFile.Write([]byte(`"jsonFile"`)); err != nil { + jsonFile.Close() + t.Fatal(err) + } + if err := jsonFile.Close(); err != nil { + t.Fatal(err) + } + + for val, exp := range map[string][]byte{ + jsonFile.Name(): []byte(`"jsonFile"`), + "foobar": []byte(`"foobar"`), + `"foobar"`: []byte(`"foobar"`), + "Val: true": []byte(`"Val: true"`), + "host42": []byte(`"host42"`), + "42": []byte("42"), + "-123.43": []byte("-123.43"), + "0xFFFF": []byte("0xFFFF"), + // Int larger than can fit in 32 bits should be quoted + "0x8000000000": []byte(`"0x8000000000"`), + "-0x8000000000": []byte(`"-0x8000000000"`), + "true": []byte("true"), + "false": []byte("false"), + "null": []byte("null"), + "{true: 42}": []byte("{true: 42}"), + "[]": []byte("[]"), + } { + t.Run(val, func(t *testing.T) { + got := extractJSON(val) + if !bytes.Equal(exp, got) { + t.Errorf("Unexpected diff. Expected: %q Got: %q", exp, got) + } + }) + } +} + +func TestExtractValue(t *testing.T) { + cases := []struct { + in *pb.Update + exp interface{} + }{{ + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_StringVal{StringVal: "foo"}}}, + exp: "foo", + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_IntVal{IntVal: 123}}}, + exp: int64(123), + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_UintVal{UintVal: 123}}}, + exp: uint64(123), + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_BoolVal{BoolVal: true}}}, + exp: true, + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_BytesVal{BytesVal: []byte{0xde, 0xad}}}}, + exp: []byte{0xde, 0xad}, + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_FloatVal{FloatVal: -12.34}}}, + exp: float32(-12.34), + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_DecimalVal{DecimalVal: &pb.Decimal64{ + Digits: -1234, Precision: 2}}}}, + exp: &pb.Decimal64{Digits: -1234, Precision: 2}, + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_LeaflistVal{LeaflistVal: &pb.ScalarArray{ + Element: []*pb.TypedValue{ + {Value: &pb.TypedValue_StringVal{StringVal: "foo"}}, + {Value: &pb.TypedValue_IntVal{IntVal: 123}}}}}}}, + exp: []interface{}{"foo", int64(123)}, + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`12.34`)}}}, + exp: json.Number("12.34"), + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`[12.34, 123, "foo"]`)}}}, + exp: []interface{}{json.Number("12.34"), json.Number("123"), "foo"}, + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":"bar"}`)}}}, + exp: map[string]interface{}{"foo": "bar"}, + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonVal{JsonVal: []byte(`{"foo":45.67}`)}}}, + exp: map[string]interface{}{"foo": json.Number("45.67")}, + }, { + in: &pb.Update{Val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{JsonIetfVal: []byte(`{"foo":"bar"}`)}}}, + exp: map[string]interface{}{"foo": "bar"}, + }} + for _, tc := range cases { + out, err := ExtractValue(tc.in) + if err != nil { + t.Errorf(err.Error()) + } + if !test.DeepEqual(tc.exp, out) { + t.Errorf("Extracted value is incorrect. Expected %+v, got %+v", tc.exp, out) + } + } +} diff --git a/forks/goarista/gnmi/path.go b/forks/goarista/gnmi/path.go new file mode 100644 index 0000000000000000000000000000000000000000..00280a8fc5924785e036e8daf7e9e187ec8a0406 --- /dev/null +++ b/forks/goarista/gnmi/path.go @@ -0,0 +1,251 @@ +// Copyright (c) 2017 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "fmt" + "sort" + "strings" + + pb "github.com/openconfig/gnmi/proto/gnmi" +) + +// nextTokenIndex returns the end index of the first token. +func nextTokenIndex(path string) int { + var inBrackets bool + var escape bool + for i, c := range path { + switch c { + case '[': + inBrackets = true + escape = false + case ']': + if !escape { + inBrackets = false + } + escape = false + case '\\': + escape = !escape + case '/': + if !inBrackets && !escape { + return i + } + escape = false + default: + escape = false + } + } + return len(path) +} + +// SplitPath splits a gnmi path according to the spec. See +// https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-path-conventions.md +// No validation is done. Behavior is undefined if path is an invalid +// gnmi path. TODO: Do validation? +func SplitPath(path string) []string { + var result []string + if len(path) > 0 && path[0] == '/' { + path = path[1:] + } + for len(path) > 0 { + i := nextTokenIndex(path) + result = append(result, path[:i]) + path = path[i:] + if len(path) > 0 && path[0] == '/' { + path = path[1:] + } + } + return result +} + +// SplitPaths splits multiple gnmi paths +func SplitPaths(paths []string) [][]string { + out := make([][]string, len(paths)) + for i, path := range paths { + out[i] = SplitPath(path) + } + return out +} + +// StrPath builds a human-readable form of a gnmi path. +// e.g. /a/b/c[e=f] +func StrPath(path *pb.Path) string { + if path == nil { + return "/" + } else if len(path.Elem) != 0 { + return strPathV04(path) + } else if len(path.Element) != 0 { + return strPathV03(path) + } + return "/" +} + +// strPathV04 handles the v0.4 gnmi and later path.Elem member. +func strPathV04(path *pb.Path) string { + b := &strings.Builder{} + for _, elm := range path.Elem { + b.WriteRune('/') + writeSafeString(b, elm.Name, '/') + if len(elm.Key) > 0 { + // Sort the keys so that they print in a conistent + // order. We don't have the YANG AST information, so the + // best we can do is sort them alphabetically. + keys := make([]string, 0, len(elm.Key)) + for k := range elm.Key { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + b.WriteRune('[') + b.WriteString(k) + b.WriteRune('=') + writeSafeString(b, elm.Key[k], ']') + b.WriteRune(']') + } + } + } + return b.String() +} + +// strPathV03 handles the v0.3 gnmi and earlier path.Element member. +func strPathV03(path *pb.Path) string { + return "/" + strings.Join(path.Element, "/") +} + +// upgradePath modernizes a Path by translating the contents of the Element field to Elem +func upgradePath(path *pb.Path) *pb.Path { + if len(path.Elem) == 0 { + var elems []*pb.PathElem + for _, element := range path.Element { + n, keys, _ := parseElement(element) + elems = append(elems, &pb.PathElem{Name: n, Key: keys}) + } + path.Elem = elems + path.Element = nil + } + return path +} + +// JoinPaths joins multiple gnmi paths and returns a string representation +func JoinPaths(paths ...*pb.Path) *pb.Path { + var elems []*pb.PathElem + for _, path := range paths { + path = upgradePath(path) + elems = append(elems, path.Elem...) + } + return &pb.Path{Elem: elems} +} + +func writeSafeString(b *strings.Builder, s string, esc rune) { + for _, c := range s { + if c == esc || c == '\\' { + b.WriteRune('\\') + } + b.WriteRune(c) + } +} + +// ParseGNMIElements builds up a gnmi path, from user-supplied text +func ParseGNMIElements(elms []string) (*pb.Path, error) { + var parsed []*pb.PathElem + for _, e := range elms { + n, keys, err := parseElement(e) + if err != nil { + return nil, err + } + parsed = append(parsed, &pb.PathElem{Name: n, Key: keys}) + } + return &pb.Path{ + Element: elms, // Backwards compatibility with pre-v0.4 gnmi + Elem: parsed, + }, nil +} + +// parseElement parses a path element, according to the gNMI specification. See +// https://github.com/openconfig/reference/blame/master/rpc/gnmi/gnmi-path-conventions.md +// +// It returns the first string (the current element name), and an optional map of key name +// value pairs. +func parseElement(pathElement string) (string, map[string]string, error) { + // First check if there are any keys, i.e. do we have at least one '[' in the element + name, keyStart := findUnescaped(pathElement, '[') + if keyStart < 0 { + return name, nil, nil + } + + // Error if there is no element name or if the "[" is at the beginning of the path element + if len(name) == 0 { + return "", nil, fmt.Errorf("failed to find element name in %q", pathElement) + } + + // Look at the keys now. + keys := make(map[string]string) + keyPart := pathElement[keyStart:] + for keyPart != "" { + k, v, nextKey, err := parseKey(keyPart) + if err != nil { + return "", nil, err + } + keys[k] = v + keyPart = nextKey + } + return name, keys, nil +} + +// parseKey returns the key name, key value and the remaining string to be parsed, +func parseKey(s string) (string, string, string, error) { + if s[0] != '[' { + return "", "", "", fmt.Errorf("failed to find opening '[' in %q", s) + } + k, iEq := findUnescaped(s[1:], '=') + if iEq < 0 { + return "", "", "", fmt.Errorf("failed to find '=' in %q", s) + } + if k == "" { + return "", "", "", fmt.Errorf("failed to find key name in %q", s) + } + + rhs := s[1+iEq+1:] + v, iClosBr := findUnescaped(rhs, ']') + if iClosBr < 0 { + return "", "", "", fmt.Errorf("failed to find ']' in %q", s) + } + if v == "" { + return "", "", "", fmt.Errorf("failed to find key value in %q", s) + } + + next := rhs[iClosBr+1:] + return k, v, next, nil +} + +// findUnescaped will return the index of the first unescaped match of 'find', and the unescaped +// string leading up to it. +func findUnescaped(s string, find byte) (string, int) { + // Take a fast track if there are no escape sequences + if strings.IndexByte(s, '\\') == -1 { + i := strings.IndexByte(s, find) + if i < 0 { + return s, -1 + } + return s[:i], i + } + + // Find the first match, taking care of escaped chars. + var b strings.Builder + var i int + len := len(s) + for i = 0; i < len; { + ch := s[i] + if ch == find { + return b.String(), i + } else if ch == '\\' && i < len-1 { + i++ + ch = s[i] + } + b.WriteByte(ch) + i++ + } + return b.String(), -1 +} diff --git a/forks/goarista/gnmi/path_test.go b/forks/goarista/gnmi/path_test.go new file mode 100644 index 0000000000000000000000000000000000000000..27318b65c10a64949326995b727347d3f5de211a --- /dev/null +++ b/forks/goarista/gnmi/path_test.go @@ -0,0 +1,308 @@ +// Copyright (c) 2017 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package gnmi + +import ( + "fmt" + "testing" + + "github.com/aristanetworks/goarista/test" + + pb "github.com/openconfig/gnmi/proto/gnmi" +) + +func p(s ...string) []string { + return s +} + +func TestSplitPath(t *testing.T) { + for i, tc := range []struct { + in string + exp []string + }{{ + in: "/foo/bar", + exp: p("foo", "bar"), + }, { + in: "/foo/bar/", + exp: p("foo", "bar"), + }, { + in: "//foo//bar//", + exp: p("", "foo", "", "bar", ""), + }, { + in: "/foo[name=///]/bar", + exp: p("foo[name=///]", "bar"), + }, { + in: `/foo[name=[\\\]/]/bar`, + exp: p(`foo[name=[\\\]/]`, "bar"), + }, { + in: `/foo[name=[\\]/bar`, + exp: p(`foo[name=[\\]`, "bar"), + }, { + in: "/foo[a=1][b=2]/bar", + exp: p("foo[a=1][b=2]", "bar"), + }, { + in: "/foo[a=1\\]2][b=2]/bar", + exp: p("foo[a=1\\]2][b=2]", "bar"), + }, { + in: "/foo[a=1][b=2]/bar\\baz", + exp: p("foo[a=1][b=2]", "bar\\baz"), + }} { + got := SplitPath(tc.in) + if !test.DeepEqual(tc.exp, got) { + t.Errorf("[%d] unexpect split for %q. Expected: %v, Got: %v", + i, tc.in, tc.exp, got) + } + } +} + +func TestStrPath(t *testing.T) { + for i, tc := range []struct { + path string + }{{ + path: "/", + }, { + path: "/foo/bar", + }, { + path: "/foo[name=a]/bar", + }, { + path: "/foo[a=1][b=2]/bar", + }, { + path: "/foo[a=1\\]2][b=2]/bar", + }, { + path: "/foo[a=1][b=2]/bar\\/baz", + }} { + sElms := SplitPath(tc.path) + pbPath, err := ParseGNMIElements(sElms) + if err != nil { + t.Errorf("failed to parse %s: %s", sElms, err) + } + s := StrPath(pbPath) + if !test.DeepEqual(tc.path, s) { + t.Errorf("[%d] want %s, got %s", i, tc.path, s) + } + } +} + +func TestStrPathBackwardsCompat(t *testing.T) { + for i, tc := range []struct { + path *pb.Path + str string + }{{ + path: &pb.Path{ + Element: p("foo[a=1][b=2]", "bar"), + }, + str: "/foo[a=1][b=2]/bar", + }} { + got := StrPath(tc.path) + if got != tc.str { + t.Errorf("[%d] want %q, got %q", i, tc.str, got) + } + } +} + +func TestParseElement(t *testing.T) { + // test cases + cases := []struct { + // name is the name of the test useful if you want to run a single test + // from the command line -run TestParseElement/<name> + name string + // in is the path element to be parsed + in string + // fieldName is field name (YANG node name) expected to be parsed from the path element. + // Normally this is simply the path element, or if the path element contains keys this is + // the text before the first [ + fieldName string + // keys is a map of the expected key value pairs from within the []s in the + // `path element. + // + // For example prefix[ip-prefix=10.0.0.0/24][masklength-range=26..28] + // fieldName would be "prefix" + // keys would be {"ip-prefix": "10.0.0.0/24", "masklength-range": "26..28"} + keys map[string]string + // expectedError is the exact error we expect. + expectedError error + }{{ + name: "no_elms", + in: "hello", + fieldName: "hello", + }, { + name: "single_open", + in: "[", + expectedError: fmt.Errorf("failed to find element name in %q", "["), + }, { + name: "no_equal_no_close", + in: "hello[there", + expectedError: fmt.Errorf("failed to find '=' in %q", "[there"), + }, { + name: "no_equals", + in: "hello[there]", + expectedError: fmt.Errorf("failed to find '=' in %q", "[there]"), + }, { + name: "no_left_side", + in: "hello[=there]", + expectedError: fmt.Errorf("failed to find key name in %q", "[=there]"), + }, { + name: "no_right_side", + in: "hello[there=]", + expectedError: fmt.Errorf("failed to find key value in %q", "[there=]"), + }, { + name: "hanging_escape", + in: "hello[there\\", + expectedError: fmt.Errorf("failed to find '=' in %q", "[there\\"), + }, { + name: "single_name_value", + in: "hello[there=where]", + fieldName: "hello", + keys: map[string]string{"there": "where"}, + }, { + name: "single_value_with=", + in: "hello[there=whe=r=e]", + fieldName: "hello", + keys: map[string]string{"there": "whe=r=e"}, + }, { + name: "single_value_with=_and_escaped_]", + in: `hello[there=whe=\]r=e]`, + fieldName: "hello", + keys: map[string]string{"there": `whe=]r=e`}, + }, { + name: "single_value_with[", + in: "hello[there=w[[here]", + fieldName: "hello", + keys: map[string]string{"there": "w[[here"}, + }, { + name: "value_single_open", + in: "hello[first=value][", + expectedError: fmt.Errorf("failed to find '=' in %q", "["), + }, { + name: "value_no_close", + in: "hello[there=where][somename", + expectedError: fmt.Errorf("failed to find '=' in %q", "[somename"), + }, { + name: "value_no_equals", + in: "hello[there=where][somename]", + expectedError: fmt.Errorf("failed to find '=' in %q", "[somename]"), + }, { + name: "no_left_side", + in: "hello[there=where][=somevalue]", + expectedError: fmt.Errorf("failed to find key name in %q", "[=somevalue]"), + }, { + name: "no_right_side", + in: "hello[there=where][somename=]", + expectedError: fmt.Errorf("failed to find key value in %q", "[somename=]"), + }, { + name: "two_name_values", + in: "hello[there=where][somename=somevalue]", + fieldName: "hello", + keys: map[string]string{"there": "where", "somename": "somevalue"}, + }, { + name: "three_name_values", + in: "hello[there=where][somename=somevalue][anothername=value]", + fieldName: "hello", + keys: map[string]string{"there": "where", "somename": "somevalue", + "anothername": "value"}, + }, { + name: "aserisk_value", + in: "hello[there=*][somename=somevalue][anothername=value]", + fieldName: "hello", + keys: map[string]string{"there": "*", "somename": "somevalue", + "anothername": "value"}, + }} + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + fieldName, keys, err := parseElement(tc.in) + if !test.DeepEqual(tc.expectedError, err) { + t.Fatalf("[%s] expected err %#v, got %#v", tc.name, tc.expectedError, err) + } + if !test.DeepEqual(tc.keys, keys) { + t.Fatalf("[%s] expected output %#v, got %#v", tc.name, tc.keys, keys) + } + if tc.fieldName != fieldName { + t.Fatalf("[%s] expected field name %s, got %s", tc.name, tc.fieldName, fieldName) + } + }) + } +} + +func strToPath(pathStr string) *pb.Path { + splitPath := SplitPath(pathStr) + path, _ := ParseGNMIElements(splitPath) + path.Element = nil + return path +} + +func strsToPaths(pathStrs []string) []*pb.Path { + var paths []*pb.Path + for _, splitPath := range SplitPaths(pathStrs) { + path, _ := ParseGNMIElements(splitPath) + path.Element = nil + paths = append(paths, path) + } + return paths +} + +func TestJoinPath(t *testing.T) { + cases := []struct { + paths []*pb.Path + exp string + }{{ + paths: strsToPaths([]string{"/foo/bar", "/baz/qux"}), + exp: "/foo/bar/baz/qux", + }, + { + paths: strsToPaths([]string{ + "/foo/bar[somekey=someval][otherkey=otherval]", "/baz/qux"}), + exp: "/foo/bar[otherkey=otherval][somekey=someval]/baz/qux", + }, + { + paths: strsToPaths([]string{ + "/foo/bar[somekey=someval][otherkey=otherval]", + "/baz/qux[somekey=someval][otherkey=otherval]"}), + exp: "/foo/bar[otherkey=otherval][somekey=someval]/" + + "baz/qux[otherkey=otherval][somekey=someval]", + }, + { + paths: []*pb.Path{ + {Element: []string{"foo", "bar[somekey=someval][otherkey=otherval]"}}, + {Element: []string{"baz", "qux[somekey=someval][otherkey=otherval]"}}}, + exp: "/foo/bar[somekey=someval][otherkey=otherval]/" + + "baz/qux[somekey=someval][otherkey=otherval]", + }, + } + + for _, tc := range cases { + got := JoinPaths(tc.paths...) + exp := strToPath(tc.exp) + exp.Element = nil + if !test.DeepEqual(got, exp) { + t.Fatalf("ERROR!\n Got: %s,\n Want %s\n", got, exp) + } + } +} + +func BenchmarkPathElementToSigleElementName(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _, _ = parseElement("hello") + } +} + +func BenchmarkPathElementTwoKeys(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _, _ = parseElement("hello[hello=world][bye=moon]") + } +} + +func BenchmarkPathElementBadKeys(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _, _ = parseElement("hello[hello=world][byemoon]") + } +} + +func BenchmarkPathElementMaxKeys(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _, _ = parseElement("hello[name=firstName][name=secondName][name=thirdName]" + + "[name=fourthName][name=fifthName][name=sixthName]") + } +} diff --git a/forks/goarista/openconfig/client/client.go b/forks/goarista/openconfig/client/client.go new file mode 100644 index 0000000000000000000000000000000000000000..1d7d1992f375d06b747161dc4570124696202fac --- /dev/null +++ b/forks/goarista/openconfig/client/client.go @@ -0,0 +1,132 @@ +// Copyright (c) 2016 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +// Package ciena provides helper functions for OpenConfig CLI tools. +package client + +import ( + "io" + "strings" + "sync" + + "github.com/golang/glog" + "github.com/golang/protobuf/proto" + "github.com/openconfig/reference/rpc/openconfig" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" +) + +const defaultPort = "6030" + +// PublishFunc is the method to publish responses +type PublishFunc func(addr string, message proto.Message) + +// Client is a connected gRPC ciena +type Client struct { + client openconfig.OpenConfigClient + ctx context.Context + device string +} + +// New creates a new gRPC ciena and connects it +func New(username, password, addr string, opts []grpc.DialOption) *Client { + device := addr + if !strings.ContainsRune(addr, ':') { + addr += ":" + defaultPort + } + // Make sure we don't move past the grpc.Dial() call until we actually + // established an HTTP/2 connection successfully. + opts = append(opts, grpc.WithBlock()) + conn, err := grpc.Dial(addr, opts...) + if err != nil { + glog.Fatalf("Failed to dial: %s", err) + } + glog.Infof("Connected to %s", addr) + client := openconfig.NewOpenConfigClient(conn) + + ctx := context.Background() + if username != "" { + ctx = metadata.NewOutgoingContext(ctx, metadata.Pairs( + "username", username, + "password", password)) + } + return &Client{ + client: client, + device: device, + ctx: ctx, + } +} + +// Get sends a get request and returns the responses +func (c *Client) Get(path string) []*openconfig.Notification { + req := &openconfig.GetRequest{ + Path: []*openconfig.Path{ + { + Element: strings.Split(path, "/"), + }, + }, + } + response, err := c.client.Get(c.ctx, req) + if err != nil { + glog.Fatalf("Get failed: %s", err) + } + return response.Notification +} + +// Subscribe sends subscriptions, and consumes responses. +// The given publish function is used to publish SubscribeResponses received +// for the given subscriptions, when connected to the given host, with the +// given user/pass pair, or the ciena-side cert specified in the gRPC opts. +// This function does not normally return so it should probably be run in its +// own goroutine. When this function returns, the given WaitGroup is marked +// as done. +func (c *Client) Subscribe(wg *sync.WaitGroup, subscriptions []string, + publish PublishFunc) { + defer wg.Done() + stream, err := c.client.Subscribe(c.ctx) + if err != nil { + glog.Fatalf("Subscribe failed: %s", err) + } + defer stream.CloseSend() + + for _, path := range subscriptions { + sub := &openconfig.SubscribeRequest{ + Request: &openconfig.SubscribeRequest_Subscribe{ + Subscribe: &openconfig.SubscriptionList{ + Subscription: []*openconfig.Subscription{ + { + Path: &openconfig.Path{Element: strings.Split(path, "/")}, + }, + }, + }, + }, + } + + glog.Infof("Sending subscribe request: %s", sub) + err = stream.Send(sub) + if err != nil { + glog.Fatalf("Failed to subscribe: %s", err) + } + } + + for { + resp, err := stream.Recv() + if err != nil { + if err != io.EOF { + glog.Fatalf("Error received from the server: %s", err) + } + return + } + switch resp := resp.Response.(type) { + case *openconfig.SubscribeResponse_SyncResponse: + if !resp.SyncResponse { + panic("initial sync failed," + + " check that you're using a ciena compatible with the server") + } + } + glog.V(3).Info(resp) + publish(c.device, resp) + } +} diff --git a/forks/goarista/openconfig/client/flags.go b/forks/goarista/openconfig/client/flags.go new file mode 100644 index 0000000000000000000000000000000000000000..fb91bba3715c286babedb3e58caf221b576d213b --- /dev/null +++ b/forks/goarista/openconfig/client/flags.go @@ -0,0 +1,113 @@ +// Copyright (c) 2016 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package client + +import ( + "crypto/tls" + "crypto/x509" + "flag" + "io/ioutil" + "os" + "strings" + + "github.com/golang/glog" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" +) + +const ( + // HostnameArg is the value to be replaced by the actual hostname + HostnameArg = "HOSTNAME" +) + +// ParseHostnames parses a comma-separated list of names and replaces HOSTNAME with the current +// hostname in it +func ParseHostnames(list string) ([]string, error) { + items := strings.Split(list, ",") + hostname, err := os.Hostname() + if err != nil { + return nil, err + } + names := make([]string, len(items)) + for i, name := range items { + if name == HostnameArg { + name = hostname + } + names[i] = name + } + return names, nil +} + +// ParseFlags registers some additional common flags, +// parses the flags, and returns the resulting gRPC options, +// and other settings to connect to the gRPC interface. +func ParseFlags() (username string, password string, subscriptions, addrs []string, + opts []grpc.DialOption) { + + var ( + addrsFlag = flag.String("addrs", "localhost:6030", + "Comma-separated list of addresses of OpenConfig gRPC servers. The address 'HOSTNAME' "+ + "is replaced by the current hostname.") + + caFileFlag = flag.String("cafile", "", + "Path to server TLS certificate file") + + certFileFlag = flag.String("certfile", "", + "Path to ciena TLS certificate file") + + keyFileFlag = flag.String("keyfile", "", + "Path to ciena TLS private key file") + + passwordFlag = flag.String("password", "", + "Password to authenticate with") + + subscribeFlag = flag.String("subscribe", "", + "Comma-separated list of paths to subscribe to upon connecting to the server") + + usernameFlag = flag.String("username", "", + "Username to authenticate with") + + tlsFlag = flag.Bool("tls", false, + "Enable TLS") + ) + + flag.Parse() + if *tlsFlag || *caFileFlag != "" || *certFileFlag != "" { + config := &tls.Config{} + if *caFileFlag != "" { + b, err := ioutil.ReadFile(*caFileFlag) + if err != nil { + glog.Fatal(err) + } + cp := x509.NewCertPool() + if !cp.AppendCertsFromPEM(b) { + glog.Fatalf("credentials: failed to append certificates") + } + config.RootCAs = cp + } else { + config.InsecureSkipVerify = true + } + if *certFileFlag != "" { + if *keyFileFlag == "" { + glog.Fatalf("Please provide both -certfile and -keyfile") + } + cert, err := tls.LoadX509KeyPair(*certFileFlag, *keyFileFlag) + if err != nil { + glog.Fatal(err) + } + config.Certificates = []tls.Certificate{cert} + } + opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(config))) + } else { + opts = append(opts, grpc.WithInsecure()) + } + var err error + addrs, err = ParseHostnames(*addrsFlag) + if err != nil { + glog.Fatal(err) + } + subscriptions = strings.Split(*subscribeFlag, ",") + return *usernameFlag, *passwordFlag, subscriptions, addrs, opts +} diff --git a/forks/goarista/openconfig/json.go b/forks/goarista/openconfig/json.go new file mode 100644 index 0000000000000000000000000000000000000000..8eba88baded76b426451ef862d332a3c712a1db2 --- /dev/null +++ b/forks/goarista/openconfig/json.go @@ -0,0 +1,237 @@ +// Copyright (c) 2016 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package openconfig + +import ( + "bytes" + "encoding/json" + "fmt" + "strings" + + "github.com/openconfig/reference/rpc/openconfig" +) + +// joinPath builds a string out of an Element +func joinPath(path *openconfig.Path) string { + if path == nil { + return "" + } + return strings.Join(path.Element, "/") +} + +func convertUpdate(update *openconfig.Update) (interface{}, error) { + switch update.Value.Type { + case openconfig.Type_JSON: + var value interface{} + decoder := json.NewDecoder(bytes.NewReader(update.Value.Value)) + decoder.UseNumber() + if err := decoder.Decode(&value); err != nil { + return nil, fmt.Errorf("Malformed JSON update %q in %s", + update.Value.Value, update) + } + return value, nil + case openconfig.Type_BYTES: + return update.Value.Value, nil + default: + return nil, + fmt.Errorf("Unhandled type of value %v in %s", update.Value.Type, update) + } +} + +// NotificationToJSON converts a Notification into a JSON string +func NotificationToJSON(notif *openconfig.Notification) (string, error) { + m := make(map[string]interface{}, 1) + m["timestamp"] = notif.Timestamp + m["path"] = "/" + joinPath(notif.Prefix) + if len(notif.Update) != 0 { + updates := make(map[string]interface{}, len(notif.Update)) + var err error + for _, update := range notif.Update { + updates[joinPath(update.Path)], err = convertUpdate(update) + if err != nil { + return "", err + } + } + m["updates"] = updates + } + if len(notif.Delete) != 0 { + deletes := make([]string, len(notif.Delete)) + for i, del := range notif.Delete { + deletes[i] = joinPath(del) + } + m["deletes"] = deletes + } + m = map[string]interface{}{"notification": m} + js, err := json.MarshalIndent(m, "", " ") + if err != nil { + return "", err + } + return string(js), nil +} + +// SubscribeResponseToJSON converts a SubscribeResponse into a JSON string +func SubscribeResponseToJSON(resp *openconfig.SubscribeResponse) (string, error) { + m := make(map[string]interface{}, 1) + var err error + switch resp := resp.Response.(type) { + case *openconfig.SubscribeResponse_Update: + return NotificationToJSON(resp.Update) + case *openconfig.SubscribeResponse_Heartbeat: + m["heartbeat"] = resp.Heartbeat.Interval + case *openconfig.SubscribeResponse_SyncResponse: + m["syncResponse"] = resp.SyncResponse + default: + return "", fmt.Errorf("Unknown type of response: %T: %s", resp, resp) + } + js, err := json.MarshalIndent(m, "", " ") + if err != nil { + return "", err + } + return string(js), nil +} + +// EscapeFunc is the escaping method for attribute names +type EscapeFunc func(k string) string + +// escapeValue looks for maps in an interface and escapes their keys +func escapeValue(value interface{}, escape EscapeFunc) interface{} { + valueMap, ok := value.(map[string]interface{}) + if !ok { + return value + } + escapedMap := make(map[string]interface{}, len(valueMap)) + for k, v := range valueMap { + escapedKey := escape(k) + escapedMap[escapedKey] = escapeValue(v, escape) + } + return escapedMap +} + +// addPathToMap creates a map[string]interface{} from a path. It returns the node in +// the map corresponding to the last element in the path +func addPathToMap(root map[string]interface{}, path []string, escape EscapeFunc) ( + map[string]interface{}, error) { + parent := root + for _, element := range path { + k := escape(element) + node, found := parent[k] + if !found { + node = map[string]interface{}{} + parent[k] = node + } + var ok bool + parent, ok = node.(map[string]interface{}) + if !ok { + return nil, fmt.Errorf( + "Node %s is of type %T (expected map[string]interface traversing %q)", + element, node, path) + } + } + return parent, nil +} + +// NotificationToMap maps a Notification into a nested map of entities +func NotificationToMap(addr string, notification *openconfig.Notification, + escape EscapeFunc) (map[string]interface{}, error) { + if escape == nil { + escape = func(name string) string { + return name + } + } + prefix := notification.GetPrefix() + + // Convert deletes + var deletes map[string]interface{} + notificationDeletes := notification.GetDelete() + if notificationDeletes != nil { + deletes = make(map[string]interface{}) + node := deletes + if prefix != nil { + var err error + node, err = addPathToMap(node, prefix.Element, escape) + if err != nil { + return nil, err + } + } + for _, delete := range notificationDeletes { + _, err := addPathToMap(node, delete.Element, escape) + if err != nil { + return nil, err + } + } + } + + // Convert updates + var updates map[string]interface{} + notificationUpdates := notification.GetUpdate() + if notificationUpdates != nil { + updates = make(map[string]interface{}) + node := updates + if prefix != nil { + var err error + node, err = addPathToMap(node, prefix.Element, escape) + if err != nil { + return nil, err + } + } + for _, update := range notificationUpdates { + updateNode := node + path := update.GetPath() + elementLen := len(path.Element) + + // Convert all elements before the leaf + if elementLen > 1 { + parentElements := path.Element[:elementLen-1] + var err error + updateNode, err = addPathToMap(updateNode, parentElements, escape) + if err != nil { + return nil, err + } + } + + // Convert the value in the leaf + value := update.GetValue() + var unmarshaledValue interface{} + switch value.Type { + case openconfig.Type_JSON: + if err := json.Unmarshal(value.Value, &unmarshaledValue); err != nil { + return nil, err + } + case openconfig.Type_BYTES: + unmarshaledValue = update.Value.Value + default: + return nil, fmt.Errorf("Unexpected value type %s for path %v", + value.Type, path) + } + updateNode[escape(path.Element[elementLen-1])] = escapeValue( + unmarshaledValue, escape) + } + } + + // Build the complete map to return + root := map[string]interface{}{ + "timestamp": notification.Timestamp, + } + if addr != "" { + root["dataset"] = addr + } + if deletes != nil { + root["delete"] = deletes + } + if updates != nil { + root["update"] = updates + } + return root, nil +} + +// NotificationToJSONDocument maps a Notification into a single JSON document +func NotificationToJSONDocument(addr string, notification *openconfig.Notification, + escape EscapeFunc) ([]byte, error) { + m, err := NotificationToMap(addr, notification, escape) + if err != nil { + return nil, err + } + return json.Marshal(m) +} diff --git a/forks/goarista/openconfig/json_test.go b/forks/goarista/openconfig/json_test.go new file mode 100644 index 0000000000000000000000000000000000000000..1dfc41d5789b9c8fcbb1a6a8b30918f77873a88a --- /dev/null +++ b/forks/goarista/openconfig/json_test.go @@ -0,0 +1,143 @@ +// Copyright (c) 2016 Arista Networks, Inc. +// Use of this source code is governed by the Apache License 2.0 +// that can be found in the COPYING file. + +package openconfig + +import ( + "encoding/json" + "testing" + + "github.com/aristanetworks/goarista/test" + + "github.com/openconfig/reference/rpc/openconfig" +) + +func TestNotificationToMap(t *testing.T) { + value := map[string]interface{}{ + "239.255.255.250_0.0.0.0": map[string]interface{}{ + "creationTime": 4.567969230573434e+06, + }, + } + valueJSON, err := json.Marshal(value) + if err != nil { + t.Fatal(err) + } + tests := []struct { + notification openconfig.Notification + json map[string]interface{} + }{{ + notification: openconfig.Notification{ + Prefix: &openconfig.Path{ + Element: []string{ + "foo", + }, + }, + Update: []*openconfig.Update{ + { + Path: &openconfig.Path{ + Element: []string{ + "route1", + }, + }, + Value: &openconfig.Value{ + Value: valueJSON, + }, + }, { + Path: &openconfig.Path{ + Element: []string{ + "route2", + }, + }, + Value: &openconfig.Value{ + Value: valueJSON, + }, + }}, + }, + json: map[string]interface{}{ + "timestamp": int64(0), + "dataset": "cairo", + "update": map[string]interface{}{ + "foo": map[string]interface{}{ + "route1": map[string]interface{}{ + "239.255.255.250_0.0.0.0": map[string]interface{}{ + "creationTime": 4.567969230573434e+06, + }, + }, + "route2": map[string]interface{}{ + "239.255.255.250_0.0.0.0": map[string]interface{}{ + "creationTime": 4.567969230573434e+06, + }, + }, + }, + }, + }, + }, { + notification: openconfig.Notification{ + Prefix: &openconfig.Path{ + Element: []string{ + "foo", "bar", + }, + }, + Delete: []*openconfig.Path{ + { + Element: []string{ + "route", "237.255.255.250_0.0.0.0", + }}, + { + Element: []string{ + "route", "238.255.255.250_0.0.0.0", + }, + }, + }, + Update: []*openconfig.Update{{ + Path: &openconfig.Path{ + Element: []string{ + "route", + }, + }, + Value: &openconfig.Value{ + Value: valueJSON, + }, + }}, + }, + json: map[string]interface{}{ + "timestamp": int64(0), + "dataset": "cairo", + "delete": map[string]interface{}{ + "foo": map[string]interface{}{ + "bar": map[string]interface{}{ + "route": map[string]interface{}{ + "237.255.255.250_0.0.0.0": map[string]interface{}{}, + "238.255.255.250_0.0.0.0": map[string]interface{}{}, + }, + }, + }, + }, + "update": map[string]interface{}{ + "foo": map[string]interface{}{ + "bar": map[string]interface{}{ + "route": map[string]interface{}{ + "239.255.255.250_0.0.0.0": map[string]interface{}{ + "creationTime": 4.567969230573434e+06, + }, + }, + }, + }, + }, + }, + }} + for _, tcase := range tests { + actual, err := NotificationToMap("cairo", &tcase.notification, nil) + if err != nil { + t.Fatal(err) + } + diff := test.Diff(tcase.json, actual) + if len(diff) > 0 { + expectedJSON, _ := json.Marshal(tcase.json) + actualJSON, _ := json.Marshal(actual) + t.Fatalf("Unexpected diff: %s\nExpected:\n%s\nGot:\n%s\n)", diff, expectedJSON, + actualJSON) + } + } +} diff --git a/forks/google/gnmi/model.go b/forks/google/gnmi/model.go new file mode 100644 index 0000000000000000000000000000000000000000..8d6a4998be62fba77ec2b50ea7decfb8b989fb75 --- /dev/null +++ b/forks/google/gnmi/model.go @@ -0,0 +1,128 @@ +/* Copyright 2017 Google Inc. + +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 + + https://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. +*/ + +package gnmi + +import ( + oc "code.fbi.h-da.de/cocsn/yang-models/generated/arista" + "errors" + "fmt" + log "github.com/sirupsen/logrus" + "net" + "reflect" + "sort" + + "github.com/openconfig/goyang/pkg/yang" + "github.com/openconfig/ygot/ygot" + "github.com/openconfig/ygot/ytypes" + + pb "github.com/openconfig/gnmi/proto/gnmi" +) + +// JSONUnmarshaler is the signature of the Unmarshal() function in the GoStruct code generated by openconfig ygot library. +type JSONUnmarshaler func([]byte, ygot.GoStruct, ...ytypes.UnmarshalOpt) error + +// GoStructEnumData is the data type to maintain GoStruct enum type. +type GoStructEnumData map[string]map[int64]ygot.EnumDefinition + +// Model contains the model data and GoStruct information for the device to config. +type Model struct { + modelData []*pb.ModelData + structRootType reflect.Type + schemaTreeRoot *yang.Entry + jsonUnmarshaler JSONUnmarshaler + enumData GoStructEnumData +} + +// NewModel returns an instance of Model struct. +func NewModel(m []*pb.ModelData, t reflect.Type, r *yang.Entry, f JSONUnmarshaler, e GoStructEnumData) *Model { + return &Model{ + modelData: m, + structRootType: t, + schemaTreeRoot: r, + jsonUnmarshaler: f, + enumData: e, + } +} + +func (m *Model) newRootValue() interface{} { + return reflect.New(m.structRootType.Elem()).Interface() +} + +// NewConfigStruct creates a ValidatedGoStruct of this model from jsonConfig. If jsonConfig is nil, creates an empty GoStruct. +func (m *Model) NewConfigStruct(jsonConfig []byte) (ygot.ValidatedGoStruct, error) { + rootStruct, ok := m.newRootValue().(ygot.ValidatedGoStruct) + if !ok { + return nil, errors.New("root node is not a ygot.ValidatedGoStruct") + } + ifaces, err := getInterfaces() + if err != nil { + return nil, err + } + device, ok := rootStruct.(*oc.Device) + if !ok { + return nil, errors.New("root node is not a oc.Device") + } + device.Interfaces = ifaces + return device, nil +} + +// SupportedModels returns a list of supported models. +func (m *Model) SupportedModels() []string { + mDesc := make([]string, len(m.modelData)) + for i, m := range m.modelData { + mDesc[i] = fmt.Sprintf("%s %s", m.Name, m.Version) + } + sort.Strings(mDesc) + return mDesc +} + +func getInterfaces() (*oc.OpenconfigInterfaces_Interfaces, error) { + ifaces, err := net.Interfaces() + if err != nil { + log.Fatal() + } + interfaces := &oc.OpenconfigInterfaces_Interfaces{ + Interface: make(map[string]*oc.OpenconfigInterfaces_Interfaces_Interface), + } + + for _, tInterface := range ifaces { + var mtu *uint16 + var name *string + var index *uint32 + + rmtu := uint16(tInterface.MTU) + rname := tInterface.Name + rindex := uint32(tInterface.Index) + + mtu = &rmtu + name = &rname + index = &rindex + + iface, err := interfaces.NewInterface(tInterface.Name) + if err != nil { + return nil, err + } + iface.State = &oc.OpenconfigInterfaces_Interfaces_Interface_State{ + Ifindex: &rindex, + Mtu: &rmtu, + Name: &rname, + } + iface.State.Name = name + iface.State.Mtu = mtu + iface.State.Ifindex = index + } + return interfaces, nil +} diff --git a/forks/google/gnmi/modeldata/gostruct/gen.go b/forks/google/gnmi/modeldata/gostruct/gen.go new file mode 100644 index 0000000000000000000000000000000000000000..310f7aed49d25d53adc7525eb2a8393051f69f99 --- /dev/null +++ b/forks/google/gnmi/modeldata/gostruct/gen.go @@ -0,0 +1,3 @@ +package gostruct + +//go:generate sh -c "go get -u github.com/openconfig/ygot; (cd $GOPATH/src/github.com/openconfig/ygot && go get -t -d ./...); go get -u github.com/openconfig/public; go get -u github.com/google/go-cmp/cmp; go get -u github.com/openconfig/gnmi/ctree; go get -u github.com/openconfig/gnmi/proto/gnmi; go get -u github.com/openconfig/gnmi/value; go get -u github.com/YangModels/yang; go get -u github.com/golang/glog; go get -u github.com/golang/protobuf/proto; go get -u github.com/kylelemons/godebug/pretty; go get -u github.com/openconfig/goyang/pkg/yang; go get -u google.golang.org/grpc; cd $GOPATH/src && go run github.com/openconfig/ygot/generator/generator.go -generate_fakeroot -output_file github.com/google/gnxi/gnmi/modeldata/gostruct/generated.go -package_name gostruct -exclude_modules ietf-interfaces -path github.com/openconfig/public,github.com/YangModels/yang github.com/openconfig/public/release/models/interfaces/openconfig-interfaces.yang github.com/openconfig/public/release/models/openflow/openconfig-openflow.yang github.com/openconfig/public/release/models/platform/openconfig-platform.yang github.com/openconfig/public/release/models/system/openconfig-system.yang" diff --git a/forks/google/gnmi/modeldata/gostruct/generated.go b/forks/google/gnmi/modeldata/gostruct/generated.go new file mode 100644 index 0000000000000000000000000000000000000000..fdc44110b15d3ba4f188c8907e9d88cbcc800f78 --- /dev/null +++ b/forks/google/gnmi/modeldata/gostruct/generated.go @@ -0,0 +1,10113 @@ +/* +Package gostruct is a generated package which contains definitions +of structs which represent a YANG schema. The generated schema can be +compressed by a series of transformations (compression was false +in this case). + +This package was generated by go/src/github.com/openconfig/ygot/genutil/names.go +using the following YANG input files: + - github.com/openconfig/public/release/models/interfaces/openconfig-interfaces.yang + - github.com/openconfig/public/release/models/openflow/openconfig-openflow.yang + - github.com/openconfig/public/release/models/platform/openconfig-platform.yang + - github.com/openconfig/public/release/models/system/openconfig-system.yang +Imported modules were sourced from: + - github.com/openconfig/public/... + - github.com/YangModels/yang/... +*/ +package gostruct + +import ( + "encoding/json" + "fmt" + "reflect" + + "github.com/openconfig/goyang/pkg/yang" + "github.com/openconfig/ygot/ygot" + "github.com/openconfig/ygot/ytypes" +) + +// Binary is a type that is used for fields that have a YANG type of +// binary. It is used such that binary fields can be distinguished from +// leaf-lists of uint8s (which are mapped to []uint8, equivalent to +// []byte in reflection). +type Binary []byte + +// YANGEmpty is a type that is used for fields that have a YANG type of +// empty. It is used such that empty fields can be distinguished from boolean fields +// in the generated code. +type YANGEmpty bool + +var ( + SchemaTree map[string]*yang.Entry +) + +func init() { + var err error + if SchemaTree, err = UnzipSchema(); err != nil { + panic("schema error: " + err.Error()) + } +} + +// Schema returns the details of the generated schema. +func Schema() (*ytypes.Schema, error) { + uzp, err := UnzipSchema() + if err != nil { + return nil, fmt.Errorf("cannot unzip schema, %v", err) + } + + return &ytypes.Schema{ + Root: &Device{}, + SchemaTree: uzp, + Unmarshal: Unmarshal, + }, nil +} + +// UnzipSchema unzips the zipped schema and returns a map of yang.Entry nodes, +// keyed by the name of the struct that the yang.Entry describes the schema for. +func UnzipSchema() (map[string]*yang.Entry, error) { + var schemaTree map[string]*yang.Entry + var err error + if schemaTree, err = ygot.GzipToSchema(ySchema); err != nil { + return nil, fmt.Errorf("could not unzip the schema; %v", err) + } + return schemaTree, nil +} + +// Unmarshal unmarshals data, which must be RFC7951 JSON format, into +// destStruct, which must be non-nil and the correct GoStruct type. It returns +// an error if the destStruct is not found in the schema or the data cannot be +// unmarshaled. The supplied options (opts) are used to control the behaviour +// of the unmarshal function - for example, determining whether errors are +// thrown for unknown fields in the input JSON. +func Unmarshal(data []byte, destStruct ygot.GoStruct, opts ...ytypes.UnmarshalOpt) error { + tn := reflect.TypeOf(destStruct).Elem().Name() + schema, ok := SchemaTree[tn] + if !ok { + return fmt.Errorf("could not find schema for type %s", tn) + } + var jsonTree interface{} + if err := json.Unmarshal([]byte(data), &jsonTree); err != nil { + return err + } + return ytypes.Unmarshal(schema, destStruct, jsonTree, opts...) +} + +// Device represents the /device YANG schema element. +type Device struct { + Components *OpenconfigPlatform_Components `path:"components" module:"openconfig-platform"` + Interfaces *OpenconfigInterfaces_Interfaces `path:"interfaces" module:"openconfig-interfaces"` + Messages *OpenconfigMessages_Messages `path:"messages" module:"openconfig-messages"` + System *OpenconfigSystem_System `path:"system" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that Device implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*Device) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *Device) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["Device"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *Device) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigInterfaces_Interfaces represents the /openconfig-interfaces/interfaces YANG schema element. +type OpenconfigInterfaces_Interfaces struct { + Interface map[string]*OpenconfigInterfaces_Interfaces_Interface `path:"interface" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces) IsYANGGoStruct() {} + +// NewInterface creates a new entry in the Interface list of the +// OpenconfigInterfaces_Interfaces struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigInterfaces_Interfaces) NewInterface(Name string) (*OpenconfigInterfaces_Interfaces_Interface, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Interface == nil { + t.Interface = make(map[string]*OpenconfigInterfaces_Interfaces_Interface) + } + + key := Name + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Interface[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Interface", key) + } + + t.Interface[key] = &OpenconfigInterfaces_Interfaces_Interface{ + Name: &Name, + } + + return t.Interface[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface represents the /openconfig-interfaces/interfaces/interface YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface struct { + Config *OpenconfigInterfaces_Interfaces_Interface_Config `path:"config" module:"openconfig-interfaces"` + HoldTime *OpenconfigInterfaces_Interfaces_Interface_HoldTime `path:"hold-time" module:"openconfig-interfaces"` + Name *string `path:"name" module:"openconfig-interfaces"` + State *OpenconfigInterfaces_Interfaces_Interface_State `path:"state" module:"openconfig-interfaces"` + Subinterfaces *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces `path:"subinterfaces" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigInterfaces_Interfaces_Interface struct, which is a YANG list entry. +func (t *OpenconfigInterfaces_Interfaces_Interface) ΛListKeyMap() (map[string]interface{}, error) { + if t.Name == nil { + return nil, fmt.Errorf("nil value for key Name") + } + + return map[string]interface{}{ + "name": *t.Name, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_Config represents the /openconfig-interfaces/interfaces/interface/config YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_Config struct { + Description *string `path:"description" module:"openconfig-interfaces"` + Enabled *bool `path:"enabled" module:"openconfig-interfaces"` + LoopbackMode *bool `path:"loopback-mode" module:"openconfig-interfaces"` + Mtu *uint16 `path:"mtu" module:"openconfig-interfaces"` + Name *string `path:"name" module:"openconfig-interfaces"` + Type E_IETFInterfaces_InterfaceType `path:"type" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_HoldTime represents the /openconfig-interfaces/interfaces/interface/hold-time YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_HoldTime struct { + Config *OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config `path:"config" module:"openconfig-interfaces"` + State *OpenconfigInterfaces_Interfaces_Interface_HoldTime_State `path:"state" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_HoldTime implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_HoldTime) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_HoldTime) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_HoldTime"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_HoldTime) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config represents the /openconfig-interfaces/interfaces/interface/hold-time/config YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config struct { + Down *uint32 `path:"down" module:"openconfig-interfaces"` + Up *uint32 `path:"up" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_HoldTime_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_HoldTime_State represents the /openconfig-interfaces/interfaces/interface/hold-time/state YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_HoldTime_State struct { + Down *uint32 `path:"down" module:"openconfig-interfaces"` + Up *uint32 `path:"up" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_HoldTime_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_HoldTime_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_HoldTime_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_HoldTime_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_HoldTime_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_State represents the /openconfig-interfaces/interfaces/interface/state YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_State struct { + AdminStatus E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus `path:"admin-status" module:"openconfig-interfaces"` + Counters *OpenconfigInterfaces_Interfaces_Interface_State_Counters `path:"counters" module:"openconfig-interfaces"` + Description *string `path:"description" module:"openconfig-interfaces"` + Enabled *bool `path:"enabled" module:"openconfig-interfaces"` + Ifindex *uint32 `path:"ifindex" module:"openconfig-interfaces"` + LastChange *uint64 `path:"last-change" module:"openconfig-interfaces"` + Logical *bool `path:"logical" module:"openconfig-interfaces"` + LoopbackMode *bool `path:"loopback-mode" module:"openconfig-interfaces"` + Mtu *uint16 `path:"mtu" module:"openconfig-interfaces"` + Name *string `path:"name" module:"openconfig-interfaces"` + OperStatus E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus `path:"oper-status" module:"openconfig-interfaces"` + Type E_IETFInterfaces_InterfaceType `path:"type" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_State_Counters represents the /openconfig-interfaces/interfaces/interface/state/counters YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_State_Counters struct { + CarrierTransitions *uint64 `path:"carrier-transitions" module:"openconfig-interfaces"` + InBroadcastPkts *uint64 `path:"in-broadcast-pkts" module:"openconfig-interfaces"` + InDiscards *uint64 `path:"in-discards" module:"openconfig-interfaces"` + InErrors *uint64 `path:"in-errors" module:"openconfig-interfaces"` + InFcsErrors *uint64 `path:"in-fcs-errors" module:"openconfig-interfaces"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-interfaces"` + InOctets *uint64 `path:"in-octets" module:"openconfig-interfaces"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-interfaces"` + InUnicastPkts *uint64 `path:"in-unicast-pkts" module:"openconfig-interfaces"` + InUnknownProtos *uint64 `path:"in-unknown-protos" module:"openconfig-interfaces"` + LastClear *uint64 `path:"last-clear" module:"openconfig-interfaces"` + OutBroadcastPkts *uint64 `path:"out-broadcast-pkts" module:"openconfig-interfaces"` + OutDiscards *uint64 `path:"out-discards" module:"openconfig-interfaces"` + OutErrors *uint64 `path:"out-errors" module:"openconfig-interfaces"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-interfaces"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-interfaces"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-interfaces"` + OutUnicastPkts *uint64 `path:"out-unicast-pkts" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_State_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_State_Counters) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_State_Counters) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_State_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_State_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_Subinterfaces represents the /openconfig-interfaces/interfaces/interface/subinterfaces YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_Subinterfaces struct { + Subinterface map[uint32]*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface `path:"subinterface" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_Subinterfaces implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces) IsYANGGoStruct() {} + +// NewSubinterface creates a new entry in the Subinterface list of the +// OpenconfigInterfaces_Interfaces_Interface_Subinterfaces struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces) NewSubinterface(Index uint32) (*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Subinterface == nil { + t.Subinterface = make(map[uint32]*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface) + } + + key := Index + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Subinterface[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Subinterface", key) + } + + t.Subinterface[key] = &OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface{ + Index: &Index, + } + + return t.Subinterface[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_Subinterfaces"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface struct { + Config *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config `path:"config" module:"openconfig-interfaces"` + Index *uint32 `path:"index" module:"openconfig-interfaces"` + State *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State `path:"state" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface struct, which is a YANG list entry. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface) ΛListKeyMap() (map[string]interface{}, error) { + if t.Index == nil { + return nil, fmt.Errorf("nil value for key Index") + } + + return map[string]interface{}{ + "index": *t.Index, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/config YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config struct { + Description *string `path:"description" module:"openconfig-interfaces"` + Enabled *bool `path:"enabled" module:"openconfig-interfaces"` + Index *uint32 `path:"index" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/state YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State struct { + AdminStatus E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus `path:"admin-status" module:"openconfig-interfaces"` + Counters *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters `path:"counters" module:"openconfig-interfaces"` + Description *string `path:"description" module:"openconfig-interfaces"` + Enabled *bool `path:"enabled" module:"openconfig-interfaces"` + Ifindex *uint32 `path:"ifindex" module:"openconfig-interfaces"` + Index *uint32 `path:"index" module:"openconfig-interfaces"` + LastChange *uint64 `path:"last-change" module:"openconfig-interfaces"` + Logical *bool `path:"logical" module:"openconfig-interfaces"` + Name *string `path:"name" module:"openconfig-interfaces"` + OperStatus E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus `path:"oper-status" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters represents the /openconfig-interfaces/interfaces/interface/subinterfaces/subinterface/state/counters YANG schema element. +type OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters struct { + CarrierTransitions *uint64 `path:"carrier-transitions" module:"openconfig-interfaces"` + InBroadcastPkts *uint64 `path:"in-broadcast-pkts" module:"openconfig-interfaces"` + InDiscards *uint64 `path:"in-discards" module:"openconfig-interfaces"` + InErrors *uint64 `path:"in-errors" module:"openconfig-interfaces"` + InFcsErrors *uint64 `path:"in-fcs-errors" module:"openconfig-interfaces"` + InMulticastPkts *uint64 `path:"in-multicast-pkts" module:"openconfig-interfaces"` + InOctets *uint64 `path:"in-octets" module:"openconfig-interfaces"` + InPkts *uint64 `path:"in-pkts" module:"openconfig-interfaces"` + InUnicastPkts *uint64 `path:"in-unicast-pkts" module:"openconfig-interfaces"` + InUnknownProtos *uint64 `path:"in-unknown-protos" module:"openconfig-interfaces"` + LastClear *uint64 `path:"last-clear" module:"openconfig-interfaces"` + OutBroadcastPkts *uint64 `path:"out-broadcast-pkts" module:"openconfig-interfaces"` + OutDiscards *uint64 `path:"out-discards" module:"openconfig-interfaces"` + OutErrors *uint64 `path:"out-errors" module:"openconfig-interfaces"` + OutMulticastPkts *uint64 `path:"out-multicast-pkts" module:"openconfig-interfaces"` + OutOctets *uint64 `path:"out-octets" module:"openconfig-interfaces"` + OutPkts *uint64 `path:"out-pkts" module:"openconfig-interfaces"` + OutUnicastPkts *uint64 `path:"out-unicast-pkts" module:"openconfig-interfaces"` +} + +// IsYANGGoStruct ensures that OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigInterfaces_Interfaces_Interface_Subinterfaces_Subinterface_State_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigMessages_Messages represents the /openconfig-messages/messages YANG schema element. +type OpenconfigMessages_Messages struct { + Config *OpenconfigMessages_Messages_Config `path:"config" module:"openconfig-messages"` + DebugEntries *OpenconfigMessages_Messages_DebugEntries `path:"debug-entries" module:"openconfig-messages"` + State *OpenconfigMessages_Messages_State `path:"state" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigMessages_Messages_Config represents the /openconfig-messages/messages/config YANG schema element. +type OpenconfigMessages_Messages_Config struct { + Severity E_OpenconfigMessages_SyslogSeverity `path:"severity" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigMessages_Messages_DebugEntries represents the /openconfig-messages/messages/debug-entries YANG schema element. +type OpenconfigMessages_Messages_DebugEntries struct { + DebugService map[E_OpenconfigMessages_DEBUG_SERVICE]*OpenconfigMessages_Messages_DebugEntries_DebugService `path:"debug-service" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages_DebugEntries implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages_DebugEntries) IsYANGGoStruct() {} + +// NewDebugService creates a new entry in the DebugService list of the +// OpenconfigMessages_Messages_DebugEntries struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigMessages_Messages_DebugEntries) NewDebugService(Service E_OpenconfigMessages_DEBUG_SERVICE) (*OpenconfigMessages_Messages_DebugEntries_DebugService, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.DebugService == nil { + t.DebugService = make(map[E_OpenconfigMessages_DEBUG_SERVICE]*OpenconfigMessages_Messages_DebugEntries_DebugService) + } + + key := Service + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.DebugService[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list DebugService", key) + } + + t.DebugService[key] = &OpenconfigMessages_Messages_DebugEntries_DebugService{ + Service: Service, + } + + return t.DebugService[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages_DebugEntries) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages_DebugEntries"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages_DebugEntries) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigMessages_Messages_DebugEntries_DebugService represents the /openconfig-messages/messages/debug-entries/debug-service YANG schema element. +type OpenconfigMessages_Messages_DebugEntries_DebugService struct { + Config *OpenconfigMessages_Messages_DebugEntries_DebugService_Config `path:"config" module:"openconfig-messages"` + Service E_OpenconfigMessages_DEBUG_SERVICE `path:"service" module:"openconfig-messages"` + State *OpenconfigMessages_Messages_DebugEntries_DebugService_State `path:"state" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages_DebugEntries_DebugService implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages_DebugEntries_DebugService) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigMessages_Messages_DebugEntries_DebugService struct, which is a YANG list entry. +func (t *OpenconfigMessages_Messages_DebugEntries_DebugService) ΛListKeyMap() (map[string]interface{}, error) { + + return map[string]interface{}{ + "service": t.Service, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages_DebugEntries_DebugService) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages_DebugEntries_DebugService"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages_DebugEntries_DebugService) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigMessages_Messages_DebugEntries_DebugService_Config represents the /openconfig-messages/messages/debug-entries/debug-service/config YANG schema element. +type OpenconfigMessages_Messages_DebugEntries_DebugService_Config struct { + Enabled *bool `path:"enabled" module:"openconfig-messages"` + Service E_OpenconfigMessages_DEBUG_SERVICE `path:"service" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages_DebugEntries_DebugService_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages_DebugEntries_DebugService_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages_DebugEntries_DebugService_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages_DebugEntries_DebugService_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages_DebugEntries_DebugService_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigMessages_Messages_DebugEntries_DebugService_State represents the /openconfig-messages/messages/debug-entries/debug-service/state YANG schema element. +type OpenconfigMessages_Messages_DebugEntries_DebugService_State struct { + Enabled *bool `path:"enabled" module:"openconfig-messages"` + Service E_OpenconfigMessages_DEBUG_SERVICE `path:"service" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages_DebugEntries_DebugService_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages_DebugEntries_DebugService_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages_DebugEntries_DebugService_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages_DebugEntries_DebugService_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages_DebugEntries_DebugService_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigMessages_Messages_State represents the /openconfig-messages/messages/state YANG schema element. +type OpenconfigMessages_Messages_State struct { + Message *OpenconfigMessages_Messages_State_Message `path:"message" module:"openconfig-messages"` + Severity E_OpenconfigMessages_SyslogSeverity `path:"severity" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigMessages_Messages_State_Message represents the /openconfig-messages/messages/state/message YANG schema element. +type OpenconfigMessages_Messages_State_Message struct { + AppName *string `path:"app-name" module:"openconfig-messages"` + Msg *string `path:"msg" module:"openconfig-messages"` + Msgid *string `path:"msgid" module:"openconfig-messages"` + Priority *uint8 `path:"priority" module:"openconfig-messages"` + Procid *string `path:"procid" module:"openconfig-messages"` +} + +// IsYANGGoStruct ensures that OpenconfigMessages_Messages_State_Message implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigMessages_Messages_State_Message) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigMessages_Messages_State_Message) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigMessages_Messages_State_Message"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigMessages_Messages_State_Message) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components represents the /openconfig-platform/components YANG schema element. +type OpenconfigPlatform_Components struct { + Component map[string]*OpenconfigPlatform_Components_Component `path:"component" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components) IsYANGGoStruct() {} + +// NewComponent creates a new entry in the Component list of the +// OpenconfigPlatform_Components struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigPlatform_Components) NewComponent(Name string) (*OpenconfigPlatform_Components_Component, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Component == nil { + t.Component = make(map[string]*OpenconfigPlatform_Components_Component) + } + + key := Name + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Component[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Component", key) + } + + t.Component[key] = &OpenconfigPlatform_Components_Component{ + Name: &Name, + } + + return t.Component[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigPlatform_Components_Component represents the /openconfig-platform/components/component YANG schema element. +type OpenconfigPlatform_Components_Component struct { + Backplane *OpenconfigPlatform_Components_Component_Backplane `path:"backplane" module:"openconfig-platform"` + Chassis *OpenconfigPlatform_Components_Component_Chassis `path:"chassis" module:"openconfig-platform"` + Config *OpenconfigPlatform_Components_Component_Config `path:"config" module:"openconfig-platform"` + Cpu *OpenconfigPlatform_Components_Component_Cpu `path:"cpu" module:"openconfig-platform"` + Fabric *OpenconfigPlatform_Components_Component_Fabric `path:"fabric" module:"openconfig-platform"` + Fan *OpenconfigPlatform_Components_Component_Fan `path:"fan" module:"openconfig-platform"` + IntegratedCircuit *OpenconfigPlatform_Components_Component_IntegratedCircuit `path:"integrated-circuit" module:"openconfig-platform"` + Name *string `path:"name" module:"openconfig-platform"` + Port *OpenconfigPlatform_Components_Component_Port `path:"port" module:"openconfig-platform"` + PowerSupply *OpenconfigPlatform_Components_Component_PowerSupply `path:"power-supply" module:"openconfig-platform"` + Properties *OpenconfigPlatform_Components_Component_Properties `path:"properties" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_State `path:"state" module:"openconfig-platform"` + Storage *OpenconfigPlatform_Components_Component_Storage `path:"storage" module:"openconfig-platform"` + Subcomponents *OpenconfigPlatform_Components_Component_Subcomponents `path:"subcomponents" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigPlatform_Components_Component struct, which is a YANG list entry. +func (t *OpenconfigPlatform_Components_Component) ΛListKeyMap() (map[string]interface{}, error) { + if t.Name == nil { + return nil, fmt.Errorf("nil value for key Name") + } + + return map[string]interface{}{ + "name": *t.Name, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Backplane represents the /openconfig-platform/components/component/backplane YANG schema element. +type OpenconfigPlatform_Components_Component_Backplane struct { + Config *OpenconfigPlatform_Components_Component_Backplane_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Backplane_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Backplane implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Backplane) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Backplane) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Backplane"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Backplane) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Backplane_Config represents the /openconfig-platform/components/component/backplane/config YANG schema element. +type OpenconfigPlatform_Components_Component_Backplane_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Backplane_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Backplane_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Backplane_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Backplane_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Backplane_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Backplane_State represents the /openconfig-platform/components/component/backplane/state YANG schema element. +type OpenconfigPlatform_Components_Component_Backplane_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Backplane_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Backplane_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Backplane_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Backplane_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Backplane_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Chassis represents the /openconfig-platform/components/component/chassis YANG schema element. +type OpenconfigPlatform_Components_Component_Chassis struct { + Config *OpenconfigPlatform_Components_Component_Chassis_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Chassis_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Chassis implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Chassis) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Chassis) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Chassis"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Chassis) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Chassis_Config represents the /openconfig-platform/components/component/chassis/config YANG schema element. +type OpenconfigPlatform_Components_Component_Chassis_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Chassis_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Chassis_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Chassis_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Chassis_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Chassis_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Chassis_State represents the /openconfig-platform/components/component/chassis/state YANG schema element. +type OpenconfigPlatform_Components_Component_Chassis_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Chassis_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Chassis_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Chassis_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Chassis_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Chassis_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Config represents the /openconfig-platform/components/component/config YANG schema element. +type OpenconfigPlatform_Components_Component_Config struct { + Name *string `path:"name" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Cpu represents the /openconfig-platform/components/component/cpu YANG schema element. +type OpenconfigPlatform_Components_Component_Cpu struct { + Config *OpenconfigPlatform_Components_Component_Cpu_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Cpu_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Cpu implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Cpu) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Cpu) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Cpu"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Cpu) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Cpu_Config represents the /openconfig-platform/components/component/cpu/config YANG schema element. +type OpenconfigPlatform_Components_Component_Cpu_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Cpu_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Cpu_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Cpu_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Cpu_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Cpu_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Cpu_State represents the /openconfig-platform/components/component/cpu/state YANG schema element. +type OpenconfigPlatform_Components_Component_Cpu_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Cpu_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Cpu_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Cpu_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Cpu_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Cpu_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Fabric represents the /openconfig-platform/components/component/fabric YANG schema element. +type OpenconfigPlatform_Components_Component_Fabric struct { + Config *OpenconfigPlatform_Components_Component_Fabric_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Fabric_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Fabric implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Fabric) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Fabric) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Fabric"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Fabric) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Fabric_Config represents the /openconfig-platform/components/component/fabric/config YANG schema element. +type OpenconfigPlatform_Components_Component_Fabric_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Fabric_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Fabric_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Fabric_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Fabric_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Fabric_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Fabric_State represents the /openconfig-platform/components/component/fabric/state YANG schema element. +type OpenconfigPlatform_Components_Component_Fabric_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Fabric_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Fabric_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Fabric_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Fabric_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Fabric_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Fan represents the /openconfig-platform/components/component/fan YANG schema element. +type OpenconfigPlatform_Components_Component_Fan struct { + Config *OpenconfigPlatform_Components_Component_Fan_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Fan_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Fan implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Fan) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Fan) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Fan"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Fan) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Fan_Config represents the /openconfig-platform/components/component/fan/config YANG schema element. +type OpenconfigPlatform_Components_Component_Fan_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Fan_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Fan_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Fan_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Fan_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Fan_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Fan_State represents the /openconfig-platform/components/component/fan/state YANG schema element. +type OpenconfigPlatform_Components_Component_Fan_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Fan_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Fan_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Fan_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Fan_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Fan_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_IntegratedCircuit represents the /openconfig-platform/components/component/integrated-circuit YANG schema element. +type OpenconfigPlatform_Components_Component_IntegratedCircuit struct { + Config *OpenconfigPlatform_Components_Component_IntegratedCircuit_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_IntegratedCircuit_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_IntegratedCircuit implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_IntegratedCircuit) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_IntegratedCircuit) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_IntegratedCircuit"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_IntegratedCircuit) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_IntegratedCircuit_Config represents the /openconfig-platform/components/component/integrated-circuit/config YANG schema element. +type OpenconfigPlatform_Components_Component_IntegratedCircuit_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_IntegratedCircuit_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_IntegratedCircuit_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_IntegratedCircuit_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_IntegratedCircuit_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_IntegratedCircuit_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_IntegratedCircuit_State represents the /openconfig-platform/components/component/integrated-circuit/state YANG schema element. +type OpenconfigPlatform_Components_Component_IntegratedCircuit_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_IntegratedCircuit_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_IntegratedCircuit_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_IntegratedCircuit_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_IntegratedCircuit_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_IntegratedCircuit_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Port represents the /openconfig-platform/components/component/port YANG schema element. +type OpenconfigPlatform_Components_Component_Port struct { + Config *OpenconfigPlatform_Components_Component_Port_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Port_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Port implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Port) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Port) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Port"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Port) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Port_Config represents the /openconfig-platform/components/component/port/config YANG schema element. +type OpenconfigPlatform_Components_Component_Port_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Port_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Port_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Port_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Port_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Port_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Port_State represents the /openconfig-platform/components/component/port/state YANG schema element. +type OpenconfigPlatform_Components_Component_Port_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Port_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Port_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Port_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Port_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Port_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_PowerSupply represents the /openconfig-platform/components/component/power-supply YANG schema element. +type OpenconfigPlatform_Components_Component_PowerSupply struct { + Config *OpenconfigPlatform_Components_Component_PowerSupply_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_PowerSupply_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_PowerSupply implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_PowerSupply) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_PowerSupply) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_PowerSupply"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_PowerSupply) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_PowerSupply_Config represents the /openconfig-platform/components/component/power-supply/config YANG schema element. +type OpenconfigPlatform_Components_Component_PowerSupply_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_PowerSupply_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_PowerSupply_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_PowerSupply_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_PowerSupply_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_PowerSupply_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_PowerSupply_State represents the /openconfig-platform/components/component/power-supply/state YANG schema element. +type OpenconfigPlatform_Components_Component_PowerSupply_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_PowerSupply_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_PowerSupply_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_PowerSupply_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_PowerSupply_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_PowerSupply_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Properties represents the /openconfig-platform/components/component/properties YANG schema element. +type OpenconfigPlatform_Components_Component_Properties struct { + Property map[string]*OpenconfigPlatform_Components_Component_Properties_Property `path:"property" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Properties implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Properties) IsYANGGoStruct() {} + +// NewProperty creates a new entry in the Property list of the +// OpenconfigPlatform_Components_Component_Properties struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigPlatform_Components_Component_Properties) NewProperty(Name string) (*OpenconfigPlatform_Components_Component_Properties_Property, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Property == nil { + t.Property = make(map[string]*OpenconfigPlatform_Components_Component_Properties_Property) + } + + key := Name + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Property[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Property", key) + } + + t.Property[key] = &OpenconfigPlatform_Components_Component_Properties_Property{ + Name: &Name, + } + + return t.Property[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Properties) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Properties"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Properties) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Properties_Property represents the /openconfig-platform/components/component/properties/property YANG schema element. +type OpenconfigPlatform_Components_Component_Properties_Property struct { + Config *OpenconfigPlatform_Components_Component_Properties_Property_Config `path:"config" module:"openconfig-platform"` + Name *string `path:"name" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Properties_Property_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Properties_Property implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Properties_Property) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigPlatform_Components_Component_Properties_Property struct, which is a YANG list entry. +func (t *OpenconfigPlatform_Components_Component_Properties_Property) ΛListKeyMap() (map[string]interface{}, error) { + if t.Name == nil { + return nil, fmt.Errorf("nil value for key Name") + } + + return map[string]interface{}{ + "name": *t.Name, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Properties_Property) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Properties_Property"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Properties_Property) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Properties_Property_Config represents the /openconfig-platform/components/component/properties/property/config YANG schema element. +type OpenconfigPlatform_Components_Component_Properties_Property_Config struct { + Name *string `path:"name" module:"openconfig-platform"` + Value OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union `path:"value" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Properties_Property_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Properties_Property_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Properties_Property_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Properties_Property_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Properties_Property_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-platform/components/component/properties/property/config/value within the YANG schema. +type OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union interface { + Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union() +} + +// OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Bool is used when /openconfig-platform/components/component/properties/property/config/value +// is to be set to a bool value. +type OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Bool struct { + Bool bool +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Bool +// implements the OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Bool) Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Float64 is used when /openconfig-platform/components/component/properties/property/config/value +// is to be set to a float64 value. +type OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Float64 struct { + Float64 float64 +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Float64 +// implements the OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Float64) Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Int64 is used when /openconfig-platform/components/component/properties/property/config/value +// is to be set to a int64 value. +type OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Int64 struct { + Int64 int64 +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Int64 +// implements the OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Int64) Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_String is used when /openconfig-platform/components/component/properties/property/config/value +// is to be set to a string value. +type OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_String struct { + String string +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_String +// implements the OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_String) Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Uint64 is used when /openconfig-platform/components/component/properties/property/config/value +// is to be set to a uint64 value. +type OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Uint64 struct { + Uint64 uint64 +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Uint64 +// implements the OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Uint64) Is_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union() { +} + +// To_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigPlatform_Components_Component_Properties_Property_Config) To_OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union(i interface{}) (OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union, error) { + switch v := i.(type) { + case bool: + return &OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Bool{v}, nil + case float64: + return &OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Float64{v}, nil + case int64: + return &OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Int64{v}, nil + case string: + return &OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_String{v}, nil + case uint64: + return &OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union_Uint64{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigPlatform_Components_Component_Properties_Property_Config_Value_Union, unknown union type, got: %T, want any of [bool, float64, int64, string, uint64]", i, i) + } +} + +// OpenconfigPlatform_Components_Component_Properties_Property_State represents the /openconfig-platform/components/component/properties/property/state YANG schema element. +type OpenconfigPlatform_Components_Component_Properties_Property_State struct { + Configurable *bool `path:"configurable" module:"openconfig-platform"` + Name *string `path:"name" module:"openconfig-platform"` + Value OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union `path:"value" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Properties_Property_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Properties_Property_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Properties_Property_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Properties_Property_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Properties_Property_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-platform/components/component/properties/property/state/value within the YANG schema. +type OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union interface { + Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union() +} + +// OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Bool is used when /openconfig-platform/components/component/properties/property/state/value +// is to be set to a bool value. +type OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Bool struct { + Bool bool +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Bool +// implements the OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Bool) Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Float64 is used when /openconfig-platform/components/component/properties/property/state/value +// is to be set to a float64 value. +type OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Float64 struct { + Float64 float64 +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Float64 +// implements the OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Float64) Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Int64 is used when /openconfig-platform/components/component/properties/property/state/value +// is to be set to a int64 value. +type OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Int64 struct { + Int64 int64 +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Int64 +// implements the OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Int64) Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_String is used when /openconfig-platform/components/component/properties/property/state/value +// is to be set to a string value. +type OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_String struct { + String string +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_String +// implements the OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_String) Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union() { +} + +// OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Uint64 is used when /openconfig-platform/components/component/properties/property/state/value +// is to be set to a uint64 value. +type OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Uint64 struct { + Uint64 uint64 +} + +// Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union ensures that OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Uint64 +// implements the OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union interface. +func (*OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Uint64) Is_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union() { +} + +// To_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigPlatform_Components_Component_Properties_Property_State) To_OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union(i interface{}) (OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union, error) { + switch v := i.(type) { + case bool: + return &OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Bool{v}, nil + case float64: + return &OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Float64{v}, nil + case int64: + return &OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Int64{v}, nil + case string: + return &OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_String{v}, nil + case uint64: + return &OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union_Uint64{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigPlatform_Components_Component_Properties_Property_State_Value_Union, unknown union type, got: %T, want any of [bool, float64, int64, string, uint64]", i, i) + } +} + +// OpenconfigPlatform_Components_Component_State represents the /openconfig-platform/components/component/state YANG schema element. +type OpenconfigPlatform_Components_Component_State struct { + AllocatedPower *uint32 `path:"allocated-power" module:"openconfig-platform"` + Description *string `path:"description" module:"openconfig-platform"` + Empty *bool `path:"empty" module:"openconfig-platform"` + EquipmentFailure *bool `path:"equipment-failure" module:"openconfig-alarms"` + EquipmentMismatch *bool `path:"equipment-mismatch" module:"openconfig-alarms"` + FirmwareVersion *string `path:"firmware-version" module:"openconfig-platform"` + HardwareVersion *string `path:"hardware-version" module:"openconfig-platform"` + Id *string `path:"id" module:"openconfig-platform"` + Location *string `path:"location" module:"openconfig-platform"` + Memory *OpenconfigPlatform_Components_Component_State_Memory `path:"memory" module:"openconfig-platform"` + MfgDate *string `path:"mfg-date" module:"openconfig-platform"` + MfgName *string `path:"mfg-name" module:"openconfig-platform"` + Name *string `path:"name" module:"openconfig-platform"` + OperStatus E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS `path:"oper-status" module:"openconfig-platform"` + Parent *string `path:"parent" module:"openconfig-platform"` + PartNo *string `path:"part-no" module:"openconfig-platform"` + Removable *bool `path:"removable" module:"openconfig-platform"` + SerialNo *string `path:"serial-no" module:"openconfig-platform"` + SoftwareVersion *string `path:"software-version" module:"openconfig-platform"` + Temperature *OpenconfigPlatform_Components_Component_State_Temperature `path:"temperature" module:"openconfig-platform"` + Type OpenconfigPlatform_Components_Component_State_Type_Union `path:"type" module:"openconfig-platform"` + UsedPower *uint32 `path:"used-power" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_State_Type_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-platform/components/component/state/type within the YANG schema. +type OpenconfigPlatform_Components_Component_State_Type_Union interface { + Is_OpenconfigPlatform_Components_Component_State_Type_Union() +} + +// OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT is used when /openconfig-platform/components/component/state/type +// is to be set to a E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT value. +type OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT struct { + E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT +} + +// Is_OpenconfigPlatform_Components_Component_State_Type_Union ensures that OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT +// implements the OpenconfigPlatform_Components_Component_State_Type_Union interface. +func (*OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT) Is_OpenconfigPlatform_Components_Component_State_Type_Union() { +} + +// OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT is used when /openconfig-platform/components/component/state/type +// is to be set to a E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT value. +type OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT struct { + E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT +} + +// Is_OpenconfigPlatform_Components_Component_State_Type_Union ensures that OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT +// implements the OpenconfigPlatform_Components_Component_State_Type_Union interface. +func (*OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT) Is_OpenconfigPlatform_Components_Component_State_Type_Union() { +} + +// To_OpenconfigPlatform_Components_Component_State_Type_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigPlatform_Components_Component_State_Type_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigPlatform_Components_Component_State) To_OpenconfigPlatform_Components_Component_State_Type_Union(i interface{}) (OpenconfigPlatform_Components_Component_State_Type_Union, error) { + switch v := i.(type) { + case E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT: + return &OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT{v}, nil + case E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT: + return &OpenconfigPlatform_Components_Component_State_Type_Union_E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigPlatform_Components_Component_State_Type_Union, unknown union type, got: %T, want any of [E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT, E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT]", i, i) + } +} + +// OpenconfigPlatform_Components_Component_State_Memory represents the /openconfig-platform/components/component/state/memory YANG schema element. +type OpenconfigPlatform_Components_Component_State_Memory struct { + Available *uint64 `path:"available" module:"openconfig-platform"` + Utilized *uint64 `path:"utilized" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_State_Memory implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_State_Memory) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_State_Memory) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_State_Memory"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_State_Memory) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_State_Temperature represents the /openconfig-platform/components/component/state/temperature YANG schema element. +type OpenconfigPlatform_Components_Component_State_Temperature struct { + AlarmSeverity E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY `path:"alarm-severity" module:"openconfig-platform"` + AlarmStatus *bool `path:"alarm-status" module:"openconfig-platform"` + AlarmThreshold *uint32 `path:"alarm-threshold" module:"openconfig-platform"` + Avg *float64 `path:"avg" module:"openconfig-platform"` + Instant *float64 `path:"instant" module:"openconfig-platform"` + Interval *uint64 `path:"interval" module:"openconfig-platform"` + Max *float64 `path:"max" module:"openconfig-platform"` + MaxTime *uint64 `path:"max-time" module:"openconfig-platform"` + Min *float64 `path:"min" module:"openconfig-platform"` + MinTime *uint64 `path:"min-time" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_State_Temperature implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_State_Temperature) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_State_Temperature) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_State_Temperature"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_State_Temperature) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Storage represents the /openconfig-platform/components/component/storage YANG schema element. +type OpenconfigPlatform_Components_Component_Storage struct { + Config *OpenconfigPlatform_Components_Component_Storage_Config `path:"config" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Storage_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Storage implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Storage) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Storage) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Storage"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Storage) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Storage_Config represents the /openconfig-platform/components/component/storage/config YANG schema element. +type OpenconfigPlatform_Components_Component_Storage_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Storage_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Storage_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Storage_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Storage_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Storage_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Storage_State represents the /openconfig-platform/components/component/storage/state YANG schema element. +type OpenconfigPlatform_Components_Component_Storage_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Storage_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Storage_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Storage_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Storage_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Storage_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Subcomponents represents the /openconfig-platform/components/component/subcomponents YANG schema element. +type OpenconfigPlatform_Components_Component_Subcomponents struct { + Subcomponent map[string]*OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent `path:"subcomponent" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Subcomponents implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Subcomponents) IsYANGGoStruct() {} + +// NewSubcomponent creates a new entry in the Subcomponent list of the +// OpenconfigPlatform_Components_Component_Subcomponents struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigPlatform_Components_Component_Subcomponents) NewSubcomponent(Name string) (*OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Subcomponent == nil { + t.Subcomponent = make(map[string]*OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent) + } + + key := Name + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Subcomponent[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Subcomponent", key) + } + + t.Subcomponent[key] = &OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent{ + Name: &Name, + } + + return t.Subcomponent[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Subcomponents) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Subcomponents"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Subcomponents) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent represents the /openconfig-platform/components/component/subcomponents/subcomponent YANG schema element. +type OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent struct { + Config *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config `path:"config" module:"openconfig-platform"` + Name *string `path:"name" module:"openconfig-platform"` + State *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State `path:"state" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent struct, which is a YANG list entry. +func (t *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent) ΛListKeyMap() (map[string]interface{}, error) { + if t.Name == nil { + return nil, fmt.Errorf("nil value for key Name") + } + + return map[string]interface{}{ + "name": *t.Name, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config represents the /openconfig-platform/components/component/subcomponents/subcomponent/config YANG schema element. +type OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config struct { + Name *string `path:"name" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State represents the /openconfig-platform/components/component/subcomponents/subcomponent/state YANG schema element. +type OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State struct { + Name *string `path:"name" module:"openconfig-platform"` +} + +// IsYANGGoStruct ensures that OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigPlatform_Components_Component_Subcomponents_Subcomponent_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System represents the /openconfig-system/system YANG schema element. +type OpenconfigSystem_System struct { + Aaa *OpenconfigSystem_System_Aaa `path:"aaa" module:"openconfig-system"` + Alarms *OpenconfigSystem_System_Alarms `path:"alarms" module:"openconfig-system"` + Clock *OpenconfigSystem_System_Clock `path:"clock" module:"openconfig-system"` + Config *OpenconfigSystem_System_Config `path:"config" module:"openconfig-system"` + Cpus *OpenconfigSystem_System_Cpus `path:"cpus" module:"openconfig-system"` + Dns *OpenconfigSystem_System_Dns `path:"dns" module:"openconfig-system"` + GrpcServer *OpenconfigSystem_System_GrpcServer `path:"grpc-server" module:"openconfig-system"` + License *OpenconfigSystem_System_License `path:"license" module:"openconfig-system"` + Logging *OpenconfigSystem_System_Logging `path:"logging" module:"openconfig-system"` + Memory *OpenconfigSystem_System_Memory `path:"memory" module:"openconfig-system"` + Messages *OpenconfigSystem_System_Messages `path:"messages" module:"openconfig-system"` + Ntp *OpenconfigSystem_System_Ntp `path:"ntp" module:"openconfig-system"` + Openflow *OpenconfigSystem_System_Openflow `path:"openflow" module:"openconfig-openflow"` + Processes *OpenconfigSystem_System_Processes `path:"processes" module:"openconfig-system"` + SshServer *OpenconfigSystem_System_SshServer `path:"ssh-server" module:"openconfig-system"` + State *OpenconfigSystem_System_State `path:"state" module:"openconfig-system"` + TelnetServer *OpenconfigSystem_System_TelnetServer `path:"telnet-server" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigSystem_System_Aaa represents the /openconfig-system/system/aaa YANG schema element. +type OpenconfigSystem_System_Aaa struct { + Accounting *OpenconfigSystem_System_Aaa_Accounting `path:"accounting" module:"openconfig-system"` + Authentication *OpenconfigSystem_System_Aaa_Authentication `path:"authentication" module:"openconfig-system"` + Authorization *OpenconfigSystem_System_Aaa_Authorization `path:"authorization" module:"openconfig-system"` + Config *OpenconfigSystem_System_Aaa_Config `path:"config" module:"openconfig-system"` + ServerGroups *OpenconfigSystem_System_Aaa_ServerGroups `path:"server-groups" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigSystem_System_Aaa_Accounting represents the /openconfig-system/system/aaa/accounting YANG schema element. +type OpenconfigSystem_System_Aaa_Accounting struct { + Config *OpenconfigSystem_System_Aaa_Accounting_Config `path:"config" module:"openconfig-system"` + Events *OpenconfigSystem_System_Aaa_Accounting_Events `path:"events" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_Accounting_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Accounting implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Accounting) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Accounting) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Accounting"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Accounting) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Accounting_Config represents the /openconfig-system/system/aaa/accounting/config YANG schema element. +type OpenconfigSystem_System_Aaa_Accounting_Config struct { + AccountingMethod []OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union `path:"accounting-method" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Accounting_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Accounting_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Accounting_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Accounting_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Accounting_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/accounting/config/accounting-method within the YANG schema. +type OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union interface { + Is_OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union() +} + +// OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE is used when /openconfig-system/system/aaa/accounting/config/accounting-method +// is to be set to a E_OpenconfigAaaTypes_AAA_METHOD_TYPE value. +type OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE struct { + E_OpenconfigAaaTypes_AAA_METHOD_TYPE E_OpenconfigAaaTypes_AAA_METHOD_TYPE +} + +// Is_OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union ensures that OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE +// implements the OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE) Is_OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union() { +} + +// OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_String is used when /openconfig-system/system/aaa/accounting/config/accounting-method +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union ensures that OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_String +// implements the OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_String) Is_OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Accounting_Config) To_OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union(i interface{}) (OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_AAA_METHOD_TYPE: + return &OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Accounting_Config_AccountingMethod_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_AAA_METHOD_TYPE, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Accounting_Events represents the /openconfig-system/system/aaa/accounting/events YANG schema element. +type OpenconfigSystem_System_Aaa_Accounting_Events struct { + Event map[E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE]*OpenconfigSystem_System_Aaa_Accounting_Events_Event `path:"event" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Accounting_Events implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Accounting_Events) IsYANGGoStruct() {} + +// NewEvent creates a new entry in the Event list of the +// OpenconfigSystem_System_Aaa_Accounting_Events struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events) NewEvent(EventType E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE) (*OpenconfigSystem_System_Aaa_Accounting_Events_Event, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Event == nil { + t.Event = make(map[E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE]*OpenconfigSystem_System_Aaa_Accounting_Events_Event) + } + + key := EventType + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Event[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Event", key) + } + + t.Event[key] = &OpenconfigSystem_System_Aaa_Accounting_Events_Event{ + EventType: EventType, + } + + return t.Event[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Accounting_Events"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Accounting_Events_Event represents the /openconfig-system/system/aaa/accounting/events/event YANG schema element. +type OpenconfigSystem_System_Aaa_Accounting_Events_Event struct { + Config *OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config `path:"config" module:"openconfig-system"` + EventType E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE `path:"event-type" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_Accounting_Events_Event_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Accounting_Events_Event implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Accounting_Events_Event) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Aaa_Accounting_Events_Event struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events_Event) ΛListKeyMap() (map[string]interface{}, error) { + + return map[string]interface{}{ + "event-type": t.EventType, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events_Event) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Accounting_Events_Event"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events_Event) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config represents the /openconfig-system/system/aaa/accounting/events/event/config YANG schema element. +type OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config struct { + EventType E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE `path:"event-type" module:"openconfig-system"` + Record E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record `path:"record" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Accounting_Events_Event_State represents the /openconfig-system/system/aaa/accounting/events/event/state YANG schema element. +type OpenconfigSystem_System_Aaa_Accounting_Events_Event_State struct { + EventType E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE `path:"event-type" module:"openconfig-system"` + Record E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record `path:"record" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Accounting_Events_Event_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Accounting_Events_Event_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events_Event_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Accounting_Events_Event_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Accounting_Events_Event_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Accounting_State represents the /openconfig-system/system/aaa/accounting/state YANG schema element. +type OpenconfigSystem_System_Aaa_Accounting_State struct { + AccountingMethod []OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union `path:"accounting-method" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Accounting_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Accounting_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Accounting_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Accounting_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Accounting_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/accounting/state/accounting-method within the YANG schema. +type OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union interface { + Is_OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union() +} + +// OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE is used when /openconfig-system/system/aaa/accounting/state/accounting-method +// is to be set to a E_OpenconfigAaaTypes_AAA_METHOD_TYPE value. +type OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE struct { + E_OpenconfigAaaTypes_AAA_METHOD_TYPE E_OpenconfigAaaTypes_AAA_METHOD_TYPE +} + +// Is_OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union ensures that OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE +// implements the OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE) Is_OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union() { +} + +// OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_String is used when /openconfig-system/system/aaa/accounting/state/accounting-method +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union ensures that OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_String +// implements the OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_String) Is_OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Accounting_State) To_OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union(i interface{}) (OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_AAA_METHOD_TYPE: + return &OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Accounting_State_AccountingMethod_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_AAA_METHOD_TYPE, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Authentication represents the /openconfig-system/system/aaa/authentication YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication struct { + AdminUser *OpenconfigSystem_System_Aaa_Authentication_AdminUser `path:"admin-user" module:"openconfig-system"` + Config *OpenconfigSystem_System_Aaa_Authentication_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_Authentication_State `path:"state" module:"openconfig-system"` + Users *OpenconfigSystem_System_Aaa_Authentication_Users `path:"users" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_AdminUser represents the /openconfig-system/system/aaa/authentication/admin-user YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_AdminUser struct { + Config *OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_Authentication_AdminUser_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_AdminUser implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_AdminUser) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_AdminUser) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_AdminUser"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_AdminUser) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config represents the /openconfig-system/system/aaa/authentication/admin-user/config YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config struct { + AdminPassword *string `path:"admin-password" module:"openconfig-system"` + AdminPasswordHashed *string `path:"admin-password-hashed" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_AdminUser_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_AdminUser_State represents the /openconfig-system/system/aaa/authentication/admin-user/state YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_AdminUser_State struct { + AdminPassword *string `path:"admin-password" module:"openconfig-system"` + AdminPasswordHashed *string `path:"admin-password-hashed" module:"openconfig-system"` + AdminUsername *string `path:"admin-username" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_AdminUser_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_AdminUser_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_AdminUser_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_AdminUser_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_AdminUser_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_Config represents the /openconfig-system/system/aaa/authentication/config YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_Config struct { + AuthenticationMethod []OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union `path:"authentication-method" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/authentication/config/authentication-method within the YANG schema. +type OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union interface { + Is_OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union() +} + +// OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE is used when /openconfig-system/system/aaa/authentication/config/authentication-method +// is to be set to a E_OpenconfigAaaTypes_AAA_METHOD_TYPE value. +type OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE struct { + E_OpenconfigAaaTypes_AAA_METHOD_TYPE E_OpenconfigAaaTypes_AAA_METHOD_TYPE +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE +// implements the OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE) Is_OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union() { +} + +// OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_String is used when /openconfig-system/system/aaa/authentication/config/authentication-method +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_String +// implements the OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_String) Is_OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Authentication_Config) To_OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union(i interface{}) (OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_AAA_METHOD_TYPE: + return &OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Authentication_Config_AuthenticationMethod_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_AAA_METHOD_TYPE, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Authentication_State represents the /openconfig-system/system/aaa/authentication/state YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_State struct { + AuthenticationMethod []OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union `path:"authentication-method" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/authentication/state/authentication-method within the YANG schema. +type OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union interface { + Is_OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union() +} + +// OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE is used when /openconfig-system/system/aaa/authentication/state/authentication-method +// is to be set to a E_OpenconfigAaaTypes_AAA_METHOD_TYPE value. +type OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE struct { + E_OpenconfigAaaTypes_AAA_METHOD_TYPE E_OpenconfigAaaTypes_AAA_METHOD_TYPE +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE +// implements the OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE) Is_OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union() { +} + +// OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_String is used when /openconfig-system/system/aaa/authentication/state/authentication-method +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_String +// implements the OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_String) Is_OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Authentication_State) To_OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union(i interface{}) (OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_AAA_METHOD_TYPE: + return &OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Authentication_State_AuthenticationMethod_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_AAA_METHOD_TYPE, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Authentication_Users represents the /openconfig-system/system/aaa/authentication/users YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_Users struct { + User map[string]*OpenconfigSystem_System_Aaa_Authentication_Users_User `path:"user" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_Users implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_Users) IsYANGGoStruct() {} + +// NewUser creates a new entry in the User list of the +// OpenconfigSystem_System_Aaa_Authentication_Users struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users) NewUser(Username string) (*OpenconfigSystem_System_Aaa_Authentication_Users_User, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.User == nil { + t.User = make(map[string]*OpenconfigSystem_System_Aaa_Authentication_Users_User) + } + + key := Username + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.User[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list User", key) + } + + t.User[key] = &OpenconfigSystem_System_Aaa_Authentication_Users_User{ + Username: &Username, + } + + return t.User[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_Users"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User represents the /openconfig-system/system/aaa/authentication/users/user YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_Users_User struct { + Config *OpenconfigSystem_System_Aaa_Authentication_Users_User_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_Authentication_Users_User_State `path:"state" module:"openconfig-system"` + Username *string `path:"username" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_Users_User implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_Users_User) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Aaa_Authentication_Users_User struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User) ΛListKeyMap() (map[string]interface{}, error) { + if t.Username == nil { + return nil, fmt.Errorf("nil value for key Username") + } + + return map[string]interface{}{ + "username": *t.Username, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_Users_User"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_Config represents the /openconfig-system/system/aaa/authentication/users/user/config YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_Config struct { + Password *string `path:"password" module:"openconfig-system"` + PasswordHashed *string `path:"password-hashed" module:"openconfig-system"` + Role OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union `path:"role" module:"openconfig-system"` + SshKey *string `path:"ssh-key" module:"openconfig-system"` + Username *string `path:"username" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_Users_User_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_Users_User_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_Users_User_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/authentication/users/user/config/role within the YANG schema. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union interface { + Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union() +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES is used when /openconfig-system/system/aaa/authentication/users/user/config/role +// is to be set to a E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES value. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES struct { + E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union ensures that OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES +// implements the OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES) Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union() { +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_String is used when /openconfig-system/system/aaa/authentication/users/user/config/role +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union ensures that OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_String +// implements the OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_String) Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User_Config) To_OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union(i interface{}) (OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES: + return &OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Authentication_Users_User_Config_Role_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_State represents the /openconfig-system/system/aaa/authentication/users/user/state YANG schema element. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_State struct { + Password *string `path:"password" module:"openconfig-system"` + PasswordHashed *string `path:"password-hashed" module:"openconfig-system"` + Role OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union `path:"role" module:"openconfig-system"` + SshKey *string `path:"ssh-key" module:"openconfig-system"` + Username *string `path:"username" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authentication_Users_User_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authentication_Users_User_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authentication_Users_User_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/authentication/users/user/state/role within the YANG schema. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union interface { + Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union() +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES is used when /openconfig-system/system/aaa/authentication/users/user/state/role +// is to be set to a E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES value. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES struct { + E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union ensures that OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES +// implements the OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES) Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union() { +} + +// OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_String is used when /openconfig-system/system/aaa/authentication/users/user/state/role +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union ensures that OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_String +// implements the OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union interface. +func (*OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_String) Is_OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Authentication_Users_User_State) To_OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union(i interface{}) (OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES: + return &OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Authentication_Users_User_State_Role_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Authorization represents the /openconfig-system/system/aaa/authorization YANG schema element. +type OpenconfigSystem_System_Aaa_Authorization struct { + Config *OpenconfigSystem_System_Aaa_Authorization_Config `path:"config" module:"openconfig-system"` + Events *OpenconfigSystem_System_Aaa_Authorization_Events `path:"events" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_Authorization_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authorization implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authorization) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authorization) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authorization"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authorization) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authorization_Config represents the /openconfig-system/system/aaa/authorization/config YANG schema element. +type OpenconfigSystem_System_Aaa_Authorization_Config struct { + AuthorizationMethod []OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union `path:"authorization-method" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authorization_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authorization_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authorization_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authorization_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authorization_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/authorization/config/authorization-method within the YANG schema. +type OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union interface { + Is_OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union() +} + +// OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE is used when /openconfig-system/system/aaa/authorization/config/authorization-method +// is to be set to a E_OpenconfigAaaTypes_AAA_METHOD_TYPE value. +type OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE struct { + E_OpenconfigAaaTypes_AAA_METHOD_TYPE E_OpenconfigAaaTypes_AAA_METHOD_TYPE +} + +// Is_OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE +// implements the OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE) Is_OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union() { +} + +// OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_String is used when /openconfig-system/system/aaa/authorization/config/authorization-method +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_String +// implements the OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_String) Is_OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Authorization_Config) To_OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union(i interface{}) (OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_AAA_METHOD_TYPE: + return &OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Authorization_Config_AuthorizationMethod_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_AAA_METHOD_TYPE, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Authorization_Events represents the /openconfig-system/system/aaa/authorization/events YANG schema element. +type OpenconfigSystem_System_Aaa_Authorization_Events struct { + Event map[E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE]*OpenconfigSystem_System_Aaa_Authorization_Events_Event `path:"event" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authorization_Events implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authorization_Events) IsYANGGoStruct() {} + +// NewEvent creates a new entry in the Event list of the +// OpenconfigSystem_System_Aaa_Authorization_Events struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events) NewEvent(EventType E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE) (*OpenconfigSystem_System_Aaa_Authorization_Events_Event, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Event == nil { + t.Event = make(map[E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE]*OpenconfigSystem_System_Aaa_Authorization_Events_Event) + } + + key := EventType + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Event[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Event", key) + } + + t.Event[key] = &OpenconfigSystem_System_Aaa_Authorization_Events_Event{ + EventType: EventType, + } + + return t.Event[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authorization_Events"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authorization_Events_Event represents the /openconfig-system/system/aaa/authorization/events/event YANG schema element. +type OpenconfigSystem_System_Aaa_Authorization_Events_Event struct { + Config *OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config `path:"config" module:"openconfig-system"` + EventType E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE `path:"event-type" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_Authorization_Events_Event_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authorization_Events_Event implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authorization_Events_Event) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Aaa_Authorization_Events_Event struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events_Event) ΛListKeyMap() (map[string]interface{}, error) { + + return map[string]interface{}{ + "event-type": t.EventType, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events_Event) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authorization_Events_Event"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events_Event) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config represents the /openconfig-system/system/aaa/authorization/events/event/config YANG schema element. +type OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config struct { + EventType E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE `path:"event-type" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events_Event_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authorization_Events_Event_State represents the /openconfig-system/system/aaa/authorization/events/event/state YANG schema element. +type OpenconfigSystem_System_Aaa_Authorization_Events_Event_State struct { + EventType E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE `path:"event-type" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authorization_Events_Event_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authorization_Events_Event_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events_Event_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authorization_Events_Event_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authorization_Events_Event_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authorization_State represents the /openconfig-system/system/aaa/authorization/state YANG schema element. +type OpenconfigSystem_System_Aaa_Authorization_State struct { + AuthorizationMethod []OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union `path:"authorization-method" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Authorization_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Authorization_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Authorization_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Authorization_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Authorization_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/aaa/authorization/state/authorization-method within the YANG schema. +type OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union interface { + Is_OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union() +} + +// OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE is used when /openconfig-system/system/aaa/authorization/state/authorization-method +// is to be set to a E_OpenconfigAaaTypes_AAA_METHOD_TYPE value. +type OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE struct { + E_OpenconfigAaaTypes_AAA_METHOD_TYPE E_OpenconfigAaaTypes_AAA_METHOD_TYPE +} + +// Is_OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE +// implements the OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE) Is_OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union() { +} + +// OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_String is used when /openconfig-system/system/aaa/authorization/state/authorization-method +// is to be set to a string value. +type OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union ensures that OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_String +// implements the OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union interface. +func (*OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_String) Is_OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union() { +} + +// To_OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Aaa_Authorization_State) To_OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union(i interface{}) (OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union, error) { + switch v := i.(type) { + case E_OpenconfigAaaTypes_AAA_METHOD_TYPE: + return &OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_E_OpenconfigAaaTypes_AAA_METHOD_TYPE{v}, nil + case string: + return &OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Aaa_Authorization_State_AuthorizationMethod_Union, unknown union type, got: %T, want any of [E_OpenconfigAaaTypes_AAA_METHOD_TYPE, string]", i, i) + } +} + +// OpenconfigSystem_System_Aaa_Config represents the /openconfig-system/system/aaa/config YANG schema element. +type OpenconfigSystem_System_Aaa_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups represents the /openconfig-system/system/aaa/server-groups YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups struct { + ServerGroup map[string]*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup `path:"server-group" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups) IsYANGGoStruct() {} + +// NewServerGroup creates a new entry in the ServerGroup list of the +// OpenconfigSystem_System_Aaa_ServerGroups struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Aaa_ServerGroups) NewServerGroup(Name string) (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.ServerGroup == nil { + t.ServerGroup = make(map[string]*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup) + } + + key := Name + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.ServerGroup[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list ServerGroup", key) + } + + t.ServerGroup[key] = &OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup{ + Name: &Name, + } + + return t.ServerGroup[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup represents the /openconfig-system/system/aaa/server-groups/server-group YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup struct { + Config *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config `path:"config" module:"openconfig-system"` + Name *string `path:"name" module:"openconfig-system"` + Servers *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers `path:"servers" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup) ΛListKeyMap() (map[string]interface{}, error) { + if t.Name == nil { + return nil, fmt.Errorf("nil value for key Name") + } + + return map[string]interface{}{ + "name": *t.Name, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config represents the /openconfig-system/system/aaa/server-groups/server-group/config YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config struct { + Name *string `path:"name" module:"openconfig-system"` + Type E_OpenconfigAaaTypes_AAA_SERVER_TYPE `path:"type" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers represents the /openconfig-system/system/aaa/server-groups/server-group/servers YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers struct { + Server map[string]*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server `path:"server" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers) IsYANGGoStruct() {} + +// NewServer creates a new entry in the Server list of the +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers) NewServer(Address string) (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Server == nil { + t.Server = make(map[string]*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server) + } + + key := Address + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Server[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Server", key) + } + + t.Server[key] = &OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server{ + Address: &Address, + } + + return t.Server[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server struct { + Address *string `path:"address" module:"openconfig-system"` + Config *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config `path:"config" module:"openconfig-system"` + Radius *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius `path:"radius" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State `path:"state" module:"openconfig-system"` + Tacacs *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs `path:"tacacs" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server) ΛListKeyMap() (map[string]interface{}, error) { + if t.Address == nil { + return nil, fmt.Errorf("nil value for key Address") + } + + return map[string]interface{}{ + "address": *t.Address, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/config YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config struct { + Address *string `path:"address" module:"openconfig-system"` + Name *string `path:"name" module:"openconfig-system"` + Timeout *uint16 `path:"timeout" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/radius YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius struct { + Config *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/radius/config YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config struct { + AcctPort *uint16 `path:"acct-port" module:"openconfig-system"` + AuthPort *uint16 `path:"auth-port" module:"openconfig-system"` + RetransmitAttempts *uint8 `path:"retransmit-attempts" module:"openconfig-system"` + SecretKey *string `path:"secret-key" module:"openconfig-system"` + SourceAddress *string `path:"source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/radius/state YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State struct { + AcctPort *uint16 `path:"acct-port" module:"openconfig-system"` + AuthPort *uint16 `path:"auth-port" module:"openconfig-system"` + Counters *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters `path:"counters" module:"openconfig-system"` + RetransmitAttempts *uint8 `path:"retransmit-attempts" module:"openconfig-system"` + SecretKey *string `path:"secret-key" module:"openconfig-system"` + SourceAddress *string `path:"source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/radius/state/counters YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters struct { + AccessAccepts *uint64 `path:"access-accepts" module:"openconfig-system"` + AccessRejects *uint64 `path:"access-rejects" module:"openconfig-system"` + RetriedAccessRequests *uint64 `path:"retried-access-requests" module:"openconfig-system"` + TimeoutAccessRequests *uint64 `path:"timeout-access-requests" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Radius_State_Counters) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/state YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State struct { + Address *string `path:"address" module:"openconfig-system"` + ConnectionAborts *uint64 `path:"connection-aborts" module:"openconfig-system"` + ConnectionCloses *uint64 `path:"connection-closes" module:"openconfig-system"` + ConnectionFailures *uint64 `path:"connection-failures" module:"openconfig-system"` + ConnectionOpens *uint64 `path:"connection-opens" module:"openconfig-system"` + ConnectionTimeouts *uint64 `path:"connection-timeouts" module:"openconfig-system"` + ErrorsReceived *uint64 `path:"errors-received" module:"openconfig-system"` + MessagesReceived *uint64 `path:"messages-received" module:"openconfig-system"` + MessagesSent *uint64 `path:"messages-sent" module:"openconfig-system"` + Name *string `path:"name" module:"openconfig-system"` + Timeout *uint16 `path:"timeout" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/tacacs YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs struct { + Config *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/tacacs/config YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config struct { + Port *uint16 `path:"port" module:"openconfig-system"` + SecretKey *string `path:"secret-key" module:"openconfig-system"` + SourceAddress *string `path:"source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State represents the /openconfig-system/system/aaa/server-groups/server-group/servers/server/tacacs/state YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State struct { + Port *uint16 `path:"port" module:"openconfig-system"` + SecretKey *string `path:"secret-key" module:"openconfig-system"` + SourceAddress *string `path:"source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_Servers_Server_Tacacs_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State represents the /openconfig-system/system/aaa/server-groups/server-group/state YANG schema element. +type OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State struct { + Name *string `path:"name" module:"openconfig-system"` + Type E_OpenconfigAaaTypes_AAA_SERVER_TYPE `path:"type" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_ServerGroups_ServerGroup_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Aaa_State represents the /openconfig-system/system/aaa/state YANG schema element. +type OpenconfigSystem_System_Aaa_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Aaa_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Aaa_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Aaa_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Aaa_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Aaa_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Alarms represents the /openconfig-system/system/alarms YANG schema element. +type OpenconfigSystem_System_Alarms struct { + Alarm map[string]*OpenconfigSystem_System_Alarms_Alarm `path:"alarm" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Alarms implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Alarms) IsYANGGoStruct() {} + +// NewAlarm creates a new entry in the Alarm list of the +// OpenconfigSystem_System_Alarms struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Alarms) NewAlarm(Id string) (*OpenconfigSystem_System_Alarms_Alarm, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Alarm == nil { + t.Alarm = make(map[string]*OpenconfigSystem_System_Alarms_Alarm) + } + + key := Id + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Alarm[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Alarm", key) + } + + t.Alarm[key] = &OpenconfigSystem_System_Alarms_Alarm{ + Id: &Id, + } + + return t.Alarm[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Alarms) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Alarms"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Alarms) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Alarms_Alarm represents the /openconfig-system/system/alarms/alarm YANG schema element. +type OpenconfigSystem_System_Alarms_Alarm struct { + Config *OpenconfigSystem_System_Alarms_Alarm_Config `path:"config" module:"openconfig-system"` + Id *string `path:"id" module:"openconfig-system"` + State *OpenconfigSystem_System_Alarms_Alarm_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Alarms_Alarm implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Alarms_Alarm) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Alarms_Alarm struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Alarms_Alarm) ΛListKeyMap() (map[string]interface{}, error) { + if t.Id == nil { + return nil, fmt.Errorf("nil value for key Id") + } + + return map[string]interface{}{ + "id": *t.Id, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Alarms_Alarm) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Alarms_Alarm"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Alarms_Alarm) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Alarms_Alarm_Config represents the /openconfig-system/system/alarms/alarm/config YANG schema element. +type OpenconfigSystem_System_Alarms_Alarm_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Alarms_Alarm_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Alarms_Alarm_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Alarms_Alarm_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Alarms_Alarm_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Alarms_Alarm_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Alarms_Alarm_State represents the /openconfig-system/system/alarms/alarm/state YANG schema element. +type OpenconfigSystem_System_Alarms_Alarm_State struct { + Id *string `path:"id" module:"openconfig-system"` + Resource *string `path:"resource" module:"openconfig-system"` + Severity E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY `path:"severity" module:"openconfig-system"` + Text *string `path:"text" module:"openconfig-system"` + TimeCreated *uint64 `path:"time-created" module:"openconfig-system"` + TypeId OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union `path:"type-id" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Alarms_Alarm_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Alarms_Alarm_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Alarms_Alarm_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Alarms_Alarm_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Alarms_Alarm_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/alarms/alarm/state/type-id within the YANG schema. +type OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union interface { + Is_OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union() +} + +// OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID is used when /openconfig-system/system/alarms/alarm/state/type-id +// is to be set to a E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID value. +type OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID struct { + E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID +} + +// Is_OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union ensures that OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID +// implements the OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union interface. +func (*OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID) Is_OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union() { +} + +// OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_String is used when /openconfig-system/system/alarms/alarm/state/type-id +// is to be set to a string value. +type OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union ensures that OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_String +// implements the OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union interface. +func (*OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_String) Is_OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union() { +} + +// To_OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Alarms_Alarm_State) To_OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union(i interface{}) (OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union, error) { + switch v := i.(type) { + case E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID: + return &OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID{v}, nil + case string: + return &OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Alarms_Alarm_State_TypeId_Union, unknown union type, got: %T, want any of [E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID, string]", i, i) + } +} + +// OpenconfigSystem_System_Clock represents the /openconfig-system/system/clock YANG schema element. +type OpenconfigSystem_System_Clock struct { + Config *OpenconfigSystem_System_Clock_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Clock_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Clock implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Clock) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Clock) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Clock"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Clock) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigSystem_System_Clock_Config represents the /openconfig-system/system/clock/config YANG schema element. +type OpenconfigSystem_System_Clock_Config struct { + TimezoneName *string `path:"timezone-name" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Clock_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Clock_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Clock_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Clock_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Clock_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Clock_State represents the /openconfig-system/system/clock/state YANG schema element. +type OpenconfigSystem_System_Clock_State struct { + TimezoneName *string `path:"timezone-name" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Clock_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Clock_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Clock_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Clock_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Clock_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Config represents the /openconfig-system/system/config YANG schema element. +type OpenconfigSystem_System_Config struct { + DomainName *string `path:"domain-name" module:"openconfig-system"` + Hostname *string `path:"hostname" module:"openconfig-system"` + LoginBanner *string `path:"login-banner" module:"openconfig-system"` + MotdBanner *string `path:"motd-banner" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus represents the /openconfig-system/system/cpus YANG schema element. +type OpenconfigSystem_System_Cpus struct { + Cpu map[OpenconfigSystem_System_Cpus_Cpu_State_Index_Union]*OpenconfigSystem_System_Cpus_Cpu `path:"cpu" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus) IsYANGGoStruct() {} + +// NewCpu creates a new entry in the Cpu list of the +// OpenconfigSystem_System_Cpus struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Cpus) NewCpu(Index OpenconfigSystem_System_Cpus_Cpu_State_Index_Union) (*OpenconfigSystem_System_Cpus_Cpu, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Cpu == nil { + t.Cpu = make(map[OpenconfigSystem_System_Cpus_Cpu_State_Index_Union]*OpenconfigSystem_System_Cpus_Cpu) + } + + key := Index + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Cpu[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Cpu", key) + } + + t.Cpu[key] = &OpenconfigSystem_System_Cpus_Cpu{ + Index: Index, + } + + return t.Cpu[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigSystem_System_Cpus_Cpu represents the /openconfig-system/system/cpus/cpu YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu struct { + Index OpenconfigSystem_System_Cpus_Cpu_State_Index_Union `path:"index" module:"openconfig-system"` + State *OpenconfigSystem_System_Cpus_Cpu_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Cpus_Cpu struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Cpus_Cpu) ΛListKeyMap() (map[string]interface{}, error) { + + return map[string]interface{}{ + "index": t.Index, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Index_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/cpus/cpu/index within the YANG schema. +type OpenconfigSystem_System_Cpus_Cpu_State_Index_Union interface { + Is_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union() +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_E_OpenconfigSystem_System_Cpus_Cpu_State_Index is used when /openconfig-system/system/cpus/cpu/index +// is to be set to a E_OpenconfigSystem_System_Cpus_Cpu_State_Index value. +type OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_E_OpenconfigSystem_System_Cpus_Cpu_State_Index struct { + E_OpenconfigSystem_System_Cpus_Cpu_State_Index E_OpenconfigSystem_System_Cpus_Cpu_State_Index +} + +// Is_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union ensures that OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_E_OpenconfigSystem_System_Cpus_Cpu_State_Index +// implements the OpenconfigSystem_System_Cpus_Cpu_State_Index_Union interface. +func (*OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_E_OpenconfigSystem_System_Cpus_Cpu_State_Index) Is_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union() { +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_Uint32 is used when /openconfig-system/system/cpus/cpu/index +// is to be set to a uint32 value. +type OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_Uint32 struct { + Uint32 uint32 +} + +// Is_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union ensures that OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_Uint32 +// implements the OpenconfigSystem_System_Cpus_Cpu_State_Index_Union interface. +func (*OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_Uint32) Is_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union() { +} + +// To_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Cpus_Cpu_State_Index_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Cpus_Cpu) To_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union(i interface{}) (OpenconfigSystem_System_Cpus_Cpu_State_Index_Union, error) { + switch v := i.(type) { + case E_OpenconfigSystem_System_Cpus_Cpu_State_Index: + return &OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_E_OpenconfigSystem_System_Cpus_Cpu_State_Index{v}, nil + case uint32: + return &OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_Uint32{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Cpus_Cpu_State_Index_Union, unknown union type, got: %T, want any of [E_OpenconfigSystem_System_Cpus_Cpu_State_Index, uint32]", i, i) + } +} + +// OpenconfigSystem_System_Cpus_Cpu_State represents the /openconfig-system/system/cpus/cpu/state YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State struct { + HardwareInterrupt *OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt `path:"hardware-interrupt" module:"openconfig-system"` + Idle *OpenconfigSystem_System_Cpus_Cpu_State_Idle `path:"idle" module:"openconfig-system"` + Index OpenconfigSystem_System_Cpus_Cpu_State_Index_Union `path:"index" module:"openconfig-system"` + Kernel *OpenconfigSystem_System_Cpus_Cpu_State_Kernel `path:"kernel" module:"openconfig-system"` + Nice *OpenconfigSystem_System_Cpus_Cpu_State_Nice `path:"nice" module:"openconfig-system"` + SoftwareInterrupt *OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt `path:"software-interrupt" module:"openconfig-system"` + Total *OpenconfigSystem_System_Cpus_Cpu_State_Total `path:"total" module:"openconfig-system"` + User *OpenconfigSystem_System_Cpus_Cpu_State_User `path:"user" module:"openconfig-system"` + Wait *OpenconfigSystem_System_Cpus_Cpu_State_Wait `path:"wait" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// To_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_Cpus_Cpu_State_Index_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_Cpus_Cpu_State) To_OpenconfigSystem_System_Cpus_Cpu_State_Index_Union(i interface{}) (OpenconfigSystem_System_Cpus_Cpu_State_Index_Union, error) { + switch v := i.(type) { + case E_OpenconfigSystem_System_Cpus_Cpu_State_Index: + return &OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_E_OpenconfigSystem_System_Cpus_Cpu_State_Index{v}, nil + case uint32: + return &OpenconfigSystem_System_Cpus_Cpu_State_Index_Union_Uint32{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_Cpus_Cpu_State_Index_Union, unknown union type, got: %T, want any of [E_OpenconfigSystem_System_Cpus_Cpu_State_Index, uint32]", i, i) + } +} + +// OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt represents the /openconfig-system/system/cpus/cpu/state/hardware-interrupt YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_HardwareInterrupt) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Idle represents the /openconfig-system/system/cpus/cpu/state/idle YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_Idle struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_Idle implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_Idle) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Idle) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_Idle"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Idle) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Kernel represents the /openconfig-system/system/cpus/cpu/state/kernel YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_Kernel struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_Kernel implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_Kernel) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Kernel) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_Kernel"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Kernel) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Nice represents the /openconfig-system/system/cpus/cpu/state/nice YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_Nice struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_Nice implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_Nice) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Nice) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_Nice"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Nice) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt represents the /openconfig-system/system/cpus/cpu/state/software-interrupt YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_SoftwareInterrupt) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Total represents the /openconfig-system/system/cpus/cpu/state/total YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_Total struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_Total implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_Total) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Total) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_Total"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Total) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_User represents the /openconfig-system/system/cpus/cpu/state/user YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_User struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_User implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_User) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_User) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_User"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_User) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Cpus_Cpu_State_Wait represents the /openconfig-system/system/cpus/cpu/state/wait YANG schema element. +type OpenconfigSystem_System_Cpus_Cpu_State_Wait struct { + Avg *uint8 `path:"avg" module:"openconfig-system"` + Instant *uint8 `path:"instant" module:"openconfig-system"` + Interval *uint64 `path:"interval" module:"openconfig-system"` + Max *uint8 `path:"max" module:"openconfig-system"` + MaxTime *uint64 `path:"max-time" module:"openconfig-system"` + Min *uint8 `path:"min" module:"openconfig-system"` + MinTime *uint64 `path:"min-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Cpus_Cpu_State_Wait implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Cpus_Cpu_State_Wait) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Wait) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Cpus_Cpu_State_Wait"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Cpus_Cpu_State_Wait) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns represents the /openconfig-system/system/dns YANG schema element. +type OpenconfigSystem_System_Dns struct { + Config *OpenconfigSystem_System_Dns_Config `path:"config" module:"openconfig-system"` + HostEntries *OpenconfigSystem_System_Dns_HostEntries `path:"host-entries" module:"openconfig-system"` + Servers *OpenconfigSystem_System_Dns_Servers `path:"servers" module:"openconfig-system"` + State *OpenconfigSystem_System_Dns_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigSystem_System_Dns_Config represents the /openconfig-system/system/dns/config YANG schema element. +type OpenconfigSystem_System_Dns_Config struct { + Search []string `path:"search" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_HostEntries represents the /openconfig-system/system/dns/host-entries YANG schema element. +type OpenconfigSystem_System_Dns_HostEntries struct { + HostEntry map[string]*OpenconfigSystem_System_Dns_HostEntries_HostEntry `path:"host-entry" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_HostEntries implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_HostEntries) IsYANGGoStruct() {} + +// NewHostEntry creates a new entry in the HostEntry list of the +// OpenconfigSystem_System_Dns_HostEntries struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Dns_HostEntries) NewHostEntry(Hostname string) (*OpenconfigSystem_System_Dns_HostEntries_HostEntry, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.HostEntry == nil { + t.HostEntry = make(map[string]*OpenconfigSystem_System_Dns_HostEntries_HostEntry) + } + + key := Hostname + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.HostEntry[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list HostEntry", key) + } + + t.HostEntry[key] = &OpenconfigSystem_System_Dns_HostEntries_HostEntry{ + Hostname: &Hostname, + } + + return t.HostEntry[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_HostEntries) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_HostEntries"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_HostEntries) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_HostEntries_HostEntry represents the /openconfig-system/system/dns/host-entries/host-entry YANG schema element. +type OpenconfigSystem_System_Dns_HostEntries_HostEntry struct { + Config *OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config `path:"config" module:"openconfig-system"` + Hostname *string `path:"hostname" module:"openconfig-system"` + State *OpenconfigSystem_System_Dns_HostEntries_HostEntry_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_HostEntries_HostEntry implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_HostEntries_HostEntry) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Dns_HostEntries_HostEntry struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Dns_HostEntries_HostEntry) ΛListKeyMap() (map[string]interface{}, error) { + if t.Hostname == nil { + return nil, fmt.Errorf("nil value for key Hostname") + } + + return map[string]interface{}{ + "hostname": *t.Hostname, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_HostEntries_HostEntry) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_HostEntries_HostEntry"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_HostEntries_HostEntry) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config represents the /openconfig-system/system/dns/host-entries/host-entry/config YANG schema element. +type OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config struct { + Alias []string `path:"alias" module:"openconfig-system"` + Hostname *string `path:"hostname" module:"openconfig-system"` + Ipv4Address []string `path:"ipv4-address" module:"openconfig-system"` + Ipv6Address []string `path:"ipv6-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_HostEntries_HostEntry_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_HostEntries_HostEntry_State represents the /openconfig-system/system/dns/host-entries/host-entry/state YANG schema element. +type OpenconfigSystem_System_Dns_HostEntries_HostEntry_State struct { + Alias []string `path:"alias" module:"openconfig-system"` + Hostname *string `path:"hostname" module:"openconfig-system"` + Ipv4Address []string `path:"ipv4-address" module:"openconfig-system"` + Ipv6Address []string `path:"ipv6-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_HostEntries_HostEntry_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_HostEntries_HostEntry_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_HostEntries_HostEntry_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_HostEntries_HostEntry_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_HostEntries_HostEntry_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_Servers represents the /openconfig-system/system/dns/servers YANG schema element. +type OpenconfigSystem_System_Dns_Servers struct { + Server map[string]*OpenconfigSystem_System_Dns_Servers_Server `path:"server" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_Servers implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_Servers) IsYANGGoStruct() {} + +// NewServer creates a new entry in the Server list of the +// OpenconfigSystem_System_Dns_Servers struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Dns_Servers) NewServer(Address string) (*OpenconfigSystem_System_Dns_Servers_Server, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Server == nil { + t.Server = make(map[string]*OpenconfigSystem_System_Dns_Servers_Server) + } + + key := Address + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Server[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Server", key) + } + + t.Server[key] = &OpenconfigSystem_System_Dns_Servers_Server{ + Address: &Address, + } + + return t.Server[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_Servers) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_Servers"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_Servers) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_Servers_Server represents the /openconfig-system/system/dns/servers/server YANG schema element. +type OpenconfigSystem_System_Dns_Servers_Server struct { + Address *string `path:"address" module:"openconfig-system"` + Config *OpenconfigSystem_System_Dns_Servers_Server_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Dns_Servers_Server_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_Servers_Server implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_Servers_Server) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Dns_Servers_Server struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Dns_Servers_Server) ΛListKeyMap() (map[string]interface{}, error) { + if t.Address == nil { + return nil, fmt.Errorf("nil value for key Address") + } + + return map[string]interface{}{ + "address": *t.Address, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_Servers_Server) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_Servers_Server"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_Servers_Server) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_Servers_Server_Config represents the /openconfig-system/system/dns/servers/server/config YANG schema element. +type OpenconfigSystem_System_Dns_Servers_Server_Config struct { + Address *string `path:"address" module:"openconfig-system"` + Port *uint16 `path:"port" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_Servers_Server_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_Servers_Server_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_Servers_Server_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_Servers_Server_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_Servers_Server_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_Servers_Server_State represents the /openconfig-system/system/dns/servers/server/state YANG schema element. +type OpenconfigSystem_System_Dns_Servers_Server_State struct { + Address *string `path:"address" module:"openconfig-system"` + Port *uint16 `path:"port" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_Servers_Server_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_Servers_Server_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_Servers_Server_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_Servers_Server_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_Servers_Server_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Dns_State represents the /openconfig-system/system/dns/state YANG schema element. +type OpenconfigSystem_System_Dns_State struct { + Search []string `path:"search" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Dns_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Dns_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Dns_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Dns_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Dns_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_GrpcServer represents the /openconfig-system/system/grpc-server YANG schema element. +type OpenconfigSystem_System_GrpcServer struct { + Config *OpenconfigSystem_System_GrpcServer_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_GrpcServer_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_GrpcServer implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_GrpcServer) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_GrpcServer) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_GrpcServer"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_GrpcServer) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_GrpcServer_Config represents the /openconfig-system/system/grpc-server/config YANG schema element. +type OpenconfigSystem_System_GrpcServer_Config struct { + CertificateId *string `path:"certificate-id" module:"openconfig-system"` + Enable *bool `path:"enable" module:"openconfig-system"` + ListenAddresses []OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union `path:"listen-addresses" module:"openconfig-system"` + MetadataAuthentication *bool `path:"metadata-authentication" module:"openconfig-system"` + Port *uint16 `path:"port" module:"openconfig-system"` + TransportSecurity *bool `path:"transport-security" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_GrpcServer_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_GrpcServer_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_GrpcServer_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_GrpcServer_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_GrpcServer_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/grpc-server/config/listen-addresses within the YANG schema. +type OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union interface { + Is_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union() +} + +// OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses is used when /openconfig-system/system/grpc-server/config/listen-addresses +// is to be set to a E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses value. +type OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses struct { + E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses +} + +// Is_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union ensures that OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses +// implements the OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union interface. +func (*OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses) Is_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union() { +} + +// OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_String is used when /openconfig-system/system/grpc-server/config/listen-addresses +// is to be set to a string value. +type OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union ensures that OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_String +// implements the OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union interface. +func (*OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_String) Is_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union() { +} + +// To_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_GrpcServer_Config) To_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union(i interface{}) (OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union, error) { + switch v := i.(type) { + case E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses: + return &OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses{v}, nil + case string: + return &OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_Union, unknown union type, got: %T, want any of [E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses, string]", i, i) + } +} + +// OpenconfigSystem_System_GrpcServer_State represents the /openconfig-system/system/grpc-server/state YANG schema element. +type OpenconfigSystem_System_GrpcServer_State struct { + CertificateId *string `path:"certificate-id" module:"openconfig-system"` + Enable *bool `path:"enable" module:"openconfig-system"` + ListenAddresses []OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union `path:"listen-addresses" module:"openconfig-system"` + MetadataAuthentication *bool `path:"metadata-authentication" module:"openconfig-system"` + Port *uint16 `path:"port" module:"openconfig-system"` + TransportSecurity *bool `path:"transport-security" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_GrpcServer_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_GrpcServer_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_GrpcServer_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_GrpcServer_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_GrpcServer_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union is an interface that is implemented by valid types for the union +// for the leaf /openconfig-system/system/grpc-server/state/listen-addresses within the YANG schema. +type OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union interface { + Is_OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union() +} + +// OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses is used when /openconfig-system/system/grpc-server/state/listen-addresses +// is to be set to a E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses value. +type OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses struct { + E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses +} + +// Is_OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union ensures that OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses +// implements the OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union interface. +func (*OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses) Is_OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union() { +} + +// OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_String is used when /openconfig-system/system/grpc-server/state/listen-addresses +// is to be set to a string value. +type OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_String struct { + String string +} + +// Is_OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union ensures that OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_String +// implements the OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union interface. +func (*OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_String) Is_OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union() { +} + +// To_OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union takes an input interface{} and attempts to convert it to a struct +// which implements the OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union union. It returns an error if the interface{} supplied +// cannot be converted to a type within the union. +func (t *OpenconfigSystem_System_GrpcServer_State) To_OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union(i interface{}) (OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union, error) { + switch v := i.(type) { + case E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses: + return &OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses{v}, nil + case string: + return &OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union_String{v}, nil + default: + return nil, fmt.Errorf("cannot convert %v to OpenconfigSystem_System_GrpcServer_State_ListenAddresses_Union, unknown union type, got: %T, want any of [E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses, string]", i, i) + } +} + +// OpenconfigSystem_System_License represents the /openconfig-system/system/license YANG schema element. +type OpenconfigSystem_System_License struct { + Licenses *OpenconfigSystem_System_License_Licenses `path:"licenses" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_License implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_License) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_License) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_License"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_License) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_License_Licenses represents the /openconfig-system/system/license/licenses YANG schema element. +type OpenconfigSystem_System_License_Licenses struct { + License map[string]*OpenconfigSystem_System_License_Licenses_License `path:"license" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_License_Licenses implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_License_Licenses) IsYANGGoStruct() {} + +// NewLicense creates a new entry in the License list of the +// OpenconfigSystem_System_License_Licenses struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_License_Licenses) NewLicense(LicenseId string) (*OpenconfigSystem_System_License_Licenses_License, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.License == nil { + t.License = make(map[string]*OpenconfigSystem_System_License_Licenses_License) + } + + key := LicenseId + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.License[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list License", key) + } + + t.License[key] = &OpenconfigSystem_System_License_Licenses_License{ + LicenseId: &LicenseId, + } + + return t.License[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_License_Licenses) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_License_Licenses"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_License_Licenses) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_License_Licenses_License represents the /openconfig-system/system/license/licenses/license YANG schema element. +type OpenconfigSystem_System_License_Licenses_License struct { + Config *OpenconfigSystem_System_License_Licenses_License_Config `path:"config" module:"openconfig-system"` + LicenseId *string `path:"license-id" module:"openconfig-system"` + State *OpenconfigSystem_System_License_Licenses_License_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_License_Licenses_License implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_License_Licenses_License) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_License_Licenses_License struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_License_Licenses_License) ΛListKeyMap() (map[string]interface{}, error) { + if t.LicenseId == nil { + return nil, fmt.Errorf("nil value for key LicenseId") + } + + return map[string]interface{}{ + "license-id": *t.LicenseId, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_License_Licenses_License) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_License_Licenses_License"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_License_Licenses_License) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_License_Licenses_License_Config represents the /openconfig-system/system/license/licenses/license/config YANG schema element. +type OpenconfigSystem_System_License_Licenses_License_Config struct { + Active *bool `path:"active" module:"openconfig-system"` + LicenseData Binary `path:"license-data" module:"openconfig-system"` + LicenseId *string `path:"license-id" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_License_Licenses_License_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_License_Licenses_License_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_License_Licenses_License_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_License_Licenses_License_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_License_Licenses_License_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_License_Licenses_License_State represents the /openconfig-system/system/license/licenses/license/state YANG schema element. +type OpenconfigSystem_System_License_Licenses_License_State struct { + Active *bool `path:"active" module:"openconfig-system"` + Description *string `path:"description" module:"openconfig-system"` + ExpirationDate *uint64 `path:"expiration-date" module:"openconfig-system"` + Expired *bool `path:"expired" module:"openconfig-system"` + InUse *bool `path:"in-use" module:"openconfig-system"` + IssueDate *uint64 `path:"issue-date" module:"openconfig-system"` + LicenseData Binary `path:"license-data" module:"openconfig-system"` + LicenseId *string `path:"license-id" module:"openconfig-system"` + Valid *bool `path:"valid" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_License_Licenses_License_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_License_Licenses_License_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_License_Licenses_License_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_License_Licenses_License_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_License_Licenses_License_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging represents the /openconfig-system/system/logging YANG schema element. +type OpenconfigSystem_System_Logging struct { + Console *OpenconfigSystem_System_Logging_Console `path:"console" module:"openconfig-system"` + RemoteServers *OpenconfigSystem_System_Logging_RemoteServers `path:"remote-servers" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_Console represents the /openconfig-system/system/logging/console YANG schema element. +type OpenconfigSystem_System_Logging_Console struct { + Config *OpenconfigSystem_System_Logging_Console_Config `path:"config" module:"openconfig-system"` + Selectors *OpenconfigSystem_System_Logging_Console_Selectors `path:"selectors" module:"openconfig-system"` + State *OpenconfigSystem_System_Logging_Console_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_Console implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_Console) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_Console) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_Console"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_Console) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_Console_Config represents the /openconfig-system/system/logging/console/config YANG schema element. +type OpenconfigSystem_System_Logging_Console_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_Console_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_Console_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_Console_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_Console_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_Console_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_Console_Selectors represents the /openconfig-system/system/logging/console/selectors YANG schema element. +type OpenconfigSystem_System_Logging_Console_Selectors struct { + Selector map[OpenconfigSystem_System_Logging_Console_Selectors_Selector_Key]*OpenconfigSystem_System_Logging_Console_Selectors_Selector `path:"selector" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_Console_Selectors implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_Console_Selectors) IsYANGGoStruct() {} + +// OpenconfigSystem_System_Logging_Console_Selectors_Selector_Key represents the key for list Selector of element /openconfig-system/system/logging/console/selectors. +type OpenconfigSystem_System_Logging_Console_Selectors_Selector_Key struct { + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity"` +} + +// NewSelector creates a new entry in the Selector list of the +// OpenconfigSystem_System_Logging_Console_Selectors struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Logging_Console_Selectors) NewSelector(Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY, Severity E_OpenconfigSystemLogging_SyslogSeverity) (*OpenconfigSystem_System_Logging_Console_Selectors_Selector, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Selector == nil { + t.Selector = make(map[OpenconfigSystem_System_Logging_Console_Selectors_Selector_Key]*OpenconfigSystem_System_Logging_Console_Selectors_Selector) + } + + key := OpenconfigSystem_System_Logging_Console_Selectors_Selector_Key{ + Facility: Facility, + Severity: Severity, + } + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Selector[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Selector", key) + } + + t.Selector[key] = &OpenconfigSystem_System_Logging_Console_Selectors_Selector{ + Facility: Facility, + Severity: Severity, + } + + return t.Selector[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_Console_Selectors) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_Console_Selectors"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_Console_Selectors) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_Console_Selectors_Selector represents the /openconfig-system/system/logging/console/selectors/selector YANG schema element. +type OpenconfigSystem_System_Logging_Console_Selectors_Selector struct { + Config *OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config `path:"config" module:"openconfig-system"` + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility" module:"openconfig-system"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity" module:"openconfig-system"` + State *OpenconfigSystem_System_Logging_Console_Selectors_Selector_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_Console_Selectors_Selector implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_Console_Selectors_Selector) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Logging_Console_Selectors_Selector struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Logging_Console_Selectors_Selector) ΛListKeyMap() (map[string]interface{}, error) { + + return map[string]interface{}{ + "facility": t.Facility, + "severity": t.Severity, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_Console_Selectors_Selector) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_Console_Selectors_Selector"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_Console_Selectors_Selector) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config represents the /openconfig-system/system/logging/console/selectors/selector/config YANG schema element. +type OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config struct { + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility" module:"openconfig-system"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_Console_Selectors_Selector_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_Console_Selectors_Selector_State represents the /openconfig-system/system/logging/console/selectors/selector/state YANG schema element. +type OpenconfigSystem_System_Logging_Console_Selectors_Selector_State struct { + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility" module:"openconfig-system"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_Console_Selectors_Selector_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_Console_Selectors_Selector_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_Console_Selectors_Selector_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_Console_Selectors_Selector_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_Console_Selectors_Selector_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_Console_State represents the /openconfig-system/system/logging/console/state YANG schema element. +type OpenconfigSystem_System_Logging_Console_State struct { +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_Console_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_Console_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_Console_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_Console_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_Console_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers represents the /openconfig-system/system/logging/remote-servers YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers struct { + RemoteServer map[string]*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer `path:"remote-server" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers) IsYANGGoStruct() {} + +// NewRemoteServer creates a new entry in the RemoteServer list of the +// OpenconfigSystem_System_Logging_RemoteServers struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Logging_RemoteServers) NewRemoteServer(Host string) (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.RemoteServer == nil { + t.RemoteServer = make(map[string]*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer) + } + + key := Host + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.RemoteServer[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list RemoteServer", key) + } + + t.RemoteServer[key] = &OpenconfigSystem_System_Logging_RemoteServers_RemoteServer{ + Host: &Host, + } + + return t.RemoteServer[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer represents the /openconfig-system/system/logging/remote-servers/remote-server YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer struct { + Config *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config `path:"config" module:"openconfig-system"` + Host *string `path:"host" module:"openconfig-system"` + Selectors *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors `path:"selectors" module:"openconfig-system"` + State *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers_RemoteServer implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Logging_RemoteServers_RemoteServer struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer) ΛListKeyMap() (map[string]interface{}, error) { + if t.Host == nil { + return nil, fmt.Errorf("nil value for key Host") + } + + return map[string]interface{}{ + "host": *t.Host, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers_RemoteServer"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config represents the /openconfig-system/system/logging/remote-servers/remote-server/config YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config struct { + Host *string `path:"host" module:"openconfig-system"` + RemotePort *uint16 `path:"remote-port" module:"openconfig-system"` + SourceAddress *string `path:"source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors represents the /openconfig-system/system/logging/remote-servers/remote-server/selectors YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors struct { + Selector map[OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Key]*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector `path:"selector" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors) IsYANGGoStruct() {} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Key represents the key for list Selector of element /openconfig-system/system/logging/remote-servers/remote-server/selectors. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Key struct { + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity"` +} + +// NewSelector creates a new entry in the Selector list of the +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors) NewSelector(Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY, Severity E_OpenconfigSystemLogging_SyslogSeverity) (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Selector == nil { + t.Selector = make(map[OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Key]*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector) + } + + key := OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Key{ + Facility: Facility, + Severity: Severity, + } + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Selector[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Selector", key) + } + + t.Selector[key] = &OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector{ + Facility: Facility, + Severity: Severity, + } + + return t.Selector[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector represents the /openconfig-system/system/logging/remote-servers/remote-server/selectors/selector YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector struct { + Config *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config `path:"config" module:"openconfig-system"` + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility" module:"openconfig-system"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity" module:"openconfig-system"` + State *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector) IsYANGGoStruct() { +} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector) ΛListKeyMap() (map[string]interface{}, error) { + + return map[string]interface{}{ + "facility": t.Facility, + "severity": t.Severity, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config represents the /openconfig-system/system/logging/remote-servers/remote-server/selectors/selector/config YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config struct { + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility" module:"openconfig-system"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State represents the /openconfig-system/system/logging/remote-servers/remote-server/selectors/selector/state YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State struct { + Facility E_OpenconfigSystemLogging_SYSLOG_FACILITY `path:"facility" module:"openconfig-system"` + Severity E_OpenconfigSystemLogging_SyslogSeverity `path:"severity" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_Selectors_Selector_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State represents the /openconfig-system/system/logging/remote-servers/remote-server/state YANG schema element. +type OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State struct { + Host *string `path:"host" module:"openconfig-system"` + RemotePort *uint16 `path:"remote-port" module:"openconfig-system"` + SourceAddress *string `path:"source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Logging_RemoteServers_RemoteServer_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Memory represents the /openconfig-system/system/memory YANG schema element. +type OpenconfigSystem_System_Memory struct { + Config *OpenconfigSystem_System_Memory_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Memory_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Memory implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Memory) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Memory) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Memory"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Memory) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Memory_Config represents the /openconfig-system/system/memory/config YANG schema element. +type OpenconfigSystem_System_Memory_Config struct { +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Memory_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Memory_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Memory_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Memory_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Memory_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Memory_State represents the /openconfig-system/system/memory/state YANG schema element. +type OpenconfigSystem_System_Memory_State struct { + Physical *uint64 `path:"physical" module:"openconfig-system"` + Reserved *uint64 `path:"reserved" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Memory_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Memory_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Memory_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Memory_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Memory_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages represents the /openconfig-system/system/messages YANG schema element. +type OpenconfigSystem_System_Messages struct { + Config *OpenconfigSystem_System_Messages_Config `path:"config" module:"openconfig-system"` + DebugEntries *OpenconfigSystem_System_Messages_DebugEntries `path:"debug-entries" module:"openconfig-system"` + State *OpenconfigSystem_System_Messages_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages_Config represents the /openconfig-system/system/messages/config YANG schema element. +type OpenconfigSystem_System_Messages_Config struct { + Severity E_OpenconfigMessages_SyslogSeverity `path:"severity" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages_DebugEntries represents the /openconfig-system/system/messages/debug-entries YANG schema element. +type OpenconfigSystem_System_Messages_DebugEntries struct { + DebugService map[E_OpenconfigMessages_DEBUG_SERVICE]*OpenconfigSystem_System_Messages_DebugEntries_DebugService `path:"debug-service" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages_DebugEntries implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages_DebugEntries) IsYANGGoStruct() {} + +// NewDebugService creates a new entry in the DebugService list of the +// OpenconfigSystem_System_Messages_DebugEntries struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Messages_DebugEntries) NewDebugService(Service E_OpenconfigMessages_DEBUG_SERVICE) (*OpenconfigSystem_System_Messages_DebugEntries_DebugService, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.DebugService == nil { + t.DebugService = make(map[E_OpenconfigMessages_DEBUG_SERVICE]*OpenconfigSystem_System_Messages_DebugEntries_DebugService) + } + + key := Service + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.DebugService[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list DebugService", key) + } + + t.DebugService[key] = &OpenconfigSystem_System_Messages_DebugEntries_DebugService{ + Service: Service, + } + + return t.DebugService[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages_DebugEntries) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages_DebugEntries"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages_DebugEntries) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages_DebugEntries_DebugService represents the /openconfig-system/system/messages/debug-entries/debug-service YANG schema element. +type OpenconfigSystem_System_Messages_DebugEntries_DebugService struct { + Config *OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config `path:"config" module:"openconfig-system"` + Service E_OpenconfigMessages_DEBUG_SERVICE `path:"service" module:"openconfig-system"` + State *OpenconfigSystem_System_Messages_DebugEntries_DebugService_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages_DebugEntries_DebugService implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages_DebugEntries_DebugService) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Messages_DebugEntries_DebugService struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Messages_DebugEntries_DebugService) ΛListKeyMap() (map[string]interface{}, error) { + + return map[string]interface{}{ + "service": t.Service, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages_DebugEntries_DebugService) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages_DebugEntries_DebugService"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages_DebugEntries_DebugService) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config represents the /openconfig-system/system/messages/debug-entries/debug-service/config YANG schema element. +type OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config struct { + Enabled *bool `path:"enabled" module:"openconfig-system"` + Service E_OpenconfigMessages_DEBUG_SERVICE `path:"service" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages_DebugEntries_DebugService_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages_DebugEntries_DebugService_State represents the /openconfig-system/system/messages/debug-entries/debug-service/state YANG schema element. +type OpenconfigSystem_System_Messages_DebugEntries_DebugService_State struct { + Enabled *bool `path:"enabled" module:"openconfig-system"` + Service E_OpenconfigMessages_DEBUG_SERVICE `path:"service" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages_DebugEntries_DebugService_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages_DebugEntries_DebugService_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages_DebugEntries_DebugService_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages_DebugEntries_DebugService_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages_DebugEntries_DebugService_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages_State represents the /openconfig-system/system/messages/state YANG schema element. +type OpenconfigSystem_System_Messages_State struct { + Message *OpenconfigSystem_System_Messages_State_Message `path:"message" module:"openconfig-system"` + Severity E_OpenconfigMessages_SyslogSeverity `path:"severity" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Messages_State_Message represents the /openconfig-system/system/messages/state/message YANG schema element. +type OpenconfigSystem_System_Messages_State_Message struct { + AppName *string `path:"app-name" module:"openconfig-system"` + Msg *string `path:"msg" module:"openconfig-system"` + Msgid *string `path:"msgid" module:"openconfig-system"` + Priority *uint8 `path:"priority" module:"openconfig-system"` + Procid *string `path:"procid" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Messages_State_Message implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Messages_State_Message) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Messages_State_Message) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Messages_State_Message"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Messages_State_Message) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp represents the /openconfig-system/system/ntp YANG schema element. +type OpenconfigSystem_System_Ntp struct { + Config *OpenconfigSystem_System_Ntp_Config `path:"config" module:"openconfig-system"` + NtpKeys *OpenconfigSystem_System_Ntp_NtpKeys `path:"ntp-keys" module:"openconfig-system"` + Servers *OpenconfigSystem_System_Ntp_Servers `path:"servers" module:"openconfig-system"` + State *OpenconfigSystem_System_Ntp_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigSystem_System_Ntp_Config represents the /openconfig-system/system/ntp/config YANG schema element. +type OpenconfigSystem_System_Ntp_Config struct { + EnableNtpAuth *bool `path:"enable-ntp-auth" module:"openconfig-system"` + Enabled *bool `path:"enabled" module:"openconfig-system"` + NtpSourceAddress *string `path:"ntp-source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_NtpKeys represents the /openconfig-system/system/ntp/ntp-keys YANG schema element. +type OpenconfigSystem_System_Ntp_NtpKeys struct { + NtpKey map[uint16]*OpenconfigSystem_System_Ntp_NtpKeys_NtpKey `path:"ntp-key" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_NtpKeys implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_NtpKeys) IsYANGGoStruct() {} + +// NewNtpKey creates a new entry in the NtpKey list of the +// OpenconfigSystem_System_Ntp_NtpKeys struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Ntp_NtpKeys) NewNtpKey(KeyId uint16) (*OpenconfigSystem_System_Ntp_NtpKeys_NtpKey, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.NtpKey == nil { + t.NtpKey = make(map[uint16]*OpenconfigSystem_System_Ntp_NtpKeys_NtpKey) + } + + key := KeyId + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.NtpKey[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list NtpKey", key) + } + + t.NtpKey[key] = &OpenconfigSystem_System_Ntp_NtpKeys_NtpKey{ + KeyId: &KeyId, + } + + return t.NtpKey[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_NtpKeys) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_NtpKeys"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_NtpKeys) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_NtpKeys_NtpKey represents the /openconfig-system/system/ntp/ntp-keys/ntp-key YANG schema element. +type OpenconfigSystem_System_Ntp_NtpKeys_NtpKey struct { + Config *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config `path:"config" module:"openconfig-system"` + KeyId *uint16 `path:"key-id" module:"openconfig-system"` + State *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_NtpKeys_NtpKey implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_NtpKeys_NtpKey) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Ntp_NtpKeys_NtpKey struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey) ΛListKeyMap() (map[string]interface{}, error) { + if t.KeyId == nil { + return nil, fmt.Errorf("nil value for key KeyId") + } + + return map[string]interface{}{ + "key-id": *t.KeyId, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_NtpKeys_NtpKey"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config represents the /openconfig-system/system/ntp/ntp-keys/ntp-key/config YANG schema element. +type OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config struct { + KeyId *uint16 `path:"key-id" module:"openconfig-system"` + KeyType E_OpenconfigSystem_NTP_AUTH_TYPE `path:"key-type" module:"openconfig-system"` + KeyValue *string `path:"key-value" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State represents the /openconfig-system/system/ntp/ntp-keys/ntp-key/state YANG schema element. +type OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State struct { + KeyId *uint16 `path:"key-id" module:"openconfig-system"` + KeyType E_OpenconfigSystem_NTP_AUTH_TYPE `path:"key-type" module:"openconfig-system"` + KeyValue *string `path:"key-value" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_NtpKeys_NtpKey_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_Servers represents the /openconfig-system/system/ntp/servers YANG schema element. +type OpenconfigSystem_System_Ntp_Servers struct { + Server map[string]*OpenconfigSystem_System_Ntp_Servers_Server `path:"server" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_Servers implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_Servers) IsYANGGoStruct() {} + +// NewServer creates a new entry in the Server list of the +// OpenconfigSystem_System_Ntp_Servers struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Ntp_Servers) NewServer(Address string) (*OpenconfigSystem_System_Ntp_Servers_Server, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Server == nil { + t.Server = make(map[string]*OpenconfigSystem_System_Ntp_Servers_Server) + } + + key := Address + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Server[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Server", key) + } + + t.Server[key] = &OpenconfigSystem_System_Ntp_Servers_Server{ + Address: &Address, + } + + return t.Server[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_Servers) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_Servers"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_Servers) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_Servers_Server represents the /openconfig-system/system/ntp/servers/server YANG schema element. +type OpenconfigSystem_System_Ntp_Servers_Server struct { + Address *string `path:"address" module:"openconfig-system"` + Config *OpenconfigSystem_System_Ntp_Servers_Server_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_Ntp_Servers_Server_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_Servers_Server implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_Servers_Server) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Ntp_Servers_Server struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Ntp_Servers_Server) ΛListKeyMap() (map[string]interface{}, error) { + if t.Address == nil { + return nil, fmt.Errorf("nil value for key Address") + } + + return map[string]interface{}{ + "address": *t.Address, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_Servers_Server) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_Servers_Server"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_Servers_Server) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_Servers_Server_Config represents the /openconfig-system/system/ntp/servers/server/config YANG schema element. +type OpenconfigSystem_System_Ntp_Servers_Server_Config struct { + Address *string `path:"address" module:"openconfig-system"` + AssociationType E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType `path:"association-type" module:"openconfig-system"` + Iburst *bool `path:"iburst" module:"openconfig-system"` + Port *uint16 `path:"port" module:"openconfig-system"` + Prefer *bool `path:"prefer" module:"openconfig-system"` + Version *uint8 `path:"version" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_Servers_Server_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_Servers_Server_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_Servers_Server_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_Servers_Server_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_Servers_Server_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_Servers_Server_State represents the /openconfig-system/system/ntp/servers/server/state YANG schema element. +type OpenconfigSystem_System_Ntp_Servers_Server_State struct { + Address *string `path:"address" module:"openconfig-system"` + AssociationType E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType `path:"association-type" module:"openconfig-system"` + Iburst *bool `path:"iburst" module:"openconfig-system"` + Offset *uint64 `path:"offset" module:"openconfig-system"` + PollInterval *uint32 `path:"poll-interval" module:"openconfig-system"` + Port *uint16 `path:"port" module:"openconfig-system"` + Prefer *bool `path:"prefer" module:"openconfig-system"` + RootDelay *uint32 `path:"root-delay" module:"openconfig-system"` + RootDispersion *uint64 `path:"root-dispersion" module:"openconfig-system"` + Stratum *uint8 `path:"stratum" module:"openconfig-system"` + Version *uint8 `path:"version" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_Servers_Server_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_Servers_Server_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_Servers_Server_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_Servers_Server_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_Servers_Server_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Ntp_State represents the /openconfig-system/system/ntp/state YANG schema element. +type OpenconfigSystem_System_Ntp_State struct { + AuthMismatch *uint64 `path:"auth-mismatch" module:"openconfig-system"` + EnableNtpAuth *bool `path:"enable-ntp-auth" module:"openconfig-system"` + Enabled *bool `path:"enabled" module:"openconfig-system"` + NtpSourceAddress *string `path:"ntp-source-address" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Ntp_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Ntp_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Ntp_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Ntp_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Ntp_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow represents the /openconfig-system/system/openflow YANG schema element. +type OpenconfigSystem_System_Openflow struct { + Agent *OpenconfigSystem_System_Openflow_Agent `path:"agent" module:"openconfig-openflow"` + Controllers *OpenconfigSystem_System_Openflow_Controllers `path:"controllers" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Agent represents the /openconfig-system/system/openflow/agent YANG schema element. +type OpenconfigSystem_System_Openflow_Agent struct { + Config *OpenconfigSystem_System_Openflow_Agent_Config `path:"config" module:"openconfig-openflow"` + State *OpenconfigSystem_System_Openflow_Agent_State `path:"state" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Agent implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Agent) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Agent) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Agent"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Agent) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Agent_Config represents the /openconfig-system/system/openflow/agent/config YANG schema element. +type OpenconfigSystem_System_Openflow_Agent_Config struct { + BackoffInterval *uint32 `path:"backoff-interval" module:"openconfig-openflow"` + DatapathId *string `path:"datapath-id" module:"openconfig-openflow"` + FailureMode E_OpenconfigOpenflow_FailureMode `path:"failure-mode" module:"openconfig-openflow"` + InactivityProbe *uint32 `path:"inactivity-probe" module:"openconfig-openflow"` + MaxBackoff *uint32 `path:"max-backoff" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Agent_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Agent_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Agent_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Agent_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Agent_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Agent_State represents the /openconfig-system/system/openflow/agent/state YANG schema element. +type OpenconfigSystem_System_Openflow_Agent_State struct { + BackoffInterval *uint32 `path:"backoff-interval" module:"openconfig-openflow"` + DatapathId *string `path:"datapath-id" module:"openconfig-openflow"` + FailureMode E_OpenconfigOpenflow_FailureMode `path:"failure-mode" module:"openconfig-openflow"` + InactivityProbe *uint32 `path:"inactivity-probe" module:"openconfig-openflow"` + MaxBackoff *uint32 `path:"max-backoff" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Agent_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Agent_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Agent_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Agent_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Agent_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers represents the /openconfig-system/system/openflow/controllers YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers struct { + Controller map[string]*OpenconfigSystem_System_Openflow_Controllers_Controller `path:"controller" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers) IsYANGGoStruct() {} + +// NewController creates a new entry in the Controller list of the +// OpenconfigSystem_System_Openflow_Controllers struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Openflow_Controllers) NewController(Name string) (*OpenconfigSystem_System_Openflow_Controllers_Controller, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Controller == nil { + t.Controller = make(map[string]*OpenconfigSystem_System_Openflow_Controllers_Controller) + } + + key := Name + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Controller[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Controller", key) + } + + t.Controller[key] = &OpenconfigSystem_System_Openflow_Controllers_Controller{ + Name: &Name, + } + + return t.Controller[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers_Controller represents the /openconfig-system/system/openflow/controllers/controller YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers_Controller struct { + Config *OpenconfigSystem_System_Openflow_Controllers_Controller_Config `path:"config" module:"openconfig-openflow"` + Connections *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections `path:"connections" module:"openconfig-openflow"` + Name *string `path:"name" module:"openconfig-openflow"` + State *OpenconfigSystem_System_Openflow_Controllers_Controller_State `path:"state" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers_Controller implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers_Controller) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Openflow_Controllers_Controller struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller) ΛListKeyMap() (map[string]interface{}, error) { + if t.Name == nil { + return nil, fmt.Errorf("nil value for key Name") + } + + return map[string]interface{}{ + "name": *t.Name, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers_Controller"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers_Controller_Config represents the /openconfig-system/system/openflow/controllers/controller/config YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers_Controller_Config struct { + Name *string `path:"name" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers_Controller_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers_Controller_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers_Controller_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers_Controller_Connections represents the /openconfig-system/system/openflow/controllers/controller/connections YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers_Controller_Connections struct { + Connection map[uint8]*OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection `path:"connection" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers_Controller_Connections implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers_Controller_Connections) IsYANGGoStruct() {} + +// NewConnection creates a new entry in the Connection list of the +// OpenconfigSystem_System_Openflow_Controllers_Controller_Connections struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections) NewConnection(AuxId uint8) (*OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Connection == nil { + t.Connection = make(map[uint8]*OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection) + } + + key := AuxId + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Connection[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Connection", key) + } + + t.Connection[key] = &OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection{ + AuxId: &AuxId, + } + + return t.Connection[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers_Controller_Connections"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection represents the /openconfig-system/system/openflow/controllers/controller/connections/connection YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection struct { + AuxId *uint8 `path:"aux-id" module:"openconfig-openflow"` + Config *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config `path:"config" module:"openconfig-openflow"` + State *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State `path:"state" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection) IsYANGGoStruct() { +} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection) ΛListKeyMap() (map[string]interface{}, error) { + if t.AuxId == nil { + return nil, fmt.Errorf("nil value for key AuxId") + } + + return map[string]interface{}{ + "aux-id": *t.AuxId, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config represents the /openconfig-system/system/openflow/controllers/controller/connections/connection/config YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config struct { + Address *string `path:"address" module:"openconfig-openflow"` + AuxId *uint8 `path:"aux-id" module:"openconfig-openflow"` + CertificateId *string `path:"certificate-id" module:"openconfig-openflow"` + Port *uint16 `path:"port" module:"openconfig-openflow"` + Priority *uint8 `path:"priority" module:"openconfig-openflow"` + SourceInterface *string `path:"source-interface" module:"openconfig-openflow"` + Transport E_OpenconfigOpenflow_Transport `path:"transport" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State represents the /openconfig-system/system/openflow/controllers/controller/connections/connection/state YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State struct { + Address *string `path:"address" module:"openconfig-openflow"` + AuxId *uint8 `path:"aux-id" module:"openconfig-openflow"` + CertificateId *string `path:"certificate-id" module:"openconfig-openflow"` + Connected *bool `path:"connected" module:"openconfig-openflow"` + Port *uint16 `path:"port" module:"openconfig-openflow"` + Priority *uint8 `path:"priority" module:"openconfig-openflow"` + SourceInterface *string `path:"source-interface" module:"openconfig-openflow"` + Transport E_OpenconfigOpenflow_Transport `path:"transport" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State) IsYANGGoStruct() { +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_Connections_Connection_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Openflow_Controllers_Controller_State represents the /openconfig-system/system/openflow/controllers/controller/state YANG schema element. +type OpenconfigSystem_System_Openflow_Controllers_Controller_State struct { + Name *string `path:"name" module:"openconfig-openflow"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Openflow_Controllers_Controller_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Openflow_Controllers_Controller_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Openflow_Controllers_Controller_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Openflow_Controllers_Controller_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Processes represents the /openconfig-system/system/processes YANG schema element. +type OpenconfigSystem_System_Processes struct { + Process map[uint64]*OpenconfigSystem_System_Processes_Process `path:"process" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Processes implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Processes) IsYANGGoStruct() {} + +// NewProcess creates a new entry in the Process list of the +// OpenconfigSystem_System_Processes struct. The keys of the list are populated from the input +// arguments. +func (t *OpenconfigSystem_System_Processes) NewProcess(Pid uint64) (*OpenconfigSystem_System_Processes_Process, error) { + + // Initialise the list within the receiver struct if it has not already been + // created. + if t.Process == nil { + t.Process = make(map[uint64]*OpenconfigSystem_System_Processes_Process) + } + + key := Pid + + // Ensure that this key has not already been used in the + // list. Keyed YANG lists do not allow duplicate keys to + // be created. + if _, ok := t.Process[key]; ok { + return nil, fmt.Errorf("duplicate key %v for list Process", key) + } + + t.Process[key] = &OpenconfigSystem_System_Processes_Process{ + Pid: &Pid, + } + + return t.Process[key], nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Processes) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Processes"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Processes) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Processes_Process represents the /openconfig-system/system/processes/process YANG schema element. +type OpenconfigSystem_System_Processes_Process struct { + Pid *uint64 `path:"pid" module:"openconfig-system"` + State *OpenconfigSystem_System_Processes_Process_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Processes_Process implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Processes_Process) IsYANGGoStruct() {} + +// ΛListKeyMap returns the keys of the OpenconfigSystem_System_Processes_Process struct, which is a YANG list entry. +func (t *OpenconfigSystem_System_Processes_Process) ΛListKeyMap() (map[string]interface{}, error) { + if t.Pid == nil { + return nil, fmt.Errorf("nil value for key Pid") + } + + return map[string]interface{}{ + "pid": *t.Pid, + }, nil +} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Processes_Process) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Processes_Process"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Processes_Process) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_Processes_Process_State represents the /openconfig-system/system/processes/process/state YANG schema element. +type OpenconfigSystem_System_Processes_Process_State struct { + Args []string `path:"args" module:"openconfig-system"` + CpuUsageSystem *uint64 `path:"cpu-usage-system" module:"openconfig-system"` + CpuUsageUser *uint64 `path:"cpu-usage-user" module:"openconfig-system"` + CpuUtilization *uint8 `path:"cpu-utilization" module:"openconfig-system"` + MemoryUsage *uint64 `path:"memory-usage" module:"openconfig-system"` + MemoryUtilization *uint8 `path:"memory-utilization" module:"openconfig-system"` + Name *string `path:"name" module:"openconfig-system"` + Pid *uint64 `path:"pid" module:"openconfig-system"` + StartTime *uint64 `path:"start-time" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_Processes_Process_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_Processes_Process_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_Processes_Process_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_Processes_Process_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_Processes_Process_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_SshServer represents the /openconfig-system/system/ssh-server YANG schema element. +type OpenconfigSystem_System_SshServer struct { + Config *OpenconfigSystem_System_SshServer_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_SshServer_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_SshServer implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_SshServer) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_SshServer) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_SshServer"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_SshServer) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_SshServer_Config represents the /openconfig-system/system/ssh-server/config YANG schema element. +type OpenconfigSystem_System_SshServer_Config struct { + Enable *bool `path:"enable" module:"openconfig-system"` + ProtocolVersion E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion `path:"protocol-version" module:"openconfig-system"` + RateLimit *uint16 `path:"rate-limit" module:"openconfig-system"` + SessionLimit *uint16 `path:"session-limit" module:"openconfig-system"` + Timeout *uint16 `path:"timeout" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_SshServer_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_SshServer_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_SshServer_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_SshServer_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_SshServer_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_SshServer_State represents the /openconfig-system/system/ssh-server/state YANG schema element. +type OpenconfigSystem_System_SshServer_State struct { + Enable *bool `path:"enable" module:"openconfig-system"` + ProtocolVersion E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion `path:"protocol-version" module:"openconfig-system"` + RateLimit *uint16 `path:"rate-limit" module:"openconfig-system"` + SessionLimit *uint16 `path:"session-limit" module:"openconfig-system"` + Timeout *uint16 `path:"timeout" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_SshServer_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_SshServer_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_SshServer_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_SshServer_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_SshServer_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_State represents the /openconfig-system/system/state YANG schema element. +type OpenconfigSystem_System_State struct { + BootTime *uint64 `path:"boot-time" module:"openconfig-system"` + CurrentDatetime *string `path:"current-datetime" module:"openconfig-system"` + DomainName *string `path:"domain-name" module:"openconfig-system"` + Hostname *string `path:"hostname" module:"openconfig-system"` + LoginBanner *string `path:"login-banner" module:"openconfig-system"` + MotdBanner *string `path:"motd-banner" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_State) ΛEnumTypeMap() map[string][]reflect.Type { return ΛEnumTypes } + +// OpenconfigSystem_System_TelnetServer represents the /openconfig-system/system/telnet-server YANG schema element. +type OpenconfigSystem_System_TelnetServer struct { + Config *OpenconfigSystem_System_TelnetServer_Config `path:"config" module:"openconfig-system"` + State *OpenconfigSystem_System_TelnetServer_State `path:"state" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_TelnetServer implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_TelnetServer) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_TelnetServer) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_TelnetServer"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_TelnetServer) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_TelnetServer_Config represents the /openconfig-system/system/telnet-server/config YANG schema element. +type OpenconfigSystem_System_TelnetServer_Config struct { + Enable *bool `path:"enable" module:"openconfig-system"` + RateLimit *uint16 `path:"rate-limit" module:"openconfig-system"` + SessionLimit *uint16 `path:"session-limit" module:"openconfig-system"` + Timeout *uint16 `path:"timeout" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_TelnetServer_Config implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_TelnetServer_Config) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_TelnetServer_Config) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_TelnetServer_Config"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_TelnetServer_Config) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// OpenconfigSystem_System_TelnetServer_State represents the /openconfig-system/system/telnet-server/state YANG schema element. +type OpenconfigSystem_System_TelnetServer_State struct { + Enable *bool `path:"enable" module:"openconfig-system"` + RateLimit *uint16 `path:"rate-limit" module:"openconfig-system"` + SessionLimit *uint16 `path:"session-limit" module:"openconfig-system"` + Timeout *uint16 `path:"timeout" module:"openconfig-system"` +} + +// IsYANGGoStruct ensures that OpenconfigSystem_System_TelnetServer_State implements the yang.GoStruct +// interface. This allows functions that need to handle this struct to +// identify it as being generated by ygen. +func (*OpenconfigSystem_System_TelnetServer_State) IsYANGGoStruct() {} + +// Validate validates s against the YANG schema corresponding to its type. +func (t *OpenconfigSystem_System_TelnetServer_State) Validate(opts ...ygot.ValidationOption) error { + if err := ytypes.Validate(SchemaTree["OpenconfigSystem_System_TelnetServer_State"], t, opts...); err != nil { + return err + } + return nil +} + +// ΛEnumTypeMap returns a map, keyed by YANG schema path, of the enumerated types +// that are included in the generated code. +func (t *OpenconfigSystem_System_TelnetServer_State) ΛEnumTypeMap() map[string][]reflect.Type { + return ΛEnumTypes +} + +// E_IETFInterfaces_InterfaceType is a derived int64 type which is used to represent +// the enumerated node IETFInterfaces_InterfaceType. An additional value named +// IETFInterfaces_InterfaceType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_IETFInterfaces_InterfaceType int64 + +// IsYANGGoEnum ensures that IETFInterfaces_InterfaceType implements the yang.GoEnum +// interface. This ensures that IETFInterfaces_InterfaceType can be identified as a +// mapped type for a YANG enumeration. +func (E_IETFInterfaces_InterfaceType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with IETFInterfaces_InterfaceType. +func (E_IETFInterfaces_InterfaceType) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_IETFInterfaces_InterfaceType. +func (e E_IETFInterfaces_InterfaceType) String() string { + return ygot.EnumLogString(e, int64(e), "E_IETFInterfaces_InterfaceType") +} + +const ( + // IETFInterfaces_InterfaceType_UNSET corresponds to the value UNSET of IETFInterfaces_InterfaceType + IETFInterfaces_InterfaceType_UNSET E_IETFInterfaces_InterfaceType = 0 +) + +// E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE is a derived int64 type which is used to represent +// the enumerated node OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE. An additional value named +// OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE int64 + +// IsYANGGoEnum ensures that OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE implements the yang.GoEnum +// interface. This ensures that OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE. +func (E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE. +func (e E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE") +} + +const ( + // OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE_UNSET corresponds to the value UNSET of OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE + OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE_UNSET E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE = 0 + // OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE_AAA_ACCOUNTING_EVENT_COMMAND corresponds to the value AAA_ACCOUNTING_EVENT_COMMAND of OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE + OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE_AAA_ACCOUNTING_EVENT_COMMAND E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE = 1 + // OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE_AAA_ACCOUNTING_EVENT_LOGIN corresponds to the value AAA_ACCOUNTING_EVENT_LOGIN of OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE + OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE_AAA_ACCOUNTING_EVENT_LOGIN E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE = 2 +) + +// E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE is a derived int64 type which is used to represent +// the enumerated node OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE. An additional value named +// OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE int64 + +// IsYANGGoEnum ensures that OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE implements the yang.GoEnum +// interface. This ensures that OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE. +func (E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE. +func (e E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE") +} + +const ( + // OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE_UNSET corresponds to the value UNSET of OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE + OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE_UNSET E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE = 0 + // OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE_AAA_AUTHORIZATION_EVENT_COMMAND corresponds to the value AAA_AUTHORIZATION_EVENT_COMMAND of OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE + OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE_AAA_AUTHORIZATION_EVENT_COMMAND E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE = 1 + // OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE_AAA_AUTHORIZATION_EVENT_CONFIG corresponds to the value AAA_AUTHORIZATION_EVENT_CONFIG of OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE + OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE_AAA_AUTHORIZATION_EVENT_CONFIG E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE = 2 +) + +// E_OpenconfigAaaTypes_AAA_METHOD_TYPE is a derived int64 type which is used to represent +// the enumerated node OpenconfigAaaTypes_AAA_METHOD_TYPE. An additional value named +// OpenconfigAaaTypes_AAA_METHOD_TYPE_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigAaaTypes_AAA_METHOD_TYPE int64 + +// IsYANGGoEnum ensures that OpenconfigAaaTypes_AAA_METHOD_TYPE implements the yang.GoEnum +// interface. This ensures that OpenconfigAaaTypes_AAA_METHOD_TYPE can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigAaaTypes_AAA_METHOD_TYPE) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigAaaTypes_AAA_METHOD_TYPE. +func (E_OpenconfigAaaTypes_AAA_METHOD_TYPE) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigAaaTypes_AAA_METHOD_TYPE. +func (e E_OpenconfigAaaTypes_AAA_METHOD_TYPE) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigAaaTypes_AAA_METHOD_TYPE") +} + +const ( + // OpenconfigAaaTypes_AAA_METHOD_TYPE_UNSET corresponds to the value UNSET of OpenconfigAaaTypes_AAA_METHOD_TYPE + OpenconfigAaaTypes_AAA_METHOD_TYPE_UNSET E_OpenconfigAaaTypes_AAA_METHOD_TYPE = 0 + // OpenconfigAaaTypes_AAA_METHOD_TYPE_LOCAL corresponds to the value LOCAL of OpenconfigAaaTypes_AAA_METHOD_TYPE + OpenconfigAaaTypes_AAA_METHOD_TYPE_LOCAL E_OpenconfigAaaTypes_AAA_METHOD_TYPE = 1 + // OpenconfigAaaTypes_AAA_METHOD_TYPE_RADIUS_ALL corresponds to the value RADIUS_ALL of OpenconfigAaaTypes_AAA_METHOD_TYPE + OpenconfigAaaTypes_AAA_METHOD_TYPE_RADIUS_ALL E_OpenconfigAaaTypes_AAA_METHOD_TYPE = 2 + // OpenconfigAaaTypes_AAA_METHOD_TYPE_TACACS_ALL corresponds to the value TACACS_ALL of OpenconfigAaaTypes_AAA_METHOD_TYPE + OpenconfigAaaTypes_AAA_METHOD_TYPE_TACACS_ALL E_OpenconfigAaaTypes_AAA_METHOD_TYPE = 3 +) + +// E_OpenconfigAaaTypes_AAA_SERVER_TYPE is a derived int64 type which is used to represent +// the enumerated node OpenconfigAaaTypes_AAA_SERVER_TYPE. An additional value named +// OpenconfigAaaTypes_AAA_SERVER_TYPE_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigAaaTypes_AAA_SERVER_TYPE int64 + +// IsYANGGoEnum ensures that OpenconfigAaaTypes_AAA_SERVER_TYPE implements the yang.GoEnum +// interface. This ensures that OpenconfigAaaTypes_AAA_SERVER_TYPE can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigAaaTypes_AAA_SERVER_TYPE) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigAaaTypes_AAA_SERVER_TYPE. +func (E_OpenconfigAaaTypes_AAA_SERVER_TYPE) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigAaaTypes_AAA_SERVER_TYPE. +func (e E_OpenconfigAaaTypes_AAA_SERVER_TYPE) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigAaaTypes_AAA_SERVER_TYPE") +} + +const ( + // OpenconfigAaaTypes_AAA_SERVER_TYPE_UNSET corresponds to the value UNSET of OpenconfigAaaTypes_AAA_SERVER_TYPE + OpenconfigAaaTypes_AAA_SERVER_TYPE_UNSET E_OpenconfigAaaTypes_AAA_SERVER_TYPE = 0 + // OpenconfigAaaTypes_AAA_SERVER_TYPE_RADIUS corresponds to the value RADIUS of OpenconfigAaaTypes_AAA_SERVER_TYPE + OpenconfigAaaTypes_AAA_SERVER_TYPE_RADIUS E_OpenconfigAaaTypes_AAA_SERVER_TYPE = 1 + // OpenconfigAaaTypes_AAA_SERVER_TYPE_TACACS corresponds to the value TACACS of OpenconfigAaaTypes_AAA_SERVER_TYPE + OpenconfigAaaTypes_AAA_SERVER_TYPE_TACACS E_OpenconfigAaaTypes_AAA_SERVER_TYPE = 2 +) + +// E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES is a derived int64 type which is used to represent +// the enumerated node OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES. An additional value named +// OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES int64 + +// IsYANGGoEnum ensures that OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES implements the yang.GoEnum +// interface. This ensures that OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES. +func (E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES. +func (e E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES") +} + +const ( + // OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES_UNSET corresponds to the value UNSET of OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES + OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES_UNSET E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES = 0 + // OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES_SYSTEM_ROLE_ADMIN corresponds to the value SYSTEM_ROLE_ADMIN of OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES + OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES_SYSTEM_ROLE_ADMIN E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES = 1 +) + +// E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY is a derived int64 type which is used to represent +// the enumerated node OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY. An additional value named +// OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY int64 + +// IsYANGGoEnum ensures that OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY implements the yang.GoEnum +// interface. This ensures that OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY. +func (E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY. +func (e E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY") +} + +const ( + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_UNSET corresponds to the value UNSET of OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY + OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_UNSET E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY = 0 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_CRITICAL corresponds to the value CRITICAL of OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY + OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_CRITICAL E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY = 1 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_MAJOR corresponds to the value MAJOR of OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY + OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_MAJOR E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY = 2 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_MINOR corresponds to the value MINOR of OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY + OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_MINOR E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY = 3 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_UNKNOWN corresponds to the value UNKNOWN of OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY + OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_UNKNOWN E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY = 4 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_WARNING corresponds to the value WARNING of OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY + OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY_WARNING E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY = 5 +) + +// E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID is a derived int64 type which is used to represent +// the enumerated node OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID. An additional value named +// OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID int64 + +// IsYANGGoEnum ensures that OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID implements the yang.GoEnum +// interface. This ensures that OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID. +func (E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID. +func (e E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID") +} + +const ( + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_UNSET corresponds to the value UNSET of OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID + OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_UNSET E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID = 0 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_AIS corresponds to the value AIS of OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID + OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_AIS E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID = 1 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_EQPT corresponds to the value EQPT of OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID + OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_EQPT E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID = 2 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_LOS corresponds to the value LOS of OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID + OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_LOS E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID = 3 + // OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_OTS corresponds to the value OTS of OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID + OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID_OTS E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID = 4 +) + +// E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus is a derived int64 type which is used to represent +// the enumerated node OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus. An additional value named +// OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus int64 + +// IsYANGGoEnum ensures that OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus implements the yang.GoEnum +// interface. This ensures that OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus. +func (E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus. +func (e E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus") +} + +const ( + // OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_UNSET corresponds to the value UNSET of OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus + OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_UNSET E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus = 0 + // OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_UP corresponds to the value UP of OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus + OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_UP E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus = 1 + // OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_DOWN corresponds to the value DOWN of OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus + OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_DOWN E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus = 2 + // OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_TESTING corresponds to the value TESTING of OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus + OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus_TESTING E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus = 3 +) + +// E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus is a derived int64 type which is used to represent +// the enumerated node OpenconfigInterfaces_Interfaces_Interface_State_OperStatus. An additional value named +// OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus int64 + +// IsYANGGoEnum ensures that OpenconfigInterfaces_Interfaces_Interface_State_OperStatus implements the yang.GoEnum +// interface. This ensures that OpenconfigInterfaces_Interfaces_Interface_State_OperStatus can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigInterfaces_Interfaces_Interface_State_OperStatus. +func (E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus. +func (e E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus") +} + +const ( + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_UNSET corresponds to the value UNSET of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_UNSET E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 0 + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_UP corresponds to the value UP of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_UP E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 2 + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_DOWN corresponds to the value DOWN of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_DOWN E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 3 + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_TESTING corresponds to the value TESTING of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_TESTING E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 4 + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_UNKNOWN corresponds to the value UNKNOWN of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_UNKNOWN E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 5 + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_DORMANT corresponds to the value DORMANT of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_DORMANT E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 6 + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_NOT_PRESENT corresponds to the value NOT_PRESENT of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_NOT_PRESENT E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 7 + // OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_LOWER_LAYER_DOWN corresponds to the value LOWER_LAYER_DOWN of OpenconfigInterfaces_Interfaces_Interface_State_OperStatus + OpenconfigInterfaces_Interfaces_Interface_State_OperStatus_LOWER_LAYER_DOWN E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus = 8 +) + +// E_OpenconfigMessages_DEBUG_SERVICE is a derived int64 type which is used to represent +// the enumerated node OpenconfigMessages_DEBUG_SERVICE. An additional value named +// OpenconfigMessages_DEBUG_SERVICE_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigMessages_DEBUG_SERVICE int64 + +// IsYANGGoEnum ensures that OpenconfigMessages_DEBUG_SERVICE implements the yang.GoEnum +// interface. This ensures that OpenconfigMessages_DEBUG_SERVICE can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigMessages_DEBUG_SERVICE) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigMessages_DEBUG_SERVICE. +func (E_OpenconfigMessages_DEBUG_SERVICE) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigMessages_DEBUG_SERVICE. +func (e E_OpenconfigMessages_DEBUG_SERVICE) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigMessages_DEBUG_SERVICE") +} + +const ( + // OpenconfigMessages_DEBUG_SERVICE_UNSET corresponds to the value UNSET of OpenconfigMessages_DEBUG_SERVICE + OpenconfigMessages_DEBUG_SERVICE_UNSET E_OpenconfigMessages_DEBUG_SERVICE = 0 +) + +// E_OpenconfigMessages_SyslogSeverity is a derived int64 type which is used to represent +// the enumerated node OpenconfigMessages_SyslogSeverity. An additional value named +// OpenconfigMessages_SyslogSeverity_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigMessages_SyslogSeverity int64 + +// IsYANGGoEnum ensures that OpenconfigMessages_SyslogSeverity implements the yang.GoEnum +// interface. This ensures that OpenconfigMessages_SyslogSeverity can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigMessages_SyslogSeverity) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigMessages_SyslogSeverity. +func (E_OpenconfigMessages_SyslogSeverity) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigMessages_SyslogSeverity. +func (e E_OpenconfigMessages_SyslogSeverity) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigMessages_SyslogSeverity") +} + +const ( + // OpenconfigMessages_SyslogSeverity_UNSET corresponds to the value UNSET of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_UNSET E_OpenconfigMessages_SyslogSeverity = 0 + // OpenconfigMessages_SyslogSeverity_EMERGENCY corresponds to the value EMERGENCY of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_EMERGENCY E_OpenconfigMessages_SyslogSeverity = 1 + // OpenconfigMessages_SyslogSeverity_ALERT corresponds to the value ALERT of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_ALERT E_OpenconfigMessages_SyslogSeverity = 2 + // OpenconfigMessages_SyslogSeverity_CRITICAL corresponds to the value CRITICAL of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_CRITICAL E_OpenconfigMessages_SyslogSeverity = 3 + // OpenconfigMessages_SyslogSeverity_ERROR corresponds to the value ERROR of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_ERROR E_OpenconfigMessages_SyslogSeverity = 4 + // OpenconfigMessages_SyslogSeverity_WARNING corresponds to the value WARNING of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_WARNING E_OpenconfigMessages_SyslogSeverity = 5 + // OpenconfigMessages_SyslogSeverity_NOTICE corresponds to the value NOTICE of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_NOTICE E_OpenconfigMessages_SyslogSeverity = 6 + // OpenconfigMessages_SyslogSeverity_INFORMATIONAL corresponds to the value INFORMATIONAL of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_INFORMATIONAL E_OpenconfigMessages_SyslogSeverity = 7 + // OpenconfigMessages_SyslogSeverity_DEBUG corresponds to the value DEBUG of OpenconfigMessages_SyslogSeverity + OpenconfigMessages_SyslogSeverity_DEBUG E_OpenconfigMessages_SyslogSeverity = 8 +) + +// E_OpenconfigOpenflow_FailureMode is a derived int64 type which is used to represent +// the enumerated node OpenconfigOpenflow_FailureMode. An additional value named +// OpenconfigOpenflow_FailureMode_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigOpenflow_FailureMode int64 + +// IsYANGGoEnum ensures that OpenconfigOpenflow_FailureMode implements the yang.GoEnum +// interface. This ensures that OpenconfigOpenflow_FailureMode can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigOpenflow_FailureMode) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigOpenflow_FailureMode. +func (E_OpenconfigOpenflow_FailureMode) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigOpenflow_FailureMode. +func (e E_OpenconfigOpenflow_FailureMode) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigOpenflow_FailureMode") +} + +const ( + // OpenconfigOpenflow_FailureMode_UNSET corresponds to the value UNSET of OpenconfigOpenflow_FailureMode + OpenconfigOpenflow_FailureMode_UNSET E_OpenconfigOpenflow_FailureMode = 0 + // OpenconfigOpenflow_FailureMode_SECURE corresponds to the value SECURE of OpenconfigOpenflow_FailureMode + OpenconfigOpenflow_FailureMode_SECURE E_OpenconfigOpenflow_FailureMode = 1 + // OpenconfigOpenflow_FailureMode_STANDALONE corresponds to the value STANDALONE of OpenconfigOpenflow_FailureMode + OpenconfigOpenflow_FailureMode_STANDALONE E_OpenconfigOpenflow_FailureMode = 2 +) + +// E_OpenconfigOpenflow_Transport is a derived int64 type which is used to represent +// the enumerated node OpenconfigOpenflow_Transport. An additional value named +// OpenconfigOpenflow_Transport_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigOpenflow_Transport int64 + +// IsYANGGoEnum ensures that OpenconfigOpenflow_Transport implements the yang.GoEnum +// interface. This ensures that OpenconfigOpenflow_Transport can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigOpenflow_Transport) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigOpenflow_Transport. +func (E_OpenconfigOpenflow_Transport) ΛMap() map[string]map[int64]ygot.EnumDefinition { return ΛEnum } + +// String returns a logging-friendly string for E_OpenconfigOpenflow_Transport. +func (e E_OpenconfigOpenflow_Transport) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigOpenflow_Transport") +} + +const ( + // OpenconfigOpenflow_Transport_UNSET corresponds to the value UNSET of OpenconfigOpenflow_Transport + OpenconfigOpenflow_Transport_UNSET E_OpenconfigOpenflow_Transport = 0 + // OpenconfigOpenflow_Transport_TCP corresponds to the value TCP of OpenconfigOpenflow_Transport + OpenconfigOpenflow_Transport_TCP E_OpenconfigOpenflow_Transport = 1 + // OpenconfigOpenflow_Transport_TLS corresponds to the value TLS of OpenconfigOpenflow_Transport + OpenconfigOpenflow_Transport_TLS E_OpenconfigOpenflow_Transport = 2 +) + +// E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS is a derived int64 type which is used to represent +// the enumerated node OpenconfigPlatformTypes_COMPONENT_OPER_STATUS. An additional value named +// OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS int64 + +// IsYANGGoEnum ensures that OpenconfigPlatformTypes_COMPONENT_OPER_STATUS implements the yang.GoEnum +// interface. This ensures that OpenconfigPlatformTypes_COMPONENT_OPER_STATUS can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigPlatformTypes_COMPONENT_OPER_STATUS. +func (E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS. +func (e E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS") +} + +const ( + // OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_UNSET corresponds to the value UNSET of OpenconfigPlatformTypes_COMPONENT_OPER_STATUS + OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_UNSET E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS = 0 + // OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_ACTIVE corresponds to the value ACTIVE of OpenconfigPlatformTypes_COMPONENT_OPER_STATUS + OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_ACTIVE E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS = 1 + // OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_DISABLED corresponds to the value DISABLED of OpenconfigPlatformTypes_COMPONENT_OPER_STATUS + OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_DISABLED E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS = 2 + // OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_INACTIVE corresponds to the value INACTIVE of OpenconfigPlatformTypes_COMPONENT_OPER_STATUS + OpenconfigPlatformTypes_COMPONENT_OPER_STATUS_INACTIVE E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS = 3 +) + +// E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT is a derived int64 type which is used to represent +// the enumerated node OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT. An additional value named +// OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT int64 + +// IsYANGGoEnum ensures that OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT implements the yang.GoEnum +// interface. This ensures that OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT. +func (E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT. +func (e E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT") +} + +const ( + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_UNSET corresponds to the value UNSET of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_UNSET E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 0 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_BACKPLANE corresponds to the value BACKPLANE of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_BACKPLANE E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 1 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_CHASSIS corresponds to the value CHASSIS of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_CHASSIS E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 2 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_CONTROLLER_CARD corresponds to the value CONTROLLER_CARD of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_CONTROLLER_CARD E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 3 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_CPU corresponds to the value CPU of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_CPU E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 4 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_FABRIC corresponds to the value FABRIC of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_FABRIC E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 5 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_FAN corresponds to the value FAN of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_FAN E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 6 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_FRU corresponds to the value FRU of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_FRU E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 7 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_INTEGRATED_CIRCUIT corresponds to the value INTEGRATED_CIRCUIT of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_INTEGRATED_CIRCUIT E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 8 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_LINECARD corresponds to the value LINECARD of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_LINECARD E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 9 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_PORT corresponds to the value PORT of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_PORT E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 10 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_POWER_SUPPLY corresponds to the value POWER_SUPPLY of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_POWER_SUPPLY E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 11 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_SENSOR corresponds to the value SENSOR of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_SENSOR E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 12 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_STORAGE corresponds to the value STORAGE of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_STORAGE E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 13 + // OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_TRANSCEIVER corresponds to the value TRANSCEIVER of OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT_TRANSCEIVER E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT = 14 +) + +// E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT is a derived int64 type which is used to represent +// the enumerated node OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT. An additional value named +// OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT int64 + +// IsYANGGoEnum ensures that OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT implements the yang.GoEnum +// interface. This ensures that OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT. +func (E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT. +func (e E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT") +} + +const ( + // OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT_UNSET corresponds to the value UNSET of OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT_UNSET E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT = 0 + // OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT_OPERATING_SYSTEM corresponds to the value OPERATING_SYSTEM of OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT_OPERATING_SYSTEM E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT = 1 + // OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT_OPERATING_SYSTEM_UPDATE corresponds to the value OPERATING_SYSTEM_UPDATE of OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT + OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT_OPERATING_SYSTEM_UPDATE E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT = 2 +) + +// E_OpenconfigSystemLogging_SYSLOG_FACILITY is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystemLogging_SYSLOG_FACILITY. An additional value named +// OpenconfigSystemLogging_SYSLOG_FACILITY_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystemLogging_SYSLOG_FACILITY int64 + +// IsYANGGoEnum ensures that OpenconfigSystemLogging_SYSLOG_FACILITY implements the yang.GoEnum +// interface. This ensures that OpenconfigSystemLogging_SYSLOG_FACILITY can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystemLogging_SYSLOG_FACILITY) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystemLogging_SYSLOG_FACILITY. +func (E_OpenconfigSystemLogging_SYSLOG_FACILITY) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystemLogging_SYSLOG_FACILITY. +func (e E_OpenconfigSystemLogging_SYSLOG_FACILITY) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystemLogging_SYSLOG_FACILITY") +} + +const ( + // OpenconfigSystemLogging_SYSLOG_FACILITY_UNSET corresponds to the value UNSET of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_UNSET E_OpenconfigSystemLogging_SYSLOG_FACILITY = 0 + // OpenconfigSystemLogging_SYSLOG_FACILITY_ALL corresponds to the value ALL of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_ALL E_OpenconfigSystemLogging_SYSLOG_FACILITY = 1 + // OpenconfigSystemLogging_SYSLOG_FACILITY_AUDIT corresponds to the value AUDIT of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_AUDIT E_OpenconfigSystemLogging_SYSLOG_FACILITY = 2 + // OpenconfigSystemLogging_SYSLOG_FACILITY_AUTH corresponds to the value AUTH of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_AUTH E_OpenconfigSystemLogging_SYSLOG_FACILITY = 3 + // OpenconfigSystemLogging_SYSLOG_FACILITY_AUTHPRIV corresponds to the value AUTHPRIV of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_AUTHPRIV E_OpenconfigSystemLogging_SYSLOG_FACILITY = 4 + // OpenconfigSystemLogging_SYSLOG_FACILITY_CONSOLE corresponds to the value CONSOLE of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_CONSOLE E_OpenconfigSystemLogging_SYSLOG_FACILITY = 5 + // OpenconfigSystemLogging_SYSLOG_FACILITY_KERNEL corresponds to the value KERNEL of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_KERNEL E_OpenconfigSystemLogging_SYSLOG_FACILITY = 6 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL0 corresponds to the value LOCAL0 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL0 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 7 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL1 corresponds to the value LOCAL1 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL1 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 8 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL2 corresponds to the value LOCAL2 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL2 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 9 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL3 corresponds to the value LOCAL3 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL3 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 10 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL4 corresponds to the value LOCAL4 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL4 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 11 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL5 corresponds to the value LOCAL5 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL5 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 12 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL6 corresponds to the value LOCAL6 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL6 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 13 + // OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL7 corresponds to the value LOCAL7 of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_LOCAL7 E_OpenconfigSystemLogging_SYSLOG_FACILITY = 14 + // OpenconfigSystemLogging_SYSLOG_FACILITY_MAIL corresponds to the value MAIL of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_MAIL E_OpenconfigSystemLogging_SYSLOG_FACILITY = 15 + // OpenconfigSystemLogging_SYSLOG_FACILITY_NTP corresponds to the value NTP of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_NTP E_OpenconfigSystemLogging_SYSLOG_FACILITY = 16 + // OpenconfigSystemLogging_SYSLOG_FACILITY_SYSLOG corresponds to the value SYSLOG of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_SYSLOG E_OpenconfigSystemLogging_SYSLOG_FACILITY = 17 + // OpenconfigSystemLogging_SYSLOG_FACILITY_SYSTEM_DAEMON corresponds to the value SYSTEM_DAEMON of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_SYSTEM_DAEMON E_OpenconfigSystemLogging_SYSLOG_FACILITY = 18 + // OpenconfigSystemLogging_SYSLOG_FACILITY_USER corresponds to the value USER of OpenconfigSystemLogging_SYSLOG_FACILITY + OpenconfigSystemLogging_SYSLOG_FACILITY_USER E_OpenconfigSystemLogging_SYSLOG_FACILITY = 19 +) + +// E_OpenconfigSystemLogging_SyslogSeverity is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystemLogging_SyslogSeverity. An additional value named +// OpenconfigSystemLogging_SyslogSeverity_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystemLogging_SyslogSeverity int64 + +// IsYANGGoEnum ensures that OpenconfigSystemLogging_SyslogSeverity implements the yang.GoEnum +// interface. This ensures that OpenconfigSystemLogging_SyslogSeverity can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystemLogging_SyslogSeverity) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystemLogging_SyslogSeverity. +func (E_OpenconfigSystemLogging_SyslogSeverity) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystemLogging_SyslogSeverity. +func (e E_OpenconfigSystemLogging_SyslogSeverity) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystemLogging_SyslogSeverity") +} + +const ( + // OpenconfigSystemLogging_SyslogSeverity_UNSET corresponds to the value UNSET of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_UNSET E_OpenconfigSystemLogging_SyslogSeverity = 0 + // OpenconfigSystemLogging_SyslogSeverity_EMERGENCY corresponds to the value EMERGENCY of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_EMERGENCY E_OpenconfigSystemLogging_SyslogSeverity = 1 + // OpenconfigSystemLogging_SyslogSeverity_ALERT corresponds to the value ALERT of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_ALERT E_OpenconfigSystemLogging_SyslogSeverity = 2 + // OpenconfigSystemLogging_SyslogSeverity_CRITICAL corresponds to the value CRITICAL of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_CRITICAL E_OpenconfigSystemLogging_SyslogSeverity = 3 + // OpenconfigSystemLogging_SyslogSeverity_ERROR corresponds to the value ERROR of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_ERROR E_OpenconfigSystemLogging_SyslogSeverity = 4 + // OpenconfigSystemLogging_SyslogSeverity_WARNING corresponds to the value WARNING of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_WARNING E_OpenconfigSystemLogging_SyslogSeverity = 5 + // OpenconfigSystemLogging_SyslogSeverity_NOTICE corresponds to the value NOTICE of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_NOTICE E_OpenconfigSystemLogging_SyslogSeverity = 6 + // OpenconfigSystemLogging_SyslogSeverity_INFORMATIONAL corresponds to the value INFORMATIONAL of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_INFORMATIONAL E_OpenconfigSystemLogging_SyslogSeverity = 7 + // OpenconfigSystemLogging_SyslogSeverity_DEBUG corresponds to the value DEBUG of OpenconfigSystemLogging_SyslogSeverity + OpenconfigSystemLogging_SyslogSeverity_DEBUG E_OpenconfigSystemLogging_SyslogSeverity = 8 +) + +// E_OpenconfigSystem_NTP_AUTH_TYPE is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystem_NTP_AUTH_TYPE. An additional value named +// OpenconfigSystem_NTP_AUTH_TYPE_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystem_NTP_AUTH_TYPE int64 + +// IsYANGGoEnum ensures that OpenconfigSystem_NTP_AUTH_TYPE implements the yang.GoEnum +// interface. This ensures that OpenconfigSystem_NTP_AUTH_TYPE can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystem_NTP_AUTH_TYPE) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystem_NTP_AUTH_TYPE. +func (E_OpenconfigSystem_NTP_AUTH_TYPE) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystem_NTP_AUTH_TYPE. +func (e E_OpenconfigSystem_NTP_AUTH_TYPE) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystem_NTP_AUTH_TYPE") +} + +const ( + // OpenconfigSystem_NTP_AUTH_TYPE_UNSET corresponds to the value UNSET of OpenconfigSystem_NTP_AUTH_TYPE + OpenconfigSystem_NTP_AUTH_TYPE_UNSET E_OpenconfigSystem_NTP_AUTH_TYPE = 0 + // OpenconfigSystem_NTP_AUTH_TYPE_NTP_AUTH_MD5 corresponds to the value NTP_AUTH_MD5 of OpenconfigSystem_NTP_AUTH_TYPE + OpenconfigSystem_NTP_AUTH_TYPE_NTP_AUTH_MD5 E_OpenconfigSystem_NTP_AUTH_TYPE = 1 +) + +// E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record. An additional value named +// OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record int64 + +// IsYANGGoEnum ensures that OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record implements the yang.GoEnum +// interface. This ensures that OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record. +func (E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record. +func (e E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record") +} + +const ( + // OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record_UNSET corresponds to the value UNSET of OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record + OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record_UNSET E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record = 0 + // OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record_START_STOP corresponds to the value START_STOP of OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record + OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record_START_STOP E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record = 1 + // OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record_STOP corresponds to the value STOP of OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record + OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record_STOP E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record = 2 +) + +// E_OpenconfigSystem_System_Cpus_Cpu_State_Index is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystem_System_Cpus_Cpu_State_Index. An additional value named +// OpenconfigSystem_System_Cpus_Cpu_State_Index_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystem_System_Cpus_Cpu_State_Index int64 + +// IsYANGGoEnum ensures that OpenconfigSystem_System_Cpus_Cpu_State_Index implements the yang.GoEnum +// interface. This ensures that OpenconfigSystem_System_Cpus_Cpu_State_Index can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystem_System_Cpus_Cpu_State_Index) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystem_System_Cpus_Cpu_State_Index. +func (E_OpenconfigSystem_System_Cpus_Cpu_State_Index) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystem_System_Cpus_Cpu_State_Index. +func (e E_OpenconfigSystem_System_Cpus_Cpu_State_Index) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystem_System_Cpus_Cpu_State_Index") +} + +const ( + // OpenconfigSystem_System_Cpus_Cpu_State_Index_UNSET corresponds to the value UNSET of OpenconfigSystem_System_Cpus_Cpu_State_Index + OpenconfigSystem_System_Cpus_Cpu_State_Index_UNSET E_OpenconfigSystem_System_Cpus_Cpu_State_Index = 0 + // OpenconfigSystem_System_Cpus_Cpu_State_Index_ALL corresponds to the value ALL of OpenconfigSystem_System_Cpus_Cpu_State_Index + OpenconfigSystem_System_Cpus_Cpu_State_Index_ALL E_OpenconfigSystem_System_Cpus_Cpu_State_Index = 1 +) + +// E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystem_System_GrpcServer_Config_ListenAddresses. An additional value named +// OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses int64 + +// IsYANGGoEnum ensures that OpenconfigSystem_System_GrpcServer_Config_ListenAddresses implements the yang.GoEnum +// interface. This ensures that OpenconfigSystem_System_GrpcServer_Config_ListenAddresses can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystem_System_GrpcServer_Config_ListenAddresses. +func (E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses. +func (e E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses") +} + +const ( + // OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_UNSET corresponds to the value UNSET of OpenconfigSystem_System_GrpcServer_Config_ListenAddresses + OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_UNSET E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses = 0 + // OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_ANY corresponds to the value ANY of OpenconfigSystem_System_GrpcServer_Config_ListenAddresses + OpenconfigSystem_System_GrpcServer_Config_ListenAddresses_ANY E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses = 1 +) + +// E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType. An additional value named +// OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType int64 + +// IsYANGGoEnum ensures that OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType implements the yang.GoEnum +// interface. This ensures that OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType. +func (E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType. +func (e E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType") +} + +const ( + // OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_UNSET corresponds to the value UNSET of OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType + OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_UNSET E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType = 0 + // OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_SERVER corresponds to the value SERVER of OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType + OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_SERVER E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType = 1 + // OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_PEER corresponds to the value PEER of OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType + OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_PEER E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType = 2 + // OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_POOL corresponds to the value POOL of OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType + OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType_POOL E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType = 3 +) + +// E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion is a derived int64 type which is used to represent +// the enumerated node OpenconfigSystem_System_SshServer_Config_ProtocolVersion. An additional value named +// OpenconfigSystem_System_SshServer_Config_ProtocolVersion_UNSET is added to the enumeration which is used as +// the nil value, indicating that the enumeration was not explicitly set by +// the program importing the generated structures. +type E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion int64 + +// IsYANGGoEnum ensures that OpenconfigSystem_System_SshServer_Config_ProtocolVersion implements the yang.GoEnum +// interface. This ensures that OpenconfigSystem_System_SshServer_Config_ProtocolVersion can be identified as a +// mapped type for a YANG enumeration. +func (E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion) IsYANGGoEnum() {} + +// ΛMap returns the value lookup map associated with OpenconfigSystem_System_SshServer_Config_ProtocolVersion. +func (E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion) ΛMap() map[string]map[int64]ygot.EnumDefinition { + return ΛEnum +} + +// String returns a logging-friendly string for E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion. +func (e E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion) String() string { + return ygot.EnumLogString(e, int64(e), "E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion") +} + +const ( + // OpenconfigSystem_System_SshServer_Config_ProtocolVersion_UNSET corresponds to the value UNSET of OpenconfigSystem_System_SshServer_Config_ProtocolVersion + OpenconfigSystem_System_SshServer_Config_ProtocolVersion_UNSET E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion = 0 + // OpenconfigSystem_System_SshServer_Config_ProtocolVersion_V2 corresponds to the value V2 of OpenconfigSystem_System_SshServer_Config_ProtocolVersion + OpenconfigSystem_System_SshServer_Config_ProtocolVersion_V2 E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion = 1 + // OpenconfigSystem_System_SshServer_Config_ProtocolVersion_V1 corresponds to the value V1 of OpenconfigSystem_System_SshServer_Config_ProtocolVersion + OpenconfigSystem_System_SshServer_Config_ProtocolVersion_V1 E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion = 2 + // OpenconfigSystem_System_SshServer_Config_ProtocolVersion_V1_V2 corresponds to the value V1_V2 of OpenconfigSystem_System_SshServer_Config_ProtocolVersion + OpenconfigSystem_System_SshServer_Config_ProtocolVersion_V1_V2 E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion = 3 +) + +// ΛEnum is a map, keyed by the name of the type defined for each enum in the +// generated Go code, which provides a mapping between the constant int64 value +// of each value of the enumeration, and the string that is used to represent it +// in the YANG schema. The map is named ΛEnum in order to avoid clash with any +// valid YANG identifier. +var ΛEnum = map[string]map[int64]ygot.EnumDefinition{ + "E_IETFInterfaces_InterfaceType": {}, + "E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE": { + 1: {Name: "AAA_ACCOUNTING_EVENT_COMMAND", DefiningModule: "openconfig-aaa-types"}, + 2: {Name: "AAA_ACCOUNTING_EVENT_LOGIN", DefiningModule: "openconfig-aaa-types"}, + }, + "E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE": { + 1: {Name: "AAA_AUTHORIZATION_EVENT_COMMAND", DefiningModule: "openconfig-aaa-types"}, + 2: {Name: "AAA_AUTHORIZATION_EVENT_CONFIG", DefiningModule: "openconfig-aaa-types"}, + }, + "E_OpenconfigAaaTypes_AAA_METHOD_TYPE": { + 1: {Name: "LOCAL", DefiningModule: "openconfig-aaa-types"}, + 2: {Name: "RADIUS_ALL", DefiningModule: "openconfig-aaa-types"}, + 3: {Name: "TACACS_ALL", DefiningModule: "openconfig-aaa-types"}, + }, + "E_OpenconfigAaaTypes_AAA_SERVER_TYPE": { + 1: {Name: "RADIUS", DefiningModule: "openconfig-aaa"}, + 2: {Name: "TACACS", DefiningModule: "openconfig-aaa"}, + }, + "E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES": { + 1: {Name: "SYSTEM_ROLE_ADMIN", DefiningModule: "openconfig-aaa-types"}, + }, + "E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY": { + 1: {Name: "CRITICAL", DefiningModule: "openconfig-alarm-types"}, + 2: {Name: "MAJOR", DefiningModule: "openconfig-alarm-types"}, + 3: {Name: "MINOR", DefiningModule: "openconfig-alarm-types"}, + 4: {Name: "UNKNOWN", DefiningModule: "openconfig-alarm-types"}, + 5: {Name: "WARNING", DefiningModule: "openconfig-alarm-types"}, + }, + "E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID": { + 1: {Name: "AIS", DefiningModule: "openconfig-alarm-types"}, + 2: {Name: "EQPT", DefiningModule: "openconfig-alarm-types"}, + 3: {Name: "LOS", DefiningModule: "openconfig-alarm-types"}, + 4: {Name: "OTS", DefiningModule: "openconfig-alarm-types"}, + }, + "E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus": { + 1: {Name: "UP"}, + 2: {Name: "DOWN"}, + 3: {Name: "TESTING"}, + }, + "E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus": { + 2: {Name: "UP"}, + 3: {Name: "DOWN"}, + 4: {Name: "TESTING"}, + 5: {Name: "UNKNOWN"}, + 6: {Name: "DORMANT"}, + 7: {Name: "NOT_PRESENT"}, + 8: {Name: "LOWER_LAYER_DOWN"}, + }, + "E_OpenconfigMessages_DEBUG_SERVICE": {}, + "E_OpenconfigMessages_SyslogSeverity": { + 1: {Name: "EMERGENCY"}, + 2: {Name: "ALERT"}, + 3: {Name: "CRITICAL"}, + 4: {Name: "ERROR"}, + 5: {Name: "WARNING"}, + 6: {Name: "NOTICE"}, + 7: {Name: "INFORMATIONAL"}, + 8: {Name: "DEBUG"}, + }, + "E_OpenconfigOpenflow_FailureMode": { + 1: {Name: "SECURE"}, + 2: {Name: "STANDALONE"}, + }, + "E_OpenconfigOpenflow_Transport": { + 1: {Name: "TCP"}, + 2: {Name: "TLS"}, + }, + "E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS": { + 1: {Name: "ACTIVE", DefiningModule: "openconfig-platform-types"}, + 2: {Name: "DISABLED", DefiningModule: "openconfig-platform-types"}, + 3: {Name: "INACTIVE", DefiningModule: "openconfig-platform-types"}, + }, + "E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT": { + 1: {Name: "BACKPLANE", DefiningModule: "openconfig-platform-types"}, + 2: {Name: "CHASSIS", DefiningModule: "openconfig-platform-types"}, + 3: {Name: "CONTROLLER_CARD", DefiningModule: "openconfig-platform-types"}, + 4: {Name: "CPU", DefiningModule: "openconfig-platform-types"}, + 5: {Name: "FABRIC", DefiningModule: "openconfig-platform-types"}, + 6: {Name: "FAN", DefiningModule: "openconfig-platform-types"}, + 7: {Name: "FRU", DefiningModule: "openconfig-platform-types"}, + 8: {Name: "INTEGRATED_CIRCUIT", DefiningModule: "openconfig-platform-types"}, + 9: {Name: "LINECARD", DefiningModule: "openconfig-platform-types"}, + 10: {Name: "PORT", DefiningModule: "openconfig-platform-types"}, + 11: {Name: "POWER_SUPPLY", DefiningModule: "openconfig-platform-types"}, + 12: {Name: "SENSOR", DefiningModule: "openconfig-platform-types"}, + 13: {Name: "STORAGE", DefiningModule: "openconfig-platform-types"}, + 14: {Name: "TRANSCEIVER", DefiningModule: "openconfig-platform-types"}, + }, + "E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT": { + 1: {Name: "OPERATING_SYSTEM", DefiningModule: "openconfig-platform-types"}, + 2: {Name: "OPERATING_SYSTEM_UPDATE", DefiningModule: "openconfig-platform-types"}, + }, + "E_OpenconfigSystemLogging_SYSLOG_FACILITY": { + 1: {Name: "ALL", DefiningModule: "openconfig-system-logging"}, + 2: {Name: "AUDIT", DefiningModule: "openconfig-system-logging"}, + 3: {Name: "AUTH", DefiningModule: "openconfig-system-logging"}, + 4: {Name: "AUTHPRIV", DefiningModule: "openconfig-system-logging"}, + 5: {Name: "CONSOLE", DefiningModule: "openconfig-system-logging"}, + 6: {Name: "KERNEL", DefiningModule: "openconfig-system-logging"}, + 7: {Name: "LOCAL0", DefiningModule: "openconfig-system-logging"}, + 8: {Name: "LOCAL1", DefiningModule: "openconfig-system-logging"}, + 9: {Name: "LOCAL2", DefiningModule: "openconfig-system-logging"}, + 10: {Name: "LOCAL3", DefiningModule: "openconfig-system-logging"}, + 11: {Name: "LOCAL4", DefiningModule: "openconfig-system-logging"}, + 12: {Name: "LOCAL5", DefiningModule: "openconfig-system-logging"}, + 13: {Name: "LOCAL6", DefiningModule: "openconfig-system-logging"}, + 14: {Name: "LOCAL7", DefiningModule: "openconfig-system-logging"}, + 15: {Name: "MAIL", DefiningModule: "openconfig-system-logging"}, + 16: {Name: "NTP", DefiningModule: "openconfig-system-logging"}, + 17: {Name: "SYSLOG", DefiningModule: "openconfig-system-logging"}, + 18: {Name: "SYSTEM_DAEMON", DefiningModule: "openconfig-system-logging"}, + 19: {Name: "USER", DefiningModule: "openconfig-system-logging"}, + }, + "E_OpenconfigSystemLogging_SyslogSeverity": { + 1: {Name: "EMERGENCY"}, + 2: {Name: "ALERT"}, + 3: {Name: "CRITICAL"}, + 4: {Name: "ERROR"}, + 5: {Name: "WARNING"}, + 6: {Name: "NOTICE"}, + 7: {Name: "INFORMATIONAL"}, + 8: {Name: "DEBUG"}, + }, + "E_OpenconfigSystem_NTP_AUTH_TYPE": { + 1: {Name: "NTP_AUTH_MD5", DefiningModule: "openconfig-system"}, + }, + "E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record": { + 1: {Name: "START_STOP"}, + 2: {Name: "STOP"}, + }, + "E_OpenconfigSystem_System_Cpus_Cpu_State_Index": { + 1: {Name: "ALL"}, + }, + "E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses": { + 1: {Name: "ANY"}, + }, + "E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType": { + 1: {Name: "SERVER"}, + 2: {Name: "PEER"}, + 3: {Name: "POOL"}, + }, + "E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion": { + 1: {Name: "V2"}, + 2: {Name: "V1"}, + 3: {Name: "V1_V2"}, + }, +} + +var ( + // ySchema is a byte slice contain a gzip compressed representation of the + // YANG schema from which the Go code was generated. When uncompressed the + // contents of the byte slice is a JSON document containing an object, keyed + // on the name of the generated struct, and containing the JSON marshalled + // contents of a goyang yang.Entry struct, which defines the schema for the + // fields within the struct. + ySchema = []byte{ + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x73, 0xda, 0xc8, + 0xb6, 0x06, 0xfa, 0xdd, 0xbf, 0x82, 0xa2, 0x76, 0xd5, 0xb5, 0xf7, 0xb1, 0x62, 0x83, 0x01, 0xc7, + 0xf9, 0x32, 0xc5, 0x38, 0x9e, 0xd9, 0x3e, 0x93, 0xd8, 0xb9, 0xb6, 0x33, 0xbb, 0x66, 0xc7, 0x6c, + 0x97, 0x0c, 0x8d, 0xad, 0x3b, 0x20, 0x71, 0x24, 0x91, 0x89, 0x27, 0xe1, 0xbf, 0xdf, 0x42, 0x08, + 0x01, 0xe6, 0xad, 0x7b, 0xf5, 0x6a, 0x21, 0xc1, 0x33, 0x75, 0xce, 0x8e, 0xe3, 0xd0, 0x2d, 0xd4, + 0xbd, 0x5e, 0x9e, 0xf5, 0xf4, 0x5a, 0xab, 0xbf, 0xef, 0x15, 0x0a, 0x85, 0x42, 0xf1, 0xca, 0xee, + 0x8a, 0xe2, 0xbb, 0x42, 0xb1, 0x25, 0xbe, 0x3a, 0x4d, 0x51, 0x3c, 0x1c, 0xfd, 0xf6, 0x37, 0xc7, + 0x6d, 0x15, 0xdf, 0x15, 0x4a, 0xf1, 0x5f, 0xcf, 0x3d, 0xb7, 0xed, 0x3c, 0x15, 0xdf, 0x15, 0x8e, + 0xe3, 0x5f, 0xbc, 0x77, 0xfc, 0xe2, 0xbb, 0xc2, 0x68, 0x8a, 0xe8, 0x17, 0x4d, 0xaf, 0xdb, 0xf3, + 0x5c, 0xe1, 0x86, 0xc1, 0xcc, 0xef, 0x67, 0x1e, 0x31, 0xf5, 0x99, 0xc3, 0xd9, 0x4f, 0xcc, 0x3e, + 0x2e, 0xf9, 0xf5, 0xeb, 0xc7, 0x26, 0xff, 0xf0, 0xc9, 0x17, 0x6d, 0xe7, 0xdb, 0xdc, 0x93, 0x66, + 0x9e, 0xe6, 0x35, 0xad, 0x5e, 0xc7, 0x0e, 0xdb, 0x9e, 0xdf, 0x7d, 0xf5, 0xb8, 0xe8, 0x63, 0xb7, + 0x5e, 0xdf, 0x6f, 0x8a, 0x85, 0x53, 0x8c, 0xbe, 0x92, 0x78, 0xf9, 0xcb, 0xf3, 0x87, 0xdf, 0xaa, + 0xd8, 0x1b, 0x3d, 0xed, 0x70, 0xf1, 0x07, 0xff, 0x65, 0x07, 0x75, 0xff, 0xa9, 0xdf, 0x15, 0x6e, + 0x58, 0x7c, 0x57, 0x08, 0xfd, 0xbe, 0x58, 0xf2, 0xc1, 0xa9, 0x4f, 0xcd, 0x7c, 0xb9, 0xb9, 0x4f, + 0x0f, 0x66, 0x7e, 0x33, 0x78, 0xf5, 0xee, 0xaf, 0x97, 0x7e, 0x7e, 0x0b, 0x96, 0xbf, 0xd4, 0xdc, + 0x4e, 0x2c, 0x7b, 0xa9, 0xc5, 0x1b, 0xb2, 0x76, 0x63, 0x64, 0x36, 0x48, 0x71, 0xa3, 0x64, 0x37, + 0x4c, 0x79, 0xe3, 0x94, 0x37, 0x50, 0x7d, 0x23, 0x17, 0x6f, 0xe8, 0x92, 0x8d, 0x5d, 0xbb, 0xc1, + 0xc9, 0x07, 0x1e, 0xed, 0xe6, 0x9f, 0xbd, 0x8e, 0xed, 0x4a, 0x2c, 0xc6, 0x78, 0x8d, 0x27, 0x43, + 0xd6, 0xbc, 0xdb, 0xea, 0x8d, 0x97, 0x16, 0x00, 0x15, 0x41, 0x20, 0x0a, 0x84, 0xaa, 0x60, 0x90, + 0x05, 0x84, 0x2c, 0x28, 0x74, 0x81, 0x59, 0x2d, 0x38, 0x6b, 0x04, 0x48, 0x5a, 0x90, 0xa6, 0x2c, + 0x47, 0xbc, 0x9b, 0x92, 0x2b, 0x38, 0x31, 0x23, 0xd1, 0x38, 0xc9, 0x55, 0x90, 0x13, 0x2d, 0x65, + 0x11, 0xa3, 0x88, 0x9a, 0xa6, 0xc8, 0x51, 0x45, 0x4f, 0x5b, 0x04, 0xb5, 0x45, 0x51, 0x5f, 0x24, + 0xe5, 0x44, 0x53, 0x52, 0x44, 0x27, 0x5f, 0xc7, 0x75, 0xbd, 0xd0, 0x0e, 0x1d, 0xcf, 0x55, 0xdb, + 0xbf, 0xa0, 0xf9, 0x2c, 0xba, 0x76, 0xcf, 0x0e, 0x9f, 0x87, 0x2f, 0x72, 0xe4, 0xf5, 0x84, 0x3b, + 0x12, 0xca, 0xe4, 0x8d, 0x8e, 0x26, 0xa8, 0x63, 0xf2, 0xe3, 0x51, 0x62, 0x0f, 0x8f, 0x94, 0x64, + 0x78, 0xf4, 0xcc, 0xd0, 0xef, 0x37, 0x43, 0x37, 0x96, 0x9c, 0xeb, 0xe4, 0x91, 0x9f, 0xe2, 0x27, + 0x3e, 0x9c, 0x27, 0x4f, 0x9c, 0xfc, 0xf8, 0xf0, 0xf3, 0xf8, 0x89, 0x0f, 0xb1, 0x60, 0xef, 0xf1, + 0xac, 0xb2, 0xc4, 0x0a, 0x17, 0x83, 0xd0, 0x0e, 0x85, 0xba, 0x7a, 0x8f, 0x86, 0x19, 0xd6, 0xee, + 0x32, 0xb4, 0x1b, 0xda, 0x6d, 0x4c, 0xbb, 0x55, 0x44, 0x98, 0x45, 0xb9, 0x6f, 0xa3, 0x07, 0x72, + 0xe9, 0xb6, 0x96, 0xfb, 0x57, 0x5c, 0x75, 0xfd, 0xd5, 0x2e, 0x4a, 0x99, 0x22, 0xad, 0xf5, 0x5d, + 0xbd, 0xb2, 0xcb, 0xd7, 0x6b, 0xc5, 0x5a, 0x15, 0x9b, 0xcf, 0x76, 0x10, 0x38, 0x81, 0x3c, 0x98, + 0x1e, 0x0f, 0x00, 0x94, 0x06, 0x94, 0x06, 0x94, 0x86, 0xb3, 0xdd, 0x6d, 0x67, 0x1b, 0x5b, 0xc3, + 0xd4, 0x80, 0xf4, 0xf9, 0xe8, 0x79, 0x80, 0xd1, 0x80, 0xd1, 0xd0, 0xec, 0x54, 0x34, 0x3b, 0x25, + 0x10, 0x3d, 0x56, 0xec, 0x1d, 0x84, 0xd0, 0x72, 0x88, 0x52, 0x7f, 0x6d, 0x8d, 0xc0, 0x67, 0x39, + 0xc4, 0xa3, 0x86, 0x74, 0x00, 0x9e, 0x77, 0x11, 0x3c, 0xc7, 0x52, 0xad, 0xe8, 0x5f, 0xa3, 0x51, + 0x6a, 0xee, 0xf5, 0x18, 0xc0, 0x19, 0xee, 0xf5, 0xf5, 0xd7, 0xb9, 0x7b, 0xe9, 0x09, 0xda, 0xce, + 0x05, 0xa1, 0xef, 0xb8, 0x4a, 0xd0, 0x77, 0x6c, 0xde, 0xde, 0xee, 0x96, 0x9b, 0x93, 0x0d, 0x11, + 0xa8, 0x5e, 0x4e, 0x22, 0x24, 0x20, 0x3a, 0xb9, 0x5e, 0x5f, 0xc1, 0xc3, 0xf5, 0xfa, 0x70, 0x6f, + 0x70, 0x6f, 0xe0, 0x86, 0xe0, 0xe2, 0x76, 0x3d, 0x82, 0xec, 0xf5, 0xd3, 0xe3, 0x85, 0x7a, 0x7d, + 0x70, 0x42, 0xe0, 0x84, 0xa0, 0xd1, 0xc6, 0x35, 0x3a, 0x2d, 0x3e, 0xa8, 0xd7, 0xdf, 0x49, 0x2e, + 0x68, 0x2d, 0x7a, 0xd4, 0x5b, 0x53, 0x13, 0xf0, 0xb8, 0x6d, 0x3f, 0xfa, 0x4e, 0x53, 0x1e, 0x21, + 0xc7, 0x9f, 0x07, 0x48, 0x06, 0x48, 0x06, 0x48, 0x86, 0x4b, 0xdd, 0x6d, 0x97, 0x3a, 0x32, 0x86, + 0xa9, 0xe1, 0xe4, 0x5f, 0xa2, 0xc7, 0x01, 0x2a, 0x03, 0x2a, 0x43, 0xaf, 0xd3, 0xd0, 0xeb, 0x94, + 0xd0, 0x72, 0xac, 0xd6, 0x3b, 0x08, 0x98, 0xa5, 0xc0, 0xa4, 0xf6, 0xca, 0x9a, 0x81, 0xcd, 0xae, + 0x0a, 0x66, 0x76, 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0xe1, 0x58, 0x77, 0xde, 0xb1, 0xba, 0x29, + 0xa2, 0x65, 0x17, 0x50, 0x19, 0x50, 0x19, 0x1a, 0x6d, 0x5c, 0xa3, 0x53, 0xc3, 0xc9, 0xee, 0x6e, + 0x82, 0x64, 0xd7, 0x24, 0x42, 0x76, 0x4d, 0xc0, 0x63, 0xc7, 0x0d, 0xc5, 0x93, 0x6f, 0x87, 0xa2, + 0x65, 0x35, 0x1d, 0xbf, 0xd9, 0x77, 0x42, 0x79, 0xb4, 0xbc, 0x60, 0x2c, 0xc0, 0x33, 0xc0, 0x33, + 0xc0, 0x33, 0x5c, 0xed, 0x6e, 0xbb, 0xda, 0x79, 0xc3, 0x98, 0x1a, 0x96, 0xbe, 0x4c, 0x1e, 0x7d, + 0x3e, 0x7a, 0x32, 0x90, 0x35, 0x90, 0x35, 0xd4, 0x3d, 0x6d, 0x75, 0x4f, 0x09, 0x68, 0xcf, 0x6b, + 0xfb, 0x0e, 0xc2, 0x6e, 0x65, 0x18, 0xca, 0xb9, 0xe0, 0x26, 0x30, 0xb9, 0x54, 0x89, 0x86, 0x4a, + 0x69, 0x86, 0x64, 0x49, 0x06, 0x70, 0x77, 0x1e, 0x70, 0xb7, 0x74, 0x09, 0x45, 0xb2, 0xf2, 0x1d, + 0x61, 0xb7, 0x7d, 0xd1, 0x96, 0x59, 0xf5, 0xb1, 0x5b, 0x3d, 0x95, 0xf8, 0xec, 0xa7, 0x58, 0x53, + 0xdf, 0xbc, 0x89, 0xd1, 0xcd, 0x51, 0x24, 0x8a, 0x06, 0x14, 0xa2, 0xe7, 0xf9, 0x0a, 0x61, 0x69, + 0xf4, 0x69, 0x04, 0xa2, 0x08, 0x44, 0x11, 0x88, 0x02, 0x99, 0xee, 0x36, 0x32, 0x1d, 0x9a, 0xc2, + 0xd4, 0x42, 0xcf, 0x4f, 0x9e, 0x8f, 0x68, 0x13, 0xd1, 0x26, 0x74, 0x3a, 0x05, 0x9d, 0x4e, 0x29, + 0xbe, 0x8c, 0x54, 0x7a, 0x07, 0x43, 0x4a, 0x09, 0x08, 0xa9, 0xb9, 0xaa, 0x66, 0x60, 0xf2, 0x5f, + 0xc2, 0xb7, 0x82, 0x7e, 0xaf, 0xd7, 0x79, 0x51, 0x81, 0xcb, 0x53, 0xa3, 0x00, 0x9b, 0x01, 0x9b, + 0x01, 0x9b, 0xe1, 0x62, 0x77, 0xdd, 0xc5, 0x4e, 0x4c, 0x62, 0x8a, 0xf0, 0xf9, 0x2f, 0xe1, 0xdf, + 0x46, 0xcf, 0x04, 0x8a, 0x06, 0x8a, 0x86, 0x8a, 0xa7, 0xa7, 0xe2, 0xa9, 0xa1, 0xe9, 0x89, 0x86, + 0xef, 0x24, 0xa8, 0x96, 0x06, 0x9a, 0x3c, 0x8b, 0x6c, 0x04, 0x63, 0xfb, 0x5e, 0x4f, 0xf8, 0xa1, + 0x23, 0x14, 0x7a, 0x19, 0x4f, 0x8d, 0x01, 0xbe, 0x06, 0xbe, 0x5e, 0x22, 0x52, 0x2f, 0xea, 0xde, + 0x37, 0x19, 0x09, 0x8c, 0x0d, 0x07, 0xac, 0xe9, 0x80, 0x65, 0xc5, 0x95, 0x1a, 0x16, 0xea, 0x85, + 0x87, 0x44, 0x11, 0x26, 0x8b, 0xb2, 0x8e, 0x48, 0x33, 0x89, 0xb6, 0xae, 0x88, 0xb3, 0x89, 0x3a, + 0x9b, 0xc8, 0xf3, 0x89, 0xbe, 0x9a, 0x0a, 0x28, 0xaa, 0x02, 0x59, 0x25, 0x92, 0x81, 0x4a, 0x3d, + 0x36, 0x97, 0x8a, 0x8d, 0x42, 0xcf, 0xcd, 0x65, 0x6a, 0x72, 0x4c, 0x1c, 0x4e, 0x55, 0x17, 0x0e, + 0xb5, 0x61, 0x56, 0x1f, 0x2e, 0x35, 0x62, 0x57, 0x27, 0x76, 0xb5, 0xe2, 0x57, 0x2f, 0x9a, 0x9a, + 0x11, 0xd5, 0x2d, 0xf9, 0xfa, 0xca, 0x3d, 0x42, 0x57, 0xb0, 0x13, 0x8a, 0x3d, 0x43, 0x97, 0xba, + 0x9b, 0xb7, 0x7b, 0xe9, 0xac, 0x1b, 0x61, 0xcd, 0x8a, 0x5f, 0xed, 0x4e, 0x9f, 0xc1, 0xdc, 0x8c, + 0xa6, 0x81, 0xbd, 0x81, 0xbd, 0x81, 0xbd, 0x21, 0x4a, 0x4e, 0xdf, 0x75, 0x3c, 0x97, 0xc3, 0xdc, + 0x9c, 0x69, 0xcc, 0x11, 0xbf, 0xce, 0x17, 0xad, 0x3d, 0xd5, 0x93, 0x59, 0x5e, 0x23, 0xcc, 0x64, + 0x8c, 0x35, 0xc5, 0xc4, 0xc0, 0xca, 0x3c, 0x7a, 0x5e, 0x47, 0xd8, 0x2e, 0xe7, 0xd2, 0x94, 0xb6, + 0x64, 0x69, 0x1c, 0x37, 0xac, 0x55, 0x18, 0x17, 0xa6, 0xc2, 0x30, 0xd5, 0x8d, 0xed, 0x3e, 0xe9, + 0x6b, 0x16, 0xdf, 0x62, 0x25, 0x5f, 0xec, 0xa3, 0xe3, 0x6a, 0xbb, 0x19, 0xa6, 0x40, 0x7b, 0xed, + 0xb4, 0xbf, 0xc7, 0x60, 0xe5, 0xac, 0x5c, 0x3e, 0x39, 0x39, 0x2d, 0x1f, 0x9f, 0xd4, 0xde, 0x56, + 0x2b, 0xa7, 0xa7, 0xd5, 0xb7, 0xc7, 0x6f, 0x99, 0x9f, 0xf4, 0x8b, 0x6f, 0x37, 0x43, 0xc7, 0x73, + 0xdf, 0x3b, 0x4f, 0x4e, 0x74, 0x63, 0xfa, 0x31, 0xdb, 0xfc, 0x83, 0x43, 0xc6, 0xcd, 0xb3, 0xbf, + 0x19, 0xdb, 0xbc, 0xe3, 0xd4, 0x36, 0xef, 0x34, 0x47, 0x9b, 0xb7, 0x97, 0x8d, 0x59, 0x1a, 0x5b, + 0x62, 0xaa, 0xfb, 0xdc, 0xb6, 0xfa, 0x2d, 0x6c, 0x75, 0xb6, 0xd4, 0xfd, 0x18, 0x96, 0x39, 0x2f, + 0x5b, 0x55, 0x7a, 0x5b, 0xa9, 0xd4, 0x4e, 0x2b, 0x95, 0xe3, 0xd3, 0x93, 0xd3, 0xe3, 0xb3, 0x6a, + 0xb5, 0x54, 0x2b, 0x55, 0x61, 0x9a, 0x77, 0xd5, 0x34, 0xb7, 0x44, 0xd3, 0xe9, 0xda, 0x1d, 0x56, + 0xeb, 0x5c, 0x2a, 0x33, 0xcc, 0x35, 0x27, 0x43, 0x65, 0xd8, 0x7c, 0xda, 0x76, 0x94, 0x61, 0xf3, + 0xf3, 0x62, 0xf3, 0x4f, 0xb0, 0x55, 0x5b, 0x62, 0xe0, 0xf7, 0xd2, 0x7d, 0xee, 0x20, 0x63, 0xe7, + 0xa2, 0xc4, 0x5c, 0xbd, 0x64, 0x3c, 0x39, 0x81, 0x2c, 0xc9, 0xa3, 0x1a, 0xff, 0x48, 0xc8, 0xce, + 0x9d, 0x7c, 0x0b, 0x5a, 0x7a, 0x59, 0xf2, 0x1d, 0xc6, 0x3f, 0xaa, 0x65, 0xeb, 0xaa, 0xef, 0x90, + 0xc2, 0xee, 0xd0, 0x0e, 0x9e, 0x75, 0x0e, 0x9c, 0x89, 0x78, 0x16, 0xf9, 0x18, 0xc8, 0xc7, 0x50, + 0xb7, 0x3b, 0xe4, 0x83, 0x1a, 0x42, 0x27, 0x84, 0xa5, 0xf0, 0x97, 0xc0, 0x74, 0x91, 0x3a, 0x25, + 0xa4, 0x63, 0x30, 0xd4, 0xd2, 0xfe, 0xe7, 0xd6, 0x53, 0x35, 0x71, 0xba, 0xc0, 0x91, 0xc2, 0x55, + 0x86, 0xc9, 0x80, 0xc9, 0x90, 0xfc, 0x9a, 0xe4, 0x14, 0xae, 0x91, 0x9e, 0xf6, 0x7d, 0xfb, 0xb1, + 0xc3, 0x90, 0x5b, 0x31, 0x33, 0x1b, 0x52, 0x2c, 0x90, 0x62, 0xb1, 0x31, 0x75, 0xd3, 0x8b, 0x61, + 0x36, 0x9f, 0x62, 0xa1, 0x7f, 0x66, 0xae, 0x79, 0x56, 0x9e, 0x4e, 0x4e, 0x17, 0x32, 0x48, 0x61, + 0x6e, 0x60, 0x6e, 0x90, 0x41, 0x8a, 0x0c, 0x52, 0xd8, 0x1b, 0xd8, 0x9b, 0xdd, 0xb1, 0x37, 0xc8, + 0x20, 0x35, 0x61, 0x84, 0x99, 0x8c, 0xb1, 0xa6, 0x98, 0x18, 0x58, 0x19, 0x64, 0x90, 0x2e, 0x5d, + 0x1a, 0x64, 0x90, 0x2a, 0x7c, 0x31, 0x64, 0x90, 0x2e, 0x7a, 0x12, 0xce, 0xac, 0x91, 0x41, 0xca, + 0x07, 0x2e, 0xf8, 0x67, 0x41, 0x06, 0xe9, 0x12, 0xa9, 0x45, 0x06, 0x69, 0xc6, 0xd4, 0x1d, 0xd9, + 0x44, 0xb9, 0xd9, 0x2a, 0x64, 0x90, 0xc2, 0x34, 0x23, 0x83, 0x74, 0x87, 0x6c, 0x3e, 0x32, 0x48, + 0x91, 0x41, 0x0a, 0x03, 0x9f, 0xb2, 0x81, 0x47, 0x06, 0x69, 0x66, 0x32, 0x48, 0x29, 0x39, 0x4c, + 0x05, 0xde, 0x04, 0x52, 0x85, 0x66, 0x90, 0xea, 0xfb, 0xc3, 0xdb, 0x26, 0xec, 0x37, 0xf1, 0xa2, + 0x78, 0xb2, 0x5c, 0xfc, 0xe0, 0x04, 0x61, 0x3d, 0x0c, 0x15, 0xdb, 0x8b, 0x7d, 0x74, 0xdc, 0x8b, + 0x8e, 0xe8, 0x0e, 0x57, 0xaf, 0xf8, 0xae, 0xe0, 0xf6, 0x3b, 0x1d, 0x85, 0xb4, 0xb6, 0x8f, 0xf6, + 0x37, 0xfa, 0xe0, 0x6b, 0xbf, 0x25, 0x7c, 0xd1, 0xfa, 0xf9, 0x25, 0x1e, 0x9a, 0xef, 0x3e, 0xa7, + 0xf3, 0x12, 0x9f, 0x42, 0xa3, 0xd3, 0x79, 0x19, 0xdf, 0xb1, 0x56, 0xa7, 0xb2, 0x1d, 0x3f, 0x59, + 0x16, 0xd9, 0x44, 0x9f, 0x53, 0xb9, 0xc4, 0x50, 0xa5, 0x44, 0x50, 0xe5, 0xee, 0xa6, 0x65, 0x74, + 0x37, 0x95, 0x30, 0x28, 0x19, 0xef, 0x6e, 0x6a, 0x77, 0x3a, 0x5e, 0x33, 0xba, 0x9c, 0x31, 0xea, + 0xff, 0xab, 0xde, 0xe4, 0xf4, 0xf5, 0x04, 0x6a, 0xbd, 0x4e, 0x8f, 0xd1, 0xeb, 0x14, 0xbd, 0x4e, + 0x5f, 0x7f, 0x1d, 0xe5, 0xf3, 0xfa, 0x19, 0xaa, 0xfa, 0xa4, 0xac, 0xb2, 0x69, 0xb1, 0x1c, 0x2a, + 0x1c, 0x6f, 0x10, 0x69, 0x08, 0x02, 0x8c, 0xd6, 0xa1, 0x15, 0x74, 0x13, 0x76, 0x34, 0x63, 0x4f, + 0x8e, 0x18, 0x93, 0x92, 0x2a, 0xa5, 0x13, 0xde, 0x73, 0x2d, 0x59, 0xa5, 0x7c, 0x56, 0x39, 0xab, + 0x9d, 0x96, 0xcf, 0xaa, 0x1b, 0x5c, 0x3b, 0x43, 0xd1, 0x4a, 0x23, 0xc5, 0x3b, 0x2f, 0x5a, 0x22, + 0x68, 0xfa, 0x4e, 0x4f, 0x09, 0x8c, 0x4f, 0x31, 0xa3, 0x93, 0xc1, 0x70, 0x49, 0x70, 0x49, 0x1b, + 0x73, 0x49, 0xca, 0xd9, 0x51, 0x8a, 0x59, 0x50, 0x3c, 0xba, 0x26, 0xba, 0x3d, 0x4a, 0x87, 0xfb, + 0xd1, 0x30, 0xd9, 0x16, 0xe6, 0xa2, 0x6d, 0xf7, 0x3b, 0xd1, 0x8e, 0xb6, 0xed, 0x4e, 0x20, 0xa0, + 0x97, 0xd0, 0xcb, 0xcd, 0xe9, 0xa5, 0x7a, 0x6e, 0x9e, 0x62, 0x0e, 0x1e, 0x93, 0x62, 0xfe, 0x5f, + 0xdf, 0xe9, 0x0d, 0x17, 0xdc, 0x6a, 0xdb, 0x4e, 0xa7, 0xef, 0x13, 0x2e, 0x81, 0x9a, 0x9f, 0x62, + 0xb7, 0x15, 0xd6, 0xee, 0xd8, 0x7e, 0x37, 0xd8, 0x49, 0x75, 0x8d, 0x5f, 0x1d, 0xca, 0x6a, 0x5a, + 0x59, 0xbb, 0x4e, 0xd0, 0xb5, 0xc3, 0xe6, 0xb3, 0x8e, 0xb6, 0x26, 0x73, 0x40, 0x5d, 0xa1, 0xae, + 0x50, 0x57, 0x7e, 0x75, 0x6d, 0x3b, 0x7e, 0xf7, 0x2f, 0xdb, 0x17, 0xd6, 0x57, 0xe1, 0x07, 0xa4, + 0x28, 0x73, 0x6e, 0x06, 0x40, 0x5a, 0x40, 0x5a, 0x84, 0x9a, 0x2b, 0x9f, 0xf9, 0x6c, 0xfb, 0x2d, + 0x3d, 0xad, 0x9b, 0x9b, 0x01, 0x5a, 0x07, 0xad, 0x83, 0xd6, 0xad, 0x7c, 0xa6, 0xd3, 0x52, 0xd7, + 0x33, 0xa7, 0x05, 0xcd, 0x82, 0x66, 0x41, 0xb3, 0x56, 0x3f, 0x33, 0x3a, 0xfe, 0x26, 0xf9, 0xb1, + 0x64, 0x24, 0xb4, 0x0c, 0x5a, 0x06, 0x2d, 0x5b, 0xf9, 0xcc, 0xae, 0xe8, 0x7a, 0x3e, 0xe1, 0x84, + 0x22, 0x1e, 0x87, 0x1b, 0x78, 0xa1, 0x61, 0x9a, 0x1a, 0xa6, 0x7c, 0x03, 0xaf, 0xfd, 0xd5, 0x76, + 0x3a, 0xa4, 0x06, 0x75, 0x93, 0xe4, 0xaa, 0x64, 0x0a, 0xf4, 0x7d, 0x35, 0x24, 0xe8, 0x6c, 0x02, + 0xcf, 0x26, 0xf8, 0x7c, 0x0a, 0xa0, 0xa6, 0x08, 0x8a, 0x0a, 0x41, 0x77, 0x3d, 0x73, 0x3b, 0x4f, + 0xae, 0x30, 0xd6, 0xa8, 0x28, 0xd6, 0xac, 0x26, 0xd3, 0x68, 0x26, 0xc3, 0x51, 0x2d, 0xc6, 0x54, + 0x66, 0xca, 0x55, 0x62, 0xc4, 0x59, 0x52, 0xa4, 0x51, 0xed, 0xc5, 0x52, 0xdd, 0xc5, 0xbd, 0xb4, + 0xfc, 0x15, 0xbb, 0xac, 0xab, 0x9d, 0x52, 0xc1, 0x52, 0x23, 0x03, 0xdd, 0x94, 0xfb, 0xa1, 0xd3, + 0x71, 0xfe, 0x16, 0x2d, 0xba, 0x3f, 0x4e, 0x66, 0x80, 0x3b, 0x86, 0x3b, 0x86, 0x3b, 0x86, 0x3b, + 0x86, 0x3b, 0x86, 0x3b, 0x86, 0x3b, 0x36, 0x15, 0x72, 0xa7, 0x5d, 0x8d, 0x19, 0x95, 0xc9, 0x1d, + 0x29, 0x51, 0x46, 0x05, 0x7a, 0x85, 0x60, 0x54, 0x56, 0xfc, 0xf0, 0x71, 0xf4, 0xb4, 0x34, 0xa9, + 0xb4, 0xf6, 0x93, 0xd5, 0x52, 0xb9, 0x57, 0x62, 0x42, 0xa6, 0x8d, 0x47, 0x82, 0xb0, 0x06, 0x9d, + 0xa6, 0xa9, 0xdb, 0x74, 0xc2, 0xba, 0xa5, 0xd6, 0x10, 0x60, 0x42, 0x57, 0x2b, 0x8c, 0xf9, 0x64, + 0x87, 0xa1, 0xf0, 0x5d, 0x65, 0x3c, 0x52, 0xfc, 0xef, 0x97, 0x63, 0xeb, 0xac, 0xf1, 0xbd, 0x32, + 0xb8, 0xbf, 0xb7, 0x46, 0x3f, 0x96, 0xa7, 0x7f, 0xfc, 0x47, 0x31, 0x93, 0xa5, 0x36, 0x43, 0xc5, + 0x56, 0xea, 0x69, 0x3f, 0x63, 0x12, 0x54, 0xba, 0x0d, 0xc0, 0x24, 0xc0, 0x24, 0xf0, 0x9b, 0x84, + 0x7c, 0x9c, 0x61, 0xd1, 0x34, 0x0c, 0xda, 0x05, 0xed, 0x82, 0x76, 0xad, 0xd7, 0x2e, 0xaf, 0x27, + 0x7c, 0x6b, 0x88, 0xe0, 0xfb, 0x81, 0xba, 0x92, 0x4d, 0x0f, 0x86, 0xae, 0x41, 0xd7, 0x36, 0xa6, + 0x6b, 0x4e, 0x4b, 0xb8, 0xa1, 0x13, 0xbe, 0xa8, 0x5d, 0x83, 0x98, 0x28, 0x9c, 0x02, 0x95, 0x51, + 0xbc, 0x8c, 0x1f, 0xf5, 0xb3, 0x1d, 0x68, 0x1c, 0x51, 0x9f, 0x5f, 0x7f, 0xfc, 0x74, 0x7d, 0x75, + 0x71, 0x75, 0xf7, 0x70, 0xfd, 0xe9, 0xe2, 0xe6, 0xe1, 0xf6, 0xae, 0x7e, 0xf7, 0xf9, 0x56, 0x75, + 0xff, 0x23, 0x72, 0x26, 0x20, 0xb1, 0x7f, 0x9a, 0x97, 0xa2, 0x5c, 0x5e, 0xd5, 0xcf, 0xef, 0x2e, + 0x7f, 0xbf, 0x28, 0xa6, 0xd1, 0x9e, 0x40, 0xf3, 0xbb, 0xe6, 0xe7, 0x9b, 0xbe, 0xbf, 0xbc, 0xad, + 0xff, 0xfc, 0xe1, 0xe2, 0xbd, 0x69, 0x6e, 0xbc, 0xc1, 0xad, 0xdf, 0x2c, 0x9e, 0xa8, 0x67, 0xfb, + 0x23, 0x53, 0xa4, 0xe8, 0x84, 0xe2, 0x71, 0xf0, 0x3f, 0xf0, 0x3f, 0x1b, 0xf3, 0x3f, 0xea, 0x57, + 0xf0, 0x52, 0xae, 0xde, 0x9d, 0xbe, 0x72, 0x77, 0xf4, 0x7f, 0x13, 0x12, 0x56, 0xf9, 0x0a, 0x5e, + 0x36, 0xa5, 0x0d, 0x2d, 0xd7, 0x23, 0x69, 0x6d, 0x34, 0x10, 0x6a, 0x0b, 0xb5, 0x45, 0x88, 0xb6, + 0xf2, 0x99, 0xbe, 0xe8, 0x7a, 0x5f, 0x95, 0x32, 0x22, 0x93, 0x17, 0x9c, 0x0c, 0x85, 0x9e, 0x41, + 0xcf, 0x36, 0xa6, 0x67, 0x39, 0xa9, 0x6c, 0x0e, 0x84, 0xef, 0xd8, 0x1d, 0x92, 0x3b, 0x9b, 0x0c, + 0x85, 0xa2, 0x41, 0xd1, 0xe0, 0xd0, 0x56, 0xeb, 0x99, 0xd7, 0x0e, 0xf5, 0x6a, 0x99, 0xe7, 0x66, + 0x80, 0xd6, 0x41, 0xeb, 0xa0, 0x75, 0x2b, 0x9f, 0x19, 0x8a, 0x6e, 0x4f, 0xf8, 0x76, 0x48, 0xea, + 0x86, 0x35, 0x3d, 0x18, 0x55, 0x61, 0xd0, 0x35, 0x4d, 0x5d, 0x53, 0xaf, 0x0a, 0xeb, 0xd8, 0x7e, + 0xd7, 0x0a, 0xc4, 0x57, 0xe1, 0x3b, 0x0a, 0x2d, 0x17, 0xe7, 0x36, 0xfe, 0xd5, 0x3c, 0x48, 0x48, + 0x37, 0x24, 0xf2, 0x6c, 0xa2, 0xcf, 0xa6, 0x02, 0x7c, 0xaa, 0xa0, 0xa6, 0x12, 0x8a, 0xaa, 0x41, + 0x77, 0x47, 0x73, 0x3b, 0x4f, 0x3b, 0x14, 0x9b, 0xb3, 0xdf, 0x84, 0x3c, 0x5f, 0xbd, 0x43, 0xb2, + 0xb9, 0x17, 0xb9, 0xfe, 0x74, 0x71, 0x75, 0x7e, 0x7d, 0xf5, 0xcb, 0xe5, 0xaf, 0x0f, 0xf5, 0x0f, + 0xf5, 0x9b, 0x8f, 0x0f, 0xb7, 0x17, 0xbf, 0x5f, 0xdc, 0x5c, 0xde, 0xfd, 0x51, 0xd4, 0xe9, 0x39, + 0x1d, 0x68, 0xdd, 0x89, 0xa6, 0x99, 0x9e, 0x3d, 0x7e, 0xb5, 0xcf, 0x57, 0xbf, 0x5d, 0x5d, 0xff, + 0xfb, 0xaa, 0xb8, 0x89, 0x44, 0x73, 0xa6, 0x57, 0x38, 0xbf, 0xb9, 0xbc, 0xbb, 0x3c, 0xaf, 0x7f, + 0xc8, 0xf3, 0x3b, 0xfc, 0xbb, 0x7e, 0x73, 0x75, 0x79, 0xf5, 0x6b, 0x9e, 0x5f, 0xe1, 0xe3, 0xe5, + 0xd5, 0xf5, 0x4d, 0xae, 0x5f, 0xa0, 0xfe, 0xbf, 0x5a, 0x2f, 0x40, 0x1a, 0xd9, 0xc8, 0x4c, 0x8f, + 0x78, 0x95, 0x92, 0xbc, 0x18, 0xc5, 0xa8, 0x65, 0xed, 0x2c, 0xc3, 0x42, 0x2a, 0xe9, 0x3b, 0x40, + 0x42, 0x40, 0x42, 0x39, 0x44, 0x42, 0xea, 0xfc, 0xf3, 0x1c, 0x0a, 0x2a, 0x65, 0x46, 0xed, 0xc3, + 0x67, 0x5f, 0x04, 0xcf, 0x5e, 0xa7, 0xa5, 0xab, 0xf9, 0x93, 0x89, 0xa0, 0xfc, 0x50, 0xfe, 0xad, + 0xae, 0xcb, 0x55, 0xba, 0xdd, 0xe8, 0xb5, 0x9c, 0x9f, 0xa2, 0x2e, 0xb7, 0x40, 0x0f, 0xb3, 0x50, + 0x97, 0x6b, 0x72, 0x69, 0x75, 0x6f, 0x4d, 0x32, 0xb2, 0xc6, 0x3b, 0xd4, 0x1c, 0xc3, 0xfe, 0xfa, + 0xa4, 0xd3, 0xa7, 0xea, 0x69, 0xc7, 0x5c, 0xaf, 0x15, 0xbe, 0xf4, 0x44, 0x00, 0x07, 0xbc, 0xc2, + 0x01, 0xc7, 0x4b, 0xb4, 0x75, 0x6e, 0xb8, 0x25, 0x9a, 0x4e, 0xd7, 0xee, 0x68, 0x75, 0xc8, 0x28, + 0x11, 0xae, 0xf5, 0x9f, 0xb7, 0x6c, 0xa5, 0x5d, 0xf5, 0xe7, 0x65, 0xf8, 0x73, 0x53, 0xfe, 0xfc, + 0x64, 0x0b, 0x97, 0x76, 0x87, 0xdc, 0xb8, 0xe3, 0x06, 0xa1, 0xad, 0x50, 0x7c, 0x30, 0x67, 0xdd, + 0xc6, 0x13, 0xc0, 0x9d, 0xc3, 0x9d, 0xc3, 0x9d, 0xc3, 0x9d, 0xc3, 0x9d, 0xc3, 0x9d, 0xc3, 0x9d, + 0x6f, 0xce, 0x9d, 0x87, 0xc2, 0xff, 0x6a, 0x77, 0x74, 0xfc, 0x79, 0x3c, 0xc3, 0x6e, 0x38, 0x74, + 0xf8, 0xf1, 0x65, 0x7e, 0x7c, 0x4b, 0xdd, 0x77, 0x10, 0xda, 0xa1, 0x45, 0x14, 0xf2, 0x82, 0x66, + 0xcf, 0xca, 0xcf, 0xee, 0xc8, 0x96, 0x15, 0x5d, 0xdb, 0xf5, 0x02, 0xd1, 0xf4, 0xdc, 0x16, 0x49, + 0xf6, 0xc0, 0xb1, 0xc3, 0x89, 0xa7, 0xb1, 0xb4, 0xe8, 0x7d, 0x99, 0x15, 0xbf, 0xde, 0x25, 0x48, + 0xc7, 0xa4, 0xe7, 0x9a, 0xfd, 0x0d, 0xe1, 0x39, 0xdc, 0x3a, 0xc2, 0x73, 0x84, 0xe7, 0x08, 0xcf, + 0x11, 0x9e, 0x23, 0x3c, 0xdf, 0xa4, 0x1b, 0xb7, 0x42, 0xa7, 0x2b, 0xb4, 0x7c, 0xf9, 0x68, 0x06, + 0x84, 0xe7, 0x08, 0xcf, 0xb7, 0xd0, 0x7d, 0x0f, 0x65, 0x3b, 0x74, 0x9a, 0x7f, 0x06, 0xa9, 0x5f, + 0x28, 0x81, 0xe0, 0x1c, 0xc1, 0x39, 0x82, 0x73, 0x78, 0x75, 0x82, 0x57, 0x27, 0x28, 0xde, 0xc4, + 0xa1, 0x3b, 0x2e, 0x82, 0x73, 0x38, 0x75, 0x04, 0xe7, 0x08, 0xce, 0x11, 0x9c, 0x23, 0x38, 0x47, + 0x70, 0xbe, 0x49, 0x37, 0xae, 0x1b, 0x9c, 0x8f, 0x67, 0x40, 0x70, 0x8e, 0xe0, 0x1c, 0xc1, 0x39, + 0x82, 0x73, 0x04, 0xe7, 0x08, 0xce, 0x11, 0x9c, 0xf3, 0x7b, 0xf5, 0x2d, 0xb8, 0x35, 0x52, 0xbd, + 0xaf, 0x5c, 0x41, 0xf7, 0xea, 0xc8, 0xbb, 0xa9, 0x47, 0xa6, 0xd9, 0x7e, 0x4f, 0xc5, 0xef, 0x4c, + 0x7c, 0xcd, 0x70, 0x14, 0x9a, 0x5b, 0xa2, 0xe1, 0x9e, 0xa6, 0x76, 0xd3, 0x9b, 0x5b, 0xf6, 0x5d, + 0xf9, 0xfe, 0xaa, 0x33, 0x04, 0xc5, 0x99, 0xc2, 0x98, 0xf8, 0xeb, 0xa9, 0xe1, 0x11, 0xb4, 0x46, + 0x9b, 0x69, 0x8d, 0xf6, 0xaf, 0xfa, 0xcd, 0xfb, 0x7f, 0xd7, 0x6f, 0x2e, 0x1e, 0x92, 0xbb, 0x85, + 0xf2, 0xdf, 0x1e, 0xed, 0xf6, 0xe2, 0xea, 0x36, 0xdf, 0x5d, 0xad, 0xce, 0xff, 0x55, 0xbf, 0xbd, + 0xbd, 0xbc, 0xcd, 0xf3, 0x2b, 0x7c, 0xba, 0xfe, 0xf7, 0xc5, 0xcd, 0xc3, 0xed, 0xe7, 0x4f, 0x9f, + 0x3e, 0xfc, 0x91, 0xe7, 0xf7, 0xb8, 0xbc, 0xba, 0xbb, 0xf8, 0xf5, 0xa6, 0x7e, 0x77, 0xf1, 0xfe, + 0xe1, 0xfc, 0xf2, 0xe6, 0xfc, 0xf3, 0xe5, 0x5d, 0x9e, 0xdf, 0xe6, 0x97, 0x7a, 0xae, 0xbb, 0x06, + 0xfe, 0x5c, 0x3f, 0xff, 0xed, 0xd3, 0x87, 0xfa, 0xd5, 0x45, 0xbe, 0xf7, 0xe0, 0xe7, 0x9b, 0xcb, + 0xf3, 0x3c, 0xbf, 0xc1, 0xdd, 0x4d, 0xfd, 0xea, 0xf6, 0xfc, 0xe2, 0xf2, 0xf7, 0x8b, 0x5c, 0x5b, + 0xd9, 0x0f, 0x97, 0x57, 0x17, 0xe7, 0xf5, 0x9b, 0xf7, 0x79, 0x7e, 0x87, 0xdb, 0xbb, 0xeb, 0x9b, + 0xfa, 0xaf, 0xf9, 0xd6, 0x87, 0x9b, 0xcf, 0xf9, 0x76, 0x74, 0x37, 0xb9, 0x76, 0x09, 0xe7, 0x9f, + 0x72, 0xbd, 0xfc, 0xe7, 0xd7, 0x57, 0x77, 0x37, 0xd7, 0x1f, 0x3e, 0x5c, 0xdc, 0x3c, 0x68, 0xea, + 0x72, 0x36, 0x5b, 0x81, 0x1e, 0x22, 0xba, 0xa1, 0x47, 0x37, 0xb7, 0xd7, 0xbf, 0xdc, 0x6d, 0x5b, + 0x74, 0x73, 0xfd, 0xe9, 0xe2, 0xa6, 0x7e, 0x77, 0x79, 0xf5, 0xeb, 0xc3, 0xed, 0x1f, 0xb7, 0x77, + 0x17, 0x1f, 0xf3, 0xac, 0xbc, 0xaf, 0xdf, 0xe5, 0xe1, 0xf3, 0xa7, 0xf7, 0xf5, 0xbb, 0x8b, 0xdd, + 0xed, 0xe7, 0xdb, 0x48, 0x91, 0x5b, 0xec, 0x07, 0xa2, 0x65, 0xf5, 0xbc, 0xbf, 0x84, 0xaf, 0xce, + 0x30, 0x4e, 0x8d, 0x05, 0xcf, 0x08, 0x9e, 0x51, 0xcf, 0xc0, 0xe8, 0xf0, 0x8c, 0xaa, 0x6d, 0x3a, + 0x09, 0xed, 0x39, 0x89, 0x07, 0x9f, 0x04, 0x57, 0xac, 0x73, 0xd0, 0xa9, 0x79, 0x0a, 0xa7, 0x7b, + 0xb0, 0xc9, 0x71, 0xc4, 0x46, 0xf0, 0x47, 0x5a, 0x07, 0x98, 0x5c, 0x4b, 0xa6, 0xdb, 0x4e, 0x93, + 0x65, 0xed, 0xb2, 0xee, 0x90, 0xf6, 0x34, 0x76, 0xbe, 0x58, 0xef, 0x3f, 0x0d, 0xcd, 0x95, 0x68, + 0x49, 0x69, 0xa1, 0xa2, 0x2f, 0x3b, 0x9a, 0xb2, 0x80, 0xef, 0xa6, 0x4e, 0x1d, 0x17, 0xfe, 0x7a, + 0xe6, 0xb7, 0xd1, 0x69, 0xa4, 0xac, 0x03, 0x7c, 0x2f, 0x82, 0xa6, 0xef, 0xf4, 0xe2, 0xb3, 0xd2, + 0x62, 0xbd, 0xd5, 0x0a, 0x0a, 0x41, 0x4f, 0x34, 0x9d, 0xb6, 0xd3, 0x2c, 0x44, 0xbd, 0xb5, 0x83, + 0x82, 0x2f, 0x3a, 0x76, 0x28, 0x5a, 0x85, 0xd0, 0x2b, 0xd8, 0x85, 0xe4, 0x99, 0x6f, 0xb6, 0xe4, + 0xf2, 0xac, 0xd1, 0x4b, 0xee, 0xa4, 0x87, 0x8d, 0x5f, 0x3d, 0x2f, 0x17, 0x67, 0x89, 0xff, 0xeb, + 0x3b, 0xbd, 0xe1, 0xd7, 0xb7, 0xda, 0xb6, 0xd3, 0x51, 0xb9, 0xfb, 0x6d, 0x6e, 0xdf, 0xe7, 0xa7, + 0x52, 0x5c, 0xc9, 0x57, 0x7a, 0x73, 0xd9, 0x1e, 0x6d, 0x47, 0x21, 0x7c, 0x16, 0x85, 0x67, 0xdb, + 0x6f, 0xfd, 0x65, 0xfb, 0xa2, 0xe0, 0xb8, 0x2d, 0xa7, 0x69, 0x87, 0x22, 0x28, 0x84, 0xcf, 0x76, + 0x18, 0xfd, 0x5b, 0xa2, 0x3e, 0xff, 0x4f, 0x50, 0xe8, 0x3d, 0xbf, 0x04, 0x4e, 0xd3, 0xee, 0x14, + 0x92, 0x6f, 0x73, 0xef, 0x3e, 0xdb, 0x41, 0x61, 0xf8, 0x95, 0x44, 0x4b, 0xfd, 0x1b, 0xb5, 0xed, + 0x7e, 0x27, 0xda, 0xda, 0xb6, 0xdd, 0x09, 0x76, 0x25, 0x65, 0x51, 0x59, 0x7d, 0x75, 0xd5, 0x98, + 0x4d, 0x9d, 0xd9, 0xd4, 0x9a, 0x4b, 0xbd, 0x53, 0xe1, 0x82, 0x70, 0x05, 0xc6, 0xbc, 0x39, 0xeb, + 0x3a, 0x41, 0xd7, 0x0e, 0x9b, 0xcf, 0x1c, 0xf6, 0x2c, 0x99, 0x2b, 0x6d, 0x83, 0x56, 0x70, 0xdc, + 0x40, 0xf8, 0x43, 0x9c, 0xe0, 0xb8, 0xa1, 0x37, 0xfc, 0xb7, 0x7b, 0xd7, 0x6e, 0xb7, 0x45, 0x73, + 0xf8, 0xab, 0x85, 0x66, 0xaf, 0xe3, 0x35, 0xa3, 0x24, 0xad, 0x82, 0x13, 0x14, 0xbc, 0x76, 0xc1, + 0x2e, 0xb4, 0x9c, 0x76, 0x5b, 0xf8, 0xc3, 0xb9, 0xc2, 0x97, 0x9e, 0x18, 0x3e, 0xc3, 0x2d, 0xfc, + 0xf5, 0x6c, 0x87, 0xf7, 0xae, 0x13, 0x14, 0x46, 0x59, 0x51, 0x7d, 0x1f, 0x96, 0x11, 0x96, 0x11, + 0x96, 0x31, 0x7f, 0x96, 0x31, 0x95, 0x90, 0xad, 0xb1, 0x2e, 0x64, 0x53, 0xcb, 0x0c, 0xd5, 0xcb, + 0x08, 0x2d, 0xca, 0xdc, 0x1f, 0x4e, 0xcf, 0xfe, 0x5c, 0x2d, 0xbe, 0xcb, 0xd7, 0x69, 0x85, 0x58, + 0x16, 0x83, 0xd0, 0xf3, 0xed, 0xa7, 0xf5, 0x52, 0x38, 0xd5, 0x7c, 0x6f, 0x34, 0x60, 0xcd, 0xba, + 0xcb, 0xc5, 0x80, 0xd2, 0x26, 0x53, 0xc5, 0x44, 0x12, 0xf9, 0x54, 0x55, 0x23, 0x48, 0x36, 0x7a, + 0x64, 0x23, 0x47, 0xe7, 0x4b, 0xf5, 0x68, 0x0f, 0xd9, 0xb8, 0xad, 0xd8, 0x1c, 0xef, 0xa6, 0x22, + 0xf5, 0x11, 0x8f, 0xc3, 0xdd, 0xdc, 0xa0, 0xf0, 0x35, 0x29, 0x86, 0xf4, 0x0b, 0x01, 0x22, 0x6b, + 0x78, 0xa4, 0x24, 0xc1, 0x5a, 0x7e, 0x20, 0x7a, 0xde, 0x43, 0x2c, 0xd4, 0x29, 0x1e, 0xd3, 0x8d, + 0x1c, 0x9c, 0xb2, 0x6a, 0x2b, 0x71, 0x93, 0x54, 0xcd, 0x2e, 0x43, 0xb3, 0xa1, 0xd9, 0x86, 0x34, + 0x5b, 0x45, 0x80, 0x19, 0x14, 0x5b, 0x02, 0xe8, 0xa5, 0x76, 0xda, 0x91, 0x1a, 0x74, 0x96, 0x41, + 0x94, 0xfa, 0x6b, 0x6b, 0x04, 0x3e, 0xf7, 0x1f, 0x27, 0xef, 0xa4, 0x00, 0xa2, 0x67, 0x86, 0x01, + 0x4a, 0x03, 0x4a, 0xaf, 0x12, 0x2c, 0x82, 0xd7, 0x9d, 0x1e, 0x0d, 0x58, 0x0d, 0xe7, 0xab, 0xe9, + 0x7c, 0x95, 0x4f, 0xee, 0x14, 0x23, 0x41, 0xbd, 0x88, 0x90, 0x28, 0xc2, 0x99, 0xe1, 0x6d, 0x71, + 0xb7, 0x33, 0xab, 0xe8, 0xa7, 0xc3, 0xdd, 0xaa, 0xaa, 0x44, 0x32, 0x30, 0x46, 0x2f, 0x9a, 0xd9, + 0xc5, 0xd1, 0x2c, 0x87, 0x1b, 0xc9, 0x37, 0xa2, 0xaa, 0x0b, 0x87, 0xda, 0x30, 0xab, 0x0f, 0x97, + 0x1a, 0xb1, 0xab, 0x13, 0xbb, 0x5a, 0xf1, 0xab, 0x17, 0x4d, 0xcd, 0x88, 0xea, 0x96, 0x7c, 0x7d, + 0xf2, 0x91, 0xc9, 0x9c, 0xe4, 0x74, 0x84, 0xdd, 0xa6, 0x15, 0x19, 0xcc, 0xf9, 0x9b, 0x53, 0x8d, + 0x39, 0x3e, 0xc5, 0xf1, 0xd2, 0x9b, 0x37, 0x47, 0xd3, 0xff, 0x37, 0x09, 0x8f, 0x46, 0xae, 0xf0, + 0x28, 0x52, 0xf8, 0x94, 0x9a, 0x7e, 0x98, 0xb5, 0x9c, 0xc4, 0x48, 0x5e, 0x3f, 0xce, 0x9c, 0x0e, + 0xba, 0x66, 0xfe, 0x76, 0x44, 0x82, 0x1b, 0x3a, 0x11, 0xe9, 0xf4, 0x57, 0x99, 0xf9, 0x9b, 0x12, + 0xb3, 0xa7, 0xbe, 0x5f, 0x2a, 0xe9, 0x0a, 0x24, 0x47, 0xa5, 0xe3, 0xa0, 0xf2, 0xde, 0x15, 0x15, + 0xf8, 0x2d, 0x47, 0xf8, 0x4d, 0xff, 0xec, 0x9d, 0xee, 0x40, 0x74, 0x1c, 0xc7, 0xb4, 0xc3, 0x20, + 0xbb, 0x06, 0x33, 0x06, 0x43, 0xed, 0x88, 0x60, 0x9e, 0xb4, 0x50, 0x64, 0x5a, 0x59, 0x42, 0xbe, + 0x32, 0x4c, 0x06, 0x4c, 0x06, 0x42, 0x3e, 0x84, 0x7c, 0x08, 0xf9, 0x10, 0xf2, 0x21, 0xe4, 0xdb, + 0x9d, 0x90, 0x8f, 0x82, 0x36, 0xcc, 0x44, 0x7c, 0x0a, 0x47, 0xbe, 0x04, 0xfc, 0xc6, 0x7a, 0x0e, + 0xf0, 0x9b, 0x78, 0x51, 0xf4, 0x44, 0xc5, 0x0f, 0x4e, 0x10, 0xd6, 0xc3, 0x50, 0xf1, 0xfc, 0xe0, + 0xa3, 0xe3, 0x5e, 0x74, 0x44, 0x37, 0x3e, 0x55, 0x75, 0xfb, 0x9d, 0x8e, 0x02, 0x0e, 0xfd, 0x68, + 0x7f, 0xa3, 0x0f, 0xbe, 0xf6, 0x5b, 0xc2, 0x17, 0xad, 0x9f, 0x5f, 0xe2, 0xa1, 0xf9, 0x4e, 0x62, + 0x58, 0x2a, 0xff, 0x29, 0x64, 0x34, 0x2c, 0x95, 0xf8, 0x1d, 0x4b, 0x6f, 0x50, 0x38, 0xeb, 0xe7, + 0x5a, 0x6e, 0x72, 0xaa, 0xc3, 0x9e, 0xc2, 0x4a, 0x4a, 0x58, 0x03, 0x39, 0xed, 0x57, 0xd2, 0x76, + 0x25, 0xed, 0x96, 0xd3, 0xe6, 0x65, 0xef, 0x27, 0x29, 0x21, 0x54, 0xc9, 0x28, 0xae, 0x4c, 0xcb, + 0x26, 0xc8, 0xc0, 0xe2, 0x5d, 0x9f, 0xdf, 0xd3, 0xd9, 0xdf, 0xbc, 0x7a, 0xfb, 0x75, 0x6f, 0xad, + 0xf6, 0xb6, 0x0b, 0xde, 0x51, 0xe5, 0xdd, 0x66, 0xdf, 0x68, 0xf2, 0xbd, 0xa7, 0xbe, 0x73, 0x31, + 0xba, 0x08, 0xbe, 0x6d, 0x37, 0xc5, 0x7c, 0xfe, 0xcd, 0xa4, 0xa9, 0xd0, 0xe4, 0x33, 0xaf, 0xde, + 0x76, 0x31, 0x7f, 0xb0, 0x34, 0xe0, 0x59, 0x15, 0xc8, 0x4c, 0x07, 0x28, 0xce, 0x22, 0x90, 0xb9, + 0x2e, 0xe4, 0x90, 0x0e, 0x25, 0xa4, 0x43, 0x84, 0xd7, 0xd0, 0xdf, 0x69, 0x17, 0x15, 0xa5, 0x61, + 0x59, 0xcc, 0x3b, 0x59, 0xd2, 0xe5, 0xaf, 0x33, 0xb7, 0xfa, 0xcb, 0x5e, 0x67, 0x35, 0x89, 0xb3, + 0x36, 0xfa, 0x94, 0x89, 0x2e, 0xd7, 0x6e, 0x8e, 0x6a, 0x5c, 0xa8, 0x1c, 0xf7, 0x29, 0xc7, 0x75, + 0x32, 0x9b, 0x47, 0x33, 0xdc, 0xeb, 0x88, 0x0c, 0xd9, 0xf4, 0x0d, 0xb5, 0x74, 0x8d, 0xac, 0x24, + 0xb2, 0x39, 0xed, 0xad, 0x4c, 0x61, 0x5b, 0x25, 0x1e, 0x3c, 0x88, 0x49, 0x3a, 0x79, 0xad, 0x35, + 0x53, 0x5a, 0xaa, 0x98, 0xbb, 0x36, 0x3d, 0x78, 0x3b, 0x9a, 0x3a, 0x39, 0xed, 0x9d, 0x4c, 0x5a, + 0x93, 0x11, 0x48, 0x33, 0x61, 0x2a, 0xbd, 0x91, 0x53, 0x10, 0xfa, 0x8e, 0xfb, 0x44, 0xe9, 0x18, + 0xff, 0x36, 0xc5, 0x5a, 0x0c, 0xe1, 0xda, 0x8f, 0x9d, 0xa8, 0x0b, 0x8d, 0xa2, 0x6e, 0x8d, 0x07, + 0x4a, 0xf7, 0x8a, 0x49, 0xea, 0xa8, 0x87, 0xe2, 0x00, 0x75, 0x84, 0x3a, 0xa6, 0xab, 0x8e, 0xea, + 0xe5, 0xcd, 0x8a, 0x65, 0xcd, 0x3c, 0xfa, 0xd8, 0xf1, 0xbc, 0xde, 0xa3, 0xdd, 0xfc, 0xd3, 0xea, + 0x7a, 0x2d, 0x42, 0x8d, 0xd4, 0xec, 0x70, 0x75, 0xdd, 0x54, 0xe9, 0x71, 0x00, 0xe5, 0x84, 0x72, + 0xee, 0x96, 0x72, 0x76, 0xc3, 0xbe, 0xba, 0x4a, 0x0e, 0x07, 0x41, 0xa1, 0xa0, 0x50, 0xa9, 0x2a, + 0x54, 0xdf, 0x71, 0xc3, 0x52, 0x8d, 0xa0, 0x4f, 0x35, 0x74, 0x11, 0x9d, 0x1d, 0x8e, 0x2e, 0xa2, + 0xe4, 0x25, 0xab, 0x55, 0xab, 0x27, 0x68, 0x20, 0xaa, 0xe5, 0x71, 0x94, 0xd2, 0x7d, 0x28, 0xe9, + 0x3d, 0xf0, 0x39, 0xf0, 0x39, 0x3b, 0x45, 0x78, 0xec, 0xfc, 0xfd, 0x93, 0xd0, 0xa8, 0xdc, 0x68, + 0x14, 0xed, 0x02, 0x13, 0xca, 0xc5, 0x25, 0x7a, 0x17, 0x96, 0xcc, 0x1f, 0xcf, 0x45, 0x77, 0x9e, + 0x17, 0x33, 0xd6, 0xe0, 0x6d, 0xdd, 0xa1, 0xc4, 0xc5, 0xb7, 0x30, 0xe0, 0x6c, 0xc7, 0x3d, 0xa5, + 0x03, 0x5e, 0xd3, 0x12, 0xdf, 0xc2, 0x77, 0xa1, 0xe8, 0x88, 0xae, 0x08, 0xfd, 0x17, 0xcb, 0x73, + 0xad, 0xe6, 0x73, 0x84, 0x9f, 0x49, 0x67, 0x3b, 0x11, 0x4f, 0x43, 0x38, 0xdc, 0x29, 0xe6, 0xa6, + 0x47, 0xde, 0xe4, 0x9c, 0xfd, 0x68, 0xd1, 0x8f, 0xf2, 0x75, 0x56, 0x4b, 0x93, 0x04, 0x2e, 0x93, + 0x69, 0x1f, 0x16, 0xfd, 0x28, 0x55, 0x3e, 0x45, 0x6b, 0xf5, 0xf1, 0xec, 0x75, 0x5a, 0x56, 0xe8, + 0x74, 0x15, 0x7a, 0xe5, 0x4d, 0x86, 0xe0, 0x64, 0x14, 0x27, 0xa3, 0xe8, 0x90, 0x07, 0x30, 0xb3, + 0x19, 0x30, 0xa3, 0xdc, 0xbe, 0xa3, 0xe5, 0xfd, 0xe5, 0xd2, 0x01, 0x45, 0x34, 0x9a, 0xde, 0xb2, + 0xf9, 0x78, 0x47, 0xca, 0x46, 0x9d, 0x36, 0xaa, 0xbf, 0x34, 0xd5, 0x84, 0xc8, 0x1a, 0xa5, 0x5e, + 0x2a, 0xaa, 0x7c, 0x3f, 0xd4, 0x6b, 0xd9, 0xa6, 0x14, 0x8a, 0xd2, 0x98, 0x5e, 0x3a, 0xe3, 0xcb, + 0xc2, 0xfc, 0x32, 0xd1, 0x99, 0x5c, 0x4c, 0x30, 0x27, 0xb5, 0xa9, 0xc1, 0x0c, 0xb3, 0x30, 0xc4, + 0xa6, 0x96, 0x56, 0xf7, 0xde, 0x29, 0x23, 0x6b, 0x9c, 0x52, 0xd9, 0x54, 0x23, 0x03, 0x65, 0xd7, + 0xfd, 0x1e, 0xdd, 0x55, 0xf7, 0x7b, 0x70, 0xd4, 0x70, 0xd4, 0x70, 0xd4, 0x70, 0xd4, 0x70, 0xd4, + 0x70, 0xd4, 0x70, 0xd4, 0xea, 0x8e, 0x9a, 0x35, 0x50, 0x97, 0x26, 0xb3, 0x69, 0xca, 0xcf, 0x4a, + 0x6e, 0x2f, 0xf1, 0x2f, 0x0a, 0x24, 0xf7, 0x42, 0xc7, 0xc2, 0xcd, 0x91, 0x34, 0x36, 0x56, 0x9a, + 0xbb, 0x8e, 0x0c, 0x4f, 0xd8, 0x61, 0xc6, 0xdb, 0x03, 0xd6, 0xd1, 0xe3, 0xff, 0xf2, 0x3a, 0xad, + 0x3b, 0xa7, 0x8b, 0x0b, 0x04, 0x0a, 0x9b, 0xb8, 0x40, 0x00, 0xc4, 0x27, 0x88, 0x4f, 0xc4, 0x53, + 0x88, 0xa7, 0x10, 0x4f, 0x21, 0x9e, 0x42, 0x3c, 0x85, 0x78, 0x0a, 0xf1, 0x14, 0x88, 0x4f, 0x38, + 0x6a, 0x38, 0x6a, 0x38, 0x6a, 0x38, 0x6a, 0x38, 0x6a, 0x38, 0xea, 0xdd, 0x25, 0x3e, 0x37, 0xc9, + 0xbe, 0xb1, 0xdd, 0xf0, 0x27, 0x4d, 0xbe, 0x6d, 0xe5, 0x25, 0x7f, 0xd2, 0x0b, 0x6e, 0x32, 0xfd, + 0x77, 0xbc, 0xc4, 0x26, 0x12, 0x80, 0xa5, 0xca, 0xba, 0x54, 0xca, 0xb9, 0x24, 0xcd, 0x1c, 0xd2, + 0x7e, 0xb3, 0x9a, 0xf6, 0x2b, 0x0d, 0xbb, 0x08, 0x1d, 0x88, 0x55, 0x3a, 0x0d, 0x93, 0xee, 0x04, + 0xa0, 0xde, 0x17, 0x2f, 0xc3, 0xe2, 0x2b, 0xb1, 0xf7, 0xca, 0xd9, 0xef, 0x65, 0xa8, 0x41, 0xa6, + 0xd4, 0x40, 0x3a, 0xfb, 0xdd, 0x6e, 0x75, 0x1d, 0xd7, 0x1a, 0xca, 0x44, 0x3f, 0x50, 0x3f, 0x09, + 0x9a, 0x19, 0x8d, 0xb2, 0xbe, 0xf4, 0x02, 0x6a, 0x94, 0xf5, 0x45, 0xad, 0xb3, 0xfa, 0x5d, 0xe1, + 0xdb, 0x0a, 0x6d, 0xe9, 0x66, 0x6c, 0x5b, 0x45, 0x61, 0xcc, 0x85, 0xdb, 0xef, 0x0e, 0xbf, 0x24, + 0x72, 0x0b, 0x36, 0x97, 0x5b, 0x70, 0x98, 0xde, 0x32, 0x79, 0xbd, 0x58, 0xae, 0xec, 0xce, 0x96, + 0xa5, 0x5e, 0xb0, 0xe4, 0x0d, 0x34, 0xbd, 0xfe, 0x10, 0xde, 0x07, 0x94, 0xa2, 0xa9, 0x78, 0x24, + 0xca, 0xa6, 0xe0, 0x2c, 0x08, 0x16, 0x53, 0xfd, 0xd6, 0x63, 0xdb, 0xf7, 0x1d, 0xe1, 0x5b, 0xa1, + 0x6f, 0xbb, 0x81, 0x33, 0x54, 0xe9, 0x40, 0xe3, 0x0a, 0xe4, 0x05, 0x93, 0xe1, 0xd8, 0x81, 0x5d, + 0xe0, 0xd9, 0x04, 0x9f, 0x4d, 0x01, 0x38, 0x14, 0x81, 0xc6, 0x17, 0xa6, 0x7f, 0xec, 0x10, 0x9b, + 0xe8, 0x5a, 0x45, 0xe3, 0xe4, 0xe1, 0x2d, 0x4e, 0x1e, 0xf4, 0xe8, 0x71, 0x9c, 0x3c, 0x18, 0x5b, + 0xda, 0xd2, 0xdb, 0x4a, 0xa5, 0x76, 0x5a, 0xa9, 0x1c, 0x9f, 0x9e, 0x9c, 0x1e, 0x9f, 0x55, 0xab, + 0xa5, 0x5a, 0x09, 0x67, 0x10, 0xcc, 0x56, 0x48, 0x39, 0xb0, 0xd1, 0x53, 0x63, 0x23, 0x81, 0x0e, + 0x1f, 0xa2, 0xd7, 0x44, 0xf6, 0xb4, 0x4d, 0x6e, 0x18, 0xc9, 0xef, 0x70, 0x5c, 0xeb, 0xd1, 0xf7, + 0xec, 0x56, 0xd3, 0x0e, 0x42, 0xab, 0xf7, 0x67, 0x18, 0xe8, 0xf4, 0xb8, 0x79, 0x3d, 0x15, 0xa0, + 0x14, 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x14, 0xd2, 0x39, 0x54, 0xfd, 0x72, + 0xcb, 0x09, 0x9a, 0xb6, 0xdf, 0xd2, 0xf3, 0xc8, 0xc9, 0x24, 0xf0, 0xc5, 0xf0, 0xc5, 0xf0, 0xc5, + 0xf0, 0xc5, 0xf0, 0xc5, 0xf0, 0xc5, 0xf0, 0xc5, 0xaa, 0xbe, 0x58, 0xf8, 0xbe, 0xe7, 0xeb, 0x79, + 0xe2, 0x78, 0x0a, 0xf8, 0x61, 0xf8, 0x61, 0xf8, 0x61, 0xf8, 0x61, 0xf8, 0x61, 0xf8, 0x61, 0xf8, + 0x61, 0x55, 0x3f, 0xdc, 0x6e, 0x06, 0x1c, 0xbe, 0x78, 0x6a, 0x1a, 0xf8, 0x63, 0xf8, 0x63, 0xf8, + 0x63, 0xf8, 0x63, 0xf8, 0x63, 0xf8, 0x63, 0xf8, 0x63, 0x55, 0x7f, 0xdc, 0xed, 0x77, 0x42, 0x87, + 0xe7, 0xec, 0xf8, 0xd5, 0x54, 0xf0, 0xcb, 0xf0, 0xcb, 0xf0, 0xcb, 0xf0, 0xcb, 0xf0, 0xcb, 0xf0, + 0xcb, 0xf0, 0xcb, 0xaa, 0x7e, 0xd9, 0x6b, 0x86, 0x42, 0xd3, 0x1f, 0xc7, 0x53, 0xc0, 0x0f, 0xc3, + 0x0f, 0xc3, 0x0f, 0xc3, 0x0f, 0xc3, 0x0f, 0xc3, 0x0f, 0xc3, 0x0f, 0xab, 0xfa, 0x61, 0xed, 0xa8, + 0x18, 0xb1, 0x30, 0x7c, 0x30, 0x7c, 0x30, 0x7c, 0x30, 0x7c, 0x30, 0x7c, 0x30, 0x7c, 0x30, 0xc9, + 0x07, 0xf7, 0x5d, 0x26, 0x86, 0x7a, 0x66, 0x22, 0xf8, 0x64, 0xf8, 0x64, 0xf8, 0x64, 0xf8, 0x64, + 0xf8, 0x64, 0xf8, 0x64, 0xf8, 0x64, 0x75, 0x9f, 0xfc, 0xa7, 0xeb, 0xfd, 0xe5, 0x5a, 0x3d, 0xdf, + 0x0b, 0x3d, 0x5d, 0xaf, 0x3c, 0x33, 0x15, 0xfc, 0x32, 0xfc, 0x32, 0xfc, 0x32, 0xfc, 0x32, 0xfc, + 0x32, 0xfc, 0x32, 0xfc, 0xb2, 0x92, 0x5f, 0xee, 0x0c, 0x83, 0xdb, 0x66, 0x47, 0xd8, 0x3e, 0xdd, + 0x21, 0x4f, 0xcd, 0x01, 0x4f, 0x0c, 0x4f, 0xbc, 0x55, 0x9e, 0x38, 0x74, 0xba, 0x22, 0x74, 0x9a, + 0x7f, 0x06, 0xa9, 0xfb, 0xe2, 0xcf, 0xee, 0xc8, 0x8e, 0x15, 0x5d, 0xdb, 0xf5, 0x02, 0xd1, 0xf4, + 0x5c, 0xe5, 0x8a, 0x7e, 0xf8, 0x74, 0xf8, 0x74, 0xf8, 0xf4, 0x2c, 0xfb, 0x74, 0xb4, 0x64, 0x43, + 0x4b, 0xb6, 0xe1, 0x1b, 0x78, 0xfd, 0x90, 0xad, 0x27, 0xdb, 0x82, 0xb9, 0x00, 0xcb, 0x00, 0xcb, + 0x40, 0x90, 0x80, 0x20, 0x01, 0x98, 0x02, 0x98, 0x02, 0x41, 0xa2, 0xec, 0x99, 0xf5, 0xbb, 0xb2, + 0xcd, 0xcc, 0x02, 0x6f, 0x0c, 0x6f, 0x0c, 0x6f, 0x0c, 0x6f, 0x0c, 0x6f, 0x0c, 0x6f, 0x0c, 0x6f, + 0xac, 0xec, 0x8d, 0x75, 0x7b, 0xc1, 0x4c, 0xcd, 0x01, 0x4f, 0x0c, 0x4f, 0x0c, 0x4f, 0x0c, 0x4f, + 0x0c, 0x4f, 0x0c, 0x4f, 0x0c, 0x4f, 0xac, 0xec, 0x89, 0xb9, 0x3a, 0xc1, 0x2c, 0x98, 0x0b, 0x9e, + 0x19, 0x9e, 0x19, 0x9e, 0x19, 0x9e, 0x19, 0x9e, 0x19, 0x9e, 0x19, 0x9e, 0x59, 0xd9, 0x33, 0xeb, + 0xf6, 0x82, 0x99, 0x9a, 0x03, 0x9e, 0x18, 0x9e, 0x18, 0x9e, 0x18, 0x9e, 0x18, 0x9e, 0x18, 0x9e, + 0x18, 0x9e, 0x58, 0xd9, 0x13, 0xeb, 0x47, 0xc6, 0x88, 0x87, 0xe1, 0x85, 0xe1, 0x85, 0xe1, 0x85, + 0xe1, 0x85, 0xe1, 0x85, 0xe1, 0x85, 0x69, 0x5e, 0x98, 0xa7, 0x1f, 0xcc, 0xdc, 0x4c, 0xf0, 0xca, + 0xf0, 0xca, 0xf0, 0xca, 0xf0, 0xca, 0xf0, 0xca, 0xf0, 0xca, 0xf0, 0xca, 0x92, 0x9f, 0x94, 0x94, + 0x29, 0xf5, 0x62, 0x37, 0x45, 0xaf, 0x3e, 0x5f, 0xdc, 0xe6, 0xf5, 0x84, 0x6f, 0x0f, 0xf7, 0xd2, + 0xee, 0xa8, 0xba, 0x76, 0xed, 0x62, 0x36, 0x62, 0x11, 0x9b, 0xdc, 0x92, 0x37, 0x24, 0x97, 0xbc, + 0xee, 0xba, 0x5e, 0x18, 0xad, 0x80, 0x92, 0xe6, 0x16, 0x83, 0xe6, 0xb3, 0xe8, 0xda, 0x3d, 0x3b, + 0x7c, 0x1e, 0x7e, 0xfb, 0x23, 0xaf, 0x27, 0xdc, 0x66, 0x04, 0x5a, 0x2c, 0x67, 0xe8, 0x4e, 0xda, + 0x76, 0x53, 0x04, 0x47, 0x8b, 0x7e, 0x3c, 0x0a, 0x42, 0x3b, 0x14, 0x47, 0xb1, 0xdb, 0x51, 0x01, + 0x54, 0xc5, 0x20, 0xf4, 0xfb, 0xcd, 0xd0, 0x8d, 0x1d, 0xd7, 0x75, 0xf2, 0xc8, 0xcb, 0xe4, 0x31, + 0x0f, 0x8b, 0x7e, 0x7c, 0xb8, 0x1d, 0x3e, 0xf1, 0xe1, 0x7c, 0xfc, 0xc4, 0x3d, 0x9e, 0x55, 0x96, + 0x10, 0xea, 0x62, 0x4b, 0x04, 0x4d, 0xdf, 0xe9, 0x29, 0x2d, 0x6f, 0xe2, 0x99, 0xa7, 0x07, 0x4b, + 0xee, 0xa6, 0x9a, 0xed, 0x54, 0x86, 0x99, 0x14, 0x78, 0x49, 0x86, 0x95, 0x54, 0x38, 0xa9, 0x0d, + 0x23, 0xb5, 0xe1, 0xa3, 0x0e, 0x6c, 0xe4, 0x35, 0xa8, 0xca, 0xf0, 0x30, 0xd9, 0xad, 0x20, 0xf4, + 0x1d, 0xf7, 0x49, 0x65, 0xbb, 0x62, 0xd9, 0x2b, 0xbd, 0x4d, 0x51, 0xbf, 0x84, 0x6b, 0x3f, 0x76, + 0x44, 0x4b, 0x5d, 0xb7, 0xc6, 0x03, 0x25, 0xd7, 0xf1, 0xbd, 0x68, 0xdb, 0xfd, 0x4e, 0xb4, 0x9f, + 0x43, 0x71, 0x80, 0x3a, 0x42, 0x1d, 0xd3, 0x55, 0xc7, 0x47, 0xcf, 0xeb, 0x08, 0xdb, 0xa5, 0xe8, + 0x63, 0x29, 0x45, 0x7d, 0x74, 0xda, 0x8e, 0xdb, 0x12, 0xdf, 0xd4, 0xf5, 0x71, 0x3c, 0x10, 0x8a, + 0x05, 0xc5, 0x4a, 0x55, 0xb1, 0xfa, 0x8e, 0x1b, 0x9e, 0x94, 0x09, 0x7a, 0x75, 0xaa, 0x30, 0x84, + 0xc6, 0x75, 0x10, 0x48, 0x1d, 0x1d, 0x6e, 0x43, 0x33, 0xf0, 0xd6, 0xe5, 0x32, 0x38, 0xa2, 0x6a, + 0x02, 0x77, 0xa1, 0xc5, 0x59, 0x70, 0x2d, 0x59, 0xa5, 0x7c, 0x56, 0x39, 0xab, 0x9d, 0x96, 0xcf, + 0xaa, 0x1b, 0x5c, 0x3b, 0x43, 0x0c, 0x41, 0x23, 0xe7, 0x0c, 0x81, 0x7e, 0xfb, 0x9b, 0xcd, 0x31, + 0x05, 0x87, 0x20, 0x52, 0xf4, 0x89, 0x14, 0x16, 0x60, 0x34, 0x6a, 0x98, 0xf8, 0x1c, 0xfb, 0x01, + 0x45, 0x70, 0x34, 0x3d, 0x18, 0x00, 0x09, 0x00, 0x29, 0x55, 0x80, 0x44, 0x6b, 0x87, 0x48, 0x38, + 0x19, 0xd2, 0x6d, 0x7f, 0x08, 0x94, 0x05, 0x94, 0xb5, 0x72, 0xc9, 0xf8, 0x4e, 0x82, 0x80, 0xb7, + 0x80, 0xb7, 0x80, 0xb7, 0x32, 0x8d, 0xb7, 0xbc, 0x27, 0xa7, 0x69, 0x77, 0x08, 0x58, 0x2b, 0x1e, + 0x08, 0x9c, 0x05, 0x9c, 0xb5, 0x65, 0x0c, 0x2f, 0x4c, 0x3e, 0x4c, 0xfe, 0x56, 0x9b, 0x7c, 0xaf, + 0xf7, 0x68, 0x37, 0xff, 0xb4, 0xba, 0x5e, 0x8b, 0x12, 0x64, 0xcf, 0x0c, 0x57, 0x3f, 0x17, 0x8c, + 0x16, 0x15, 0x6e, 0x03, 0x6e, 0x63, 0xdb, 0xdc, 0x06, 0x8b, 0x72, 0x76, 0xc3, 0xbe, 0xba, 0x4a, + 0x0e, 0x07, 0x41, 0xa1, 0xa0, 0x50, 0xa9, 0x2a, 0x54, 0xdf, 0x71, 0xc3, 0x52, 0x8d, 0xa0, 0x4f, + 0x35, 0x50, 0x55, 0xa0, 0xaa, 0x98, 0x96, 0xac, 0x56, 0xad, 0x9e, 0xec, 0x2e, 0x37, 0xc5, 0xe2, + 0x71, 0xe2, 0x34, 0x51, 0x45, 0x97, 0x13, 0x8d, 0x82, 0xcf, 0x81, 0xcf, 0x49, 0xd5, 0xe7, 0xe4, + 0x23, 0xd9, 0x72, 0x18, 0x7f, 0x5a, 0x41, 0x68, 0x87, 0xfd, 0x40, 0x5d, 0xb1, 0xa6, 0x07, 0x43, + 0xbf, 0xa0, 0x5f, 0xa9, 0xea, 0x97, 0x70, 0xfb, 0xdd, 0x98, 0x3b, 0xa1, 0x28, 0x59, 0x45, 0x61, + 0xcc, 0x85, 0xdb, 0xef, 0x0e, 0xbf, 0xe4, 0x00, 0x9c, 0x1c, 0x38, 0xb9, 0x9d, 0xe7, 0xe4, 0x42, + 0x15, 0x95, 0x9d, 0xa4, 0x1c, 0x0c, 0x47, 0xc1, 0x49, 0xc0, 0x49, 0xa4, 0xea, 0x24, 0x9c, 0x96, + 0x70, 0x43, 0x27, 0x7c, 0xf1, 0x45, 0x9b, 0xe2, 0x24, 0x14, 0xc2, 0xb5, 0xe2, 0x65, 0xfc, 0xa8, + 0x9f, 0xed, 0x40, 0xe8, 0xdc, 0x8a, 0x1f, 0x17, 0xb8, 0x59, 0x91, 0xc2, 0x70, 0x2f, 0xf8, 0x9e, + 0xde, 0x27, 0xd6, 0x6c, 0x98, 0x6a, 0xe1, 0xa1, 0x6e, 0xc1, 0xa1, 0xc4, 0x96, 0xea, 0xd5, 0x17, + 0xae, 0x5e, 0xff, 0xe5, 0x6b, 0xb5, 0x62, 0x9d, 0x8a, 0x41, 0xff, 0x71, 0xf2, 0x46, 0x6b, 0x97, + 0x69, 0x12, 0x4e, 0xcc, 0x0c, 0x5b, 0xb3, 0x0f, 0x63, 0xf9, 0x5d, 0xf3, 0x31, 0x59, 0xc3, 0xa9, + 0x62, 0x30, 0x95, 0x0d, 0xa5, 0xaa, 0x81, 0x24, 0x1b, 0x46, 0xb2, 0x41, 0xa4, 0x18, 0x42, 0x3d, + 0x3d, 0x7a, 0xef, 0xf8, 0x92, 0x0a, 0x34, 0x25, 0x15, 0xea, 0x3e, 0x79, 0x66, 0xb4, 0x9a, 0x6f, + 0x2e, 0xc1, 0x37, 0xc3, 0x37, 0xab, 0x88, 0x6a, 0x32, 0xa0, 0x39, 0x96, 0x08, 0xa2, 0x87, 0x8c, + 0xc7, 0xd3, 0x7a, 0xf6, 0x94, 0xd0, 0xb3, 0x27, 0x05, 0xf1, 0x66, 0x13, 0x73, 0x0e, 0x71, 0x27, + 0xf2, 0xdf, 0x8a, 0xfb, 0xad, 0xaa, 0x06, 0xc9, 0x40, 0x4a, 0x37, 0x81, 0xa5, 0x12, 0xa3, 0xde, + 0x5d, 0x40, 0x33, 0xf6, 0x62, 0x53, 0x18, 0x0e, 0xc5, 0x61, 0x53, 0x20, 0x2e, 0x45, 0x62, 0x57, + 0x28, 0x76, 0xc5, 0xe2, 0x54, 0x30, 0x9a, 0xa2, 0x11, 0x15, 0x8e, 0x1e, 0x1b, 0x2e, 0x47, 0x43, + 0xaa, 0x84, 0xfd, 0x52, 0x27, 0xf3, 0x36, 0xa5, 0x06, 0x40, 0x94, 0x93, 0x50, 0xd5, 0xee, 0x0a, + 0x2b, 0xf8, 0x57, 0x95, 0x6e, 0x0b, 0xf3, 0x06, 0x93, 0xd4, 0x7d, 0x01, 0xe6, 0x0a, 0xe6, 0x0a, + 0xe6, 0x8a, 0x98, 0x24, 0xb6, 0xd4, 0x5e, 0x95, 0x32, 0x6c, 0xaf, 0xd4, 0x7a, 0x4f, 0xac, 0xe0, + 0xd5, 0xe4, 0x3b, 0x51, 0xac, 0xb2, 0x55, 0xc7, 0x30, 0x54, 0x30, 0x54, 0x30, 0x54, 0x2a, 0xd2, + 0xa2, 0xdc, 0x8d, 0x63, 0x99, 0xee, 0x9c, 0x6a, 0x4c, 0xa1, 0xd7, 0x99, 0x74, 0xfc, 0x9f, 0x9e, + 0xb8, 0x16, 0xb8, 0x3a, 0x95, 0x32, 0x19, 0x95, 0xb9, 0xe9, 0x98, 0x3a, 0x97, 0x26, 0xf3, 0x31, + 0xf6, 0xd4, 0xd4, 0x14, 0xe7, 0xd9, 0x2d, 0x60, 0xe8, 0x68, 0x6a, 0x7a, 0x0b, 0x74, 0xbb, 0x87, + 0xa4, 0xb2, 0x17, 0x7b, 0x9b, 0x19, 0xdd, 0x48, 0x0b, 0xae, 0x18, 0x65, 0x8c, 0x94, 0xd3, 0x3f, + 0xf4, 0x8c, 0x90, 0x91, 0x74, 0x90, 0x25, 0x7e, 0x93, 0x90, 0xf7, 0xb0, 0xd0, 0x61, 0x9a, 0x26, + 0xf9, 0x1a, 0xaa, 0xa4, 0x3b, 0xad, 0xaf, 0x6a, 0x32, 0x5e, 0xe3, 0xb8, 0x73, 0xfa, 0xf4, 0x6f, + 0xe6, 0x6f, 0x47, 0x24, 0x3e, 0xbc, 0xa0, 0x75, 0x34, 0x3a, 0xfd, 0x65, 0x66, 0xfe, 0xf6, 0x10, + 0xc3, 0xd4, 0x0c, 0x5c, 0x17, 0x40, 0x8b, 0x1b, 0xb4, 0xe2, 0x05, 0x5c, 0x0c, 0xb0, 0x09, 0xec, + 0x8e, 0x8b, 0x01, 0x14, 0x76, 0xbb, 0x23, 0xec, 0xb6, 0x5a, 0x2e, 0xcc, 0x1c, 0x59, 0x40, 0x40, + 0xe1, 0xc5, 0x4f, 0xb1, 0xc9, 0x7b, 0xf3, 0x26, 0x36, 0x57, 0x47, 0x23, 0xfd, 0xca, 0x80, 0x9d, + 0x18, 0x25, 0x92, 0x90, 0xed, 0x84, 0x6c, 0x1e, 0xca, 0xc2, 0xa5, 0xa4, 0xda, 0x89, 0x32, 0xec, + 0x04, 0xec, 0xc4, 0x2a, 0xbe, 0x8a, 0x7a, 0x18, 0x69, 0xb7, 0xba, 0x8e, 0xab, 0x5a, 0x0e, 0xb0, + 0x54, 0x64, 0x66, 0x66, 0x03, 0x6d, 0x06, 0xda, 0x0c, 0xb4, 0x99, 0x82, 0xb4, 0xd0, 0xea, 0x1b, + 0x96, 0xfa, 0x9a, 0x8a, 0xc6, 0x1c, 0x6a, 0xf5, 0x0f, 0x5c, 0x4b, 0x49, 0x0e, 0x90, 0x79, 0xd8, + 0x3a, 0xa3, 0x01, 0x33, 0x7f, 0xe0, 0xcc, 0x14, 0x40, 0x33, 0xf0, 0x6c, 0xec, 0xcb, 0x4e, 0xaf, + 0xc7, 0xc0, 0x72, 0x63, 0xb9, 0xf9, 0x7c, 0x42, 0x23, 0x95, 0x03, 0xcf, 0xe4, 0x12, 0x1d, 0x6d, + 0xfc, 0x45, 0xb8, 0x8e, 0x87, 0x21, 0x4c, 0x01, 0xf6, 0x02, 0xf6, 0xda, 0x0c, 0xf6, 0xa2, 0x86, + 0x3d, 0x13, 0xd5, 0xb3, 0x7d, 0xdf, 0x11, 0xbe, 0x15, 0xfa, 0xb6, 0x1b, 0x38, 0x43, 0x13, 0x18, + 0xe8, 0x6f, 0x78, 0xa2, 0x8d, 0x0b, 0x26, 0x3f, 0xcc, 0xc4, 0xad, 0x7a, 0xba, 0x8a, 0xca, 0xa9, + 0xb0, 0xec, 0x8a, 0xcb, 0xad, 0xc0, 0xc6, 0x14, 0xd9, 0x98, 0x42, 0x9b, 0x50, 0x6c, 0x3d, 0x05, + 0x67, 0x40, 0x3d, 0x3c, 0xc1, 0xd6, 0x32, 0x97, 0x49, 0xba, 0x38, 0x75, 0x99, 0x7a, 0xbe, 0x65, + 0x98, 0x8a, 0x27, 0x7d, 0x81, 0x07, 0x32, 0xce, 0x7c, 0x31, 0xce, 0x74, 0x06, 0x66, 0xbb, 0x36, + 0x37, 0x2d, 0x73, 0x7a, 0x43, 0x32, 0xaf, 0x81, 0xa3, 0x75, 0x26, 0x0d, 0x99, 0xdd, 0x2a, 0xc6, + 0xb4, 0x87, 0xb4, 0xb6, 0x8a, 0xff, 0xa2, 0xd7, 0x54, 0x77, 0x6f, 0x2f, 0x1b, 0xb3, 0x34, 0x36, + 0x6a, 0xa5, 0xb5, 0x79, 0x1c, 0x5e, 0xb3, 0x95, 0x0a, 0xaf, 0x63, 0x2e, 0x02, 0x66, 0x8e, 0x84, + 0x79, 0x84, 0xac, 0xb1, 0x91, 0x9b, 0xa9, 0x1d, 0xd7, 0x7a, 0xf4, 0x3d, 0xbb, 0x35, 0xb9, 0xc8, + 0x9f, 0x0d, 0xac, 0xcf, 0x4f, 0x0d, 0xa8, 0x0e, 0xa8, 0x0e, 0xa8, 0x0e, 0xa8, 0x0e, 0xa8, 0x0e, + 0xa8, 0x0e, 0xa8, 0x0e, 0xa8, 0x9e, 0x4d, 0xa8, 0xbe, 0x29, 0x1c, 0xd6, 0x72, 0x82, 0xa6, 0xed, + 0xb7, 0x78, 0x11, 0x58, 0x32, 0x29, 0xb0, 0x17, 0xb0, 0x17, 0xb0, 0x17, 0xb0, 0x17, 0xb0, 0x17, + 0xb0, 0x17, 0xb0, 0x17, 0xb0, 0x17, 0xb0, 0xd7, 0x34, 0xf6, 0x12, 0xbe, 0xef, 0xf9, 0xbc, 0xc8, + 0x2b, 0x9e, 0x12, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, 0x0b, 0xb8, + 0x0b, 0xb8, 0x0b, 0xb8, 0x6b, 0x1a, 0x77, 0xb5, 0x9b, 0x81, 0x09, 0xec, 0x35, 0x35, 0x2d, 0xf0, + 0x17, 0xf0, 0x17, 0xf0, 0x17, 0xf0, 0x17, 0xf0, 0x17, 0xf0, 0x17, 0xf0, 0x17, 0xf0, 0x17, 0xf0, + 0xd7, 0x34, 0xfe, 0xea, 0xf6, 0x3b, 0xa1, 0x63, 0x26, 0xf7, 0xeb, 0xd5, 0xd4, 0xc0, 0x61, 0xc0, + 0x61, 0xc0, 0x61, 0xc0, 0x61, 0xc0, 0x61, 0xc0, 0x61, 0xc0, 0x61, 0xc0, 0x61, 0xc0, 0x61, 0xd3, + 0x38, 0xcc, 0x6b, 0x86, 0x82, 0x19, 0x7f, 0xc5, 0x53, 0x02, 0x77, 0x01, 0x77, 0x01, 0x77, 0x01, + 0x77, 0x01, 0x77, 0x01, 0x77, 0x01, 0x77, 0x01, 0x77, 0x01, 0x77, 0x4d, 0xe3, 0x2e, 0x76, 0xd6, + 0x0b, 0x5c, 0x17, 0x30, 0x17, 0x30, 0x17, 0x30, 0x17, 0x30, 0x17, 0x30, 0x17, 0x30, 0x17, 0x30, + 0x17, 0x30, 0xd7, 0x1c, 0xe6, 0xea, 0xbb, 0x86, 0x4e, 0x1c, 0x67, 0x26, 0x06, 0x06, 0x03, 0x06, + 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x9b, 0xc5, + 0x60, 0x7f, 0xba, 0xde, 0x5f, 0xae, 0xd5, 0xf3, 0xbd, 0xd0, 0xe3, 0x46, 0x61, 0x33, 0x53, 0x03, + 0x87, 0x01, 0x87, 0x01, 0x87, 0x01, 0x87, 0x01, 0x87, 0x01, 0x87, 0x01, 0x87, 0x01, 0x87, 0x01, + 0x87, 0x25, 0xdb, 0xd2, 0xb1, 0x83, 0xd0, 0x6a, 0x76, 0x84, 0xed, 0xf3, 0x01, 0xb0, 0xa9, 0x39, + 0x81, 0xbc, 0x80, 0xbc, 0x80, 0xbc, 0x32, 0x84, 0xbc, 0x42, 0xa7, 0x2b, 0x42, 0xa7, 0xf9, 0x67, + 0x90, 0x39, 0xec, 0xf5, 0xd9, 0x1d, 0xf9, 0x85, 0xa2, 0x6b, 0xbb, 0x5e, 0x20, 0x9a, 0x9e, 0xab, + 0xdd, 0x31, 0x10, 0x98, 0x0e, 0x98, 0x0e, 0x98, 0x0e, 0x98, 0x6e, 0x73, 0x98, 0x0e, 0x57, 0x2e, + 0x70, 0xc1, 0x04, 0x5c, 0xb9, 0xc0, 0x09, 0xfb, 0xbd, 0x7e, 0x68, 0xec, 0xce, 0x85, 0x05, 0x73, + 0x23, 0x0c, 0x40, 0x18, 0x80, 0x30, 0x20, 0x43, 0x61, 0x00, 0x08, 0x58, 0x80, 0x75, 0x80, 0x75, + 0x80, 0x75, 0x80, 0x75, 0x8e, 0xe7, 0xeb, 0x22, 0x31, 0xfe, 0x5b, 0x17, 0x66, 0x66, 0x05, 0xfa, + 0x02, 0xfa, 0x02, 0xfa, 0x02, 0xfa, 0x02, 0xfa, 0x02, 0xfa, 0x02, 0xfa, 0x02, 0xfa, 0x02, 0xfa, + 0x9a, 0x41, 0x5f, 0xdc, 0xbd, 0x7f, 0xa7, 0xe6, 0x04, 0xf2, 0x02, 0xf2, 0x02, 0xf2, 0x02, 0xf2, + 0x02, 0xf2, 0x02, 0xf2, 0x02, 0xf2, 0x02, 0xf2, 0x02, 0xf2, 0x9a, 0x41, 0x5e, 0xa6, 0x3a, 0xff, + 0x2e, 0x98, 0x1b, 0x48, 0x0c, 0x48, 0x0c, 0x48, 0x0c, 0x48, 0x0c, 0x48, 0x0c, 0x48, 0x0c, 0x48, + 0x0c, 0x48, 0x0c, 0x48, 0x6c, 0x06, 0x89, 0x71, 0xf7, 0xfe, 0x9d, 0x9a, 0x13, 0xc8, 0x0b, 0xc8, + 0x0b, 0xc8, 0x0b, 0xc8, 0x0b, 0xc8, 0x0b, 0xc8, 0x0b, 0xc8, 0x0b, 0xc8, 0x0b, 0xc8, 0x6b, 0x06, + 0x79, 0xf1, 0x33, 0x5f, 0xe0, 0xbb, 0x80, 0xba, 0x80, 0xba, 0x80, 0xba, 0x80, 0xba, 0x80, 0xba, + 0x80, 0xba, 0x80, 0xba, 0x80, 0xba, 0xe6, 0x51, 0x97, 0x99, 0xfe, 0xbf, 0x73, 0x33, 0x03, 0x85, + 0x01, 0x85, 0x01, 0x85, 0x01, 0x85, 0x01, 0x85, 0x01, 0x85, 0x01, 0x85, 0x01, 0x85, 0x6d, 0x1b, + 0x0a, 0xdb, 0x4b, 0x51, 0xe6, 0xf5, 0x9b, 0xa1, 0x68, 0xa2, 0xbc, 0xf9, 0xe6, 0x27, 0x5e, 0x4f, + 0xf8, 0xf6, 0x50, 0xb6, 0xec, 0x8e, 0x2e, 0xd4, 0x63, 0x6f, 0x76, 0xc2, 0xd4, 0xe4, 0x44, 0xc3, + 0x40, 0x61, 0xb9, 0xd3, 0xd2, 0xa8, 0x06, 0x51, 0xa3, 0xea, 0xae, 0xeb, 0x85, 0xd1, 0x8a, 0x6a, + 0x39, 0x8e, 0x62, 0xd0, 0x7c, 0x16, 0x5d, 0xbb, 0x67, 0x87, 0xcf, 0xc3, 0xb7, 0x3f, 0xf2, 0x7a, + 0xc2, 0x6d, 0x46, 0x31, 0x87, 0xe5, 0x0c, 0xd1, 0x56, 0xdb, 0x6e, 0x8a, 0xe0, 0x68, 0xd1, 0x8f, + 0x47, 0x41, 0xff, 0x71, 0xea, 0xf7, 0xd3, 0x7f, 0x3b, 0x0a, 0x42, 0x3b, 0x14, 0x47, 0x31, 0x60, + 0xd3, 0x09, 0xa5, 0x8a, 0x41, 0xe8, 0xf7, 0x9b, 0xa1, 0x1b, 0x43, 0xc0, 0xeb, 0xe4, 0xdb, 0x5d, + 0x26, 0x4f, 0x7e, 0x58, 0xf4, 0xe3, 0xc3, 0xed, 0xf4, 0x97, 0x9b, 0xf9, 0xdb, 0xc3, 0xed, 0xf0, + 0xcb, 0x3d, 0x9c, 0x8f, 0xbf, 0xdc, 0x5e, 0x3a, 0x7b, 0x4d, 0x50, 0xc6, 0x62, 0x4b, 0x04, 0x4d, + 0xdf, 0xe9, 0x69, 0x6d, 0x72, 0x02, 0x9f, 0xa7, 0x27, 0x23, 0xca, 0x9c, 0x1e, 0xa0, 0xd0, 0x8e, + 0x65, 0x39, 0x62, 0x58, 0xb6, 0xd8, 0x95, 0x2b, 0x66, 0x65, 0x8f, 0x55, 0xd9, 0x63, 0x54, 0xce, + 0xd8, 0x34, 0x5d, 0xd4, 0xa1, 0x1d, 0x83, 0x26, 0xd2, 0x12, 0x84, 0xbe, 0xe3, 0x3e, 0xe9, 0x88, + 0x4b, 0xac, 0x3b, 0xa5, 0xb7, 0x19, 0xb6, 0x37, 0xc2, 0xb5, 0x1f, 0x3b, 0xa2, 0xa5, 0x6f, 0x6b, + 0xc6, 0x13, 0x11, 0xf7, 0xed, 0xbd, 0x68, 0xdb, 0xfd, 0x4e, 0x24, 0x6f, 0x43, 0xf1, 0x85, 0xb9, + 0x82, 0xb9, 0x82, 0xb9, 0x52, 0x91, 0x96, 0x47, 0xcf, 0xeb, 0x08, 0xdb, 0xe5, 0xb0, 0x57, 0xa5, + 0x0c, 0xdb, 0x2b, 0xa7, 0xed, 0xb8, 0x2d, 0xf1, 0x4d, 0xdf, 0x5e, 0x8d, 0x27, 0x82, 0xa1, 0x81, + 0xa1, 0x81, 0xa1, 0x51, 0x90, 0x96, 0xbe, 0xe3, 0x86, 0x27, 0x65, 0x06, 0x3b, 0x73, 0xaa, 0x31, + 0x05, 0x0f, 0x01, 0xcf, 0x70, 0x52, 0xc1, 0x49, 0xb8, 0x33, 0xb3, 0xb7, 0xdc, 0x04, 0xbb, 0x09, + 0x6a, 0x96, 0x81, 0x50, 0x67, 0x25, 0xd2, 0x4d, 0x6d, 0x41, 0xa5, 0x7c, 0x56, 0x39, 0xab, 0x9d, + 0x96, 0xcf, 0xaa, 0x19, 0xde, 0x8b, 0x0d, 0xd1, 0xd2, 0x8d, 0x1d, 0xa7, 0xa5, 0xf9, 0x7b, 0x72, + 0x83, 0x9e, 0x96, 0x58, 0x76, 0x9c, 0x06, 0x60, 0xb9, 0x99, 0x97, 0x7b, 0x2f, 0x1d, 0xf3, 0x47, + 0x8a, 0x9b, 0x98, 0xa2, 0x26, 0x9d, 0x98, 0x69, 0x8a, 0xe3, 0x39, 0x46, 0xdc, 0x85, 0xb8, 0x0b, + 0x71, 0x17, 0xe2, 0x2e, 0xc4, 0x5d, 0x88, 0xbb, 0x10, 0x77, 0xe5, 0x29, 0xee, 0x4a, 0x05, 0xae, + 0x8c, 0xee, 0xa4, 0x7c, 0x8e, 0xad, 0x8d, 0x26, 0x68, 0x99, 0x9e, 0x0c, 0xb0, 0x03, 0xb0, 0x03, + 0xb0, 0x43, 0x41, 0x5a, 0x78, 0x6e, 0xa0, 0x64, 0x48, 0xbe, 0xe6, 0xbe, 0x71, 0x12, 0x58, 0x06, + 0x58, 0x26, 0x57, 0x58, 0xc6, 0x5c, 0xf2, 0x35, 0x50, 0x0d, 0xd8, 0xe4, 0x3c, 0xf2, 0x6d, 0xa0, + 0x37, 0xb1, 0xdc, 0x60, 0x93, 0x35, 0xcd, 0x1f, 0x29, 0x3c, 0xf3, 0x9e, 0x9c, 0xa6, 0xdd, 0x61, + 0x08, 0xcd, 0xe2, 0x89, 0x10, 0x96, 0x21, 0x2c, 0x43, 0x58, 0xa6, 0x20, 0x2d, 0x9b, 0x4f, 0xf7, + 0x03, 0x62, 0x82, 0x0b, 0x87, 0x0b, 0xc7, 0x72, 0x03, 0x31, 0xc9, 0xbc, 0x61, 0x5c, 0xce, 0xa6, + 0x09, 0x97, 0xa2, 0x59, 0x80, 0x95, 0x80, 0x95, 0x80, 0x95, 0x14, 0xa4, 0x65, 0xe3, 0x95, 0x5c, + 0x80, 0x4a, 0xf0, 0xdd, 0xf0, 0xdd, 0xb9, 0xf5, 0xdd, 0xc3, 0xe5, 0xb7, 0x82, 0xd0, 0x0e, 0xfb, + 0x81, 0xbe, 0x0b, 0x9f, 0x9e, 0x0c, 0x9e, 0x1c, 0x9e, 0x1c, 0x9e, 0x5c, 0x41, 0x5a, 0x84, 0xdb, + 0xef, 0xc6, 0xa6, 0x90, 0xc3, 0x9d, 0x57, 0x34, 0xe6, 0xb8, 0x70, 0xfb, 0xdd, 0xe1, 0x4b, 0x0d, + 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0xb0, 0xdc, 0x40, 0x60, 0x26, 0x9e, 0xa3, 0x28, 0x04, 0xba, + 0x3d, 0x92, 0x0c, 0xf6, 0x46, 0x22, 0xc8, 0x8d, 0xb1, 0x56, 0x48, 0x6a, 0x52, 0x22, 0xbf, 0x63, + 0x72, 0x9f, 0x94, 0xdc, 0xd3, 0xa1, 0x1a, 0xaa, 0xd6, 0x9c, 0x14, 0x3f, 0x38, 0x41, 0x58, 0x0f, + 0x43, 0x5f, 0x69, 0xf7, 0x8b, 0x1f, 0x1d, 0xf7, 0x62, 0xe8, 0xc6, 0xdc, 0xc8, 0xbb, 0xba, 0xfd, + 0x4e, 0xe7, 0x50, 0x61, 0xb0, 0xfd, 0x8d, 0x3e, 0xf8, 0xda, 0x6f, 0x09, 0x5f, 0xb4, 0x7e, 0x7e, + 0x89, 0x87, 0xb2, 0x2e, 0x20, 0x51, 0x19, 0x8c, 0x28, 0x81, 0x82, 0xf8, 0x1b, 0x10, 0x7b, 0x39, + 0x81, 0x5f, 0x2f, 0xbe, 0xab, 0x3f, 0xb1, 0x66, 0x5f, 0x54, 0xf7, 0x83, 0x6b, 0x1f, 0x24, 0x96, + 0x9e, 0x67, 0xc9, 0x57, 0xaf, 0xf2, 0xf2, 0xb5, 0x5b, 0xfc, 0x2f, 0x4b, 0x56, 0x73, 0x6c, 0x16, + 0x56, 0x70, 0xe1, 0x72, 0x56, 0x40, 0x49, 0xeb, 0x95, 0xb4, 0x5c, 0x4e, 0xab, 0x97, 0xbd, 0x9f, + 0xa4, 0x94, 0xd0, 0xa5, 0x63, 0x85, 0x3c, 0x50, 0xe5, 0x60, 0xf1, 0xce, 0xcf, 0xef, 0xeb, 0xec, + 0x6f, 0x5e, 0xad, 0xc0, 0xba, 0x37, 0x57, 0x7d, 0xe3, 0x05, 0xef, 0xa9, 0xf6, 0x7e, 0xb3, 0x6f, + 0x35, 0xf9, 0xee, 0x53, 0xdf, 0xbb, 0xd8, 0x15, 0x41, 0x60, 0x3f, 0x89, 0x79, 0x66, 0x28, 0x09, + 0x5a, 0x93, 0x4f, 0xbc, 0x7a, 0xdb, 0x71, 0x14, 0xfa, 0xea, 0xd7, 0xcb, 0xe8, 0x99, 0x55, 0xb4, + 0xcb, 0x34, 0x9d, 0xb2, 0xe4, 0x71, 0x32, 0x64, 0x89, 0x34, 0x09, 0x22, 0x4d, 0x6e, 0xbc, 0x26, + 0x2d, 0x92, 0x2f, 0xa7, 0x28, 0x19, 0xef, 0x9d, 0xc5, 0xba, 0x5c, 0x6c, 0x8e, 0x57, 0x6b, 0xc9, + 0x1b, 0x4d, 0x3a, 0x89, 0x47, 0x9f, 0x5b, 0x66, 0x52, 0x16, 0x6e, 0x85, 0x34, 0x63, 0x26, 0xc3, + 0x88, 0x49, 0x6e, 0x91, 0x2a, 0xaf, 0xa5, 0xcc, 0x5b, 0x29, 0xf3, 0x52, 0xf2, 0x5b, 0x48, 0x33, + 0xe7, 0xcb, 0xb6, 0x76, 0xa2, 0xb2, 0xe2, 0xab, 0xf0, 0x9d, 0xf0, 0x65, 0xfd, 0x5a, 0x24, 0x07, + 0x3e, 0xe3, 0x11, 0x6b, 0xde, 0x4c, 0x8e, 0x48, 0x95, 0x26, 0x4c, 0x55, 0x88, 0x51, 0x45, 0x71, + 0xa0, 0xd2, 0x9d, 0x64, 0x5a, 0x93, 0x4c, 0x5f, 0xaa, 0x8b, 0x0b, 0x0f, 0xb6, 0x92, 0x26, 0x19, + 0x27, 0x52, 0xf2, 0x12, 0x74, 0xbc, 0x27, 0x4b, 0x52, 0x58, 0x54, 0x89, 0x43, 0x49, 0x82, 0x90, + 0x0b, 0x14, 0xe9, 0x83, 0x86, 0xf1, 0x46, 0x1d, 0x25, 0x3f, 0xac, 0xb4, 0x99, 0x2b, 0xbd, 0xe9, + 0xc7, 0x78, 0x8a, 0x87, 0xe4, 0x87, 0x58, 0x87, 0x64, 0x61, 0xc2, 0x02, 0xdf, 0xd5, 0x12, 0x8f, + 0xfd, 0x27, 0x4b, 0xb8, 0xa1, 0xef, 0x88, 0x60, 0xbd, 0xc1, 0x9f, 0xfd, 0x38, 0xec, 0x7e, 0xfe, + 0xec, 0xfe, 0x68, 0x07, 0x03, 0xe1, 0x7f, 0x75, 0x64, 0x16, 0x64, 0x76, 0xe3, 0xc7, 0xc3, 0xe4, + 0x3c, 0x40, 0x09, 0x1e, 0x20, 0xff, 0x1e, 0x60, 0x9d, 0x40, 0xc9, 0x62, 0x46, 0x1a, 0x86, 0x24, + 0x8a, 0x96, 0xb2, 0x88, 0x51, 0x44, 0x4d, 0x53, 0xe4, 0xa8, 0xa2, 0xa7, 0x2d, 0x82, 0xda, 0xa2, + 0xa8, 0x2f, 0x92, 0x66, 0x98, 0x4d, 0x59, 0x51, 0x4d, 0x06, 0x50, 0xdb, 0x34, 0x6b, 0xb6, 0x67, + 0x9e, 0x6e, 0xd9, 0x13, 0x9d, 0x54, 0xa8, 0x8e, 0xa7, 0xa5, 0x2a, 0x90, 0x53, 0x14, 0x74, 0x52, + 0x13, 0x34, 0x95, 0x43, 0x57, 0x49, 0xd8, 0x94, 0x85, 0x4d, 0x69, 0xf8, 0x94, 0x27, 0x9d, 0xa3, + 0x1f, 0x72, 0x9a, 0x01, 0x43, 0x51, 0x05, 0xb1, 0x98, 0x42, 0xe1, 0x64, 0x45, 0x85, 0x3e, 0x97, + 0x84, 0x4c, 0x2b, 0xe2, 0x67, 0x19, 0xf0, 0x04, 0x65, 0x87, 0xb2, 0xe7, 0x58, 0xd9, 0x9d, 0x96, + 0x70, 0x43, 0x27, 0x7c, 0xf1, 0x45, 0x5b, 0x47, 0xe1, 0x09, 0x25, 0xf8, 0xc5, 0xcb, 0xf8, 0xd1, + 0x3f, 0xdb, 0x01, 0x43, 0x51, 0xc0, 0xfb, 0x8b, 0x9f, 0x3f, 0xff, 0xfa, 0x70, 0x7b, 0x71, 0xf3, + 0xfb, 0xe5, 0xf9, 0x85, 0xf1, 0x7d, 0xda, 0x10, 0x62, 0xe2, 0x3f, 0xca, 0x9c, 0xe7, 0x3b, 0x66, + 0x28, 0x83, 0xa3, 0x99, 0x38, 0xf2, 0x48, 0x09, 0xfb, 0x2b, 0x72, 0x23, 0xef, 0x87, 0x4f, 0xba, + 0x18, 0x3d, 0x76, 0xf4, 0x97, 0xdb, 0xd1, 0x53, 0x57, 0xb2, 0x26, 0xea, 0xeb, 0x3d, 0x90, 0x39, + 0x07, 0x54, 0xf4, 0x1d, 0x44, 0x9f, 0xa1, 0xe8, 0x2b, 0x10, 0x1d, 0xed, 0x52, 0x74, 0xa4, 0x6c, + 0xdb, 0x27, 0xe5, 0xe4, 0xc2, 0x6e, 0xab, 0xd9, 0xf3, 0xc4, 0x8e, 0x2b, 0x74, 0x45, 0x2c, 0x7e, + 0x8a, 0xcd, 0xc9, 0x9b, 0x37, 0xb1, 0x5d, 0x38, 0x1a, 0x4b, 0x7f, 0x9a, 0x9a, 0x1a, 0x25, 0xf2, + 0xa8, 0xeb, 0xa9, 0x42, 0x2e, 0x12, 0x99, 0xc3, 0x28, 0x43, 0x4b, 0xc1, 0x61, 0x80, 0xc3, 0x40, + 0x58, 0x83, 0xb0, 0x06, 0x1c, 0x06, 0x38, 0x0c, 0x28, 0x3b, 0x94, 0x1d, 0x1c, 0x06, 0x38, 0x8c, + 0x0d, 0x73, 0x18, 0xaa, 0x65, 0x08, 0x2c, 0x14, 0x86, 0x42, 0xbd, 0x81, 0xe9, 0xf4, 0xeb, 0x38, + 0x71, 0x58, 0x32, 0x35, 0x40, 0xa9, 0x92, 0x80, 0x54, 0x41, 0x40, 0xaa, 0x1c, 0x50, 0xab, 0x18, + 0x48, 0x2f, 0x23, 0x5d, 0x49, 0x14, 0x75, 0x32, 0xd2, 0x15, 0x84, 0xaf, 0x98, 0xdb, 0xd4, 0x2b, + 0x99, 0xec, 0x25, 0x8d, 0x55, 0xd2, 0xc9, 0xc3, 0x5a, 0xcd, 0x3b, 0x48, 0xf1, 0x0c, 0xd2, 0x79, + 0x57, 0x65, 0xe4, 0x5d, 0xa5, 0x9f, 0x77, 0x15, 0x3f, 0x50, 0x3e, 0xe3, 0x6a, 0x3c, 0x80, 0x39, + 0xd7, 0xaa, 0x8c, 0x5c, 0x2b, 0x83, 0x50, 0x37, 0xa5, 0x5c, 0x2b, 0xbb, 0xd7, 0xb3, 0x94, 0x7a, + 0x5f, 0x25, 0x5b, 0x95, 0x8c, 0xc4, 0x89, 0x02, 0xb8, 0xca, 0x8d, 0x9d, 0x28, 0x28, 0xf7, 0x8e, + 0x52, 0xec, 0x15, 0xc5, 0x73, 0x16, 0xd0, 0x0d, 0x08, 0xe9, 0x8c, 0xc3, 0x41, 0xd0, 0x2d, 0xe8, + 0x16, 0x74, 0x6b, 0x9d, 0x6e, 0x39, 0x2d, 0x92, 0x76, 0x39, 0x2d, 0xe8, 0x17, 0xf4, 0x0b, 0xfa, + 0xb5, 0xfa, 0x99, 0x3d, 0xdf, 0xf1, 0xa4, 0xca, 0xfb, 0xe6, 0xde, 0x2f, 0x19, 0x09, 0x2d, 0x83, + 0x96, 0x6d, 0x4c, 0xcb, 0xfa, 0x8e, 0x1b, 0xbe, 0x25, 0x28, 0x99, 0x02, 0xe9, 0x4e, 0xbc, 0xaa, + 0x8a, 0x70, 0xb0, 0xa0, 0x73, 0x15, 0x95, 0x6e, 0x5f, 0x42, 0xcd, 0xab, 0xa6, 0x38, 0x2e, 0x31, + 0xa2, 0x74, 0x87, 0xd4, 0xb9, 0x3a, 0x8a, 0x6b, 0xc9, 0xca, 0xd5, 0xea, 0x06, 0x17, 0xcd, 0xd0, + 0xe1, 0x4b, 0x23, 0x55, 0x27, 0xe4, 0x35, 0x29, 0x28, 0x2f, 0x1e, 0x07, 0x07, 0x04, 0x07, 0xb4, + 0xcb, 0x30, 0x4f, 0x8b, 0x4b, 0x94, 0xee, 0x69, 0xa9, 0x4e, 0xc2, 0xce, 0xf5, 0xa8, 0xb4, 0x43, + 0xaf, 0xeb, 0x34, 0x69, 0xac, 0xac, 0x42, 0xab, 0x3e, 0xc5, 0x96, 0x7c, 0xab, 0xd7, 0xaf, 0xb1, + 0xc1, 0x33, 0xbc, 0xe8, 0x14, 0xe7, 0x48, 0x8e, 0xe0, 0x2f, 0xa8, 0x9d, 0x47, 0x45, 0x07, 0xc3, + 0xe3, 0xbf, 0x92, 0x4f, 0xea, 0x0e, 0xd1, 0x37, 0x04, 0x27, 0x19, 0x3a, 0xd6, 0x07, 0x7d, 0x43, + 0xd8, 0x0f, 0xaf, 0xd7, 0xe5, 0x99, 0xa8, 0x1a, 0x89, 0x4d, 0x37, 0x17, 0x9b, 0x7b, 0x43, 0x95, + 0xc6, 0x62, 0x73, 0xef, 0x24, 0xd3, 0x54, 0x2c, 0x78, 0x09, 0x42, 0xd1, 0x5d, 0xde, 0x52, 0x2c, + 0xfe, 0xf7, 0x74, 0x1a, 0x8a, 0x05, 0x2f, 0xd9, 0xec, 0x25, 0x36, 0xfc, 0x5e, 0x5c, 0x6d, 0xc4, + 0x6c, 0xdb, 0x5e, 0x9f, 0xd2, 0x30, 0xfc, 0x50, 0x36, 0x1a, 0xc9, 0x2c, 0xff, 0x26, 0x85, 0x4c, + 0xe7, 0x32, 0x0c, 0xbf, 0x77, 0x5a, 0x69, 0x0c, 0x76, 0xb3, 0xe9, 0xf5, 0xdd, 0x70, 0x08, 0x8d, + 0xa5, 0x01, 0xc0, 0xd4, 0x98, 0x7c, 0x34, 0x8e, 0x59, 0x2d, 0x08, 0xf9, 0xf5, 0xfe, 0x2b, 0x05, + 0x85, 0xc7, 0xf1, 0xa3, 0x5d, 0x0c, 0xbf, 0xa0, 0x6d, 0x1f, 0x2d, 0x20, 0x25, 0x88, 0x66, 0x18, + 0x01, 0xe5, 0x02, 0xab, 0x89, 0xf5, 0xb2, 0xba, 0x22, 0x7c, 0xf6, 0x34, 0x4a, 0xad, 0xe6, 0xa7, + 0xda, 0x8d, 0x3a, 0x0a, 0x35, 0x31, 0xd7, 0x15, 0x77, 0x36, 0xb1, 0x67, 0x13, 0x7f, 0x16, 0x35, + 0x20, 0x12, 0xc3, 0xa9, 0x57, 0x4f, 0xf4, 0x5d, 0xda, 0x3d, 0x32, 0x89, 0xad, 0x3e, 0x23, 0x8c, + 0x8d, 0xbf, 0x36, 0xed, 0x06, 0x17, 0x86, 0x2b, 0x74, 0xf4, 0x4a, 0x46, 0xe6, 0x96, 0xa0, 0xaa, + 0x31, 0x07, 0x4b, 0x09, 0xc9, 0xdc, 0x0b, 0xd6, 0xeb, 0xf5, 0x87, 0x8f, 0x17, 0x77, 0xff, 0xba, + 0x7e, 0xff, 0x70, 0xf7, 0xc7, 0xa7, 0x0b, 0xdd, 0xeb, 0x3a, 0xa2, 0x23, 0x16, 0xbd, 0x3b, 0x77, + 0xf4, 0x77, 0x6f, 0xe1, 0x8b, 0xde, 0xd4, 0xdf, 0x5f, 0x7e, 0xbe, 0x7d, 0xa8, 0x7f, 0xf8, 0x50, + 0xd4, 0x9e, 0x78, 0x70, 0x98, 0xb5, 0xb7, 0xbb, 0xab, 0x9f, 0xd7, 0xcf, 0xb7, 0xf6, 0xed, 0x3e, + 0x5c, 0x9f, 0xd7, 0x39, 0x5e, 0x4c, 0x6b, 0x86, 0x46, 0x3e, 0xee, 0x0f, 0xdb, 0x86, 0x1b, 0x40, + 0xf7, 0xcc, 0xee, 0x8d, 0xaa, 0xef, 0x24, 0xdd, 0x92, 0x92, 0x8c, 0xd6, 0xb9, 0x2d, 0x65, 0x32, + 0x89, 0xc6, 0xad, 0x29, 0xc9, 0x24, 0xd3, 0xb5, 0x50, 0x9a, 0x15, 0x88, 0xfd, 0x40, 0xf8, 0x54, + 0xd4, 0xc5, 0x70, 0x07, 0xe1, 0xcc, 0xa9, 0xd5, 0xe8, 0xad, 0xac, 0xc7, 0x17, 0x1d, 0x89, 0xe5, + 0xbc, 0x7f, 0x70, 0x06, 0x0e, 0x46, 0x2b, 0x95, 0x92, 0x1a, 0xec, 0x6a, 0x61, 0xe7, 0x88, 0xe0, + 0x3d, 0x8a, 0xff, 0xb0, 0x6d, 0xfb, 0x68, 0x12, 0x91, 0x31, 0xf6, 0xa2, 0xba, 0x8d, 0xe6, 0x7f, + 0x88, 0xff, 0xa8, 0xdb, 0xf6, 0x43, 0x3d, 0x79, 0xcc, 0x06, 0x9a, 0x4f, 0x89, 0xaf, 0xb1, 0x39, + 0x50, 0x64, 0x5a, 0xe2, 0x71, 0x60, 0x5a, 0xc0, 0xb4, 0xa4, 0xc3, 0xb4, 0x44, 0x02, 0xa7, 0xd1, + 0xc8, 0x26, 0x1a, 0x4e, 0x63, 0x54, 0x4a, 0x60, 0x54, 0xc0, 0xa8, 0x98, 0x41, 0x85, 0xaa, 0x6a, + 0x90, 0x0c, 0x54, 0x64, 0xc8, 0x97, 0x8a, 0x8b, 0xb2, 0x63, 0x63, 0x50, 0x10, 0x6d, 0x45, 0xe1, + 0x50, 0x18, 0x3e, 0xc5, 0xe1, 0xc4, 0xa4, 0x85, 0x5c, 0xde, 0x8b, 0x4d, 0x52, 0xac, 0x8d, 0x04, + 0xb6, 0x64, 0x85, 0x9b, 0xf5, 0x43, 0x56, 0xa8, 0x7b, 0xbf, 0xf6, 0xbc, 0x73, 0x1a, 0xcd, 0xa9, + 0xb9, 0x31, 0x7a, 0xc9, 0xcd, 0x6c, 0x8a, 0xc9, 0xa9, 0xa0, 0xfc, 0x8a, 0xca, 0xad, 0xb0, 0xc6, + 0x14, 0xd7, 0x98, 0x02, 0x1b, 0x51, 0x64, 0x1e, 0x86, 0x4c, 0x93, 0x38, 0xd4, 0xbf, 0xf9, 0x7e, + 0x4e, 0xde, 0x78, 0xe8, 0xfb, 0x39, 0x9f, 0x59, 0x65, 0x98, 0x8b, 0x95, 0xce, 0x9f, 0x7b, 0xf1, + 0x7a, 0xbd, 0xfe, 0x50, 0x3f, 0x3f, 0xbf, 0xfe, 0x7c, 0x75, 0x77, 0x79, 0xf5, 0xeb, 0xc3, 0xc5, + 0xef, 0x17, 0x57, 0x77, 0x1c, 0x04, 0x7f, 0xf2, 0x20, 0x46, 0xa2, 0x5f, 0x9f, 0xb9, 0x54, 0x5f, + 0x8a, 0x0f, 0xd7, 0xbf, 0x5e, 0x5e, 0x15, 0xd9, 0x1e, 0x38, 0x38, 0xcc, 0xe5, 0x2a, 0x9c, 0x5f, + 0x7f, 0xfc, 0x58, 0xbf, 0x7a, 0xcf, 0xb8, 0x0e, 0x2c, 0x33, 0x35, 0x36, 0x6d, 0xc7, 0x36, 0x71, + 0x09, 0x7f, 0xd1, 0x17, 0xcd, 0x91, 0x03, 0x62, 0x42, 0x26, 0xf1, 0x7c, 0x40, 0x25, 0x40, 0x25, + 0x40, 0x25, 0x99, 0x42, 0x25, 0xc2, 0xed, 0x77, 0x85, 0x3f, 0x62, 0xc0, 0x19, 0x51, 0x49, 0x85, + 0x61, 0x2e, 0xb9, 0x74, 0x7a, 0x83, 0x06, 0x34, 0xd5, 0x88, 0x92, 0x78, 0x12, 0x31, 0x37, 0x0f, + 0xf1, 0x64, 0x62, 0x44, 0xc4, 0x8f, 0xfe, 0x38, 0xd2, 0x62, 0x73, 0x0a, 0xe4, 0x63, 0x8b, 0x8b, + 0xe8, 0x3b, 0x8c, 0xfe, 0x50, 0x3a, 0xc3, 0xd0, 0xdf, 0x39, 0x4a, 0xf9, 0x30, 0x43, 0x08, 0xcf, + 0x17, 0xba, 0xeb, 0xd6, 0x23, 0x83, 0x43, 0x03, 0x87, 0x96, 0xb2, 0xc5, 0xd3, 0x76, 0x66, 0x1a, + 0x97, 0x87, 0x2c, 0x75, 0x5c, 0xa7, 0x1a, 0x73, 0xcc, 0x5f, 0x2e, 0x32, 0xa5, 0xd6, 0x19, 0x36, + 0x64, 0x6a, 0xf7, 0x91, 0x2c, 0xdd, 0x05, 0xd5, 0x26, 0xc5, 0x0b, 0xd7, 0x5f, 0xd7, 0x7c, 0x95, + 0x61, 0xbe, 0x60, 0xbe, 0x52, 0x31, 0x5f, 0x38, 0x02, 0x40, 0xb0, 0x8d, 0x60, 0x1b, 0xc1, 0xb6, + 0x82, 0xbc, 0xe1, 0x08, 0x00, 0x47, 0x00, 0x38, 0x02, 0xc0, 0x11, 0x40, 0x6a, 0x0c, 0x16, 0x8e, + 0x00, 0x80, 0x4a, 0x80, 0x4a, 0x80, 0x4a, 0x56, 0xc7, 0x0c, 0x38, 0x02, 0xc8, 0x46, 0x44, 0x99, + 0xa5, 0x23, 0x00, 0x1d, 0x32, 0xa7, 0xc0, 0x73, 0x02, 0xa0, 0x70, 0xff, 0x14, 0x03, 0x6f, 0x66, + 0x34, 0x3f, 0x37, 0xbe, 0xbf, 0x8a, 0x1c, 0x9d, 0x6f, 0x65, 0xd9, 0xd7, 0xda, 0x2b, 0xb0, 0x74, + 0x57, 0x5d, 0x53, 0x9f, 0x38, 0xf4, 0xa8, 0x48, 0xa2, 0x63, 0x35, 0x35, 0xa7, 0x88, 0xd2, 0xab, + 0x65, 0xbb, 0x62, 0xbc, 0xf4, 0x6a, 0xb4, 0x0f, 0xb8, 0x4d, 0x3c, 0xd5, 0xdb, 0xc4, 0x51, 0x78, + 0x95, 0xba, 0xf6, 0xa2, 0xc5, 0x4d, 0x3a, 0x51, 0x22, 0x0a, 0xb2, 0x0c, 0x45, 0x75, 0x68, 0x71, + 0xb3, 0xfc, 0x6b, 0xa3, 0xc5, 0x0d, 0x5a, 0xdc, 0x68, 0xbe, 0x28, 0x5a, 0xdc, 0xe4, 0xf7, 0xed, + 0xd0, 0xe2, 0x26, 0x55, 0xa3, 0x87, 0x16, 0x37, 0xdb, 0xcf, 0x75, 0xa0, 0xc5, 0x8d, 0x19, 0x28, + 0x58, 0x40, 0x8b, 0x9b, 0x8c, 0xf1, 0x2c, 0xaa, 0xc4, 0x31, 0x8d, 0x66, 0x51, 0xe0, 0x86, 0x4d, + 0x5f, 0x82, 0xc2, 0x77, 0x89, 0xc7, 0xaa, 0x75, 0xd5, 0xb9, 0xc1, 0x63, 0xd5, 0x4a, 0x9a, 0xb8, + 0xbe, 0xc3, 0xee, 0x87, 0xcf, 0x43, 0xf0, 0xdc, 0x94, 0x5b, 0x95, 0x49, 0x5c, 0x3f, 0x3b, 0x0e, + 0x7d, 0xbc, 0xd1, 0xc7, 0x3b, 0x16, 0xa8, 0x56, 0xd7, 0x71, 0xad, 0xc8, 0xb4, 0xab, 0x5f, 0x46, + 0x3e, 0x19, 0x8b, 0x2e, 0x53, 0x20, 0x3b, 0xd3, 0x21, 0x3b, 0x89, 0x6d, 0x75, 0xf4, 0xda, 0xe9, + 0xa0, 0xcf, 0x14, 0x68, 0xcd, 0xac, 0xf6, 0x99, 0x1a, 0x59, 0xe1, 0x9e, 0x1d, 0x04, 0x7f, 0xe9, + 0x64, 0x95, 0xbd, 0xb2, 0xea, 0xc9, 0x7c, 0xa8, 0x99, 0x43, 0xd1, 0x49, 0xca, 0x8a, 0xb6, 0x11, + 0xb6, 0x89, 0xb1, 0x66, 0x6e, 0xe3, 0xac, 0x13, 0x71, 0x05, 0xa4, 0xef, 0x9c, 0x34, 0x43, 0x96, + 0x2e, 0xb8, 0xa3, 0x72, 0x2a, 0x82, 0x7b, 0xb6, 0x83, 0x67, 0xd1, 0xb2, 0xbe, 0x46, 0x97, 0xfb, + 0xb2, 0x4a, 0xbd, 0xc2, 0x15, 0x96, 0x52, 0x62, 0x9f, 0xb6, 0xc0, 0x37, 0x52, 0xa9, 0x64, 0x9c, + 0x75, 0x0b, 0xf1, 0x76, 0x70, 0x7b, 0x9b, 0xf1, 0xb4, 0x70, 0x3a, 0x70, 0x3a, 0x70, 0x3a, 0x6a, + 0x71, 0x8d, 0xff, 0xd2, 0x0b, 0x27, 0x8a, 0xa4, 0x59, 0xa7, 0x98, 0xfa, 0xb9, 0xc7, 0x60, 0x7b, + 0xd2, 0x15, 0x67, 0xa8, 0xb6, 0xa3, 0x09, 0x49, 0x42, 0xef, 0xfd, 0xa1, 0x42, 0x3f, 0xce, 0x3c, + 0xfd, 0xa1, 0x3e, 0x7c, 0xfa, 0xe7, 0x40, 0xf8, 0xa4, 0xa6, 0x1f, 0x0a, 0xbc, 0xba, 0x12, 0x2b, + 0x4d, 0xa9, 0x89, 0xd7, 0xaa, 0x85, 0xd7, 0x8e, 0xdf, 0xcb, 0x88, 0xdf, 0x11, 0xbf, 0x23, 0x7e, + 0x07, 0x94, 0x02, 0x94, 0x42, 0xfc, 0x8e, 0xf8, 0x1d, 0xf1, 0x3b, 0xe2, 0x77, 0xc4, 0xef, 0x70, + 0x3a, 0x70, 0x3a, 0x88, 0xdf, 0x75, 0x4d, 0xd2, 0x30, 0x34, 0x8e, 0x23, 0x5b, 0x16, 0x5b, 0x94, + 0xcc, 0x07, 0x23, 0x04, 0x23, 0x04, 0x23, 0x94, 0x2f, 0xe4, 0x0b, 0xde, 0x70, 0x01, 0x6f, 0x48, + 0x6d, 0x18, 0xc0, 0x41, 0x1b, 0x12, 0x3a, 0x05, 0x6c, 0x75, 0x36, 0xee, 0xb2, 0x4d, 0x32, 0x94, + 0x96, 0xbb, 0x64, 0x5b, 0xd2, 0x2c, 0x82, 0x56, 0x4c, 0xb8, 0xa2, 0x25, 0x5a, 0x21, 0x33, 0xb0, + 0x80, 0xcc, 0x40, 0x3d, 0x42, 0xf5, 0x55, 0x8e, 0xb3, 0x7e, 0x29, 0xf4, 0xc2, 0xe9, 0x50, 0x0e, + 0x6d, 0x0e, 0x2c, 0xe2, 0xdc, 0x01, 0xe5, 0xd0, 0x86, 0x79, 0x4a, 0x94, 0x43, 0x13, 0xa7, 0x45, + 0x39, 0xf4, 0x66, 0xde, 0x0e, 0xe5, 0xd0, 0xc6, 0xc2, 0xed, 0xf1, 0x7f, 0x28, 0x87, 0xce, 0x6e, + 0x78, 0x8f, 0x72, 0x68, 0x99, 0x49, 0x50, 0x0e, 0x9d, 0x0e, 0x4f, 0x88, 0x72, 0xe8, 0xac, 0x11, + 0x30, 0xca, 0x29, 0x75, 0x74, 0xf2, 0x45, 0x25, 0x81, 0x0e, 0xed, 0xe7, 0xc0, 0xbb, 0x80, 0x77, + 0x01, 0xef, 0x02, 0xde, 0x05, 0xbc, 0x0b, 0x78, 0x17, 0xf0, 0x2e, 0xe0, 0x5d, 0xc0, 0xbb, 0x80, + 0x77, 0x01, 0xef, 0x02, 0xde, 0x05, 0xbc, 0x0b, 0x78, 0x17, 0xf0, 0x2e, 0xb9, 0xe7, 0x5d, 0x4c, + 0xb6, 0xa2, 0x9b, 0xa5, 0x5d, 0x78, 0xdb, 0xd1, 0x49, 0xb0, 0x2e, 0x43, 0xf9, 0x0a, 0xd4, 0x59, + 0x97, 0xd1, 0x30, 0x64, 0xbb, 0x80, 0x75, 0x49, 0x87, 0x75, 0x51, 0x6a, 0xd9, 0xc6, 0xe1, 0x6e, + 0xd0, 0x03, 0x0b, 0x9c, 0x4a, 0x56, 0x6b, 0x68, 0x89, 0x4d, 0xe1, 0xe6, 0xc4, 0x85, 0x5c, 0xa1, + 0x5f, 0xe0, 0xbc, 0x68, 0x1d, 0x95, 0x03, 0x26, 0x14, 0xc9, 0x08, 0x32, 0x2d, 0xec, 0xf8, 0x45, + 0xeb, 0xda, 0x65, 0xeb, 0x73, 0x82, 0xa7, 0x59, 0xb8, 0xfe, 0x5a, 0x19, 0x71, 0x9d, 0x69, 0x9a, + 0xca, 0x6a, 0x4c, 0x69, 0x8d, 0x29, 0xaf, 0x11, 0x25, 0xe6, 0xe1, 0xc7, 0xb2, 0x77, 0x9d, 0xa9, + 0x36, 0x8f, 0xc5, 0xc4, 0x67, 0x71, 0xad, 0x90, 0x76, 0xc1, 0xbc, 0x3e, 0x47, 0xb8, 0x94, 0x84, + 0x31, 0x59, 0x40, 0xbf, 0x44, 0x9b, 0x18, 0x0a, 0xe9, 0x17, 0xaa, 0x53, 0x8e, 0x89, 0xe6, 0x43, + 0x7d, 0xd7, 0xa8, 0x5b, 0x6a, 0xbf, 0xd4, 0x43, 0xea, 0x15, 0xdb, 0xc3, 0x51, 0xc2, 0x51, 0xc2, + 0x51, 0x1a, 0x72, 0x94, 0xbc, 0xc5, 0xfc, 0xdc, 0x5e, 0x73, 0x23, 0xe6, 0xd0, 0xf7, 0x3a, 0x8c, + 0xa7, 0xec, 0xd1, 0x6c, 0x30, 0x7c, 0x30, 0x7c, 0x30, 0x7c, 0x99, 0x32, 0x7c, 0xd4, 0x9c, 0xa6, + 0xa5, 0xa6, 0xee, 0x8c, 0x61, 0x2e, 0xad, 0x9c, 0x27, 0x33, 0x50, 0xdf, 0x4c, 0x58, 0xc5, 0xec, + 0x28, 0x98, 0xc4, 0xcc, 0xe0, 0xca, 0xf1, 0x64, 0x93, 0x2d, 0x5d, 0xbe, 0x2a, 0xe3, 0x9c, 0xac, + 0xd9, 0x66, 0x4b, 0x17, 0xe4, 0xf6, 0x8f, 0xdb, 0xbb, 0x8b, 0x8f, 0x0f, 0xef, 0x2f, 0x7e, 0xb9, + 0xbc, 0xba, 0x78, 0xff, 0x70, 0x73, 0xfd, 0xe1, 0xe2, 0x96, 0x71, 0x65, 0x0a, 0xcc, 0x29, 0x69, + 0xe6, 0x44, 0x64, 0xd5, 0xea, 0x0c, 0x57, 0xe5, 0xa1, 0xfe, 0xfe, 0xe3, 0xe5, 0x55, 0x91, 0xfd, + 0x79, 0x03, 0xd6, 0x19, 0x1b, 0x7b, 0xd9, 0xfa, 0x5e, 0xfa, 0xb3, 0x34, 0x72, 0x08, 0x5d, 0x83, + 0xe0, 0xd9, 0xfa, 0x53, 0xbc, 0xf0, 0xa1, 0xd7, 0xf1, 0x84, 0x00, 0xb0, 0x00, 0xb0, 0x00, 0xb0, + 0x99, 0x02, 0xb0, 0x99, 0xa3, 0xb8, 0x37, 0x62, 0xf1, 0xb4, 0x7b, 0xf2, 0xcd, 0x07, 0x06, 0x7a, + 0x5d, 0xf9, 0x60, 0xf3, 0x60, 0xf3, 0x60, 0xf3, 0x60, 0xf3, 0x8c, 0x8c, 0xa4, 0x66, 0x4f, 0x68, + 0x76, 0x07, 0x9c, 0xe0, 0x4b, 0x7a, 0x1e, 0x6e, 0x94, 0x75, 0x7a, 0xa4, 0x77, 0xbb, 0xc8, 0xe4, + 0x7b, 0x50, 0x73, 0x74, 0x3f, 0x0f, 0xbf, 0xc5, 0x03, 0xf9, 0x9a, 0x11, 0xfa, 0xee, 0x0d, 0x48, + 0x4d, 0x11, 0x29, 0xd7, 0x8f, 0x2c, 0x50, 0x1a, 0x5a, 0x53, 0xc6, 0x02, 0x67, 0xa6, 0x58, 0x19, + 0x99, 0x62, 0x06, 0xbd, 0x13, 0x32, 0xc5, 0x26, 0xdf, 0x1c, 0x99, 0x62, 0x80, 0x94, 0x80, 0x94, + 0x80, 0x94, 0x79, 0x85, 0x94, 0xc8, 0x14, 0xe3, 0xd4, 0x26, 0x64, 0x8a, 0x71, 0xb2, 0x2d, 0xc8, + 0x14, 0x83, 0xa3, 0x84, 0xa3, 0xdc, 0x4d, 0x47, 0x89, 0x4c, 0xb1, 0xb9, 0xef, 0x8e, 0x4c, 0x31, + 0x18, 0x3e, 0x18, 0xbe, 0x6d, 0x37, 0x7c, 0xc8, 0x14, 0xdb, 0x64, 0x58, 0xc5, 0xec, 0x28, 0x98, + 0xc4, 0xcc, 0xe0, 0xca, 0x21, 0x53, 0xec, 0xd5, 0x82, 0x20, 0x53, 0x4c, 0x62, 0x75, 0x90, 0x29, + 0xb6, 0xb9, 0x59, 0x90, 0x29, 0x86, 0x4c, 0x31, 0x00, 0x58, 0x00, 0xd8, 0xac, 0x02, 0x58, 0x64, + 0x8a, 0x21, 0x53, 0x0c, 0x36, 0x0f, 0x36, 0x0f, 0x36, 0x2f, 0x97, 0x36, 0x6f, 0x87, 0x33, 0xc5, + 0x74, 0x52, 0x97, 0x0a, 0x5c, 0x89, 0x62, 0x84, 0x8b, 0x65, 0xe9, 0x7b, 0x47, 0xc9, 0x13, 0xe3, + 0xbb, 0x97, 0x1c, 0x37, 0x92, 0x23, 0x5b, 0x6c, 0xd3, 0x1e, 0x29, 0xaf, 0x37, 0x92, 0x77, 0x84, + 0xdd, 0x66, 0xba, 0x2b, 0xe0, 0x54, 0x63, 0x8e, 0x4f, 0xb1, 0xc9, 0x7d, 0xf3, 0x26, 0xce, 0xb3, + 0x3d, 0x4a, 0x94, 0x7a, 0x2b, 0x2e, 0x3a, 0xff, 0x2d, 0x22, 0x2d, 0xa8, 0x96, 0x6a, 0x2b, 0x1b, + 0x7a, 0x0f, 0xa7, 0xd8, 0xd6, 0xcb, 0xe5, 0x27, 0x60, 0x20, 0xd5, 0x6b, 0xe5, 0x27, 0xee, 0x1f, + 0x37, 0xca, 0xaf, 0xda, 0x99, 0x54, 0x1a, 0x6b, 0x47, 0x9b, 0xc1, 0xd6, 0x58, 0x7b, 0x4f, 0x63, + 0xbd, 0x55, 0xd7, 0x59, 0x63, 0x7d, 0x8b, 0x52, 0xd7, 0xae, 0xd1, 0x56, 0x74, 0xf5, 0x5a, 0x2e, + 0x5f, 0xa1, 0x15, 0xab, 0x13, 0x5d, 0x86, 0xe5, 0xf9, 0xce, 0xdf, 0x72, 0x8b, 0x33, 0x73, 0x87, + 0xd6, 0x64, 0xd8, 0x9a, 0xd5, 0x97, 0x2b, 0x46, 0x90, 0x86, 0x91, 0x2a, 0x70, 0x51, 0x1d, 0x16, + 0xaa, 0xc2, 0x3f, 0x32, 0xcc, 0x23, 0xc3, 0x39, 0x12, 0x6c, 0xd3, 0xd3, 0x1f, 0xd9, 0xe4, 0x7c, + 0xd5, 0x3e, 0xc9, 0xb4, 0xbe, 0xc8, 0xe8, 0x6e, 0x5f, 0x40, 0x77, 0x7b, 0x9a, 0x80, 0x2e, 0xb6, + 0x7b, 0x2c, 0x57, 0x0a, 0xce, 0xcd, 0x86, 0x1b, 0x05, 0xcd, 0x05, 0xd9, 0xe8, 0x7e, 0x8f, 0x1b, + 0x05, 0xa5, 0xfe, 0xc3, 0x8d, 0x82, 0xeb, 0x5f, 0x10, 0x37, 0x0a, 0xa6, 0xc7, 0x5c, 0x19, 0x7c, + 0x3b, 0xdc, 0x28, 0x68, 0x8c, 0xa6, 0x1c, 0xff, 0x87, 0x1b, 0x05, 0xd5, 0xed, 0x1d, 0x6e, 0x14, + 0xc4, 0x8d, 0x82, 0xdc, 0xf0, 0xaf, 0x80, 0x1b, 0x05, 0x99, 0x20, 0xe4, 0x96, 0x13, 0x9f, 0x49, + 0x50, 0xa6, 0xde, 0xbd, 0x44, 0x91, 0xa6, 0x4b, 0x9e, 0xa4, 0xd4, 0xa1, 0x84, 0xe7, 0x46, 0x41, + 0xf1, 0x35, 0x36, 0x0a, 0x8a, 0xac, 0x4b, 0x3c, 0x0e, 0xac, 0x0b, 0x58, 0x97, 0x74, 0x58, 0x97, + 0x48, 0xe0, 0xe8, 0x34, 0xcb, 0x68, 0x38, 0x6e, 0x15, 0x04, 0xaf, 0x92, 0x29, 0x5e, 0x05, 0xb7, + 0x0a, 0x22, 0xfb, 0xc7, 0x98, 0x22, 0x19, 0x41, 0xa7, 0x85, 0x1d, 0xef, 0x15, 0x15, 0x39, 0x92, + 0x51, 0x2d, 0x3c, 0x1b, 0x8b, 0x36, 0x35, 0x27, 0x12, 0xcb, 0xcd, 0x2b, 0x2a, 0xb7, 0xc2, 0x1a, + 0x53, 0x5c, 0x63, 0x0a, 0x6c, 0x44, 0x91, 0x79, 0x78, 0xb2, 0xec, 0x25, 0x96, 0xf3, 0x96, 0xe7, + 0x72, 0x96, 0xe5, 0x9a, 0x29, 0xc7, 0x9d, 0x21, 0xf7, 0xeb, 0x9f, 0xef, 0xfe, 0x75, 0x7d, 0x73, + 0xf9, 0x9f, 0xfa, 0xdd, 0xe5, 0xf5, 0xd5, 0xc3, 0xc5, 0xef, 0x17, 0x57, 0x77, 0x1c, 0x4c, 0x7f, + 0xf2, 0x2c, 0x03, 0x65, 0xb8, 0x86, 0x8a, 0x92, 0x97, 0xad, 0xc6, 0xf9, 0xf5, 0xc7, 0x8f, 0xf5, + 0xab, 0xf7, 0x7c, 0x45, 0xb8, 0x83, 0xc3, 0xfc, 0x2e, 0xc5, 0xd5, 0x2f, 0x97, 0xbf, 0x16, 0x33, + 0x56, 0xee, 0xdb, 0xd8, 0xb4, 0x45, 0x43, 0x21, 0x88, 0x24, 0xd1, 0x36, 0x22, 0x95, 0x46, 0x7f, + 0xa4, 0xde, 0x33, 0x78, 0xc2, 0xc2, 0x5d, 0x44, 0x5f, 0x63, 0xf4, 0x47, 0x0e, 0x9a, 0x06, 0x33, + 0x20, 0x52, 0x3e, 0x24, 0x8a, 0x82, 0x10, 0x84, 0x84, 0x28, 0x08, 0xc9, 0x5a, 0x41, 0xc8, 0x94, + 0x5a, 0xa3, 0xfb, 0x79, 0x2a, 0x8c, 0x16, 0xba, 0x9f, 0xc3, 0x7c, 0x81, 0xd1, 0x02, 0xa3, 0x05, + 0x46, 0x0b, 0x8c, 0x16, 0x18, 0x2d, 0x30, 0x5a, 0x60, 0xb4, 0xc0, 0x68, 0x81, 0xd1, 0xda, 0x6d, + 0x46, 0x2b, 0xe5, 0xde, 0x26, 0x4b, 0x08, 0xad, 0x74, 0x9b, 0x9b, 0xa4, 0xd1, 0x19, 0x80, 0x0c, + 0x36, 0xd1, 0x1b, 0xa0, 0x90, 0x83, 0xde, 0x00, 0x8b, 0xb5, 0xc9, 0x7c, 0x73, 0x80, 0xc5, 0xfa, + 0x83, 0xee, 0x00, 0xab, 0xf6, 0x26, 0x8d, 0x24, 0xd9, 0xd1, 0x6e, 0xa4, 0x99, 0x24, 0xab, 0x46, + 0x4c, 0x91, 0x88, 0x28, 0x72, 0x8a, 0x6c, 0x19, 0x29, 0xb2, 0x9c, 0x71, 0x25, 0x0a, 0x93, 0x51, + 0x98, 0x8c, 0x04, 0x5a, 0x4e, 0x32, 0x05, 0x85, 0xc9, 0xcb, 0xbf, 0x36, 0x0a, 0x93, 0x51, 0x98, + 0xac, 0xf9, 0xa2, 0x28, 0x4c, 0xce, 0xef, 0xdb, 0xa1, 0x30, 0x39, 0x55, 0xa3, 0x87, 0xc2, 0xe4, + 0xed, 0x67, 0x3f, 0x50, 0x98, 0x6c, 0x06, 0x0a, 0x16, 0x50, 0x98, 0x9c, 0x3d, 0xce, 0x45, 0x95, + 0x50, 0x26, 0x53, 0x2e, 0x0a, 0x9c, 0x71, 0xde, 0xfb, 0x31, 0xca, 0xb6, 0x26, 0xd4, 0x59, 0x4f, + 0x13, 0xdd, 0x18, 0x25, 0x0b, 0x02, 0xd5, 0x0a, 0xff, 0xd0, 0x7f, 0x91, 0xd7, 0xaa, 0x6e, 0xa0, + 0xff, 0xa2, 0x49, 0x7d, 0x91, 0x4e, 0xd1, 0x56, 0x50, 0x14, 0x99, 0x7c, 0x6b, 0x9a, 0x86, 0x04, + 0xc2, 0xff, 0x2a, 0x7c, 0xeb, 0xc9, 0xf7, 0xfa, 0xbd, 0x40, 0x5e, 0x51, 0x66, 0x87, 0x41, 0x5f, + 0xd0, 0xaf, 0x74, 0x5e, 0x9c, 0x08, 0x67, 0x03, 0xd3, 0xa3, 0xd1, 0x45, 0x23, 0x45, 0x96, 0x74, + 0xa7, 0x8f, 0x08, 0x88, 0x6d, 0x03, 0xf4, 0xda, 0x05, 0xa0, 0x8f, 0x46, 0xaa, 0x02, 0xce, 0x1e, + 0xfb, 0x6d, 0x73, 0x1f, 0x0d, 0x9e, 0x5b, 0x74, 0x70, 0x83, 0x0e, 0x2a, 0x0e, 0x36, 0xa1, 0x54, + 0x1b, 0x61, 0x62, 0x19, 0x0b, 0xa6, 0xf2, 0xc7, 0xc8, 0x52, 0xea, 0x9a, 0x78, 0x4a, 0x33, 0x51, + 0x94, 0x09, 0x1b, 0x03, 0x1b, 0xa3, 0x2e, 0x2f, 0x3b, 0x71, 0xd4, 0x7d, 0x7b, 0x71, 0xf3, 0xfb, + 0xc5, 0xcd, 0x4e, 0x1c, 0x75, 0x6f, 0xef, 0x31, 0xf7, 0xce, 0x9d, 0x04, 0x67, 0x2c, 0x88, 0x48, + 0x33, 0xb1, 0x79, 0x86, 0x55, 0x9c, 0xf9, 0x1b, 0xbd, 0xf1, 0x85, 0x02, 0xcb, 0x7a, 0x1b, 0x3d, + 0xf0, 0xd7, 0xe8, 0xe9, 0xd3, 0x7f, 0x21, 0xb5, 0xbb, 0x50, 0x38, 0x70, 0x53, 0xe0, 0x87, 0x48, + 0x91, 0x99, 0x4e, 0x44, 0x86, 0x6c, 0x45, 0xd0, 0x14, 0x99, 0xcf, 0x56, 0xa4, 0xb7, 0x98, 0xd0, + 0x69, 0x2d, 0xb1, 0xa0, 0xa5, 0x84, 0xfa, 0xfd, 0xa2, 0x66, 0xcc, 0xc4, 0xc8, 0x74, 0x06, 0x74, + 0x4b, 0x31, 0x9e, 0x00, 0x9c, 0x26, 0x8c, 0xc5, 0x76, 0x70, 0x9a, 0x23, 0x89, 0x66, 0x68, 0xa4, + 0x32, 0x9a, 0x07, 0xbd, 0x81, 0xc1, 0x39, 0xec, 0x04, 0xe7, 0xa0, 0xdd, 0x49, 0xc5, 0x6e, 0xb5, + 0x7c, 0x11, 0x04, 0x7c, 0xa1, 0xfd, 0x78, 0x42, 0xf4, 0x50, 0x31, 0xaf, 0xa2, 0xdc, 0xaa, 0x6a, + 0x4c, 0x65, 0x8d, 0xa9, 0xae, 0x11, 0x15, 0xe6, 0xa1, 0x26, 0xb2, 0xd7, 0x43, 0x45, 0xbf, 0xd7, + 0x1b, 0x07, 0x30, 0x97, 0x00, 0xea, 0x63, 0x1b, 0xb2, 0xa9, 0x8e, 0x0f, 0x1a, 0x4e, 0x53, 0xf3, + 0x92, 0x83, 0xb9, 0x3d, 0xd3, 0x6e, 0x29, 0xca, 0x00, 0x6c, 0x60, 0x4d, 0x61, 0x4d, 0xf3, 0x6e, + 0x4d, 0x75, 0x81, 0x12, 0x3b, 0x60, 0x32, 0x04, 0x9c, 0x98, 0x01, 0x14, 0xbb, 0xea, 0x9b, 0x30, + 0x01, 0xe6, 0x4c, 0x81, 0x29, 0x93, 0x60, 0xdc, 0x34, 0x18, 0x37, 0x11, 0x46, 0x4d, 0x05, 0x8f, + 0xc9, 0x60, 0x32, 0x1d, 0xfc, 0x80, 0x6c, 0x4e, 0x5e, 0x9d, 0x9e, 0xc5, 0xab, 0xfd, 0x05, 0xcd, + 0x62, 0xef, 0x75, 0x6b, 0xf0, 0x85, 0x55, 0x86, 0x78, 0x75, 0xea, 0xd5, 0xca, 0x7e, 0xad, 0x18, + 0x58, 0xdb, 0xb9, 0x35, 0x7e, 0x6b, 0x60, 0xee, 0x4f, 0x76, 0x18, 0x0a, 0xdf, 0x65, 0x5f, 0xee, + 0xe4, 0x01, 0xff, 0xdd, 0xdf, 0xff, 0x72, 0x6c, 0x9d, 0x35, 0x7e, 0x7c, 0x29, 0x59, 0x67, 0x8d, + 0xd1, 0x8f, 0xa5, 0xe8, 0x8f, 0xd1, 0xcf, 0xe5, 0x2f, 0xc7, 0x56, 0x65, 0xfc, 0x73, 0xf5, 0xcb, + 0xb1, 0x55, 0x6d, 0x1c, 0xdc, 0xdf, 0xbf, 0x39, 0xf8, 0x7e, 0x32, 0x50, 0x1f, 0xf8, 0x8f, 0x22, + 0xfb, 0x4b, 0x34, 0x58, 0x67, 0x1c, 0x1c, 0xe6, 0x48, 0xa8, 0x6b, 0x10, 0xea, 0xd5, 0x42, 0x6d, + 0x5b, 0xed, 0xba, 0xf5, 0x4b, 0xe3, 0x7b, 0xe9, 0xb0, 0x32, 0x78, 0x77, 0xf0, 0xfd, 0x74, 0xf0, + 0xfa, 0x97, 0x3f, 0x16, 0x7d, 0xac, 0x74, 0x78, 0x3a, 0x78, 0xb7, 0xe4, 0x5f, 0x6a, 0x83, 0x77, + 0x92, 0x73, 0x54, 0x07, 0xfb, 0x73, 0x1f, 0x1d, 0xfe, 0xbe, 0xbc, 0x6c, 0x40, 0x65, 0xc9, 0x80, + 0x93, 0x65, 0x03, 0x4e, 0x96, 0x0c, 0x58, 0xfa, 0x95, 0xca, 0x4b, 0x06, 0x54, 0x07, 0x3f, 0xe6, + 0x3e, 0xbf, 0xbf, 0xf8, 0xa3, 0xb5, 0xc1, 0xc1, 0x8f, 0x65, 0xff, 0x76, 0x3a, 0xf8, 0xf1, 0xee, + 0x20, 0x07, 0x2a, 0xbe, 0x97, 0xad, 0xef, 0x35, 0xc8, 0x42, 0x5e, 0x90, 0x5e, 0x3e, 0xf9, 0x52, + 0x23, 0xa5, 0x91, 0x5f, 0x8e, 0x58, 0x06, 0xb1, 0x0c, 0x62, 0x99, 0x9c, 0xc6, 0x32, 0xda, 0xf9, + 0xf1, 0xcb, 0xe1, 0xc8, 0x16, 0xd9, 0xdc, 0xd0, 0xe9, 0x0a, 0xaf, 0x1f, 0xf2, 0x9b, 0xdd, 0xf1, + 0xc4, 0xb0, 0xbc, 0xb0, 0xbc, 0xb0, 0xbc, 0x3b, 0x65, 0x79, 0xfb, 0x8e, 0x1b, 0x96, 0x6a, 0x06, + 0x2c, 0x6f, 0x8d, 0x71, 0xca, 0x1b, 0xdb, 0x7d, 0xca, 0x05, 0x83, 0xf4, 0xd1, 0x71, 0xd9, 0x15, + 0xd5, 0x90, 0x59, 0x9d, 0x9b, 0x3e, 0xaa, 0x87, 0x30, 0x38, 0xff, 0x2f, 0xbe, 0xdd, 0x0c, 0x1d, + 0xcf, 0x7d, 0xef, 0x3c, 0x39, 0x51, 0x17, 0xac, 0x63, 0xf6, 0xe7, 0x0c, 0x0c, 0x70, 0x0f, 0x1f, + 0xed, 0x6f, 0xb9, 0xdf, 0xd2, 0x5a, 0xb5, 0x7a, 0x52, 0xcd, 0xf1, 0xb6, 0x22, 0x9e, 0x37, 0x38, + 0x83, 0xee, 0x21, 0x29, 0xd3, 0xe5, 0x13, 0xc9, 0x7c, 0x4c, 0xd5, 0x25, 0x71, 0xba, 0x73, 0xfc, + 0xe7, 0x11, 0x4b, 0x4a, 0x44, 0x81, 0xa9, 0xf8, 0x64, 0xf4, 0xf3, 0xf8, 0x77, 0x5a, 0x57, 0xaf, + 0xea, 0xcb, 0x80, 0x4e, 0xe2, 0x8a, 0x6f, 0xb7, 0x9c, 0x3e, 0x63, 0x1e, 0x60, 0x3c, 0x1f, 0x12, + 0x57, 0xd2, 0x8b, 0x33, 0x90, 0xb8, 0x82, 0xc4, 0x95, 0xe5, 0x13, 0x31, 0x65, 0xa6, 0xcd, 0x89, + 0x2f, 0x9b, 0x39, 0x66, 0x54, 0x78, 0x10, 0x0e, 0x20, 0x1c, 0x40, 0x38, 0xf0, 0x1a, 0x90, 0x64, + 0x42, 0xbb, 0xd9, 0x0c, 0xad, 0x9e, 0xe7, 0x87, 0xfc, 0x72, 0x95, 0xe4, 0xc2, 0x25, 0x8f, 0x60, + 0xde, 0xf6, 0xf7, 0xa2, 0x6d, 0xf7, 0x3b, 0xd1, 0xae, 0x97, 0xde, 0x96, 0x4e, 0xb8, 0xa7, 0x37, + 0x13, 0x04, 0xb2, 0x5b, 0x31, 0x93, 0xd6, 0xcc, 0xbc, 0x55, 0x33, 0x6d, 0xdd, 0x52, 0xb3, 0x72, + 0xa9, 0x59, 0xbb, 0x54, 0xac, 0x9e, 0xa1, 0x10, 0x9f, 0x59, 0xe2, 0xd9, 0xe9, 0xd7, 0x39, 0x79, + 0x1f, 0x9a, 0x2d, 0xcb, 0xed, 0x77, 0x1f, 0xc9, 0x75, 0x88, 0x32, 0x26, 0xa6, 0x66, 0x60, 0x6a, + 0x33, 0xdc, 0xec, 0xf8, 0x3f, 0x33, 0x4a, 0x5a, 0x30, 0xcd, 0xd5, 0xa6, 0x44, 0xf0, 0xcd, 0x11, + 0x7d, 0xa6, 0x9f, 0x93, 0x02, 0xd9, 0x67, 0x48, 0x87, 0x67, 0xb7, 0xde, 0x20, 0xa7, 0xbb, 0xa9, + 0xad, 0x37, 0xc8, 0xf1, 0x6e, 0x64, 0xfb, 0xf7, 0xf2, 0x31, 0x6b, 0x56, 0x73, 0xcd, 0x18, 0xd5, + 0x27, 0xba, 0x21, 0xcf, 0x34, 0x76, 0x4f, 0x1e, 0x61, 0x14, 0xbb, 0x97, 0x81, 0xdd, 0x81, 0xdd, + 0x81, 0xdd, 0x81, 0xdd, 0x81, 0xdd, 0x81, 0xdd, 0x81, 0xdd, 0x81, 0xdd, 0x81, 0xdd, 0x81, 0xdd, + 0xb7, 0x1a, 0xbb, 0xfb, 0x22, 0xf4, 0x6d, 0x37, 0xe8, 0x3a, 0xa1, 0x65, 0x87, 0xa1, 0xe8, 0xf6, + 0xc2, 0xc0, 0x1c, 0x8a, 0x5f, 0xf4, 0x30, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x6e, 0x46, + 0x79, 0xef, 0x3b, 0x6e, 0xf8, 0xd6, 0x20, 0xd4, 0xae, 0x02, 0x6a, 0x03, 0x6a, 0x03, 0x6a, 0x6f, + 0x25, 0xd4, 0x2e, 0x57, 0x01, 0xb4, 0x01, 0xb4, 0x0d, 0x00, 0xed, 0x40, 0x34, 0x7d, 0x11, 0x5a, + 0x7f, 0x8a, 0x17, 0x73, 0xf8, 0x7a, 0xea, 0x19, 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, + 0x9c, 0xd1, 0xbb, 0xd7, 0x0f, 0x1d, 0xf7, 0xc9, 0xea, 0xd9, 0x41, 0x10, 0x89, 0x8f, 0xc9, 0x2e, + 0x31, 0xbb, 0xe0, 0x11, 0x22, 0x2d, 0xb7, 0xb8, 0x7b, 0xff, 0xcd, 0x7b, 0x85, 0xd9, 0xe7, 0xc0, + 0x33, 0xc0, 0x33, 0xc0, 0x33, 0xc0, 0x33, 0x30, 0xca, 0xbb, 0x91, 0x56, 0x83, 0x73, 0x3e, 0xe1, + 0xcc, 0xc0, 0xdc, 0x46, 0x5a, 0x0f, 0xa6, 0xc0, 0xba, 0xa4, 0xd4, 0x8a, 0x70, 0xde, 0x2f, 0x1b, + 0x7c, 0x86, 0xe9, 0x2e, 0x6e, 0xc9, 0x83, 0xf2, 0xde, 0xa2, 0xd0, 0x4c, 0xd8, 0x6c, 0x98, 0x31, + 0x4a, 0x47, 0x19, 0x6a, 0x50, 0x06, 0x9a, 0x32, 0xa0, 0xb5, 0xe1, 0x56, 0xb4, 0x36, 0x34, 0x6c, + 0x1a, 0x76, 0x87, 0xf9, 0xcb, 0x54, 0xb5, 0x1d, 0x73, 0x0b, 0x85, 0x49, 0x04, 0x6a, 0xa4, 0x95, + 0xc2, 0xa8, 0x48, 0xff, 0x88, 0xb5, 0x84, 0xb7, 0x60, 0xa6, 0xb3, 0xc2, 0x4d, 0xf4, 0x55, 0x59, + 0x1a, 0x2c, 0xf0, 0x49, 0xce, 0x80, 0xa5, 0x09, 0x85, 0x1d, 0x1a, 0xe8, 0xbf, 0x39, 0x9a, 0x36, + 0xe3, 0x55, 0xd9, 0x65, 0x54, 0x65, 0xe7, 0x88, 0x11, 0x40, 0x55, 0x36, 0xaa, 0xb2, 0x51, 0x95, + 0x0d, 0xde, 0x13, 0xbc, 0x27, 0x78, 0x4f, 0x54, 0x76, 0x2c, 0x32, 0x31, 0xa8, 0xec, 0x98, 0xfa, + 0xe2, 0x48, 0x37, 0x53, 0x7f, 0x0e, 0xd2, 0xcd, 0x32, 0xbb, 0xf5, 0xa8, 0xec, 0x00, 0xed, 0x64, + 0x46, 0x7d, 0x50, 0x95, 0x0d, 0xec, 0x0e, 0xec, 0x0e, 0xec, 0x0e, 0xec, 0x0e, 0xec, 0x0e, 0xec, + 0x0e, 0xec, 0x0e, 0xec, 0x0e, 0xec, 0x0e, 0xec, 0x9e, 0x13, 0xec, 0xde, 0xf4, 0xfa, 0x6e, 0x28, + 0x7c, 0x83, 0x49, 0xc1, 0xc9, 0x13, 0xcc, 0x40, 0xeb, 0x12, 0xa0, 0x35, 0xa0, 0x35, 0xa0, 0x75, + 0x16, 0xa1, 0x35, 0xf7, 0x21, 0xe1, 0x84, 0x70, 0x68, 0x36, 0x45, 0x10, 0x58, 0xc3, 0x3f, 0x4c, + 0x74, 0x91, 0x98, 0x67, 0x1f, 0x66, 0x9f, 0x77, 0x98, 0xcb, 0x2b, 0x78, 0x4c, 0x19, 0xb6, 0x34, + 0x0c, 0x5c, 0x7a, 0x86, 0x2e, 0x2d, 0x83, 0x97, 0xba, 0xe1, 0x4b, 0xdd, 0x00, 0xa6, 0x6a, 0x08, + 0x0d, 0x43, 0x4b, 0x43, 0x1a, 0x63, 0x8c, 0x7b, 0x58, 0x06, 0xc2, 0x6a, 0x95, 0x14, 0xb2, 0x95, + 0x4d, 0x26, 0x2b, 0x9b, 0x65, 0x24, 0xcc, 0x33, 0x13, 0xa9, 0x32, 0x14, 0x29, 0x87, 0xab, 0x69, + 0x33, 0x16, 0x9b, 0x08, 0x5d, 0x53, 0x60, 0x30, 0x52, 0x65, 0x32, 0x36, 0x2d, 0x22, 0xa5, 0xb7, + 0x95, 0x4a, 0xed, 0xb4, 0x52, 0x39, 0x3e, 0x3d, 0x39, 0x3d, 0x3e, 0xab, 0x56, 0x4b, 0xb5, 0x52, + 0x75, 0x8b, 0xa5, 0x66, 0x2f, 0x9f, 0xb3, 0xe7, 0x25, 0xc7, 0xdf, 0xc4, 0xad, 0x9b, 0x31, 0xf6, + 0xf7, 0xc5, 0xff, 0x27, 0x9a, 0x29, 0xc6, 0x1a, 0xe3, 0xe7, 0x21, 0xd6, 0x40, 0xac, 0x81, 0x58, + 0x03, 0xb1, 0x06, 0x62, 0x0d, 0xc4, 0x1a, 0x88, 0x35, 0x10, 0x6b, 0x20, 0xd6, 0x40, 0xac, 0x81, + 0x58, 0x63, 0x4b, 0x63, 0x0d, 0x5f, 0x84, 0xbe, 0x23, 0x5a, 0x56, 0x12, 0x03, 0xfc, 0x5f, 0x5f, + 0x04, 0x69, 0x04, 0x1d, 0xcb, 0x1e, 0x8c, 0xe8, 0x03, 0xd1, 0x07, 0xa2, 0x0f, 0x44, 0x1f, 0x88, + 0x3e, 0x10, 0x7d, 0x20, 0xfa, 0x40, 0xf4, 0x81, 0xe8, 0x03, 0xd1, 0x07, 0xa2, 0x8f, 0x2d, 0x8d, + 0x3e, 0x42, 0xa7, 0x2b, 0xbc, 0x7e, 0x98, 0x7e, 0xf4, 0xb1, 0xec, 0xc1, 0x88, 0x3e, 0x10, 0x7d, + 0x20, 0xfa, 0x40, 0xf4, 0x81, 0xe8, 0x03, 0xd1, 0x07, 0xa2, 0x0f, 0x44, 0x1f, 0x88, 0x3e, 0x10, + 0x7d, 0x20, 0xfa, 0xc8, 0x42, 0xf4, 0x91, 0xe9, 0xb2, 0x13, 0x43, 0x3d, 0x4c, 0x93, 0xf9, 0x8d, + 0xf6, 0x32, 0x8d, 0xfa, 0x5e, 0x1e, 0x19, 0xaa, 0x99, 0x2b, 0x18, 0xed, 0x6d, 0x7a, 0x3b, 0xfc, + 0xea, 0x0f, 0xe7, 0xe3, 0xaf, 0x8e, 0x2b, 0x6d, 0x79, 0xa1, 0x25, 0xae, 0xb4, 0x4d, 0x33, 0x12, + 0x46, 0x49, 0x65, 0xf6, 0x22, 0x5d, 0x94, 0x54, 0xe2, 0x4a, 0xdb, 0x0d, 0x44, 0xab, 0xe8, 0x53, + 0x92, 0xa5, 0x68, 0x14, 0x7d, 0x4a, 0xb2, 0xbb, 0xf5, 0xb8, 0xd2, 0x76, 0x03, 0xb3, 0xe2, 0x4a, + 0x5b, 0x1e, 0xc7, 0x87, 0x2b, 0x6d, 0x01, 0xab, 0x01, 0xab, 0x01, 0xab, 0xcd, 0xc8, 0x3b, 0xae, + 0xb4, 0xc5, 0x95, 0xb6, 0xf0, 0x0c, 0xf0, 0x0c, 0xf0, 0x0c, 0xf0, 0x0c, 0xb3, 0xf2, 0x8e, 0x2b, + 0x6d, 0xd3, 0x66, 0x5d, 0x70, 0xa5, 0xad, 0xc6, 0x83, 0x70, 0xa5, 0xed, 0x06, 0x18, 0x23, 0x5c, + 0x69, 0x9b, 0x69, 0x65, 0xc0, 0x95, 0xb6, 0xb8, 0xd2, 0x16, 0xcc, 0x1f, 0xf3, 0x4c, 0x3b, 0x7d, + 0xa5, 0x2d, 0xe7, 0xf5, 0xa7, 0x05, 0xf3, 0x59, 0x1f, 0x99, 0xb9, 0xd0, 0x76, 0x6f, 0x83, 0x12, + 0xc7, 0x2d, 0x69, 0x46, 0x25, 0xac, 0xc8, 0x72, 0xf5, 0xaf, 0x19, 0x99, 0xd2, 0x93, 0x26, 0xba, + 0x0c, 0x68, 0xec, 0x3f, 0xd3, 0x35, 0xc8, 0xac, 0xd7, 0x1f, 0x33, 0x75, 0x48, 0x67, 0xbb, 0xee, + 0x98, 0x93, 0x3d, 0xe2, 0x67, 0x8b, 0xb8, 0xd9, 0x21, 0x63, 0x6c, 0x90, 0x31, 0xf6, 0xc7, 0x08, + 0xdb, 0xb3, 0x59, 0x8b, 0xcc, 0xd5, 0x81, 0xbc, 0xc8, 0xcd, 0x33, 0x4f, 0xda, 0xfd, 0xb1, 0x46, + 0x5c, 0xcc, 0x84, 0x32, 0x3b, 0x91, 0x8c, 0x9b, 0xce, 0x0b, 0xb8, 0xe9, 0x3c, 0x5f, 0xe1, 0x03, + 0x3b, 0x01, 0x6c, 0x96, 0xf8, 0x35, 0x41, 0xf8, 0x9a, 0x21, 0x7a, 0x8d, 0x52, 0xea, 0x46, 0x89, + 0x5d, 0x93, 0x1c, 0x96, 0x71, 0xee, 0x2a, 0xf7, 0x04, 0x6e, 0x23, 0xcb, 0xe7, 0x45, 0x66, 0x85, + 0xba, 0x06, 0xa1, 0x06, 0x11, 0xbb, 0x03, 0x44, 0x6c, 0x56, 0x89, 0xcd, 0x46, 0x56, 0x68, 0x2e, + 0x86, 0x70, 0xb7, 0xe9, 0xb9, 0xae, 0x88, 0x72, 0x69, 0x2d, 0xfb, 0xd1, 0xf3, 0x43, 0x03, 0xb1, + 0xcd, 0xfc, 0x23, 0x10, 0xe5, 0x20, 0xca, 0x41, 0x94, 0xb3, 0x53, 0x51, 0x8e, 0x89, 0x8e, 0x18, + 0x06, 0x3a, 0x60, 0x18, 0xaa, 0x21, 0x32, 0x80, 0x07, 0x4d, 0xd6, 0x0c, 0x99, 0xee, 0x8d, 0x64, + 0xb8, 0x46, 0x28, 0x8d, 0xf2, 0x10, 0x13, 0x9d, 0xb7, 0x4c, 0xd6, 0x02, 0xa5, 0xb5, 0xa5, 0xe9, + 0x75, 0x98, 0x48, 0x65, 0x97, 0x81, 0x40, 0xd3, 0x44, 0xa0, 0xcd, 0x8e, 0x17, 0x08, 0xb3, 0x08, + 0x34, 0x7e, 0x04, 0x10, 0x28, 0x10, 0x28, 0x10, 0x28, 0x10, 0x28, 0x10, 0x28, 0x10, 0x28, 0x10, + 0x28, 0x10, 0x28, 0x10, 0x28, 0x10, 0xe8, 0x10, 0x1e, 0xb6, 0x6d, 0xa7, 0xd3, 0xf7, 0x0d, 0x63, + 0xd0, 0xe4, 0x21, 0x40, 0xa1, 0x40, 0xa1, 0x40, 0xa1, 0x40, 0xa1, 0x40, 0xa1, 0x40, 0xa1, 0x40, + 0xa1, 0x40, 0xa1, 0x40, 0xa1, 0x40, 0xa1, 0x43, 0x80, 0xe8, 0xf5, 0x84, 0x6b, 0x16, 0x82, 0x8e, + 0x9e, 0x00, 0xfc, 0x09, 0xfc, 0x09, 0xfc, 0x09, 0xfc, 0x09, 0xfc, 0x09, 0xfc, 0x09, 0xfc, 0x09, + 0xfc, 0x09, 0xfc, 0x09, 0xfc, 0x39, 0x44, 0x87, 0xf1, 0x4d, 0x6c, 0x66, 0x21, 0x68, 0xf2, 0x10, + 0xa0, 0x50, 0xa0, 0x50, 0xa0, 0x50, 0xa0, 0x50, 0xa0, 0x50, 0xa0, 0x50, 0xa0, 0x50, 0xa0, 0x50, + 0xa0, 0xd0, 0x1d, 0x46, 0xa1, 0xc2, 0xf7, 0x3d, 0x3f, 0xb0, 0x7c, 0xd1, 0x14, 0xce, 0x57, 0xd1, + 0xe2, 0x47, 0xa0, 0xaf, 0x1f, 0x00, 0xf4, 0x09, 0xf4, 0x09, 0xf4, 0x09, 0xf4, 0x09, 0xf4, 0x09, + 0xf4, 0x09, 0xf4, 0x09, 0xf4, 0x09, 0xf4, 0xb9, 0xc3, 0xe8, 0xb3, 0x2b, 0x82, 0xc0, 0x7e, 0x12, + 0x26, 0xf1, 0xe7, 0xfc, 0x23, 0x80, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, + 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x03, 0x2b, 0x18, 0xb9, 0x58, 0x53, 0xe8, + 0x33, 0x9a, 0x1e, 0xc8, 0x13, 0xc8, 0x13, 0xc8, 0x13, 0xc8, 0x13, 0xc8, 0x13, 0xc8, 0x13, 0xc8, + 0x13, 0xc8, 0x13, 0xc8, 0x73, 0x87, 0x91, 0x67, 0x7c, 0x81, 0x0b, 0x33, 0xe0, 0x8c, 0x66, 0x05, + 0xce, 0x04, 0xce, 0x04, 0xce, 0xdc, 0x29, 0x9c, 0x19, 0x84, 0xbe, 0xe3, 0x3e, 0x99, 0xb8, 0xd1, + 0xe0, 0xed, 0x16, 0xd9, 0xdc, 0x38, 0x07, 0x9e, 0xdf, 0xec, 0x8e, 0x27, 0x86, 0xe5, 0x85, 0xe5, + 0x85, 0xe5, 0xdd, 0x29, 0xcb, 0xdb, 0x77, 0xdc, 0xb0, 0x54, 0x33, 0x60, 0x79, 0x6b, 0x08, 0xef, + 0x11, 0xde, 0x23, 0xbc, 0xcf, 0xc4, 0x96, 0xd6, 0xaa, 0xd5, 0x13, 0xc4, 0xf3, 0xdb, 0x1b, 0xcf, + 0xe3, 0x02, 0xdb, 0xb5, 0x17, 0xd8, 0x72, 0xdd, 0x8d, 0x6c, 0xe0, 0xfe, 0x5a, 0x86, 0xcb, 0x90, + 0x37, 0x73, 0x7d, 0x6d, 0x68, 0x37, 0xed, 0x66, 0xc0, 0x77, 0x7f, 0x6d, 0x3c, 0x5f, 0xc6, 0x2e, + 0xb0, 0x3d, 0xc6, 0x05, 0xb6, 0x19, 0x88, 0x2a, 0x70, 0x81, 0xad, 0xfc, 0x1b, 0xb1, 0x5d, 0x60, + 0xdb, 0x1c, 0xeb, 0x00, 0x7f, 0x5d, 0xff, 0x70, 0x5e, 0x5e, 0xba, 0xa1, 0x04, 0xba, 0x01, 0x74, + 0x03, 0xe8, 0x06, 0x8e, 0x37, 0xe5, 0x32, 0x20, 0xc9, 0x84, 0x3d, 0xcf, 0x0f, 0xf9, 0x45, 0x6a, + 0xac, 0x04, 0xd1, 0xec, 0xcc, 0x9b, 0xfd, 0x5e, 0xb4, 0xed, 0x7e, 0x27, 0xda, 0xeb, 0xca, 0x19, + 0xf7, 0xe4, 0x66, 0xc2, 0x3e, 0x76, 0xcb, 0x65, 0xd2, 0x82, 0x99, 0xb7, 0x64, 0xa6, 0x2d, 0x5a, + 0x6a, 0x96, 0x2d, 0x35, 0x0b, 0x97, 0x8a, 0xa5, 0x33, 0x14, 0xd4, 0x33, 0x4b, 0x3c, 0x3b, 0xe1, + 0xba, 0xd0, 0x68, 0x59, 0x6e, 0xbf, 0xfb, 0x28, 0x7c, 0x83, 0x17, 0xf3, 0xd6, 0x0c, 0x4c, 0x6d, + 0x86, 0x8d, 0x1d, 0xff, 0x67, 0x46, 0x49, 0x0b, 0xa6, 0xd9, 0xd9, 0x94, 0x28, 0xbd, 0x39, 0x6a, + 0xcf, 0xf4, 0x73, 0x52, 0xa0, 0xf7, 0x0c, 0xe9, 0xf0, 0xec, 0xd6, 0x1b, 0x64, 0x71, 0x37, 0xb5, + 0xf5, 0x06, 0x59, 0xdd, 0x8d, 0x6c, 0xff, 0x5e, 0x3e, 0x66, 0xcd, 0xea, 0x3d, 0xd3, 0x8c, 0xea, + 0x53, 0x0c, 0x44, 0xd3, 0x17, 0xa1, 0xf5, 0xa7, 0x78, 0x31, 0x87, 0xda, 0xa7, 0x9e, 0x01, 0x78, + 0x0d, 0x78, 0x0d, 0x78, 0x0d, 0x78, 0xcd, 0x28, 0xef, 0xbe, 0xd7, 0x0f, 0x1d, 0xf7, 0xc9, 0xea, + 0xd9, 0x41, 0x10, 0x89, 0x8f, 0x39, 0x8c, 0xcd, 0x94, 0x63, 0x96, 0x71, 0x8f, 0x10, 0x69, 0xb9, + 0x65, 0xb7, 0x5a, 0xbe, 0x08, 0x02, 0x83, 0x5e, 0x61, 0xf6, 0x39, 0xf0, 0x0c, 0xf0, 0x0c, 0xf0, + 0x0c, 0xf0, 0x0c, 0x8c, 0xf2, 0xee, 0xf4, 0x0c, 0x59, 0x97, 0x19, 0x9f, 0x70, 0x66, 0x60, 0xee, + 0x78, 0x6d, 0x72, 0xc7, 0xbb, 0x4c, 0x56, 0xfe, 0x6b, 0xc5, 0xe0, 0xda, 0xcf, 0xfb, 0x65, 0x83, + 0xcf, 0xf8, 0x64, 0x87, 0xa1, 0xf0, 0x5d, 0x63, 0xdb, 0x91, 0x3c, 0xe8, 0xbf, 0xfb, 0xfb, 0x5f, + 0x8e, 0xad, 0xb3, 0xc6, 0x8f, 0x2f, 0x25, 0xeb, 0xac, 0x31, 0xfa, 0xb1, 0x14, 0xfd, 0x31, 0xfa, + 0xb9, 0xfc, 0xe5, 0xd8, 0xaa, 0x8c, 0x7f, 0xae, 0x7e, 0x39, 0xb6, 0xaa, 0x8d, 0x83, 0xfb, 0xfb, + 0x37, 0x07, 0xdf, 0x4f, 0x06, 0xea, 0x03, 0xff, 0x51, 0x34, 0xf6, 0x32, 0x8d, 0xbd, 0x1c, 0x71, + 0x46, 0xe9, 0x28, 0x43, 0x0d, 0xca, 0x40, 0x53, 0x06, 0xdb, 0x6a, 0xd7, 0xad, 0x5f, 0x1a, 0xdf, + 0x4b, 0x87, 0x95, 0xc1, 0xbb, 0x83, 0xef, 0xa7, 0x83, 0xd7, 0xbf, 0xfc, 0xb1, 0xe8, 0x63, 0xa5, + 0xc3, 0xd3, 0xc1, 0xbb, 0x25, 0xff, 0x52, 0x1b, 0xbc, 0x93, 0x9c, 0xa3, 0x3a, 0xd8, 0x9f, 0xfb, + 0xe8, 0xf0, 0xf7, 0xe5, 0x65, 0x03, 0x2a, 0x4b, 0x06, 0x9c, 0x2c, 0x1b, 0x70, 0xb2, 0x64, 0xc0, + 0xd2, 0xaf, 0x54, 0x5e, 0x32, 0xa0, 0x3a, 0xf8, 0x31, 0xf7, 0xf9, 0xfd, 0xc5, 0x1f, 0xad, 0x0d, + 0x0e, 0x7e, 0x2c, 0xfb, 0xb7, 0xd3, 0xc1, 0x8f, 0x77, 0x07, 0x39, 0x34, 0x0d, 0xbb, 0xc3, 0xfc, + 0x65, 0x2a, 0x79, 0x80, 0x39, 0x1f, 0x74, 0x12, 0x81, 0x1a, 0xc9, 0x0b, 0x1d, 0xe5, 0x1c, 0x1e, + 0xb1, 0x66, 0x24, 0x15, 0xcc, 0xe4, 0x89, 0xde, 0x45, 0x5f, 0xf5, 0x21, 0x0e, 0x36, 0xb7, 0xa8, + 0xae, 0x6d, 0x94, 0x9b, 0xcb, 0x9e, 0x65, 0xc6, 0x95, 0xf2, 0x5b, 0x30, 0x99, 0x64, 0x56, 0x46, + 0x92, 0x59, 0x8e, 0x18, 0x01, 0x24, 0x99, 0x21, 0xc9, 0x8c, 0x71, 0x6e, 0x24, 0x99, 0x81, 0xeb, + 0x04, 0xd7, 0x09, 0xae, 0xd3, 0x98, 0xbc, 0x23, 0xc9, 0x2c, 0x75, 0x7e, 0x07, 0x49, 0x66, 0xea, + 0xcf, 0x41, 0x92, 0x59, 0x66, 0xb7, 0x1e, 0x49, 0x66, 0xa0, 0x9a, 0xcc, 0xa8, 0x0f, 0x92, 0xcc, + 0x00, 0xaf, 0x01, 0xaf, 0x01, 0xaf, 0x73, 0x0c, 0xaf, 0x91, 0x64, 0x86, 0x24, 0x33, 0x78, 0x06, + 0x78, 0x06, 0x78, 0x06, 0x78, 0x86, 0x59, 0x79, 0x47, 0x92, 0x59, 0xda, 0xbc, 0x0b, 0x92, 0xcc, + 0x34, 0x1e, 0x84, 0x24, 0xb3, 0x0d, 0x70, 0x46, 0x48, 0x32, 0xcb, 0xb4, 0x32, 0x20, 0xc9, 0x0c, + 0x49, 0x66, 0x60, 0xfe, 0x98, 0x67, 0xda, 0xe9, 0x24, 0x33, 0xce, 0x84, 0xa4, 0x82, 0xd1, 0x1c, + 0x33, 0x86, 0x96, 0x84, 0x7c, 0x72, 0x83, 0xf6, 0x96, 0xb2, 0x12, 0x96, 0xcd, 0xfe, 0x96, 0x23, + 0x99, 0xda, 0x58, 0x83, 0xcb, 0xbd, 0x14, 0xa5, 0xa6, 0xf8, 0x5b, 0x74, 0x98, 0x51, 0xd4, 0x83, + 0x5c, 0xc5, 0x0f, 0x4e, 0x10, 0xd6, 0xc3, 0x50, 0x2f, 0x3f, 0xaa, 0xf8, 0xd1, 0x71, 0x2f, 0x3a, + 0x62, 0x18, 0xe9, 0x07, 0xc5, 0x77, 0x05, 0xb7, 0xdf, 0xe9, 0x68, 0xf4, 0xfa, 0xfc, 0x68, 0x7f, + 0xe3, 0x9b, 0xec, 0xda, 0x6f, 0x09, 0x5f, 0xb4, 0x7e, 0x7e, 0x89, 0xa7, 0x4a, 0x75, 0x8b, 0x98, + 0x14, 0xda, 0x8c, 0x22, 0x6b, 0x68, 0x30, 0xbf, 0xe6, 0xd2, 0x54, 0x56, 0x5d, 0xe1, 0xd4, 0x46, + 0x28, 0xee, 0xbb, 0xee, 0x7e, 0x33, 0xef, 0x33, 0x61, 0x83, 0x19, 0x37, 0x56, 0x6d, 0x47, 0xe5, + 0xf7, 0x45, 0x61, 0x4f, 0x88, 0xd9, 0xde, 0x5a, 0x59, 0xdd, 0xc4, 0xec, 0x6d, 0x72, 0x96, 0xb6, + 0x0e, 0xa5, 0xae, 0x4f, 0x99, 0xeb, 0x52, 0xe2, 0x6c, 0x94, 0x37, 0x1b, 0xa5, 0xcd, 0x42, 0x59, + 0x9b, 0xb5, 0x32, 0xd4, 0x6c, 0x66, 0xbd, 0x8b, 0xd4, 0x38, 0x2e, 0x4e, 0xd3, 0x3c, 0xaf, 0xd2, + 0x3e, 0x97, 0xe2, 0x38, 0x7f, 0xe2, 0x3b, 0x67, 0xe2, 0x3a, 0x4f, 0x62, 0x3f, 0x37, 0x62, 0x3f, + 0x1f, 0x62, 0x3d, 0x07, 0x4a, 0x17, 0x65, 0x6b, 0x9f, 0xdf, 0xf0, 0x5d, 0x3c, 0xa6, 0x79, 0x3e, + 0x4f, 0x00, 0x4b, 0x04, 0x87, 0x10, 0xea, 0xac, 0xd7, 0xa4, 0x3d, 0xff, 0x70, 0x16, 0xd8, 0x18, + 0xd8, 0x18, 0xd8, 0x18, 0x25, 0x79, 0x71, 0x5a, 0xc2, 0x0d, 0x9d, 0xf0, 0xc5, 0x17, 0x6d, 0x0e, + 0x43, 0xa3, 0x91, 0x8d, 0x5b, 0xbc, 0x8c, 0xbf, 0xca, 0xcf, 0x76, 0x20, 0xf8, 0xee, 0xed, 0xa8, + 0xd7, 0xeb, 0x0f, 0xb7, 0x17, 0x37, 0xbf, 0x5f, 0xdc, 0x3c, 0xdc, 0xfd, 0xf1, 0xe9, 0x42, 0x57, + 0x08, 0xa3, 0xd4, 0xe3, 0x80, 0xe5, 0x9c, 0x87, 0xb9, 0xa2, 0xf4, 0xa6, 0xfe, 0xfe, 0xf2, 0xf3, + 0x6d, 0x31, 0x0b, 0x45, 0xb3, 0xcc, 0x6f, 0x76, 0x57, 0x3f, 0xaf, 0x9f, 0xdf, 0x6e, 0xfa, 0xe2, + 0x8b, 0x46, 0xda, 0xb6, 0x01, 0x54, 0xc5, 0x42, 0xaa, 0x82, 0x78, 0x4e, 0xc1, 0x42, 0x54, 0xa8, + 0x9f, 0x3c, 0x28, 0xd0, 0x14, 0x7b, 0x8c, 0xbb, 0x36, 0xe6, 0x7a, 0x15, 0x42, 0x2f, 0x1a, 0xb1, + 0xab, 0x45, 0xe4, 0x6a, 0x11, 0xb7, 0x34, 0xa2, 0x56, 0x76, 0xfd, 0x88, 0xd2, 0xce, 0x24, 0xe5, + 0x45, 0x25, 0xca, 0x4a, 0x57, 0xae, 0xe5, 0x24, 0x7a, 0xbd, 0x7c, 0xae, 0xfe, 0xc4, 0x9a, 0x95, + 0x57, 0x5d, 0x71, 0xfa, 0x4a, 0x4b, 0x2c, 0x2e, 0x71, 0x51, 0x57, 0x2f, 0xe4, 0xf2, 0xe5, 0x59, + 0xb1, 0x34, 0x92, 0x8c, 0xa4, 0x12, 0x03, 0x29, 0xc9, 0x38, 0x4a, 0x33, 0x8c, 0x2a, 0x01, 0x8c, + 0x7a, 0xa0, 0xa2, 0x1a, 0x90, 0x90, 0x03, 0x0f, 0x72, 0x80, 0x41, 0x0a, 0x24, 0x32, 0xac, 0x2c, + 0x92, 0x1e, 0x56, 0x45, 0x49, 0xd6, 0x3b, 0xce, 0x15, 0xda, 0xb1, 0xa7, 0xb0, 0x42, 0xb2, 0x2b, + 0xa3, 0xb2, 0x22, 0xc5, 0x95, 0xea, 0x29, 0xb9, 0x06, 0x8b, 0xdf, 0x7e, 0xfe, 0xdd, 0x16, 0xbc, + 0x57, 0xd1, 0xee, 0xd8, 0x7e, 0x77, 0x79, 0xc9, 0x41, 0xa2, 0x53, 0xf1, 0xe7, 0x96, 0xac, 0xcc, + 0x6a, 0xad, 0x5f, 0xab, 0xed, 0x32, 0x5a, 0x3e, 0xa3, 0xdd, 0xab, 0xbe, 0x8c, 0x8a, 0x62, 0x2b, + 0x2b, 0xb4, 0xb2, 0x22, 0xcf, 0x29, 0xf0, 0xe8, 0xab, 0x33, 0x49, 0xe4, 0x3a, 0xf6, 0x7d, 0xb4, + 0x6d, 0xf2, 0x26, 0x7e, 0xf4, 0x71, 0x66, 0x13, 0x7f, 0x6c, 0xc8, 0xc4, 0xaf, 0x13, 0x82, 0x1c, + 0x5b, 0xf9, 0x35, 0x42, 0xc2, 0x63, 0xe8, 0x65, 0x8f, 0x6e, 0x54, 0xaf, 0x43, 0xa4, 0x5d, 0x77, + 0xa8, 0x78, 0x56, 0xa9, 0x4c, 0x8d, 0x52, 0xa8, 0x50, 0x92, 0xb8, 0xe9, 0xb2, 0x9d, 0xda, 0xec, + 0xa6, 0x36, 0x9b, 0x49, 0x15, 0x47, 0x33, 0xe1, 0xa6, 0xf1, 0x70, 0x29, 0x7a, 0xbb, 0xd1, 0x1f, + 0xea, 0xfd, 0xf0, 0x64, 0xbd, 0x74, 0xf4, 0x90, 0xd1, 0x1f, 0x4a, 0x9d, 0xec, 0x24, 0x42, 0x23, + 0x09, 0x0b, 0xe8, 0xb4, 0xd4, 0xb5, 0xd7, 0x69, 0x29, 0x6a, 0xee, 0x31, 0x34, 0x17, 0x9a, 0xab, + 0x75, 0x94, 0x90, 0xec, 0x5a, 0x47, 0xd8, 0x6d, 0xb5, 0x63, 0x83, 0xc4, 0x7d, 0x9c, 0x2a, 0x8c, + 0xf9, 0x14, 0x1b, 0x87, 0x37, 0x6f, 0x46, 0x91, 0xc9, 0x91, 0xd3, 0x4a, 0x53, 0x2b, 0xd5, 0x32, + 0x82, 0x48, 0x99, 0x40, 0x64, 0xaf, 0x5a, 0x86, 0x6e, 0x6e, 0xb5, 0x6e, 0xaa, 0xe6, 0xed, 0xa8, + 0xb8, 0x10, 0xba, 0x2b, 0x21, 0xba, 0x14, 0xb2, 0x6b, 0xd1, 0x11, 0x63, 0x16, 0x71, 0xd6, 0x15, + 0x6b, 0x36, 0xf1, 0x66, 0x13, 0x73, 0x2e, 0x71, 0x57, 0x3f, 0xe5, 0x28, 0x10, 0x4e, 0x9e, 0xc8, + 0xa7, 0xdd, 0xfa, 0x99, 0x34, 0xc4, 0x0c, 0x1a, 0x33, 0xc9, 0xa9, 0xbe, 0x08, 0x88, 0x76, 0x35, + 0xe9, 0x09, 0x32, 0x9e, 0x01, 0x9a, 0x0e, 0x4d, 0x87, 0xa6, 0x67, 0x56, 0xd3, 0x03, 0xf1, 0x55, + 0xf8, 0x4e, 0xf8, 0xa2, 0x91, 0x89, 0x3e, 0x9e, 0x01, 0x9a, 0x0e, 0x4d, 0xdf, 0x4a, 0x4d, 0xd7, + 0xcb, 0x5c, 0xd3, 0xc9, 0x58, 0xe3, 0xc9, 0x54, 0x4b, 0x5e, 0xe4, 0xfa, 0xd3, 0xc5, 0xd5, 0xf9, + 0xf5, 0xd5, 0x2f, 0x97, 0xbf, 0x3e, 0xd4, 0x3f, 0xd4, 0x6f, 0x3e, 0x3e, 0xdc, 0x5e, 0xfc, 0x7e, + 0x71, 0x73, 0x79, 0xf7, 0x07, 0x55, 0x92, 0x18, 0x72, 0xd4, 0x98, 0x92, 0xef, 0x3e, 0x5f, 0xfd, + 0x76, 0x75, 0xfd, 0xef, 0x2b, 0x8d, 0xb4, 0xca, 0xc3, 0x4d, 0xbf, 0xc2, 0xf9, 0xcd, 0xe5, 0xdd, + 0xe5, 0x79, 0xfd, 0x43, 0x9e, 0xdf, 0xe1, 0xdf, 0xf5, 0x9b, 0xab, 0xcb, 0xab, 0x5f, 0xf3, 0xfc, + 0x0a, 0x1f, 0x2f, 0xaf, 0xae, 0x6f, 0x72, 0xfd, 0x02, 0xf5, 0xff, 0xd5, 0x7a, 0x01, 0xd2, 0xc8, + 0x86, 0x69, 0xab, 0x6f, 0x04, 0xfd, 0x84, 0xe2, 0x5b, 0x48, 0x47, 0x3e, 0xd1, 0x68, 0xa0, 0x1e, + 0xa0, 0x1e, 0xc4, 0x37, 0x99, 0x8d, 0x6f, 0x42, 0xa7, 0x2b, 0xac, 0xa6, 0x2f, 0xec, 0x50, 0x68, + 0x30, 0x96, 0x33, 0xb3, 0x40, 0xe3, 0xa1, 0xf1, 0x5b, 0xa9, 0xf1, 0x43, 0x29, 0x0f, 0x9d, 0xe6, + 0x9f, 0x41, 0xad, 0xa2, 0xa1, 0xf6, 0x84, 0xe6, 0x67, 0xc5, 0xcf, 0xee, 0xa8, 0xe3, 0x7d, 0xd1, + 0xb5, 0x5d, 0x2f, 0x10, 0x4d, 0xcf, 0x6d, 0x91, 0x44, 0x4f, 0xef, 0xba, 0x0c, 0xbd, 0x26, 0x23, + 0x0c, 0x75, 0x6c, 0x2c, 0x1d, 0x73, 0xb9, 0xae, 0xab, 0xe0, 0xbc, 0x8f, 0x60, 0xa0, 0xd7, 0x72, + 0x25, 0x73, 0x4b, 0x5b, 0x7a, 0x5b, 0xa9, 0xd4, 0x4e, 0x2b, 0x95, 0xe3, 0xd3, 0x93, 0xd3, 0xe3, + 0xb3, 0x6a, 0xb5, 0x54, 0x2b, 0x55, 0x33, 0xb4, 0xda, 0x29, 0x55, 0x01, 0x35, 0xb2, 0xe0, 0xdf, + 0x5f, 0x7a, 0xc2, 0xd2, 0x39, 0x8c, 0x1c, 0x4f, 0x00, 0xaf, 0x0e, 0xaf, 0xbe, 0x95, 0x5e, 0xbd, + 0xef, 0x3a, 0x9e, 0xab, 0x03, 0xe3, 0x09, 0xed, 0x95, 0xf5, 0xda, 0x27, 0x6f, 0x43, 0x43, 0x83, + 0xc3, 0x4d, 0xbd, 0xf9, 0xd6, 0x97, 0x59, 0xcf, 0x91, 0xd8, 0x77, 0x7f, 0x7c, 0xba, 0x78, 0xb8, + 0x7c, 0xbf, 0xbd, 0xf5, 0xd6, 0xd7, 0x77, 0x5b, 0x59, 0x6c, 0x5d, 0xbf, 0xdc, 0xca, 0xd7, 0xfa, + 0x70, 0xbd, 0x95, 0xaf, 0x75, 0xf1, 0xff, 0x7e, 0xba, 0x43, 0x61, 0xfc, 0xc6, 0x20, 0x71, 0x7e, + 0x73, 0xe8, 0x55, 0xcb, 0xe8, 0x29, 0x29, 0xf4, 0x0a, 0xe5, 0xf2, 0xa6, 0x8b, 0x8b, 0xe3, 0x72, + 0xf8, 0xb5, 0x11, 0x85, 0x5a, 0x11, 0x3c, 0xa9, 0xf8, 0x9d, 0x54, 0xf4, 0xae, 0x56, 0xec, 0xbe, + 0xb1, 0xea, 0xd1, 0x29, 0x09, 0x63, 0x2c, 0x20, 0x9d, 0x92, 0xa9, 0x9c, 0xd6, 0x90, 0xae, 0x2d, + 0x85, 0x54, 0x59, 0x09, 0x9d, 0x4a, 0xd2, 0x66, 0xc7, 0x6b, 0xfe, 0xb9, 0xbe, 0x90, 0x74, 0xf4, + 0x31, 0xcd, 0x3a, 0xd2, 0x63, 0x9e, 0x3a, 0xd2, 0xe0, 0x25, 0x9f, 0x45, 0xa4, 0xc3, 0xef, 0x9d, + 0x56, 0x05, 0xa9, 0x64, 0xf1, 0x9f, 0x5a, 0xd1, 0x5f, 0x56, 0x6a, 0x48, 0x57, 0x0b, 0x00, 0x95, + 0x0a, 0xd9, 0x7c, 0x01, 0xe9, 0x4a, 0x01, 0xe1, 0x71, 0x7b, 0xd2, 0xd5, 0xa3, 0xa1, 0xd3, 0x15, + 0x7f, 0x7b, 0xae, 0xb0, 0x94, 0x3a, 0x7e, 0xce, 0x9c, 0x51, 0x4c, 0x86, 0x6f, 0x47, 0x45, 0x9a, + 0x9c, 0xd8, 0xe9, 0x32, 0x71, 0xd9, 0x2b, 0x79, 0x91, 0x12, 0x4b, 0x33, 0x08, 0x98, 0x5e, 0x8b, + 0x36, 0x23, 0x80, 0x96, 0x62, 0x33, 0x48, 0x45, 0x56, 0x29, 0xaf, 0x8d, 0x70, 0x22, 0xa7, 0x2e, + 0x5f, 0x3c, 0x2b, 0x89, 0x49, 0xce, 0x87, 0xb3, 0x4a, 0x55, 0xcb, 0xa2, 0xff, 0x0d, 0x1c, 0x1b, + 0x1c, 0x1b, 0x1c, 0x1b, 0x1c, 0x1b, 0x1c, 0x9b, 0x01, 0xc7, 0xc6, 0xdc, 0xb6, 0x6a, 0xe4, 0xd7, + 0x72, 0xdc, 0xb8, 0x6a, 0x55, 0x0c, 0xaf, 0xba, 0x0e, 0x5a, 0x94, 0xc3, 0xea, 0xd8, 0x54, 0x2e, + 0x26, 0x05, 0xe9, 0x90, 0x3d, 0xd2, 0xa1, 0xe5, 0x75, 0x6d, 0xc7, 0x95, 0x73, 0xac, 0xc9, 0xda, + 0x4e, 0x0f, 0x92, 0x43, 0x69, 0xc7, 0xa0, 0x1f, 0xf2, 0x8a, 0xd2, 0xa4, 0xdd, 0x1e, 0x41, 0x3c, + 0x0a, 0x8a, 0x57, 0xbb, 0x16, 0x3f, 0x08, 0xf7, 0x29, 0xb2, 0x99, 0x72, 0x27, 0xc9, 0x6a, 0x2d, + 0x70, 0x09, 0xf0, 0x88, 0x96, 0xaa, 0x94, 0xe4, 0xba, 0x29, 0x8e, 0xd3, 0x48, 0x64, 0x1b, 0xa8, + 0x35, 0xf4, 0x4d, 0x7d, 0x29, 0xca, 0xd5, 0x93, 0x14, 0x17, 0x83, 0x09, 0x49, 0x35, 0x24, 0x24, + 0x56, 0xf5, 0x52, 0xe1, 0xe2, 0xfe, 0xfe, 0xfe, 0x17, 0xdb, 0xfa, 0xbb, 0x6e, 0xfd, 0xe7, 0xd8, + 0x3a, 0x7b, 0x68, 0x4c, 0xfd, 0xe5, 0xfe, 0xde, 0x7a, 0x68, 0x1c, 0x7c, 0x3f, 0x3e, 0xac, 0x95, + 0x06, 0x07, 0x3f, 0x4d, 0x7e, 0xdf, 0xb8, 0xbf, 0x7f, 0x73, 0xf0, 0x4f, 0xca, 0xa8, 0x9f, 0x0e, + 0x7e, 0xdc, 0xdf, 0xbf, 0x59, 0x6f, 0x41, 0x1a, 0x06, 0x38, 0x81, 0x67, 0x2f, 0x08, 0xd5, 0xdc, + 0x4e, 0x32, 0x02, 0x3e, 0x07, 0x3e, 0x07, 0x3e, 0x07, 0x3e, 0x07, 0x3e, 0x07, 0x3e, 0x47, 0xc9, + 0xe7, 0x74, 0xbc, 0x27, 0xc7, 0xb5, 0x1e, 0x6d, 0xd7, 0x15, 0xbe, 0xbc, 0xdf, 0x99, 0x19, 0x05, + 0xdf, 0x03, 0xdf, 0x33, 0x77, 0x5c, 0x21, 0x99, 0x11, 0x2d, 0x49, 0xe5, 0xd1, 0x64, 0xbb, 0xeb, + 0x85, 0x2d, 0x65, 0xd1, 0x9e, 0x1e, 0x04, 0xc9, 0x86, 0x64, 0x6f, 0x4e, 0xb2, 0x37, 0x4b, 0xb3, + 0xae, 0x3b, 0x4f, 0x95, 0xe5, 0x59, 0x57, 0x9c, 0xa0, 0x4a, 0x12, 0xad, 0xbd, 0xbe, 0xc4, 0x1d, + 0x01, 0xd1, 0xa7, 0xb2, 0x71, 0x43, 0x00, 0x48, 0x56, 0x89, 0xcc, 0xae, 0x5e, 0x5f, 0x21, 0xad, + 0xab, 0xd7, 0x47, 0x4e, 0x17, 0x8e, 0xbe, 0xe3, 0x0f, 0x3a, 0x6e, 0x4b, 0x7c, 0x23, 0xb4, 0x14, + 0x8f, 0x86, 0xe1, 0xa8, 0x5b, 0x25, 0x98, 0xc4, 0x51, 0xb7, 0x3a, 0x52, 0x98, 0x8f, 0x95, 0x36, + 0xd5, 0x4f, 0x3c, 0x12, 0x78, 0xb4, 0x14, 0x87, 0x62, 0x6e, 0xb5, 0x62, 0x2a, 0x37, 0x13, 0x7f, + 0xb6, 0xfd, 0xd6, 0x5f, 0xb6, 0x2f, 0x2c, 0xc7, 0x0d, 0x85, 0xef, 0xf7, 0x7b, 0x1a, 0x4d, 0xb9, + 0x16, 0xcc, 0x45, 0x2b, 0xed, 0x2f, 0xe5, 0xac, 0xb4, 0x5f, 0x4d, 0xd0, 0x75, 0x05, 0x9e, 0x4d, + 0xf0, 0xd9, 0x14, 0x80, 0x45, 0x11, 0xd4, 0x14, 0x82, 0xc0, 0x21, 0x93, 0x14, 0x24, 0x19, 0x68, + 0x7f, 0x7d, 0xd2, 0xef, 0x02, 0x3a, 0x9c, 0x04, 0xf7, 0xd7, 0x0f, 0x45, 0x23, 0x7c, 0xe9, 0x89, + 0x00, 0x37, 0xd8, 0x13, 0x94, 0x6a, 0xb4, 0x72, 0x3b, 0x77, 0x87, 0x7d, 0x4f, 0xf8, 0x4d, 0xe1, + 0x86, 0xf6, 0x93, 0x60, 0xe8, 0xad, 0xa0, 0xd3, 0x5a, 0x41, 0xaf, 0xd1, 0xd5, 0xf8, 0x3f, 0xfd, + 0x12, 0x71, 0x96, 0xc6, 0x57, 0x4c, 0xe6, 0x65, 0x6e, 0x3a, 0xa6, 0x46, 0x58, 0xc9, 0x7c, 0x8c, + 0x2d, 0x9a, 0x34, 0x45, 0x7a, 0x76, 0x0b, 0x18, 0x1a, 0x64, 0x99, 0xde, 0x82, 0xd2, 0x71, 0x96, + 0x37, 0x61, 0x6f, 0x33, 0xa3, 0x1b, 0x69, 0xdd, 0xd6, 0x4f, 0x80, 0x85, 0x8e, 0x1b, 0x84, 0xb6, + 0x1b, 0xea, 0xa3, 0x8d, 0xf1, 0x44, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, + 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x0b, 0x10, 0x47, 0x28, 0xfc, 0xaf, 0x76, 0x87, 0x03, 0x72, + 0xc4, 0x33, 0x01, 0x73, 0x00, 0x73, 0x00, 0x73, 0x28, 0xcb, 0x4c, 0x10, 0xda, 0xa1, 0xa5, 0xa9, + 0x44, 0x05, 0xbd, 0x8e, 0xe0, 0xc9, 0x14, 0x4c, 0x9d, 0xc1, 0x01, 0x63, 0x00, 0x63, 0xf2, 0x09, + 0x63, 0xd8, 0x3b, 0x8d, 0x03, 0xd7, 0xa4, 0x8b, 0x6b, 0xba, 0x1a, 0x52, 0x36, 0x49, 0x81, 0xb5, + 0xbf, 0x01, 0xcd, 0x00, 0xcd, 0x00, 0xcd, 0x80, 0x41, 0x01, 0xf4, 0x00, 0xf4, 0x00, 0x83, 0x02, + 0xa4, 0xb1, 0x10, 0x69, 0x58, 0xa1, 0xd3, 0x15, 0x2c, 0x70, 0x63, 0x34, 0x13, 0x30, 0x07, 0x30, + 0x07, 0x30, 0x87, 0xb2, 0xcc, 0xe8, 0xdd, 0xa4, 0x06, 0xfe, 0x04, 0x20, 0x06, 0x20, 0x06, 0xfc, + 0x09, 0x50, 0x4d, 0x84, 0x6a, 0x34, 0x14, 0x7d, 0x02, 0x68, 0x1c, 0x17, 0x58, 0x06, 0x58, 0x06, + 0x58, 0x06, 0xfc, 0x09, 0xa0, 0x07, 0xa0, 0x07, 0xf8, 0x13, 0x20, 0x8d, 0x85, 0x48, 0x83, 0x8b, + 0x3f, 0x19, 0xcf, 0x04, 0xcc, 0x01, 0xcc, 0x01, 0xcc, 0x01, 0xfe, 0x04, 0x20, 0x06, 0x20, 0x06, + 0xfc, 0x09, 0x50, 0x8d, 0x2e, 0xaa, 0x31, 0x5a, 0x96, 0x4c, 0xbc, 0x16, 0x34, 0x19, 0x2f, 0xdd, + 0xc8, 0xaa, 0xd7, 0x0f, 0x86, 0xff, 0x13, 0x77, 0xc5, 0xd0, 0xae, 0xd8, 0x2f, 0x28, 0xf4, 0xbe, + 0xea, 0xf5, 0x83, 0xe1, 0xff, 0x8c, 0xae, 0x5b, 0x78, 0xf8, 0x57, 0xfc, 0xe8, 0xcb, 0xe4, 0xc9, + 0xa6, 0xee, 0x6f, 0x55, 0x68, 0x41, 0xe1, 0xb4, 0x3a, 0x82, 0xde, 0xff, 0x20, 0x1a, 0x8d, 0x8e, + 0x07, 0xe6, 0xc0, 0x24, 0x3a, 0x1e, 0xa0, 0xe3, 0x01, 0x22, 0x31, 0x44, 0x62, 0xbb, 0x11, 0x89, + 0x81, 0xfd, 0x45, 0xe0, 0x84, 0xc0, 0x89, 0x12, 0x38, 0x81, 0xfd, 0xdd, 0x60, 0x9c, 0x84, 0x8e, + 0x07, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x19, + 0x45, 0x1c, 0xe8, 0x78, 0x00, 0xcc, 0x01, 0xcc, 0x81, 0x8e, 0x07, 0xd3, 0x53, 0xe0, 0xc4, 0x19, + 0x30, 0x66, 0xa7, 0x61, 0x0c, 0x4e, 0x9c, 0x73, 0x8e, 0x6b, 0xd0, 0xf1, 0x00, 0x68, 0x06, 0x68, + 0x06, 0x0c, 0x0a, 0xa0, 0x07, 0xa0, 0x07, 0x18, 0x14, 0x20, 0x0d, 0xa3, 0x48, 0x03, 0x1d, 0x0f, + 0x80, 0x39, 0x80, 0x39, 0x90, 0xb1, 0x0f, 0xfe, 0x04, 0x20, 0x06, 0x20, 0x06, 0xfc, 0xc9, 0x36, + 0xa0, 0x1a, 0x74, 0x3c, 0x00, 0x96, 0x01, 0x96, 0x01, 0x7f, 0x02, 0xe8, 0x01, 0xe8, 0x01, 0xfe, + 0x04, 0x48, 0xc3, 0x24, 0xd2, 0x40, 0xc7, 0x03, 0x60, 0x0e, 0x60, 0x0e, 0xf0, 0x27, 0xe0, 0x4f, + 0x00, 0x62, 0x00, 0x62, 0xc0, 0x9f, 0x64, 0x0d, 0xd5, 0x6c, 0x63, 0xc7, 0x03, 0x42, 0x8d, 0x7e, + 0x81, 0xdc, 0xe3, 0xe0, 0x72, 0xf8, 0xb0, 0x2c, 0xb4, 0x35, 0x70, 0x5b, 0xe2, 0x9b, 0x46, 0x5f, + 0x83, 0x68, 0x38, 0xad, 0xb1, 0xc1, 0x31, 0x1a, 0x1b, 0xa4, 0x89, 0x15, 0x77, 0xa9, 0xb1, 0x01, + 0x19, 0x01, 0x26, 0xfb, 0xdd, 0x77, 0x87, 0xe6, 0x87, 0xb0, 0xdd, 0xe3, 0xae, 0x1d, 0x67, 0x84, + 0xb1, 0xf1, 0xd7, 0xa6, 0x61, 0x32, 0x06, 0xb8, 0x2b, 0xdc, 0x7e, 0x57, 0xf8, 0x23, 0xcb, 0xab, + 0x0f, 0x77, 0x4b, 0x15, 0x8d, 0x39, 0x2e, 0xdc, 0x7e, 0x77, 0xb8, 0x83, 0xa9, 0x46, 0x0e, 0x0c, + 0x4b, 0xd8, 0x77, 0xdc, 0xf0, 0xa4, 0xcc, 0xb0, 0x7a, 0xa7, 0x00, 0xf7, 0x00, 0xf7, 0x3b, 0x02, + 0xee, 0x2b, 0xe5, 0xb3, 0xca, 0x59, 0xed, 0xb4, 0x7c, 0x06, 0x48, 0xbf, 0x31, 0x48, 0xdf, 0xc8, + 0x00, 0x18, 0xfd, 0x53, 0xf8, 0xae, 0xe8, 0xd0, 0xd1, 0x68, 0x3c, 0x1e, 0x7d, 0xb6, 0x00, 0x47, + 0x33, 0x05, 0x47, 0xd1, 0x67, 0x0b, 0xfc, 0xbf, 0x11, 0x25, 0x62, 0x57, 0xa6, 0x65, 0x4a, 0x85, + 0x9c, 0x03, 0xe4, 0x1c, 0x00, 0xd1, 0x03, 0xd1, 0xcb, 0x6e, 0x01, 0x72, 0x0e, 0x36, 0x08, 0xe5, + 0xd1, 0x67, 0x0b, 0x88, 0x03, 0x88, 0x03, 0x88, 0x03, 0x88, 0x03, 0x88, 0x03, 0x88, 0x03, 0x88, + 0x23, 0xab, 0x88, 0x03, 0x7d, 0xb6, 0x80, 0x39, 0x80, 0x39, 0xd0, 0x67, 0x6b, 0x7a, 0x0a, 0xe4, + 0x39, 0x02, 0xc6, 0xec, 0x34, 0x8c, 0x41, 0x9e, 0x63, 0xce, 0x71, 0x0d, 0xfa, 0x6c, 0x01, 0xcd, + 0x00, 0xcd, 0x80, 0x41, 0x01, 0xf4, 0x00, 0xf4, 0x00, 0x83, 0x02, 0xa4, 0x61, 0x14, 0x69, 0xa0, + 0xcf, 0x16, 0x30, 0x07, 0x30, 0x07, 0xea, 0x44, 0xc1, 0x9f, 0x00, 0xc4, 0x00, 0xc4, 0x80, 0x3f, + 0xd9, 0x06, 0x54, 0x83, 0x3e, 0x5b, 0xc0, 0x32, 0xc0, 0x32, 0xe0, 0x4f, 0x00, 0x3d, 0x00, 0x3d, + 0xc0, 0x9f, 0x00, 0x69, 0x98, 0x44, 0x1a, 0xe8, 0xb3, 0x05, 0xcc, 0x01, 0xcc, 0x01, 0xfe, 0x04, + 0xfc, 0x09, 0x40, 0x0c, 0x40, 0x0c, 0xf8, 0x93, 0xac, 0xa1, 0x9a, 0x6d, 0xec, 0xb3, 0x45, 0xaa, + 0xd2, 0x2f, 0x90, 0x3b, 0x6d, 0xfd, 0x36, 0x7a, 0x5c, 0x06, 0xda, 0x1b, 0xb8, 0x0e, 0x01, 0xd3, + 0x24, 0x3e, 0x32, 0x1a, 0x8d, 0xd6, 0x06, 0xe6, 0x50, 0x23, 0x5a, 0x1b, 0xa0, 0xb5, 0x01, 0x42, + 0x2e, 0x84, 0x5c, 0xbb, 0x11, 0x72, 0x81, 0xe6, 0x45, 0x84, 0x84, 0x08, 0x89, 0x12, 0x21, 0x81, + 0xe6, 0xdd, 0x60, 0x40, 0x84, 0xd6, 0x06, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, + 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x19, 0x45, 0x1c, 0x68, 0x6d, 0x00, 0xcc, 0x01, 0xcc, 0x81, 0xd6, + 0x06, 0xd3, 0x53, 0xe0, 0x68, 0x19, 0x30, 0x66, 0xa7, 0x61, 0x0c, 0x8e, 0x96, 0x73, 0x8e, 0x6b, + 0xd0, 0xda, 0x00, 0x68, 0x06, 0x68, 0x06, 0x0c, 0x0a, 0xa0, 0x07, 0xa0, 0x07, 0x18, 0x14, 0x20, + 0x0d, 0xa3, 0x48, 0x03, 0xad, 0x0d, 0x80, 0x39, 0x80, 0x39, 0x90, 0x9a, 0x0f, 0xfe, 0x04, 0x20, + 0x06, 0x20, 0x06, 0xfc, 0xc9, 0x36, 0xa0, 0x1a, 0xb4, 0x36, 0x00, 0x96, 0x01, 0x96, 0x01, 0x7f, + 0x02, 0xe8, 0x01, 0xe8, 0x01, 0xfe, 0x04, 0x48, 0xc3, 0x24, 0xd2, 0x40, 0x6b, 0x03, 0x60, 0x0e, + 0x60, 0x0e, 0xf0, 0x27, 0xe0, 0x4f, 0x00, 0x62, 0x00, 0x62, 0xc0, 0x9f, 0x64, 0x0d, 0xd5, 0x6c, + 0x63, 0x6b, 0x03, 0x42, 0x8d, 0x7e, 0x81, 0xdc, 0xd8, 0xe0, 0x6a, 0xf8, 0xb0, 0x0c, 0xb4, 0x35, + 0x08, 0xbc, 0x76, 0xf8, 0x97, 0xed, 0x8b, 0x51, 0x9e, 0xa5, 0xdf, 0xef, 0x85, 0xf4, 0x26, 0x07, + 0x0b, 0xe6, 0x42, 0xcb, 0x03, 0x73, 0x68, 0x12, 0x2d, 0x0f, 0xd0, 0xf2, 0x00, 0xa1, 0x18, 0x42, + 0xb1, 0xdd, 0x08, 0xc5, 0x40, 0xff, 0x22, 0x72, 0x42, 0xe4, 0x44, 0x89, 0x9c, 0x40, 0xff, 0x6e, + 0x30, 0x50, 0x42, 0xcb, 0x03, 0x20, 0x0e, 0x20, 0x0e, 0x20, 0x0e, 0x20, 0x0e, 0x20, 0x0e, 0x20, + 0x0e, 0x20, 0x8e, 0x8c, 0x22, 0x0e, 0xb4, 0x3c, 0x00, 0xe6, 0x00, 0xe6, 0x40, 0xcb, 0x83, 0xe9, + 0x29, 0x70, 0xe4, 0x0c, 0x18, 0xb3, 0xd3, 0x30, 0x06, 0x47, 0xce, 0x39, 0xc7, 0x35, 0x68, 0x79, + 0x00, 0x34, 0x03, 0x34, 0x03, 0x06, 0x05, 0xd0, 0x03, 0xd0, 0x03, 0x0c, 0x0a, 0x90, 0x86, 0x51, + 0xa4, 0x81, 0x96, 0x07, 0xc0, 0x1c, 0xc0, 0x1c, 0x48, 0xd9, 0x07, 0x7f, 0x02, 0x10, 0x03, 0x10, + 0x03, 0xfe, 0x64, 0x1b, 0x50, 0x0d, 0x5a, 0x1e, 0x00, 0xcb, 0x00, 0xcb, 0x80, 0x3f, 0x01, 0xf4, + 0x00, 0xf4, 0x00, 0x7f, 0x02, 0xa4, 0x61, 0x12, 0x69, 0xa0, 0xe5, 0x01, 0x30, 0x07, 0x30, 0x07, + 0xf8, 0x13, 0xf0, 0x27, 0x00, 0x31, 0x00, 0x31, 0xe0, 0x4f, 0xb2, 0x86, 0x6a, 0xb6, 0xb1, 0xe5, + 0x81, 0x76, 0xc5, 0x7e, 0x81, 0xdc, 0x00, 0xe1, 0x36, 0x7e, 0xf4, 0x65, 0xf2, 0xe4, 0x0c, 0x74, + 0x43, 0x08, 0xbd, 0x90, 0x90, 0x05, 0x3d, 0xf1, 0x9d, 0xd1, 0x70, 0xf4, 0x3c, 0x30, 0x07, 0x27, + 0xd1, 0xf3, 0x00, 0x3d, 0x0f, 0x10, 0x8b, 0x21, 0x16, 0xdb, 0x8d, 0x58, 0x0c, 0xfc, 0x2f, 0x42, + 0x27, 0x84, 0x4e, 0x94, 0xd0, 0x09, 0xfc, 0xef, 0x06, 0x23, 0x25, 0xf4, 0x3c, 0x00, 0xe2, 0x00, + 0xe2, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0xe2, 0xc8, 0x28, 0xe2, 0x40, 0xcf, + 0x03, 0x60, 0x0e, 0x60, 0x0e, 0xf4, 0x3c, 0x98, 0x9e, 0x02, 0x67, 0xce, 0x80, 0x31, 0x3b, 0x0d, + 0x63, 0x70, 0xe6, 0x9c, 0x73, 0x5c, 0x83, 0x9e, 0x07, 0x40, 0x33, 0x40, 0x33, 0x60, 0x50, 0x00, + 0x3d, 0x00, 0x3d, 0xc0, 0xa0, 0x00, 0x69, 0x18, 0x45, 0x1a, 0xe8, 0x79, 0x00, 0xcc, 0x01, 0xcc, + 0x81, 0x9c, 0x7d, 0xf0, 0x27, 0x00, 0x31, 0x00, 0x31, 0xe0, 0x4f, 0xb6, 0x01, 0xd5, 0xa0, 0xe7, + 0x01, 0xb0, 0x0c, 0xb0, 0x0c, 0xf8, 0x13, 0x40, 0x0f, 0x40, 0x0f, 0xf0, 0x27, 0x40, 0x1a, 0x26, + 0x91, 0x06, 0x7a, 0x1e, 0x00, 0x73, 0x00, 0x73, 0x80, 0x3f, 0x01, 0x7f, 0x02, 0x10, 0x03, 0x10, + 0x03, 0xfe, 0x24, 0x6b, 0xa8, 0x66, 0x1b, 0x7b, 0x1e, 0x50, 0x8a, 0xf4, 0x0b, 0xe4, 0x36, 0x07, + 0x77, 0xd1, 0xd3, 0x32, 0xd0, 0xda, 0xa0, 0x1f, 0x08, 0x9f, 0xde, 0xd9, 0x20, 0x1a, 0x8d, 0xc6, + 0x06, 0xe6, 0x30, 0x23, 0x1a, 0x1b, 0xa0, 0xb1, 0x01, 0x02, 0x2e, 0x04, 0x5c, 0xbb, 0x11, 0x70, + 0x81, 0xe4, 0x45, 0x7c, 0x84, 0xf8, 0x88, 0x12, 0x1f, 0x81, 0xe4, 0xdd, 0x60, 0x38, 0x84, 0xc6, + 0x06, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x40, 0x1c, 0x19, + 0x45, 0x1c, 0x68, 0x6c, 0x00, 0xcc, 0x01, 0xcc, 0x81, 0xc6, 0x06, 0xd3, 0x53, 0xe0, 0x60, 0x19, + 0x30, 0x66, 0xa7, 0x61, 0x0c, 0x0e, 0x96, 0x73, 0x8e, 0x6b, 0xd0, 0xd8, 0x00, 0x68, 0x06, 0x68, + 0x06, 0x0c, 0x0a, 0xa0, 0x07, 0xa0, 0x07, 0x18, 0x14, 0x20, 0x0d, 0xa3, 0x48, 0x03, 0x8d, 0x0d, + 0x80, 0x39, 0x80, 0x39, 0x90, 0x98, 0x0f, 0xfe, 0x04, 0x20, 0x06, 0x20, 0x06, 0xfc, 0xc9, 0x36, + 0xa0, 0x1a, 0x34, 0x36, 0x00, 0x96, 0x01, 0x96, 0x01, 0x7f, 0x02, 0xe8, 0x01, 0xe8, 0x01, 0xfe, + 0x04, 0x48, 0xc3, 0x24, 0xd2, 0x40, 0x63, 0x03, 0x60, 0x0e, 0x60, 0x0e, 0xf0, 0x27, 0xe0, 0x4f, + 0x00, 0x62, 0x00, 0x62, 0xc0, 0x9f, 0x64, 0x0d, 0xd5, 0x6c, 0x63, 0x63, 0x03, 0x42, 0x8d, 0x7e, + 0x81, 0xdc, 0xd7, 0xe0, 0xf3, 0xf0, 0x61, 0x19, 0x68, 0x6b, 0xf0, 0x97, 0xed, 0x84, 0xf4, 0xb6, + 0x06, 0xd1, 0x68, 0xb4, 0x35, 0x30, 0x87, 0x18, 0xd1, 0xd6, 0x00, 0x6d, 0x0d, 0x10, 0x6e, 0x21, + 0xdc, 0xda, 0x8d, 0x70, 0x0b, 0x14, 0x2f, 0xa2, 0x23, 0x44, 0x47, 0x94, 0xe8, 0x08, 0x14, 0xef, + 0x06, 0x83, 0x21, 0xb4, 0x35, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0xe2, 0x00, + 0xe2, 0x00, 0xe2, 0xc8, 0x28, 0xe2, 0x40, 0x5b, 0x03, 0x60, 0x0e, 0x60, 0x0e, 0xb4, 0x35, 0x98, + 0x9e, 0x02, 0xc7, 0xca, 0x80, 0x31, 0x3b, 0x0d, 0x63, 0x70, 0xac, 0x9c, 0x73, 0x5c, 0x83, 0xb6, + 0x06, 0x40, 0x33, 0x40, 0x33, 0x60, 0x50, 0x00, 0x3d, 0x00, 0x3d, 0xc0, 0xa0, 0x00, 0x69, 0x18, + 0x45, 0x1a, 0x68, 0x6b, 0x00, 0xcc, 0x01, 0xcc, 0x81, 0xb4, 0x7c, 0xf0, 0x27, 0x00, 0x31, 0x00, + 0x31, 0xe0, 0x4f, 0xb6, 0x01, 0xd5, 0xa0, 0xad, 0x01, 0xb0, 0x0c, 0xb0, 0x0c, 0xf8, 0x13, 0x40, + 0x0f, 0x40, 0x0f, 0xf0, 0x27, 0x40, 0x1a, 0x26, 0x91, 0x06, 0xda, 0x1a, 0x00, 0x73, 0x00, 0x73, + 0x80, 0x3f, 0x01, 0x7f, 0x02, 0x10, 0x03, 0x10, 0x03, 0xfe, 0x24, 0x6b, 0xa8, 0x66, 0x1b, 0xdb, + 0x1a, 0x10, 0x6a, 0xf4, 0x0b, 0xe4, 0xb6, 0x06, 0xff, 0x1e, 0x3e, 0xcc, 0x54, 0x5b, 0x83, 0x3d, + 0xc6, 0x5d, 0xa1, 0xee, 0x06, 0x71, 0x17, 0x14, 0x36, 0x80, 0xb4, 0xf0, 0x72, 0x6b, 0xbe, 0x7e, + 0x05, 0x57, 0x7f, 0x62, 0xcd, 0xda, 0x0e, 0xf1, 0xdf, 0x28, 0x41, 0xbc, 0x25, 0xd6, 0x41, 0xbf, + 0xe2, 0x07, 0x27, 0x08, 0xeb, 0x61, 0x28, 0x57, 0xa9, 0x3f, 0x74, 0xa7, 0x17, 0x1d, 0x31, 0x44, + 0x6e, 0x43, 0x4b, 0xe6, 0xf6, 0x3b, 0x9d, 0xc3, 0x3d, 0x19, 0x07, 0xa0, 0x3e, 0xe8, 0xda, 0x6f, + 0x09, 0x5f, 0xb4, 0x7e, 0x7e, 0x89, 0x87, 0x68, 0x2d, 0x88, 0xa2, 0x90, 0x29, 0x0b, 0x97, 0x84, + 0x58, 0x29, 0x8a, 0xd3, 0x6a, 0x41, 0x5a, 0x2e, 0x1e, 0x8b, 0xff, 0x65, 0xc9, 0xfa, 0xc8, 0xae, + 0x8b, 0xd2, 0x7a, 0xac, 0x58, 0x0b, 0x85, 0x35, 0x58, 0xfc, 0xfe, 0xf3, 0x6f, 0xb7, 0xe0, 0xcd, + 0x8a, 0x2d, 0x37, 0x58, 0xfa, 0x3a, 0x09, 0xf6, 0x1e, 0x7e, 0x68, 0xc9, 0xaa, 0xac, 0xee, 0x8c, + 0xb2, 0x36, 0xec, 0x94, 0x09, 0x2b, 0xe5, 0x3b, 0x9a, 0xc8, 0x06, 0x85, 0xca, 0x41, 0x9f, 0x72, + 0x50, 0xa7, 0xd4, 0x71, 0x44, 0x4d, 0x0e, 0xd7, 0x75, 0x0a, 0x29, 0x36, 0xc7, 0x6b, 0xbe, 0x66, + 0x11, 0xc6, 0xcb, 0x1a, 0x7f, 0x7e, 0x9d, 0x9d, 0x94, 0x6a, 0x81, 0x23, 0xcd, 0x33, 0xa8, 0xf0, + 0x09, 0xea, 0x2d, 0x6d, 0x54, 0xd9, 0x01, 0x32, 0x0b, 0x40, 0x8e, 0xf6, 0x49, 0x2d, 0x69, 0xf4, + 0x3c, 0x9d, 0x6c, 0x8b, 0x99, 0x62, 0x20, 0x6c, 0xbf, 0xf9, 0x2c, 0xbf, 0x78, 0x49, 0x91, 0xc8, + 0x68, 0x9c, 0xe4, 0x02, 0xa8, 0x45, 0x27, 0xca, 0x04, 0x16, 0x85, 0xb0, 0xa2, 0xf7, 0x4e, 0xa2, + 0xd2, 0x51, 0xda, 0xf4, 0x93, 0x36, 0xdd, 0xa4, 0xd5, 0x1b, 0x89, 0x17, 0xde, 0x2a, 0x93, 0x45, + 0x13, 0x07, 0xe5, 0x75, 0x6d, 0xc7, 0xb5, 0x22, 0x67, 0xa9, 0xb0, 0x69, 0x63, 0x9b, 0xa6, 0xc0, + 0x06, 0x15, 0x3f, 0x08, 0xf7, 0x29, 0x72, 0xed, 0x6a, 0x74, 0x0d, 0x21, 0x76, 0xd2, 0xa1, 0x63, + 0x74, 0xe9, 0xe2, 0x24, 0xd6, 0x27, 0x8e, 0x67, 0x08, 0xe4, 0x29, 0x74, 0xbd, 0x0e, 0x7d, 0xc2, + 0xb5, 0x64, 0xe5, 0xea, 0xc9, 0x06, 0x17, 0xcd, 0x50, 0x1c, 0xdb, 0x50, 0xd0, 0x90, 0x4f, 0x76, + 0x18, 0x0a, 0xdf, 0x55, 0x56, 0x91, 0xe2, 0xfe, 0xfe, 0xfe, 0x17, 0xdb, 0xfa, 0xbb, 0x6e, 0xfd, + 0xe7, 0xd8, 0x3a, 0x7b, 0x68, 0x4c, 0xfd, 0xe5, 0xfe, 0xde, 0x7a, 0x68, 0x1c, 0x7c, 0x3f, 0x3e, + 0xac, 0x95, 0x06, 0x07, 0x3f, 0x4d, 0x7e, 0xdf, 0xb8, 0xbf, 0x7f, 0x73, 0xf0, 0x4f, 0xca, 0xa8, + 0x9f, 0x0e, 0x7e, 0xdc, 0xdf, 0xbf, 0x91, 0xb7, 0x74, 0x0d, 0x56, 0x4b, 0xa7, 0x14, 0x48, 0x6a, + 0x05, 0x94, 0x5a, 0x81, 0xe5, 0xc2, 0x00, 0x93, 0xd8, 0x76, 0x91, 0xd0, 0xa9, 0x52, 0xe7, 0x8c, + 0x67, 0xda, 0xb1, 0x7a, 0xa3, 0x6f, 0x6f, 0x3d, 0xbe, 0x50, 0x38, 0x25, 0x8e, 0xf3, 0x9c, 0x19, + 0x27, 0xdb, 0x37, 0xd9, 0x46, 0x33, 0x13, 0x9c, 0x8a, 0x29, 0x0a, 0xa1, 0xe5, 0x06, 0x47, 0x52, + 0xd1, 0x8a, 0x42, 0x00, 0xfd, 0xde, 0x0d, 0x1e, 0x62, 0x6c, 0x49, 0xa5, 0x11, 0x56, 0x04, 0xa4, + 0xcf, 0x5e, 0x10, 0x5a, 0xc2, 0x0d, 0x7d, 0x47, 0x04, 0xf2, 0x11, 0xd9, 0xcc, 0x28, 0xc4, 0x65, + 0x88, 0xcb, 0x5e, 0x09, 0xd3, 0x8b, 0x7a, 0x6c, 0x36, 0x35, 0x56, 0x2d, 0x3e, 0x2b, 0x21, 0x3e, + 0x43, 0x7c, 0xa6, 0x26, 0xa8, 0xaa, 0x4c, 0x94, 0x1e, 0x33, 0xa5, 0x29, 0xb8, 0x64, 0x01, 0xd6, + 0x11, 0x64, 0x7d, 0x81, 0xe6, 0xc0, 0x48, 0x05, 0x34, 0x6b, 0x26, 0x85, 0x9a, 0x1a, 0xcd, 0x9a, + 0x3b, 0x8e, 0x1d, 0x30, 0xb4, 0x6b, 0x8e, 0xa6, 0x41, 0x22, 0x19, 0x5d, 0x6d, 0xb8, 0xd4, 0x87, + 0x5d, 0x8d, 0xd8, 0xd5, 0x89, 0x55, 0xad, 0x68, 0xea, 0xa5, 0xc1, 0xe8, 0x14, 0xb8, 0xdb, 0x18, + 0xf9, 0x8e, 0xfb, 0xc4, 0x90, 0x3f, 0x56, 0x7a, 0x9b, 0xea, 0x0a, 0x90, 0xf8, 0x02, 0x56, 0xfe, + 0x80, 0x95, 0x4f, 0x58, 0xc9, 0x2f, 0xac, 0x3d, 0xc0, 0xe6, 0x13, 0x4a, 0x0a, 0xc5, 0x38, 0x04, + 0xd2, 0x71, 0x4c, 0xa9, 0x69, 0xc5, 0x93, 0x99, 0x60, 0xc8, 0x61, 0xc8, 0x61, 0xc8, 0xf3, 0x65, + 0xc8, 0xd3, 0xe9, 0x7f, 0xd9, 0xfb, 0x5a, 0xb1, 0xec, 0x56, 0xcb, 0x17, 0x01, 0x03, 0x6a, 0x9c, + 0x99, 0x0d, 0x36, 0x07, 0x36, 0x07, 0x36, 0x27, 0x6d, 0xfd, 0x29, 0x10, 0x4f, 0x9d, 0xe7, 0xf5, + 0x80, 0x78, 0xc6, 0x36, 0x37, 0xd1, 0x7f, 0xf7, 0xf7, 0xbf, 0x1c, 0x5b, 0x67, 0x8d, 0x1f, 0x5f, + 0x4a, 0xd6, 0x59, 0x63, 0xf4, 0x63, 0x29, 0xfa, 0x63, 0xf4, 0x73, 0xf9, 0xcb, 0xb1, 0x55, 0x19, + 0xff, 0x5c, 0xfd, 0x72, 0x6c, 0x55, 0x1b, 0x07, 0xf7, 0xf7, 0x6f, 0x0e, 0xbe, 0x9f, 0x0c, 0xd4, + 0x07, 0xfe, 0xa3, 0x98, 0x76, 0x3a, 0x35, 0xf0, 0x76, 0xde, 0xf1, 0xb6, 0xd3, 0xfb, 0x5a, 0x63, + 0xf5, 0x81, 0x35, 0xf8, 0x40, 0xf8, 0x40, 0xf8, 0xc0, 0x8d, 0xe9, 0x4f, 0x66, 0x7d, 0xa0, 0x6d, + 0xb5, 0xeb, 0xd6, 0x2f, 0x8d, 0xef, 0xa5, 0xc3, 0xca, 0xe0, 0xdd, 0xc1, 0xf7, 0xd3, 0xc1, 0xeb, + 0x5f, 0xfe, 0x58, 0xf4, 0xb1, 0xd2, 0xe1, 0xe9, 0xe0, 0xdd, 0x92, 0x7f, 0xa9, 0x0d, 0xde, 0x49, + 0xce, 0x51, 0x1d, 0xec, 0xcf, 0x7d, 0x74, 0xf8, 0xfb, 0xf2, 0xb2, 0x01, 0x95, 0x25, 0x03, 0x4e, + 0x96, 0x0d, 0x38, 0x59, 0x32, 0x60, 0xe9, 0x57, 0x2a, 0x2f, 0x19, 0x50, 0x1d, 0xfc, 0x98, 0xfb, + 0xfc, 0xfe, 0xe2, 0x8f, 0xd6, 0x06, 0x07, 0x3f, 0x96, 0xfd, 0xdb, 0xe9, 0xe0, 0xc7, 0xbb, 0x03, + 0x20, 0x82, 0x5d, 0x47, 0x04, 0x5b, 0x51, 0xbd, 0xd6, 0x72, 0x83, 0xa3, 0xe9, 0x9c, 0x8d, 0xc9, + 0x5f, 0x5e, 0x8e, 0x48, 0x67, 0x98, 0x05, 0xb5, 0xfc, 0x95, 0x7f, 0x79, 0x41, 0x78, 0x31, 0x7a, + 0x74, 0xf2, 0xf3, 0x8b, 0x54, 0x56, 0x0b, 0x7d, 0x3f, 0x54, 0x2e, 0xec, 0x25, 0x73, 0xa6, 0xba, + 0x5c, 0x29, 0x11, 0xab, 0xe1, 0x2c, 0x18, 0x67, 0xc1, 0xc6, 0xb1, 0x55, 0xb2, 0xdf, 0x1d, 0x61, + 0xb7, 0x7d, 0xd1, 0xa6, 0x6c, 0xf8, 0x18, 0x46, 0x9d, 0x12, 0xc6, 0x7e, 0x8a, 0xcd, 0xda, 0x9b, + 0x37, 0xb1, 0x8d, 0x3a, 0x4a, 0x94, 0x2c, 0x03, 0x26, 0x63, 0x54, 0x81, 0x4a, 0xb6, 0x17, 0xaa, + 0x05, 0xac, 0x05, 0x8e, 0xc4, 0x91, 0x32, 0x8c, 0x05, 0x8c, 0xc5, 0xca, 0x6f, 0x88, 0xc4, 0x11, + 0xf0, 0x1e, 0xe0, 0x3d, 0x72, 0xc8, 0x7b, 0x20, 0x71, 0x04, 0x61, 0xab, 0x26, 0x91, 0x8d, 0xc4, + 0x11, 0x18, 0x72, 0x18, 0x72, 0x24, 0x8e, 0xa4, 0x61, 0x6b, 0x90, 0x38, 0x02, 0x9b, 0x03, 0x9b, + 0x93, 0x15, 0x9b, 0x83, 0xc4, 0x11, 0x24, 0x8e, 0x00, 0x6f, 0x6f, 0xc0, 0x07, 0x22, 0x71, 0x04, + 0x3e, 0x10, 0x3e, 0x10, 0x89, 0x23, 0x86, 0x7d, 0x20, 0x12, 0x47, 0x90, 0x38, 0x02, 0x44, 0x80, + 0xc4, 0x91, 0xc9, 0x78, 0x8e, 0xc4, 0x11, 0xca, 0x11, 0x66, 0x81, 0x23, 0x6f, 0x44, 0xa1, 0x39, + 0xaf, 0xfa, 0x6e, 0xf0, 0x76, 0x24, 0x88, 0x9b, 0xf7, 0x2a, 0x12, 0xa2, 0xb9, 0x6e, 0xbf, 0x24, + 0xad, 0x63, 0x59, 0x69, 0x2a, 0xbd, 0x42, 0xc6, 0xf9, 0x3b, 0x4c, 0x2f, 0x95, 0xea, 0xe2, 0xd6, + 0x37, 0x46, 0x52, 0x68, 0x1a, 0x44, 0x5f, 0x50, 0x13, 0x3d, 0x92, 0x02, 0xe1, 0x7f, 0x15, 0xbe, + 0x42, 0x7b, 0xa4, 0xf1, 0x00, 0x74, 0x46, 0x42, 0x67, 0xa4, 0x69, 0x11, 0xa2, 0x74, 0xac, 0x8d, + 0xc6, 0xa1, 0x23, 0x52, 0x8a, 0xf1, 0xf6, 0x4e, 0x77, 0x44, 0xa2, 0xf2, 0x51, 0x93, 0x0c, 0x1e, + 0x52, 0x08, 0x8d, 0x3c, 0xd8, 0x8d, 0x50, 0x4a, 0xc8, 0x83, 0x55, 0xd9, 0xef, 0xcc, 0xe4, 0xc1, + 0x8e, 0x75, 0x2c, 0x03, 0x69, 0xb0, 0xe8, 0xa0, 0x06, 0x6b, 0xb1, 0x8d, 0xd6, 0x82, 0x9e, 0x08, + 0xcb, 0x75, 0xa0, 0x83, 0xb3, 0x1c, 0x9c, 0xe5, 0x6c, 0x48, 0xb5, 0xe8, 0xac, 0x67, 0x21, 0x23, + 0x67, 0x39, 0x9c, 0x27, 0x39, 0x67, 0x1a, 0x73, 0xc4, 0xef, 0xb4, 0xf1, 0x9b, 0x33, 0x99, 0x33, + 0x3d, 0xe6, 0xd6, 0xe8, 0x2d, 0xc3, 0x5c, 0x5c, 0xa7, 0x5e, 0xc9, 0x84, 0x79, 0xc9, 0x00, 0x19, + 0xff, 0xd7, 0xd0, 0xbb, 0x09, 0xf2, 0x30, 0x43, 0x42, 0x56, 0xdb, 0x35, 0x21, 0xc3, 0x11, 0x6b, + 0xae, 0x8e, 0x58, 0x99, 0x54, 0x6e, 0x2b, 0xaf, 0x94, 0xef, 0x79, 0x7e, 0xa8, 0x0f, 0x5f, 0xa3, + 0x59, 0x88, 0x48, 0xe0, 0xbd, 0x68, 0xdb, 0xfd, 0x4e, 0x04, 0x61, 0xaa, 0x27, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0xea, 0xca, 0x67, 0xb9, 0xfd, 0xee, 0xa3, 0xf2, 0x95, 0x36, 0x8b, 0x54, 0xa8, + 0x86, 0xbb, 0xe3, 0x59, 0x6d, 0xcb, 0xdc, 0x74, 0xb8, 0x3b, 0x3e, 0x33, 0x5b, 0x50, 0xab, 0x56, + 0x4f, 0x70, 0x59, 0xfc, 0xe6, 0xf0, 0xca, 0xd6, 0x64, 0x4d, 0xc5, 0x39, 0x00, 0xf1, 0x9f, 0xa9, + 0x74, 0xd9, 0xb9, 0x1d, 0x3d, 0x32, 0xfe, 0x33, 0x43, 0xed, 0x75, 0xd0, 0x2b, 0xc3, 0x30, 0xcc, + 0xc3, 0x11, 0xc1, 0x06, 0xac, 0x09, 0x8e, 0x08, 0x10, 0x21, 0x21, 0x42, 0xc2, 0x11, 0x01, 0x8e, + 0x08, 0x72, 0xcf, 0xde, 0xe2, 0x88, 0x20, 0x7d, 0x21, 0xc3, 0x11, 0x01, 0x8e, 0x08, 0x70, 0x44, + 0x90, 0x81, 0x90, 0x1b, 0x47, 0x04, 0x00, 0xc0, 0x00, 0xc0, 0xbb, 0x06, 0x80, 0x71, 0x44, 0x30, + 0xcf, 0x4f, 0xe3, 0x88, 0x60, 0x83, 0xe8, 0xb2, 0x80, 0x23, 0x02, 0x1c, 0x11, 0x6c, 0x9c, 0xd4, + 0xdb, 0xe0, 0x11, 0x41, 0x0a, 0xf5, 0xd4, 0xaf, 0x4e, 0x08, 0xf2, 0x57, 0x48, 0xad, 0x16, 0x32, + 0xe6, 0xba, 0x8e, 0x9a, 0x78, 0x58, 0xd2, 0x0f, 0x94, 0x1d, 0xba, 0x0e, 0xf2, 0x9b, 0x46, 0x7b, + 0xde, 0xe8, 0xdb, 0x5b, 0x8f, 0x2f, 0x14, 0x29, 0xe6, 0x40, 0x79, 0x33, 0xc8, 0x2e, 0x5a, 0x89, + 0x5c, 0x08, 0x77, 0x1a, 0x15, 0xee, 0xb3, 0xc6, 0xc6, 0x4c, 0x61, 0xfb, 0xac, 0x79, 0xd9, 0xfe, + 0x8a, 0x76, 0xb9, 0x3a, 0x6f, 0xda, 0x22, 0x1a, 0x29, 0x64, 0x97, 0x3a, 0x87, 0x55, 0x3a, 0x77, + 0x55, 0x2e, 0x62, 0x2f, 0xa3, 0x88, 0x9d, 0x3d, 0x36, 0x4d, 0xad, 0x88, 0xdd, 0xf6, 0x9b, 0xcf, + 0x94, 0x22, 0xf6, 0x68, 0x9c, 0x5a, 0x11, 0xfb, 0x31, 0x8a, 0xd8, 0x51, 0xc4, 0x4e, 0x24, 0x3d, + 0x92, 0xfd, 0x6a, 0x79, 0x5d, 0xdb, 0x71, 0x2d, 0xc5, 0x5e, 0xe4, 0x94, 0xd3, 0x84, 0xe2, 0x07, + 0xe1, 0x3e, 0x45, 0x3e, 0x43, 0x8d, 0xc6, 0x20, 0x20, 0x2e, 0x1d, 0x9a, 0x42, 0x97, 0xf2, 0x1c, + 0xc7, 0xc0, 0x25, 0xe2, 0x78, 0x86, 0x78, 0x97, 0xc2, 0x57, 0xeb, 0xd0, 0x0a, 0x5c, 0x4b, 0x56, + 0xae, 0x9e, 0x6c, 0x70, 0xd1, 0x0c, 0xe1, 0xe0, 0x86, 0x82, 0x86, 0x50, 0xcf, 0xd5, 0x8a, 0xfb, + 0xfb, 0xfb, 0x5f, 0x6c, 0xeb, 0xef, 0xba, 0xf5, 0x9f, 0x63, 0xeb, 0xec, 0xa1, 0x31, 0xf5, 0x97, + 0xfb, 0x7b, 0xeb, 0xa1, 0x71, 0xf0, 0xfd, 0xf8, 0xb0, 0x56, 0x1a, 0x1c, 0xfc, 0x34, 0xf9, 0x7d, + 0xe3, 0xfe, 0xfe, 0xcd, 0xc1, 0x3f, 0x29, 0xa3, 0x7e, 0x3a, 0xf8, 0x71, 0x7f, 0xff, 0x46, 0xde, + 0xd2, 0x35, 0x58, 0x2d, 0x1d, 0xe2, 0x55, 0xc4, 0xab, 0x9b, 0x8c, 0x57, 0xf3, 0x1c, 0x8b, 0x49, + 0xb2, 0x67, 0x2a, 0x91, 0xd8, 0x7a, 0x7a, 0x6c, 0x45, 0x1c, 0xb6, 0xa7, 0xb0, 0x42, 0xb2, 0x2b, + 0xa3, 0xb2, 0x22, 0xc5, 0x95, 0x81, 0xa0, 0xe4, 0x1a, 0x2c, 0x7e, 0xfb, 0xf9, 0x77, 0x5b, 0xf0, + 0x5e, 0xc5, 0x27, 0xbf, 0xd7, 0xb4, 0xd6, 0x34, 0xbe, 0x4a, 0xcc, 0xc0, 0xf4, 0x87, 0x97, 0xac, + 0xd1, 0xea, 0x48, 0x73, 0x6d, 0x20, 0x20, 0x03, 0xfc, 0x5f, 0x01, 0x7d, 0xab, 0xfb, 0xd4, 0x5d, + 0x75, 0x42, 0x2d, 0x6b, 0x88, 0x94, 0xd1, 0xbc, 0xb2, 0x71, 0x59, 0x80, 0xd6, 0x47, 0x5f, 0x9e, + 0x49, 0x3e, 0xd7, 0xc5, 0x88, 0xb2, 0x7d, 0x60, 0xd4, 0xfa, 0xbe, 0x64, 0xa8, 0x43, 0xde, 0x3a, + 0x51, 0xc8, 0x35, 0xc3, 0xb0, 0x46, 0x54, 0x52, 0xa6, 0x19, 0x9a, 0xc2, 0x0f, 0x9d, 0xb6, 0xd3, + 0xb4, 0x43, 0x61, 0x39, 0x2d, 0x75, 0xba, 0xe1, 0xd5, 0xf8, 0xad, 0xa1, 0x1d, 0x64, 0x45, 0x70, + 0x2b, 0xb9, 0x07, 0x49, 0x11, 0xcd, 0x1a, 0x01, 0xa1, 0x7c, 0x9b, 0x93, 0xe2, 0xed, 0x4d, 0x12, + 0x88, 0x4d, 0xc2, 0x66, 0x09, 0xd7, 0x7e, 0xec, 0x08, 0x75, 0x4d, 0x8b, 0xc7, 0xc9, 0xf6, 0x22, + 0x9c, 0xa4, 0x6c, 0x0d, 0x45, 0x02, 0x8a, 0x09, 0xc5, 0xdc, 0x9c, 0x62, 0x3e, 0x7a, 0x5e, 0x47, + 0xd8, 0x2e, 0x45, 0x33, 0x4b, 0x29, 0x6a, 0x66, 0xc7, 0x09, 0x42, 0xe1, 0x8e, 0x33, 0xa5, 0x45, + 0xa0, 0xae, 0xa3, 0x73, 0x33, 0x40, 0xed, 0xa0, 0x76, 0x1b, 0x53, 0xbb, 0xbe, 0x3b, 0x0c, 0x71, + 0x09, 0x4a, 0xa7, 0x50, 0x61, 0x43, 0xab, 0xa8, 0xd1, 0x28, 0xdb, 0xd4, 0xaa, 0x25, 0xd2, 0xa9, + 0x21, 0xd2, 0xab, 0x1d, 0xc2, 0xc5, 0x71, 0x8b, 0x27, 0xc2, 0xc5, 0x71, 0xc6, 0x84, 0x05, 0x37, + 0x2c, 0xa1, 0xb6, 0x27, 0xc7, 0x37, 0x2c, 0xed, 0x99, 0x7d, 0x8e, 0xa2, 0x6a, 0x6a, 0x78, 0x2c, + 0xe1, 0xf6, 0xbb, 0xc2, 0x1f, 0xf1, 0xcd, 0x1a, 0x2e, 0xab, 0x42, 0x18, 0x7b, 0xe1, 0xf6, 0xbb, + 0x43, 0xec, 0x60, 0xec, 0x44, 0x12, 0x07, 0x72, 0xca, 0x17, 0xf1, 0xb0, 0x84, 0x2a, 0x5d, 0x11, + 0xda, 0x2d, 0x3b, 0xb4, 0x2d, 0xbb, 0x1f, 0x3e, 0x0b, 0x37, 0x74, 0x9a, 0x6a, 0x19, 0x8d, 0x89, + 0x70, 0x2e, 0x9b, 0x48, 0x9d, 0x66, 0x68, 0xdb, 0x9d, 0x00, 0x3c, 0x03, 0x02, 0x1e, 0xf0, 0x0c, + 0xeb, 0x9e, 0xa9, 0x54, 0xd0, 0x49, 0x29, 0xe0, 0x9c, 0x56, 0xcb, 0xb3, 0x93, 0x93, 0x33, 0x68, + 0x25, 0xb4, 0x72, 0x73, 0x5a, 0x49, 0x2b, 0x7e, 0x24, 0x14, 0x3b, 0x12, 0x8b, 0x1b, 0x73, 0x9a, + 0x15, 0x78, 0x8c, 0xac, 0x40, 0xd5, 0x25, 0xd3, 0x28, 0x26, 0xcc, 0x74, 0x5e, 0x60, 0x8a, 0xbe, + 0x2b, 0xf4, 0x6d, 0x37, 0x88, 0x34, 0x3a, 0x10, 0xcd, 0xbe, 0xef, 0x84, 0x2f, 0xea, 0x9e, 0x6c, + 0xc1, 0x1c, 0x38, 0xd5, 0x82, 0x5f, 0x03, 0xda, 0x54, 0xd7, 0xd8, 0x4c, 0x66, 0x08, 0x4e, 0xa5, + 0x97, 0xc9, 0xb7, 0xe2, 0x94, 0x4c, 0x93, 0xfb, 0xd5, 0xef, 0x35, 0x15, 0x5a, 0x6e, 0xa2, 0x74, + 0x0b, 0xd9, 0x55, 0xfc, 0x8a, 0x83, 0xec, 0x2a, 0xb8, 0xbb, 0x9d, 0x73, 0x77, 0xc8, 0xae, 0x02, + 0x0e, 0x85, 0x62, 0x02, 0x87, 0x52, 0x35, 0x13, 0xd9, 0x55, 0x50, 0x3b, 0x64, 0x57, 0x21, 0xbb, + 0x8a, 0xf3, 0x4d, 0xe9, 0x6f, 0xbc, 0xe0, 0xcd, 0x91, 0x5d, 0x85, 0xec, 0x2a, 0x79, 0x61, 0x41, + 0x76, 0x15, 0xb2, 0xab, 0x90, 0x5d, 0xc5, 0xa4, 0x9a, 0xc8, 0xae, 0xa2, 0x2f, 0x39, 0xb2, 0xab, + 0xd8, 0x43, 0x15, 0x64, 0x57, 0x21, 0xe0, 0x41, 0xc0, 0x93, 0x53, 0x9e, 0x01, 0xd9, 0x55, 0xd0, + 0xca, 0x1d, 0xd2, 0x4a, 0x64, 0x57, 0xe9, 0x68, 0xd9, 0xdc, 0x70, 0x64, 0x57, 0x91, 0x97, 0x0c, + 0xd9, 0x55, 0xda, 0xbe, 0x0b, 0xd9, 0x55, 0xf0, 0x6b, 0xf0, 0x6b, 0xc8, 0xae, 0x92, 0xcd, 0xae, + 0x62, 0xee, 0xc3, 0x36, 0x95, 0x5c, 0x95, 0xe3, 0x76, 0x6c, 0xeb, 0xbb, 0x9b, 0x91, 0x96, 0x44, + 0xa7, 0x3b, 0x5b, 0xc7, 0x69, 0x0a, 0x37, 0x10, 0xeb, 0x3b, 0xb3, 0x8d, 0x3f, 0x98, 0x8d, 0xae, + 0x6c, 0xab, 0xbf, 0x4d, 0x21, 0xd3, 0x4d, 0xd9, 0xc6, 0xdf, 0x3d, 0xad, 0x9e, 0x6c, 0xf1, 0xf3, + 0x02, 0xf9, 0xb4, 0xc1, 0x64, 0x44, 0x3e, 0xfa, 0xb2, 0xad, 0x17, 0x06, 0xaa, 0xfb, 0xdc, 0x7c, + 0xe2, 0xe0, 0x5a, 0x61, 0xe1, 0x71, 0x09, 0xd2, 0x79, 0x83, 0xeb, 0xec, 0x05, 0xd1, 0x7e, 0x10, + 0x45, 0x6b, 0x63, 0xd0, 0x4d, 0xed, 0x6d, 0xb6, 0x0b, 0xb9, 0x49, 0x8b, 0xa4, 0x19, 0xe0, 0xa6, + 0x7a, 0xdf, 0xba, 0x6c, 0x4f, 0xca, 0xa5, 0xdb, 0x2d, 0x9d, 0x28, 0xae, 0x21, 0xc0, 0x64, 0x41, + 0xd6, 0x11, 0x68, 0x1e, 0xc1, 0xd6, 0x15, 0x70, 0x36, 0x41, 0x67, 0x13, 0x78, 0x36, 0xc1, 0x27, + 0x12, 0x00, 0x8a, 0x3b, 0xaf, 0xaa, 0x10, 0xc9, 0x40, 0xbb, 0x19, 0x3a, 0x5f, 0x85, 0xfe, 0x05, + 0xae, 0xf1, 0x3c, 0xfa, 0x57, 0xb8, 0xaa, 0x1c, 0x25, 0x71, 0x73, 0x45, 0x59, 0xbb, 0xc5, 0x95, + 0xae, 0x88, 0x5c, 0x0a, 0xc9, 0xae, 0x98, 0xec, 0x0a, 0xca, 0xae, 0xa8, 0x34, 0x85, 0xd5, 0xa0, + 0x47, 0x0b, 0xbc, 0xb7, 0xb9, 0xaa, 0x53, 0x13, 0x9a, 0x54, 0x85, 0xfe, 0xc2, 0x51, 0x38, 0xe5, + 0x78, 0x7f, 0xad, 0x96, 0x1d, 0xda, 0xfa, 0xe6, 0x6b, 0x66, 0x36, 0x18, 0x1f, 0x18, 0x1f, 0x18, + 0x1f, 0x9a, 0xf1, 0x71, 0x5c, 0xdb, 0x7f, 0x61, 0xb0, 0x3d, 0x67, 0x39, 0x30, 0x3d, 0x0a, 0x35, + 0x73, 0x6b, 0x0d, 0x8f, 0x74, 0xfd, 0x1c, 0xcc, 0x0e, 0xcc, 0x0e, 0xcc, 0xce, 0x2b, 0xb9, 0x51, + 0xae, 0xfe, 0x5b, 0x0a, 0x79, 0xde, 0xe2, 0xea, 0x6a, 0x85, 0xc3, 0x8c, 0x58, 0xe0, 0xc6, 0x7f, + 0x06, 0xc9, 0x2f, 0x48, 0x7c, 0x49, 0x41, 0xfe, 0xe0, 0xe3, 0xc3, 0xe8, 0x39, 0xe3, 0x3f, 0x83, + 0xe4, 0x17, 0x32, 0x65, 0xf7, 0xf4, 0xbd, 0x50, 0xd8, 0x07, 0x1d, 0x2f, 0xa1, 0xef, 0x1d, 0x88, + 0x5e, 0x01, 0xd4, 0x13, 0xa8, 0x27, 0x55, 0x5b, 0x43, 0xb6, 0xe2, 0x13, 0x29, 0x17, 0x76, 0xdb, + 0x17, 0x6d, 0x9d, 0x04, 0xf9, 0x53, 0xc2, 0xd8, 0x4f, 0xb1, 0x79, 0x7b, 0xf3, 0x26, 0x36, 0x57, + 0x47, 0x53, 0xea, 0x96, 0x01, 0x03, 0x22, 0xd7, 0xe7, 0x63, 0x85, 0x4f, 0x94, 0x3b, 0x7d, 0x5f, + 0xb8, 0x9e, 0x54, 0xb3, 0x51, 0x86, 0xd9, 0x80, 0xd9, 0x90, 0xfa, 0x96, 0x60, 0xac, 0x11, 0xbd, + 0x21, 0x7a, 0x43, 0xf4, 0xb6, 0x3b, 0x8c, 0x75, 0x4b, 0x04, 0x4d, 0xdf, 0xe9, 0x91, 0xa3, 0xb2, + 0x99, 0x35, 0x9b, 0x9e, 0x0c, 0xa6, 0x07, 0xa6, 0x07, 0xa6, 0x67, 0x57, 0x88, 0x23, 0x82, 0xe5, + 0x11, 0xdf, 0x7a, 0xce, 0xa8, 0x08, 0xd9, 0x6a, 0x51, 0x62, 0x8a, 0xb9, 0x65, 0x7b, 0x3d, 0x21, + 0x2c, 0x10, 0x2c, 0x10, 0x2c, 0x10, 0x49, 0x6e, 0xfa, 0x8e, 0x1b, 0xd6, 0x2a, 0x0c, 0x16, 0x48, + 0xa7, 0x4b, 0x07, 0xad, 0x78, 0xee, 0xf5, 0x7f, 0x7a, 0x32, 0x5b, 0xd0, 0x2d, 0xae, 0x63, 0x36, + 0x2f, 0x73, 0xd3, 0x69, 0x16, 0xdf, 0xcd, 0xcd, 0xc7, 0x50, 0x55, 0xc6, 0x24, 0xce, 0xb3, 0x5b, + 0x60, 0x7f, 0xcb, 0xfc, 0x16, 0x94, 0xde, 0x56, 0x2a, 0xb5, 0xd3, 0x4a, 0xe5, 0xf8, 0xf4, 0xe4, + 0xf4, 0xf8, 0xac, 0x5a, 0x2d, 0xd5, 0x4a, 0xd5, 0x0c, 0xef, 0xca, 0xde, 0x66, 0x46, 0x37, 0xb2, + 0x0e, 0x49, 0x44, 0x8b, 0x09, 0x8a, 0x08, 0x9c, 0x9e, 0x03, 0x82, 0x00, 0x82, 0x80, 0x7f, 0x59, + 0xf5, 0x1d, 0x1d, 0xd7, 0xea, 0x07, 0x0c, 0xc1, 0x4f, 0x3c, 0x0f, 0x0c, 0x0e, 0x0c, 0x0e, 0x0c, + 0x0e, 0x0c, 0xce, 0x0a, 0x83, 0x13, 0x04, 0x7d, 0xc1, 0xc4, 0xb8, 0x4c, 0xcd, 0x05, 0xc3, 0x03, + 0xc3, 0x03, 0xc3, 0x03, 0xb2, 0x05, 0x64, 0x0b, 0xc8, 0x16, 0x90, 0x2d, 0x20, 0x5b, 0xd6, 0x2f, + 0x33, 0x6a, 0xa5, 0x00, 0x46, 0x00, 0x46, 0x32, 0x17, 0x05, 0xa1, 0x56, 0x8a, 0x66, 0x78, 0x50, + 0x2b, 0x05, 0xb3, 0x03, 0xb3, 0x43, 0x95, 0x9b, 0xdd, 0x48, 0x79, 0xf9, 0x6a, 0x77, 0x38, 0x4c, + 0xce, 0x68, 0x1a, 0x58, 0x1b, 0x58, 0x1b, 0x58, 0x1b, 0x1a, 0xc8, 0xc9, 0x21, 0xd5, 0xbb, 0xdd, + 0xa5, 0x99, 0x94, 0xba, 0xa0, 0x02, 0x43, 0x65, 0xa6, 0x44, 0xcf, 0x4e, 0xfa, 0x4e, 0xf0, 0xb6, + 0x17, 0xfb, 0x4d, 0xbc, 0x90, 0xf0, 0xe6, 0x8e, 0xdc, 0x62, 0x22, 0xdb, 0xc5, 0x90, 0x26, 0xe9, + 0xda, 0x12, 0x5e, 0x54, 0xaa, 0xb1, 0xd3, 0x91, 0xe9, 0xe2, 0x56, 0xb7, 0xf2, 0x7d, 0xbd, 0xbe, + 0x7c, 0x9d, 0x7c, 0x5f, 0xaf, 0x67, 0x3e, 0x3b, 0xf9, 0x4a, 0xf4, 0x9f, 0x55, 0x5a, 0x0e, 0xad, + 0x16, 0xbe, 0xde, 0xd3, 0xd3, 0x10, 0xd5, 0xaf, 0x6f, 0xe1, 0x1b, 0x7f, 0x30, 0x23, 0x2d, 0x7c, + 0xbd, 0xa7, 0x7c, 0xb6, 0xef, 0xf5, 0x9e, 0x52, 0x6b, 0xdd, 0xdb, 0xf4, 0xdc, 0xc0, 0xeb, 0x28, + 0x5c, 0xf8, 0x3f, 0x1e, 0x90, 0x93, 0xc6, 0xbd, 0xde, 0xd3, 0x76, 0x36, 0xed, 0xf5, 0x9e, 0xb2, + 0x73, 0xd1, 0xbf, 0x5a, 0xf7, 0x53, 0x5a, 0xd7, 0xd3, 0xcc, 0xb7, 0xeb, 0xf5, 0x9e, 0x76, 0xb3, + 0x55, 0xaf, 0xf7, 0xb4, 0xa9, 0x36, 0xbd, 0xc6, 0x11, 0xe0, 0xc8, 0x99, 0x1d, 0xc5, 0x16, 0x4f, + 0xbd, 0xeb, 0x8c, 0xac, 0x83, 0x1e, 0x3d, 0xe7, 0xe1, 0x7c, 0xf4, 0x1c, 0xa5, 0x26, 0x33, 0x3c, + 0x57, 0xaf, 0x04, 0xa2, 0x23, 0x9a, 0xa1, 0xe7, 0x13, 0xee, 0x25, 0x9f, 0x0c, 0x85, 0x1e, 0x43, + 0x8f, 0x49, 0x7a, 0xac, 0xdc, 0x6e, 0x7b, 0x2c, 0x73, 0x1a, 0xdd, 0x4b, 0xc6, 0x33, 0xec, 0x48, + 0xcb, 0x6d, 0xef, 0x09, 0xcd, 0x4b, 0x74, 0x85, 0x3e, 0x1d, 0x02, 0x8f, 0xdc, 0xb8, 0x84, 0xd8, + 0x83, 0x5e, 0x0f, 0x95, 0x31, 0x29, 0x48, 0x76, 0x0f, 0x25, 0xbc, 0x27, 0x1c, 0x48, 0xa4, 0xa5, + 0x58, 0x9b, 0x39, 0x8c, 0xa0, 0x2a, 0x5c, 0x32, 0x41, 0xdb, 0x6e, 0x3a, 0x1d, 0x95, 0xdb, 0xea, + 0xd6, 0x0a, 0x5e, 0x32, 0xa3, 0xe6, 0xa6, 0xf0, 0x64, 0xec, 0x69, 0x2b, 0x25, 0xa7, 0x72, 0xf2, + 0x2b, 0x29, 0xb7, 0xb2, 0x1a, 0x53, 0x5a, 0x63, 0xca, 0x6b, 0x44, 0x89, 0xf5, 0x94, 0x59, 0x53, + 0xa9, 0x93, 0x37, 0xd2, 0x3e, 0x69, 0x9c, 0x93, 0x37, 0xa7, 0x25, 0xdc, 0xd0, 0x09, 0x5f, 0x68, + 0x1d, 0x05, 0x97, 0xfa, 0x4b, 0x86, 0x94, 0xd7, 0xe2, 0x65, 0xfc, 0xd5, 0x7e, 0xb6, 0x03, 0x46, + 0x31, 0x1e, 0xbf, 0xf8, 0xed, 0x1f, 0xb7, 0x1f, 0xae, 0x7f, 0x7d, 0xf8, 0xa5, 0x7e, 0x7e, 0xf9, + 0xe1, 0xf2, 0xee, 0x8f, 0x22, 0x67, 0x1a, 0x70, 0xa0, 0x9d, 0xaf, 0x3e, 0xfd, 0xdf, 0x77, 0xb6, + 0x99, 0x66, 0x16, 0xe0, 0xb7, 0x8b, 0x9b, 0xab, 0x8b, 0x0f, 0x45, 0xb6, 0xc9, 0x07, 0x87, 0x59, + 0x7f, 0xe3, 0x0f, 0xd7, 0xe7, 0xf5, 0x0f, 0x95, 0x9d, 0x7b, 0xe3, 0xea, 0x2e, 0xbd, 0xf1, 0xd5, + 0xdd, 0xa7, 0x9d, 0xdb, 0xe0, 0xd3, 0x5d, 0x7a, 0xe3, 0xfa, 0xe7, 0xbb, 0x7f, 0x7d, 0xba, 0xb9, + 0xfc, 0x7d, 0xa7, 0xde, 0xf9, 0xc3, 0x4e, 0xd9, 0xe9, 0x8f, 0xf5, 0xcb, 0xdd, 0xf3, 0x4b, 0x27, + 0x3b, 0xf7, 0xc6, 0xb5, 0x5d, 0x33, 0x5b, 0xbb, 0xf4, 0xbe, 0x23, 0x78, 0xbd, 0x73, 0x32, 0x5d, + 0xda, 0xa5, 0x37, 0x3e, 0xbf, 0xbe, 0xba, 0xbd, 0xfe, 0x70, 0xb1, 0x4b, 0xaf, 0xfc, 0xf9, 0xf6, + 0xe2, 0x66, 0xe7, 0x84, 0xfa, 0x78, 0xc7, 0x0c, 0xd7, 0xdd, 0xc5, 0xc7, 0x87, 0xf7, 0xf5, 0x8b, + 0x8f, 0xd7, 0x57, 0x3b, 0xb7, 0xd5, 0xe5, 0xdd, 0xf2, 0xc9, 0xef, 0x2f, 0xef, 0x18, 0x5f, 0x98, + 0x65, 0xa6, 0x46, 0x6e, 0x6b, 0xba, 0x35, 0x36, 0xbc, 0x18, 0x88, 0xaf, 0xc2, 0x67, 0x3d, 0x74, + 0x48, 0x66, 0xc4, 0xa1, 0xc3, 0xda, 0xb5, 0xc2, 0xa1, 0x03, 0x0e, 0x1d, 0x96, 0xbf, 0x11, 0xff, + 0xa1, 0x43, 0xf0, 0x12, 0x74, 0xbc, 0x27, 0x8b, 0x49, 0x45, 0xa7, 0xd5, 0xb4, 0x54, 0x61, 0x98, + 0xeb, 0xc2, 0xed, 0x77, 0x87, 0x2f, 0xbc, 0x31, 0x43, 0x9a, 0xea, 0x81, 0xb1, 0x66, 0x89, 0xd5, + 0xc4, 0x84, 0x13, 0xd3, 0x10, 0x93, 0x8c, 0xbb, 0xe4, 0xa7, 0x23, 0xad, 0x9c, 0x8d, 0x02, 0x3d, + 0x53, 0xf1, 0x76, 0xfc, 0x55, 0x92, 0x9f, 0x48, 0x37, 0xe4, 0xd1, 0xf7, 0x91, 0x52, 0xbb, 0xab, + 0x7d, 0x5e, 0xcf, 0x75, 0x4e, 0xbf, 0x75, 0x15, 0xbc, 0x48, 0x96, 0x49, 0xdf, 0xe5, 0xe5, 0xb5, + 0x72, 0x97, 0x7e, 0x2b, 0xdf, 0x9c, 0x0b, 0x3b, 0xd5, 0x98, 0x63, 0xfe, 0x96, 0xbe, 0x44, 0xa9, + 0x33, 0x6c, 0xc2, 0xb4, 0xd1, 0x3f, 0x17, 0xea, 0x87, 0x09, 0x83, 0x09, 0x83, 0x09, 0xcb, 0x9a, + 0x09, 0x4b, 0x94, 0x3a, 0xcb, 0x26, 0x2c, 0x64, 0x69, 0x5c, 0x4b, 0x6d, 0x37, 0x50, 0xe0, 0x4c, + 0x56, 0x2e, 0xc3, 0x78, 0xc1, 0x78, 0xa5, 0x62, 0xbc, 0x90, 0xac, 0x0c, 0xde, 0x10, 0xbc, 0x21, + 0x78, 0x43, 0x49, 0x79, 0x43, 0xb2, 0x32, 0x92, 0x95, 0x79, 0xfe, 0x43, 0xb2, 0x72, 0x46, 0xdf, + 0x18, 0xc9, 0xca, 0x5b, 0xbe, 0xc1, 0x48, 0x56, 0xde, 0xf6, 0x77, 0x46, 0xb2, 0xf2, 0xd6, 0x2b, + 0x31, 0x92, 0x95, 0xb7, 0xde, 0x6c, 0x21, 0x59, 0x79, 0xeb, 0x65, 0x1a, 0xc9, 0xca, 0xdb, 0xfd, + 0xca, 0x48, 0x56, 0xde, 0x01, 0xc3, 0x85, 0x64, 0xe5, 0x5d, 0xf1, 0xc9, 0x48, 0x56, 0x66, 0x1c, + 0x8d, 0x64, 0xe5, 0x15, 0xd3, 0xe0, 0xd0, 0x81, 0xb6, 0xfa, 0x38, 0x74, 0x40, 0xb2, 0xb2, 0x82, + 0x9a, 0x22, 0x59, 0x59, 0x5d, 0x60, 0xb3, 0x97, 0xac, 0xac, 0x93, 0xb2, 0x51, 0x60, 0xcd, 0x55, + 0x26, 0xdc, 0x19, 0x41, 0xdf, 0x45, 0xb3, 0x6d, 0x03, 0xe3, 0x3b, 0x25, 0xc6, 0x87, 0xf1, 0x05, + 0xa2, 0xf6, 0xd1, 0xae, 0x98, 0x48, 0x46, 0xeb, 0x5c, 0x35, 0x31, 0x99, 0x44, 0xe3, 0xca, 0x89, + 0x64, 0x12, 0xd2, 0xd5, 0x13, 0xd4, 0xc5, 0x4f, 0xed, 0xd2, 0x95, 0xb5, 0xca, 0x65, 0xf0, 0xe2, + 0x95, 0xb5, 0xea, 0x94, 0x8f, 0xcb, 0x57, 0xd2, 0x6e, 0x1a, 0xad, 0xda, 0x1f, 0x99, 0x63, 0x4b, + 0x52, 0x6d, 0x1d, 0xad, 0x94, 0xc7, 0x47, 0xca, 0xdb, 0x23, 0xb7, 0x8c, 0x2e, 0xa3, 0x65, 0x34, + 0x27, 0x2a, 0xde, 0xe1, 0xd6, 0xef, 0xaa, 0x98, 0x85, 0xaa, 0xc1, 0xf2, 0x80, 0x24, 0xb7, 0xd7, + 0xfe, 0xcc, 0xae, 0x2c, 0xe3, 0xad, 0x3f, 0xb3, 0x6b, 0x49, 0xbe, 0xf4, 0x67, 0xc5, 0x85, 0x31, + 0xbe, 0xe8, 0x7a, 0xa1, 0xb0, 0x02, 0xe1, 0x7f, 0x15, 0x12, 0xbd, 0xf2, 0x13, 0x1b, 0xf1, 0x6a, + 0x1c, 0x6e, 0x4e, 0xc1, 0xcd, 0x29, 0x0b, 0x04, 0x4a, 0xdd, 0x89, 0xce, 0x0e, 0xc7, 0xfd, 0x0b, + 0x70, 0xa6, 0x24, 0x67, 0xaa, 0x7c, 0xff, 0x02, 0xb1, 0xd5, 0xbc, 0x5e, 0x8b, 0x79, 0xdc, 0xbd, + 0xb0, 0x11, 0x6e, 0x15, 0x77, 0x2f, 0x48, 0x0c, 0x7c, 0xf6, 0x82, 0x50, 0xbf, 0x96, 0x29, 0x9a, + 0x05, 0x75, 0x98, 0x28, 0x65, 0x4a, 0x59, 0xa9, 0x36, 0xc3, 0x4c, 0xf3, 0xd5, 0x61, 0x6a, 0xe8, + 0xcd, 0x8c, 0x63, 0x39, 0xd3, 0x98, 0x23, 0x7e, 0x1b, 0xbd, 0xba, 0x00, 0xce, 0xca, 0x8f, 0x9e, + 0x65, 0xb7, 0x5a, 0xbe, 0x08, 0x02, 0xce, 0xf3, 0x97, 0x33, 0x86, 0xb9, 0x58, 0x56, 0x8a, 0x6f, + 0xc5, 0x16, 0xac, 0xdc, 0xd7, 0x0a, 0xe3, 0xda, 0xcd, 0xad, 0xe1, 0x5b, 0xc6, 0x39, 0x3f, 0xd9, + 0x61, 0x28, 0x7c, 0x97, 0xb5, 0x20, 0x25, 0x9a, 0xf8, 0xbf, 0xfb, 0xfb, 0x5f, 0x8e, 0xad, 0xb3, + 0xc6, 0x8f, 0x2f, 0x25, 0xeb, 0xac, 0x31, 0xfa, 0xb1, 0x14, 0xfd, 0x31, 0xfa, 0xb9, 0xfc, 0xe5, + 0xd8, 0xaa, 0x8c, 0x7f, 0xae, 0x7e, 0x39, 0xb6, 0xaa, 0x8d, 0x83, 0xfb, 0xfb, 0x37, 0x07, 0xdf, + 0x4f, 0x06, 0xea, 0x03, 0xff, 0xc1, 0x97, 0xa5, 0xd1, 0x60, 0x99, 0x89, 0x29, 0xb9, 0xc5, 0x8c, + 0x70, 0xd6, 0x20, 0x9c, 0x23, 0xe1, 0xb4, 0xad, 0x76, 0xdd, 0xfa, 0xa5, 0xf1, 0xbd, 0x74, 0x58, + 0x19, 0xbc, 0x3b, 0xf8, 0x7e, 0x3a, 0x78, 0xfd, 0xcb, 0x1f, 0x8b, 0x3e, 0x56, 0x3a, 0x3c, 0x1d, + 0xbc, 0x5b, 0xf2, 0x2f, 0xb5, 0xc1, 0x3b, 0xc9, 0x39, 0xaa, 0x83, 0xfd, 0xb9, 0x8f, 0x0e, 0x7f, + 0x5f, 0x5e, 0x36, 0xa0, 0xb2, 0x64, 0xc0, 0xc9, 0xb2, 0x01, 0x27, 0x4b, 0x06, 0x2c, 0xfd, 0x4a, + 0xe5, 0x25, 0x03, 0xaa, 0x83, 0x1f, 0x73, 0x9f, 0xdf, 0x5f, 0xfc, 0xd1, 0xda, 0xe0, 0xe0, 0xc7, + 0xb2, 0x7f, 0x3b, 0x1d, 0xfc, 0x78, 0x77, 0x90, 0x41, 0x55, 0xdd, 0xdb, 0xec, 0xf7, 0xd0, 0x34, + 0x15, 0x8c, 0x1e, 0xbf, 0xe5, 0x75, 0x6d, 0xc7, 0xb5, 0x22, 0x9a, 0x94, 0xd1, 0xe5, 0x33, 0x58, + 0x84, 0xe2, 0x07, 0xe1, 0x3e, 0x45, 0xbc, 0x70, 0xe6, 0x9c, 0xfe, 0x47, 0xc7, 0x65, 0x4b, 0x67, + 0x62, 0x8a, 0xc5, 0x96, 0x4e, 0x1b, 0x15, 0x9f, 0xd2, 0xdb, 0x55, 0x2c, 0x9d, 0xf7, 0x17, 0xdf, + 0x6e, 0x86, 0x8e, 0xe7, 0xbe, 0x77, 0x9e, 0x9c, 0xe8, 0xc8, 0xfd, 0x38, 0x8b, 0x59, 0xa2, 0xc5, + 0x8f, 0xf6, 0xb7, 0xdc, 0x6d, 0x55, 0xb9, 0x7a, 0x92, 0xa3, 0xcd, 0xca, 0x8a, 0x41, 0x66, 0xb0, + 0x38, 0xdc, 0xd8, 0xa3, 0xb8, 0xbf, 0xbf, 0xff, 0xc5, 0xb6, 0xfe, 0xae, 0x5b, 0xff, 0x39, 0xb6, + 0xce, 0x1e, 0x1a, 0x53, 0x7f, 0xb9, 0xbf, 0xb7, 0x1e, 0x1a, 0x07, 0xdf, 0x8f, 0x0f, 0x6b, 0xa5, + 0xc1, 0xc1, 0x4f, 0x93, 0xdf, 0x37, 0x86, 0x78, 0xf8, 0x9f, 0x94, 0x51, 0x3f, 0x1d, 0xfc, 0xb8, + 0xbf, 0x7f, 0x53, 0xdc, 0xb4, 0x67, 0xdb, 0x4b, 0xf7, 0xb9, 0xe9, 0xb4, 0x1d, 0x8a, 0x8f, 0x4c, + 0x7a, 0x9e, 0xcf, 0x40, 0xd8, 0x4d, 0x4f, 0x46, 0x6d, 0xe8, 0x22, 0xda, 0x76, 0xbf, 0x13, 0xd1, + 0x37, 0xd5, 0x52, 0x05, 0xec, 0x1f, 0xd8, 0x3f, 0xb0, 0x7f, 0x6a, 0xf2, 0x32, 0xd4, 0x3e, 0xcb, + 0xed, 0x77, 0x1f, 0x85, 0xcf, 0x40, 0x02, 0xd6, 0x34, 0xa6, 0xb8, 0xb1, 0xdd, 0xa7, 0x4c, 0x90, + 0x80, 0x9c, 0xa8, 0x96, 0x19, 0x22, 0x25, 0xd0, 0x88, 0x6b, 0x3e, 0x03, 0x80, 0x88, 0x01, 0xb5, + 0xb2, 0xa2, 0x55, 0x53, 0x5b, 0x50, 0xab, 0x56, 0x4f, 0xaa, 0x19, 0xde, 0x06, 0xc0, 0x97, 0xb9, + 0x65, 0x0e, 0x22, 0xd7, 0x96, 0x30, 0x80, 0xfa, 0xed, 0x13, 0x67, 0xe7, 0x03, 0xfc, 0x00, 0xfc, + 0x00, 0xfc, 0x50, 0x92, 0x17, 0x96, 0x83, 0xb6, 0x2d, 0x3d, 0x82, 0x64, 0x3d, 0x48, 0x63, 0x65, + 0x24, 0xd9, 0xf9, 0x81, 0xbc, 0x1d, 0x98, 0x6d, 0x0b, 0xeb, 0xcd, 0x7c, 0x20, 0x96, 0x0b, 0x21, + 0xc3, 0xc1, 0x57, 0x2e, 0x0f, 0xbe, 0xb6, 0x9e, 0x8e, 0xdb, 0xaa, 0x1a, 0xbb, 0xd9, 0x9c, 0xfd, + 0xd9, 0xbf, 0xd2, 0xef, 0xdb, 0x51, 0xac, 0x65, 0xb8, 0x89, 0x9e, 0x7a, 0x3b, 0xfa, 0x0e, 0x33, + 0x7f, 0x23, 0xdd, 0xb3, 0xa3, 0x50, 0x73, 0xa7, 0x90, 0x82, 0x4d, 0x4a, 0x7e, 0xd4, 0x49, 0xde, + 0x22, 0xc6, 0x1b, 0xc8, 0x04, 0x46, 0x26, 0xb0, 0xf1, 0xf8, 0x80, 0xe1, 0x72, 0x08, 0x9d, 0x4b, + 0x21, 0x16, 0x5c, 0x06, 0x11, 0x29, 0x58, 0x06, 0xcc, 0xc4, 0xa4, 0x10, 0x96, 0x6c, 0x2b, 0x28, + 0xb5, 0xb4, 0x05, 0x94, 0x0e, 0xc0, 0x60, 0x14, 0xb2, 0x5b, 0x3a, 0x90, 0x54, 0xee, 0x33, 0x5c, + 0xe5, 0x44, 0xee, 0x01, 0x50, 0xe0, 0xbc, 0x0d, 0x05, 0x2c, 0x1e, 0x58, 0xbc, 0x74, 0x58, 0x3c, + 0xed, 0xdb, 0x50, 0x88, 0x85, 0x6c, 0x4b, 0xc5, 0x4e, 0xfb, 0x1e, 0x4e, 0x06, 0x45, 0x64, 0x53, + 0x48, 0x4e, 0xc5, 0xe4, 0x57, 0x50, 0x6e, 0x45, 0x35, 0xa6, 0xb0, 0xc6, 0x14, 0xd7, 0x88, 0x02, + 0xeb, 0xd3, 0x0d, 0x0c, 0xfc, 0xa0, 0xb6, 0x62, 0x27, 0x13, 0xb1, 0x5d, 0x77, 0x34, 0x27, 0xc0, + 0x4c, 0xd7, 0x1e, 0x69, 0xc6, 0xb4, 0xc6, 0x95, 0xdf, 0x84, 0x11, 0x30, 0x67, 0x0c, 0x4c, 0x19, + 0x05, 0xe3, 0xc6, 0xc1, 0xb8, 0x91, 0x30, 0x6a, 0x2c, 0x78, 0x8c, 0x06, 0x93, 0xf1, 0xd0, 0x8f, + 0xe1, 0xd7, 0xca, 0x2b, 0xef, 0xb5, 0x4a, 0x73, 0x7e, 0xbf, 0xca, 0x38, 0xa7, 0x91, 0x6b, 0x96, + 0xe6, 0x16, 0xc4, 0xcc, 0x75, 0x4b, 0xc9, 0x63, 0x0c, 0x5c, 0xbb, 0x34, 0xfe, 0xef, 0x3b, 0xfb, + 0x8c, 0x05, 0x93, 0xd7, 0x30, 0x31, 0xeb, 0x48, 0x8a, 0x2b, 0xc1, 0x7d, 0x3d, 0x53, 0xce, 0x57, + 0xa2, 0x8a, 0x95, 0x60, 0xbe, 0xce, 0x29, 0xe7, 0x02, 0x71, 0x8a, 0x95, 0x30, 0x71, 0xfd, 0x53, + 0x8e, 0xd7, 0xe2, 0x03, 0xfc, 0x06, 0xfb, 0x75, 0x51, 0x39, 0x37, 0x12, 0x27, 0x58, 0x09, 0xfe, + 0xeb, 0xa5, 0xf2, 0x6d, 0x2e, 0xb1, 0x0e, 0xfc, 0xd7, 0x51, 0xe5, 0x5c, 0x37, 0x4a, 0x58, 0x09, + 0x03, 0xd7, 0x57, 0xe5, 0x77, 0x29, 0x78, 0xaf, 0xb5, 0xca, 0xb9, 0x72, 0x1c, 0x63, 0x25, 0x8c, + 0x5d, 0x83, 0x95, 0x73, 0xd1, 0x28, 0x63, 0x25, 0xd8, 0xaf, 0xcd, 0x4a, 0x16, 0x82, 0x75, 0xc6, + 0xc6, 0xd6, 0x35, 0x3d, 0xe0, 0xa8, 0x39, 0x64, 0xbb, 0x66, 0x6b, 0x4e, 0x28, 0x18, 0xef, 0xf2, + 0x29, 0xe0, 0xb0, 0x0b, 0x87, 0x5d, 0xf1, 0x03, 0x70, 0xd8, 0x95, 0x83, 0xc3, 0x2e, 0xfe, 0xeb, + 0xbc, 0x5e, 0x9b, 0x01, 0x8e, 0x6b, 0xbd, 0x92, 0x39, 0x79, 0xae, 0xf7, 0x62, 0x34, 0xec, 0x1b, + 0x4d, 0xa4, 0x60, 0xba, 0xfe, 0x6b, 0xe2, 0x62, 0x38, 0xab, 0x28, 0x16, 0xdc, 0x0d, 0xc6, 0x92, + 0x40, 0x55, 0x60, 0x2d, 0xb4, 0x58, 0x70, 0x6f, 0x18, 0xa5, 0xf6, 0x82, 0x4f, 0x2e, 0x74, 0x6e, + 0xe2, 0x64, 0xcb, 0x87, 0xe1, 0xce, 0x83, 0xc1, 0x4d, 0x9c, 0x9b, 0x74, 0xf9, 0x48, 0x7a, 0xcb, + 0x80, 0xad, 0xe6, 0xbf, 0x89, 0x93, 0x5e, 0x83, 0xb2, 0xd4, 0x55, 0x9f, 0xf2, 0xd4, 0xc5, 0xbe, + 0xaa, 0x51, 0x49, 0x8c, 0x08, 0x2e, 0x37, 0xc6, 0xe5, 0xc6, 0x30, 0xa9, 0x30, 0xa9, 0x30, 0xa9, + 0xba, 0x26, 0x35, 0x31, 0x22, 0x79, 0x34, 0xa9, 0x4a, 0x77, 0x4a, 0xae, 0xb7, 0xa7, 0x9a, 0x17, + 0x0e, 0x17, 0x4c, 0x14, 0x65, 0x94, 0x61, 0x4c, 0x61, 0x4c, 0x73, 0x65, 0x4c, 0x51, 0x94, 0xa1, + 0x3b, 0x1d, 0x78, 0x6a, 0xf0, 0xd4, 0xa9, 0x19, 0x0b, 0x3e, 0x0a, 0xb3, 0x80, 0xa2, 0x0c, 0x14, + 0x65, 0xcc, 0x3d, 0x06, 0x45, 0x19, 0x86, 0x74, 0x24, 0xc5, 0x95, 0x40, 0x51, 0x06, 0x8a, 0x32, + 0x5e, 0xaf, 0x04, 0x8a, 0x32, 0x50, 0x94, 0x51, 0x40, 0x51, 0xc6, 0x92, 0xb5, 0x40, 0x51, 0x06, + 0x8a, 0x32, 0x50, 0x94, 0xb1, 0x64, 0x25, 0x50, 0x94, 0x81, 0xa2, 0x0c, 0x14, 0x65, 0x2c, 0xd6, + 0x0d, 0x14, 0x65, 0xa0, 0x28, 0x03, 0x45, 0x19, 0x4b, 0x94, 0x03, 0x45, 0x19, 0x28, 0xca, 0x58, + 0x22, 0x1a, 0x28, 0xca, 0x40, 0x51, 0xc6, 0xa6, 0x66, 0x41, 0x51, 0x86, 0xc6, 0x74, 0x38, 0xec, + 0xc2, 0x61, 0xd7, 0xc2, 0x07, 0xe0, 0xb0, 0x8b, 0x41, 0xf7, 0x51, 0x94, 0xb1, 0xb9, 0x19, 0x76, + 0xad, 0x28, 0x83, 0x23, 0x7f, 0xaa, 0x60, 0xba, 0x26, 0xe3, 0x36, 0xfa, 0x92, 0x9b, 0x4a, 0x76, + 0x4b, 0xb5, 0xed, 0xf1, 0x6f, 0xe2, 0x65, 0x3a, 0xd9, 0xa5, 0xa0, 0x69, 0x05, 0x8a, 0x1f, 0x9c, + 0x20, 0xac, 0x87, 0xa1, 0x66, 0x2f, 0xe5, 0x8f, 0x8e, 0x7b, 0xd1, 0x11, 0x43, 0xc3, 0x1e, 0x14, + 0xdf, 0x15, 0xdc, 0x7e, 0xa7, 0xa3, 0x91, 0x01, 0xf8, 0xd1, 0xfe, 0xc6, 0x37, 0xd9, 0xb5, 0xdf, + 0x12, 0xbe, 0x68, 0xfd, 0xfc, 0x12, 0x4f, 0x95, 0xea, 0x66, 0x31, 0x29, 0xbb, 0x69, 0x25, 0x2f, + 0x6a, 0xa5, 0x6b, 0x1a, 0x53, 0xeb, 0x22, 0xee, 0x2e, 0x32, 0xb6, 0xf7, 0x1b, 0xbd, 0xbe, 0x28, + 0xd9, 0xea, 0x4c, 0x5c, 0x4d, 0x42, 0xca, 0x37, 0xd6, 0xca, 0x2f, 0xd6, 0xbe, 0x92, 0xa4, 0x8c, + 0x2b, 0x49, 0x36, 0x19, 0xdd, 0x6c, 0xf3, 0x95, 0x24, 0xa4, 0x0b, 0xbd, 0xe6, 0x84, 0x85, 0x70, + 0xb1, 0x17, 0x13, 0x15, 0x81, 0xab, 0x48, 0xd2, 0xa1, 0x0e, 0x70, 0x15, 0x09, 0x63, 0xa8, 0xcf, + 0xa1, 0x37, 0x85, 0xed, 0xbd, 0x4a, 0xd8, 0xc4, 0x1d, 0xaf, 0x67, 0x0c, 0x73, 0xb1, 0xac, 0x14, + 0xdf, 0x8a, 0x2d, 0x58, 0x39, 0xd6, 0x4b, 0x98, 0xe7, 0xd6, 0xf0, 0x2d, 0xe3, 0x9c, 0xdc, 0xf7, + 0xe5, 0x26, 0x13, 0xe7, 0xed, 0x72, 0xe6, 0xf1, 0x7f, 0x8d, 0x2c, 0xb1, 0x99, 0x66, 0x84, 0xb3, + 0x06, 0xe1, 0xc4, 0xa5, 0xce, 0x39, 0xbe, 0xd4, 0x99, 0x59, 0x55, 0x71, 0xaf, 0x7b, 0x6c, 0x1a, + 0x5a, 0x5e, 0xd7, 0x76, 0x5c, 0x2b, 0x62, 0x1a, 0x32, 0x76, 0xad, 0xfb, 0x07, 0xe1, 0x3e, 0x45, + 0x4c, 0x4c, 0xe6, 0x9c, 0xfe, 0x47, 0xc7, 0x35, 0x70, 0xe0, 0xc8, 0x7a, 0x2c, 0x9c, 0x4c, 0x1b, + 0x95, 0x0f, 0xe9, 0x17, 0x54, 0xcf, 0xcd, 0xfb, 0x8b, 0x6f, 0x37, 0x43, 0xc7, 0x73, 0xdf, 0x3b, + 0x4f, 0x4e, 0x44, 0x1e, 0x1f, 0xf3, 0x1d, 0x2e, 0x32, 0xba, 0x93, 0x8f, 0xf6, 0xb7, 0xdc, 0x6d, + 0x55, 0xb9, 0x7a, 0x92, 0xa3, 0xcd, 0xca, 0x8a, 0x41, 0xe6, 0xe9, 0xee, 0xc0, 0x8a, 0x3d, 0x8a, + 0xfb, 0xfb, 0xfb, 0x5f, 0x6c, 0xeb, 0xef, 0xba, 0xf5, 0x9f, 0x63, 0xeb, 0xec, 0xa1, 0x31, 0xf5, + 0x97, 0xfb, 0x7b, 0xeb, 0xa1, 0x71, 0xf0, 0xfd, 0xf8, 0xb0, 0x56, 0x1a, 0x1c, 0xfc, 0x34, 0xf9, + 0x7d, 0x63, 0x88, 0x87, 0xff, 0x49, 0x19, 0xf5, 0xd3, 0xc1, 0x8f, 0xfb, 0xfb, 0x37, 0xc5, 0x4d, + 0x7b, 0xb6, 0xbd, 0x74, 0x9f, 0x4b, 0x38, 0x82, 0x20, 0xd0, 0xaa, 0x31, 0xb3, 0xdf, 0xf3, 0x7c, + 0x06, 0xc2, 0x6e, 0x7a, 0x32, 0xea, 0x85, 0xac, 0xa2, 0x6d, 0xf7, 0x3b, 0x11, 0x7d, 0x53, 0x2d, + 0x55, 0xc0, 0xfe, 0x81, 0xfd, 0x03, 0xfb, 0xa7, 0x26, 0x2f, 0x43, 0xed, 0xb3, 0xdc, 0x7e, 0xf7, + 0x51, 0xf8, 0x0c, 0x24, 0x60, 0x4d, 0x63, 0x8a, 0x1b, 0xdb, 0x7d, 0xca, 0x04, 0x09, 0xc8, 0x89, + 0x6a, 0xb9, 0x93, 0x1c, 0xc7, 0xd0, 0x88, 0x6b, 0x3e, 0x03, 0x80, 0x88, 0x23, 0x89, 0x95, 0x13, + 0xad, 0x9a, 0xda, 0x82, 0x5a, 0xb5, 0x7a, 0x52, 0xcd, 0xf0, 0x36, 0x00, 0xbe, 0xcc, 0x2d, 0x73, + 0x10, 0xb9, 0xb6, 0x84, 0x01, 0xd4, 0x46, 0x30, 0xaf, 0xe6, 0x03, 0xfc, 0x00, 0xfc, 0x00, 0xfc, + 0x50, 0x92, 0x17, 0x96, 0x83, 0xb6, 0x2d, 0x3d, 0x82, 0x64, 0x3d, 0x48, 0x63, 0x65, 0x24, 0xd9, + 0xf9, 0x81, 0xbc, 0x1d, 0x98, 0x6d, 0x0b, 0xeb, 0xcd, 0x7c, 0x20, 0x96, 0x0b, 0x21, 0xc3, 0xc1, + 0x57, 0x2e, 0x0f, 0xbe, 0xb6, 0x9e, 0x8e, 0xdb, 0xa1, 0x8c, 0x60, 0x62, 0x7d, 0x07, 0x63, 0x36, + 0xb0, 0x7a, 0xf1, 0x86, 0x42, 0x26, 0xf0, 0x1e, 0xe3, 0x0e, 0x8e, 0x8b, 0x2f, 0x14, 0xb2, 0xb4, + 0x68, 0xf5, 0x15, 0x5a, 0xf5, 0x14, 0x5a, 0xf5, 0x13, 0xb4, 0x7a, 0x09, 0xd9, 0xf5, 0x23, 0x4a, + 0x3e, 0xab, 0xc4, 0x17, 0x95, 0x72, 0xc3, 0x79, 0x64, 0x5c, 0x4e, 0xba, 0xd7, 0xcb, 0xea, 0xea, + 0x4f, 0xac, 0xd9, 0x05, 0xd5, 0xd5, 0xd7, 0x5c, 0x75, 0x89, 0x75, 0xd6, 0x59, 0xdf, 0xd5, 0x4b, + 0xba, 0x7c, 0xa1, 0x16, 0xff, 0xcb, 0x92, 0xa5, 0x93, 0x5d, 0x32, 0xd5, 0xa5, 0x5a, 0xb1, 0x36, + 0x6a, 0x6b, 0xb2, 0x78, 0x15, 0xe6, 0xdf, 0x71, 0xc1, 0xfb, 0x15, 0xbb, 0xa2, 0xeb, 0xf9, 0xcb, + 0x4b, 0xd3, 0x13, 0x5c, 0x1a, 0x7f, 0x6e, 0xc9, 0x0a, 0xad, 0x2e, 0x65, 0x58, 0x4b, 0x88, 0xc8, + 0x10, 0x1e, 0xd3, 0x84, 0x46, 0xf0, 0xb2, 0x4a, 0xb0, 0x64, 0x09, 0x0b, 0x65, 0x42, 0x42, 0x99, + 0x70, 0x78, 0x4d, 0x28, 0x0c, 0xbf, 0x37, 0x93, 0x4c, 0xae, 0x4b, 0xed, 0x2f, 0x36, 0xc7, 0x6b, + 0xbe, 0x66, 0x11, 0xc6, 0xcb, 0x2a, 0x75, 0xef, 0x96, 0x64, 0xcd, 0x8a, 0x34, 0x03, 0xa6, 0xc2, + 0x74, 0xc9, 0x0b, 0x00, 0x95, 0xb9, 0x22, 0x33, 0x54, 0x64, 0x26, 0x4a, 0x49, 0x40, 0xb2, 0x6d, + 0xff, 0x47, 0x06, 0x42, 0xfe, 0xfa, 0x36, 0x49, 0x13, 0xf7, 0x31, 0x9a, 0x56, 0xea, 0xbe, 0xb5, + 0x15, 0xe6, 0x7e, 0xa5, 0xa5, 0x95, 0xa9, 0xfc, 0x52, 0xaa, 0xf4, 0x52, 0xd6, 0x92, 0x32, 0xb4, + 0x24, 0x63, 0x5a, 0x22, 0x5b, 0x39, 0x55, 0xec, 0x3d, 0xbf, 0x04, 0x4e, 0xd3, 0xee, 0xc8, 0x2f, + 0x5f, 0x72, 0xce, 0x3b, 0x1e, 0x29, 0x1b, 0x76, 0x28, 0x1d, 0x4a, 0x28, 0x1f, 0x42, 0x50, 0x0e, + 0x1d, 0xd4, 0x85, 0x4d, 0xf7, 0x50, 0x41, 0xfb, 0x10, 0x41, 0xfb, 0xd0, 0x80, 0x24, 0x8c, 0x66, + 0x02, 0x51, 0x65, 0xd2, 0x3f, 0xd9, 0xaf, 0xbe, 0xe3, 0x86, 0x35, 0x95, 0xec, 0x9c, 0xb1, 0xf4, + 0x29, 0xd0, 0x88, 0xc4, 0xf4, 0x01, 0x02, 0x15, 0xa2, 0x93, 0x1e, 0xa0, 0x7b, 0xd6, 0xa7, 0x79, + 0xfc, 0xcf, 0x71, 0xce, 0x4c, 0x39, 0x77, 0xd5, 0x39, 0xce, 0xe7, 0x5a, 0xb2, 0xd2, 0xdb, 0x4a, + 0xa5, 0x76, 0x5a, 0xa9, 0x1c, 0x9f, 0x9e, 0x9c, 0x1e, 0x9f, 0x55, 0xab, 0xa5, 0x1a, 0xf5, 0x8a, + 0x05, 0x96, 0x55, 0x34, 0xc4, 0x3d, 0x35, 0xb8, 0xa2, 0x7e, 0x09, 0x4f, 0xee, 0x8b, 0x28, 0xec, + 0x6e, 0xa9, 0x3b, 0xa3, 0x64, 0x24, 0x9c, 0x11, 0x9c, 0x11, 0x9c, 0x11, 0x9c, 0x11, 0x9c, 0x11, + 0x9c, 0x51, 0x4e, 0x29, 0x08, 0xd9, 0xc3, 0x2c, 0x35, 0x06, 0x42, 0xe2, 0x80, 0x2a, 0xab, 0x7c, + 0xf3, 0x4a, 0xee, 0x56, 0x79, 0x25, 0xf4, 0xd8, 0xe6, 0x20, 0xb0, 0x9f, 0x44, 0x20, 0xc3, 0x37, + 0xc7, 0x9f, 0xcc, 0x06, 0xe3, 0xbc, 0xe6, 0xeb, 0x64, 0x9b, 0x76, 0x4e, 0xbe, 0x3c, 0xb8, 0x67, + 0x06, 0x56, 0x4d, 0x42, 0x14, 0xf2, 0x4b, 0xad, 0xad, 0x17, 0x95, 0x94, 0xf9, 0x35, 0xe5, 0xe6, + 0xc9, 0xd4, 0xe6, 0xc8, 0x59, 0x0f, 0x69, 0x14, 0xc4, 0x6e, 0xfb, 0xe2, 0x1a, 0x79, 0xb1, 0xcc, + 0x5a, 0x70, 0x43, 0x6f, 0xd3, 0x4b, 0x69, 0xc3, 0xab, 0xd8, 0x66, 0x37, 0xbf, 0x40, 0x6f, 0x24, + 0x0e, 0x06, 0x4e, 0x9b, 0x46, 0x13, 0x1b, 0x3c, 0x6f, 0x6a, 0x89, 0xc7, 0xfe, 0x93, 0x25, 0xdc, + 0xd0, 0x77, 0x44, 0x20, 0xef, 0x22, 0x67, 0x87, 0xc1, 0x53, 0xc2, 0x53, 0x2e, 0x16, 0xac, 0x40, + 0xf8, 0x5f, 0x1d, 0x95, 0x85, 0x9c, 0x15, 0xb0, 0xf1, 0x70, 0x35, 0x9f, 0x59, 0x82, 0xcf, 0x84, + 0xcf, 0xa4, 0x0a, 0xae, 0x6a, 0xd4, 0xa0, 0x17, 0x45, 0x68, 0x8a, 0x30, 0x59, 0x94, 0x75, 0x44, + 0x9a, 0x49, 0xb4, 0x75, 0x45, 0x9c, 0x4d, 0xd4, 0xd9, 0x44, 0x9e, 0x4f, 0xf4, 0x89, 0xc4, 0x5b, + 0x5a, 0xfd, 0x58, 0x85, 0x6b, 0x3f, 0x76, 0x14, 0xce, 0x75, 0x96, 0x4a, 0xce, 0x78, 0x22, 0xfd, + 0xee, 0x0e, 0x6d, 0xbb, 0x13, 0x08, 0x14, 0x58, 0xea, 0x2a, 0x23, 0x97, 0x52, 0xb2, 0x2b, 0x27, + 0xbb, 0x92, 0xf2, 0x2b, 0x2b, 0x4d, 0x69, 0x35, 0x4e, 0x2a, 0x0a, 0xbc, 0xa5, 0x96, 0x8f, 0x9e, + 0xd7, 0x11, 0xb6, 0xcb, 0x51, 0x67, 0x59, 0xca, 0x72, 0x8d, 0xb7, 0x22, 0x24, 0x5d, 0xc1, 0xe8, + 0xa8, 0x80, 0x53, 0x18, 0x1d, 0x18, 0x1d, 0x18, 0x9d, 0x39, 0xc9, 0x71, 0x5a, 0xc2, 0x0d, 0x9d, + 0xf0, 0xc5, 0x17, 0x6d, 0x0e, 0xc3, 0xa3, 0xd1, 0x6f, 0xa3, 0x78, 0x19, 0x7f, 0x95, 0x9f, 0xed, + 0x80, 0x41, 0x06, 0xc7, 0x2f, 0xf8, 0xfe, 0xe2, 0xe7, 0xcf, 0xbf, 0x3e, 0xdc, 0x5e, 0xdc, 0xfc, + 0x7e, 0x79, 0x7e, 0x91, 0xfa, 0xfe, 0xee, 0x68, 0x95, 0x61, 0xc2, 0xc8, 0xcd, 0xf0, 0x54, 0x47, + 0x33, 0xa4, 0xc2, 0x11, 0x29, 0x40, 0xa3, 0xb0, 0x77, 0xef, 0x87, 0x8f, 0xbd, 0x18, 0x7d, 0x87, + 0xd1, 0x5f, 0x6e, 0x47, 0x5f, 0x41, 0x8a, 0xd7, 0xa3, 0xef, 0x90, 0xd2, 0x8d, 0x23, 0x44, 0xaf, + 0xa8, 0xe9, 0x0d, 0x89, 0x5e, 0x10, 0xf1, 0x2e, 0xe2, 0x5d, 0x75, 0xeb, 0x43, 0xf6, 0x5a, 0xc9, + 0xce, 0x77, 0x84, 0xdd, 0xa6, 0x79, 0xaa, 0xc4, 0x43, 0x9d, 0x12, 0xc6, 0x7e, 0x8a, 0x0d, 0xde, + 0x9b, 0x37, 0xb1, 0xd1, 0x3a, 0x1a, 0x6b, 0x1b, 0xee, 0x2a, 0x22, 0x59, 0x8d, 0x32, 0xac, 0x06, + 0xac, 0x06, 0x58, 0x32, 0x04, 0xac, 0x08, 0x58, 0x11, 0xb0, 0x82, 0x25, 0x03, 0x4b, 0x06, 0xa3, + 0x03, 0xa3, 0x03, 0x96, 0x0c, 0x2c, 0x19, 0x58, 0xb2, 0xd7, 0x2c, 0x99, 0xe1, 0x5e, 0x5c, 0x12, + 0x24, 0x59, 0xfe, 0x7a, 0x71, 0x29, 0xa6, 0x2d, 0xa1, 0x1d, 0x97, 0xbe, 0xf0, 0xb3, 0x0a, 0x3d, + 0x7f, 0x3b, 0xae, 0xf5, 0x62, 0x5e, 0xdc, 0x8d, 0x14, 0x59, 0x95, 0xc4, 0x51, 0xdd, 0xf5, 0x45, + 0x7f, 0x16, 0xe4, 0xc7, 0x66, 0x36, 0x3f, 0x36, 0xfe, 0x42, 0xea, 0x99, 0xb1, 0xe3, 0x81, 0x86, + 0x73, 0x62, 0xcb, 0xc8, 0x89, 0x65, 0x0f, 0x70, 0x72, 0x9f, 0x13, 0x6b, 0xf7, 0x7a, 0x56, 0x6c, + 0x8a, 0x89, 0x74, 0x7f, 0x32, 0x03, 0xce, 0x09, 0x0d, 0xc7, 0xf9, 0x60, 0xfc, 0xa9, 0xf1, 0x97, + 0xfe, 0x39, 0x61, 0x10, 0xfa, 0xab, 0x3b, 0x6a, 0xae, 0x35, 0xd7, 0x6f, 0x33, 0x70, 0xb2, 0xd7, + 0x0d, 0x34, 0xd2, 0xdf, 0x87, 0x83, 0xa1, 0xe3, 0xd0, 0x71, 0xe8, 0x78, 0xd6, 0x75, 0xdc, 0x69, + 0x69, 0x69, 0xb9, 0xd3, 0x82, 0x9e, 0x43, 0xcf, 0xa1, 0xe7, 0xd9, 0xd6, 0xf3, 0x9e, 0xef, 0x78, + 0x4a, 0x8d, 0x0b, 0xe6, 0xd6, 0x21, 0x99, 0x01, 0xda, 0x0e, 0x6d, 0xdf, 0x5a, 0x6d, 0xef, 0x3b, + 0x6e, 0xf8, 0x56, 0x43, 0xd9, 0x09, 0x47, 0x6b, 0x9a, 0x17, 0x9b, 0x6a, 0x1c, 0x2f, 0x72, 0x5c, + 0x64, 0xca, 0x74, 0x7b, 0x26, 0xd7, 0xc5, 0xa5, 0x9c, 0x37, 0x65, 0x6a, 0x5c, 0xc3, 0xc5, 0x72, + 0x41, 0x29, 0xf7, 0xd2, 0x96, 0xab, 0xd5, 0x0c, 0x2d, 0x6e, 0x4a, 0x47, 0xb5, 0x8d, 0x4c, 0x38, + 0x5f, 0xaf, 0xa9, 0x83, 0xb2, 0xe3, 0xf1, 0x70, 0xbc, 0x70, 0xbc, 0x80, 0xd9, 0xe9, 0xc3, 0x6c, + 0x56, 0xce, 0xfd, 0xe2, 0x5b, 0x64, 0x38, 0xe5, 0x7d, 0x3d, 0xfd, 0x90, 0xc3, 0x6b, 0x5a, 0xe2, + 0x5b, 0xf8, 0x2e, 0x14, 0x1d, 0xd1, 0x15, 0xa1, 0xff, 0x62, 0xd9, 0xa1, 0xd7, 0x75, 0x9a, 0x7a, + 0xa7, 0x1e, 0x51, 0x0a, 0xb1, 0xc6, 0xb1, 0x07, 0xf7, 0x59, 0x47, 0x23, 0x6b, 0x79, 0x05, 0xd1, + 0x91, 0xef, 0x91, 0xda, 0x29, 0x5d, 0x81, 0x70, 0xd2, 0x1d, 0xa5, 0xc5, 0x8c, 0xff, 0x5a, 0x4c, + 0xb1, 0xad, 0x37, 0x7a, 0xe0, 0xe1, 0xec, 0x12, 0x3d, 0xf0, 0xa4, 0xc7, 0xec, 0x58, 0x0f, 0x3c, + 0xf6, 0x76, 0xc7, 0xd3, 0xe6, 0x2e, 0xaf, 0x0d, 0x8f, 0xd7, 0x77, 0xeb, 0x55, 0x5b, 0x0d, 0x9d, + 0xa6, 0xc7, 0x6e, 0xd8, 0x5b, 0xdf, 0xef, 0x78, 0xf8, 0x21, 0x5c, 0xae, 0x87, 0xcb, 0xf5, 0x70, + 0xb9, 0x1e, 0x9b, 0x23, 0xcd, 0xf2, 0xb5, 0x61, 0xa3, 0x0a, 0x43, 0xcb, 0x0d, 0x7b, 0x96, 0xdd, + 0x8f, 0xcc, 0x99, 0x22, 0xb2, 0x7b, 0x3d, 0x81, 0x6c, 0x02, 0x12, 0xad, 0x34, 0x11, 0xf7, 0xbd, + 0x14, 0x70, 0xdf, 0x0b, 0x17, 0x1c, 0x54, 0x2f, 0xe8, 0x53, 0x2c, 0xe0, 0xe3, 0x89, 0xba, 0x54, + 0xab, 0x89, 0x89, 0xd5, 0xc3, 0x50, 0x49, 0xa8, 0x24, 0x54, 0x52, 0x4e, 0x25, 0x87, 0xde, 0x2e, + 0x88, 0x04, 0xc5, 0xb2, 0x5b, 0x2d, 0x5f, 0x04, 0x81, 0xba, 0x76, 0x2e, 0x98, 0x03, 0x0a, 0x07, + 0x85, 0x4b, 0x59, 0xe1, 0x9c, 0x9e, 0xa2, 0xf4, 0xcd, 0xe8, 0xdc, 0x99, 0xc2, 0x98, 0xf8, 0x3b, + 0x1a, 0xbf, 0xf7, 0x6c, 0xf2, 0x66, 0x5f, 0x2b, 0x84, 0x77, 0x9b, 0x3f, 0x5c, 0xa0, 0xb5, 0xed, + 0x09, 0x85, 0xef, 0x92, 0x4f, 0xf6, 0x8b, 0xff, 0xdd, 0xdf, 0xff, 0x72, 0x6c, 0x9d, 0x35, 0x7e, + 0x7c, 0x29, 0x59, 0x67, 0x8d, 0xd1, 0x8f, 0xa5, 0xe8, 0x8f, 0xd1, 0xcf, 0xe5, 0x2f, 0xc7, 0x56, + 0x65, 0xfc, 0x73, 0xf5, 0xcb, 0xb1, 0x55, 0x6d, 0x1c, 0xdc, 0xdf, 0xbf, 0x39, 0xf8, 0x7e, 0x32, + 0x50, 0x1f, 0xf8, 0x8f, 0xa2, 0xe9, 0xb3, 0xd5, 0xc3, 0x14, 0x37, 0xbd, 0x96, 0xf7, 0x4d, 0xb7, + 0xad, 0x76, 0xdd, 0xfa, 0xa5, 0xf1, 0xbd, 0x74, 0x58, 0x19, 0xbc, 0x3b, 0xf8, 0x7e, 0x3a, 0x78, + 0xfd, 0xcb, 0x1f, 0x8b, 0x3e, 0x56, 0x3a, 0x3c, 0x1d, 0xbc, 0x5b, 0xf2, 0x2f, 0xb5, 0xc1, 0x3b, + 0xc9, 0x39, 0xaa, 0x83, 0xfd, 0xb9, 0x8f, 0x0e, 0x7f, 0x5f, 0x5e, 0x36, 0xa0, 0xb2, 0x64, 0xc0, + 0xc9, 0xb2, 0x01, 0x27, 0x4b, 0x06, 0x2c, 0xfd, 0x4a, 0xe5, 0x25, 0x03, 0xaa, 0x83, 0x1f, 0x73, + 0x9f, 0xdf, 0x5f, 0xfc, 0xd1, 0xda, 0xe0, 0xe0, 0xc7, 0xb2, 0x7f, 0x3b, 0x1d, 0xfc, 0x78, 0x77, + 0x90, 0x82, 0x0a, 0xe0, 0x6a, 0xbc, 0xe8, 0x0f, 0x37, 0xec, 0xb1, 0x5f, 0x96, 0x72, 0x15, 0xf6, + 0x0c, 0xde, 0x93, 0x32, 0xc4, 0x69, 0x7f, 0x8a, 0x17, 0x85, 0x2b, 0x52, 0x92, 0x11, 0xa0, 0xd9, + 0x40, 0xb3, 0xcd, 0x08, 0x11, 0x2d, 0x4a, 0x18, 0x0e, 0xdc, 0x8e, 0x7b, 0x50, 0x10, 0x1a, 0xa4, + 0x1e, 0x1a, 0xe0, 0xf6, 0x13, 0x2e, 0x41, 0xd6, 0x17, 0x68, 0x5d, 0xc1, 0x66, 0x13, 0x70, 0x36, + 0x41, 0x67, 0x11, 0x78, 0x75, 0x8c, 0x54, 0x48, 0xb3, 0x9b, 0xe3, 0x9f, 0xe2, 0xc5, 0x72, 0x18, + 0x9a, 0x39, 0xc6, 0xf3, 0xa0, 0x1d, 0x1a, 0x5d, 0x71, 0xb8, 0x14, 0x88, 0x5d, 0x91, 0xd8, 0x15, + 0x8a, 0x55, 0xb1, 0x68, 0x0a, 0x46, 0x54, 0x34, 0x3a, 0x29, 0xb5, 0x54, 0x5e, 0xfa, 0x8e, 0x1b, + 0x96, 0x6a, 0x0c, 0xfd, 0xcf, 0x6a, 0x1a, 0x53, 0xe8, 0xd5, 0x6a, 0xd0, 0xb9, 0x8d, 0xb9, 0x2f, + 0xc2, 0x51, 0xbb, 0xc1, 0x64, 0x56, 0xe6, 0xa6, 0x63, 0xaa, 0xe5, 0x48, 0xe6, 0x63, 0x2c, 0x3b, + 0xd0, 0x14, 0xe7, 0xd9, 0x2d, 0x60, 0xa8, 0xf1, 0x30, 0xbd, 0x05, 0xb5, 0x6a, 0xf5, 0xa4, 0x9a, + 0xe1, 0x6d, 0xd8, 0xdb, 0xcc, 0xe8, 0x46, 0x86, 0x5b, 0xaf, 0x0e, 0x11, 0x42, 0xa8, 0x63, 0x35, + 0x67, 0xb0, 0x46, 0x34, 0x13, 0xd0, 0x06, 0xd0, 0x06, 0xd0, 0x86, 0x92, 0xbc, 0x6c, 0x7d, 0xcb, + 0xd5, 0xab, 0xbb, 0x4f, 0x0f, 0xf5, 0xcf, 0x77, 0xff, 0x7a, 0xb8, 0xfb, 0xe3, 0xd3, 0x45, 0x91, + 0xa3, 0xc4, 0x30, 0xd0, 0xc6, 0x45, 0x3c, 0xd8, 0x68, 0xf1, 0x6b, 0x7e, 0x7c, 0x5f, 0x2d, 0x6e, + 0xd8, 0x5f, 0x35, 0xb2, 0xdf, 0xd8, 0x96, 0xe8, 0xaf, 0xbe, 0xc6, 0x70, 0x83, 0xc1, 0x61, 0x8d, + 0xa6, 0x82, 0xc7, 0x82, 0xc7, 0x82, 0xc7, 0x52, 0x92, 0x17, 0x72, 0x05, 0xe5, 0x9c, 0xb3, 0x7a, + 0x8b, 0x36, 0xda, 0x8a, 0x87, 0x99, 0xe3, 0xc3, 0xbe, 0xf1, 0x0f, 0xc6, 0x2f, 0x97, 0xbb, 0x0a, + 0x7b, 0xc3, 0xff, 0xff, 0x4d, 0xbc, 0x04, 0xf1, 0x9f, 0x19, 0xba, 0x4c, 0x8e, 0xc8, 0x95, 0xea, + 0x71, 0xa4, 0x79, 0xad, 0x77, 0xc7, 0xe1, 0x01, 0xa3, 0x0d, 0xc7, 0x05, 0x72, 0x8b, 0x45, 0x75, + 0xee, 0x02, 0xb9, 0x58, 0xc5, 0x70, 0x7f, 0x1c, 0xc9, 0x54, 0x94, 0x61, 0x2a, 0x60, 0x2a, 0x56, + 0x7e, 0x43, 0x9c, 0x33, 0x22, 0x8e, 0x42, 0x1c, 0x95, 0xcb, 0x38, 0x0a, 0xe7, 0x8c, 0xd3, 0x5f, + 0x04, 0xe7, 0x8c, 0x7a, 0x84, 0x21, 0xce, 0x19, 0x33, 0xb1, 0x0d, 0x38, 0x67, 0x5c, 0x88, 0x34, + 0x70, 0xce, 0x08, 0xb4, 0x01, 0xb4, 0xb1, 0x49, 0xb4, 0x81, 0x73, 0x46, 0x65, 0x77, 0x83, 0x73, + 0x46, 0x23, 0x5e, 0xa7, 0x80, 0x73, 0x46, 0x78, 0x2c, 0x78, 0x2c, 0x78, 0xac, 0x35, 0xf2, 0x82, + 0x73, 0xc6, 0x57, 0x32, 0xb1, 0xc9, 0x73, 0x46, 0xc3, 0xd7, 0xf3, 0x2e, 0x38, 0x66, 0xcc, 0xdf, + 0x75, 0xbc, 0x4a, 0x54, 0x28, 0x6e, 0xe3, 0x65, 0x90, 0x6d, 0x2d, 0x99, 0xe6, 0xef, 0x99, 0x3b, + 0x2f, 0xc5, 0xc5, 0xad, 0x2f, 0xaf, 0x96, 0x2c, 0x3f, 0xa6, 0xad, 0xa2, 0x91, 0x9b, 0x75, 0x85, + 0xff, 0x55, 0xf8, 0x0a, 0x05, 0xd6, 0xe3, 0x01, 0xa8, 0xaf, 0x46, 0x7d, 0xf5, 0xb4, 0x08, 0x51, + 0xfa, 0x52, 0x47, 0xe3, 0x50, 0x5d, 0x9d, 0x22, 0x56, 0xdf, 0xe9, 0xea, 0x6a, 0xd5, 0x76, 0x61, + 0x73, 0xfb, 0x4c, 0x6b, 0x6e, 0x83, 0x14, 0xa9, 0x8d, 0x84, 0xa3, 0x48, 0x91, 0x52, 0xd9, 0xef, + 0xcc, 0xa4, 0x48, 0x8d, 0x75, 0x2c, 0x03, 0x39, 0x52, 0xe8, 0xc6, 0x00, 0x6b, 0xb1, 0x8d, 0xd6, + 0x82, 0x9c, 0x25, 0x45, 0x75, 0xa0, 0x4c, 0x8e, 0x14, 0x3c, 0x30, 0x78, 0xe0, 0x9d, 0xe7, 0x81, + 0x9f, 0xbd, 0x20, 0xe4, 0x60, 0x81, 0xcf, 0x34, 0xe6, 0x20, 0xb5, 0x13, 0x7d, 0xfd, 0x1f, 0x43, + 0x96, 0x94, 0x56, 0x23, 0x55, 0x93, 0x2b, 0xc4, 0xbb, 0x52, 0x7c, 0x2b, 0xb6, 0x60, 0xe5, 0xb4, + 0x1a, 0xb5, 0xae, 0x5d, 0xc3, 0xb7, 0x8c, 0x73, 0xea, 0xf6, 0xf8, 0x5c, 0x3a, 0x71, 0xd6, 0x1b, + 0xbe, 0x2e, 0xfb, 0xaf, 0xc1, 0x32, 0xd3, 0xe0, 0x30, 0xc3, 0xc2, 0x59, 0x83, 0x70, 0xa2, 0x31, + 0x6d, 0x8e, 0x1a, 0xd3, 0x1a, 0x56, 0xd5, 0xbd, 0xcd, 0x7e, 0x0f, 0x4d, 0x53, 0xc1, 0xe8, 0xf1, + 0x5b, 0x5e, 0xd7, 0x76, 0x5c, 0x2b, 0x3a, 0x3c, 0x61, 0x74, 0xf9, 0x0c, 0x16, 0xa1, 0xf8, 0x41, + 0xb8, 0x4f, 0x11, 0xa9, 0x91, 0x39, 0xa7, 0xcf, 0x99, 0x54, 0xce, 0x14, 0x8b, 0x2d, 0x9d, 0x76, + 0x9c, 0xe1, 0x5c, 0x62, 0x9e, 0xd7, 0x40, 0x96, 0x33, 0xb3, 0x23, 0x2d, 0x70, 0x27, 0x9f, 0xa7, + 0xb5, 0x55, 0xe5, 0xea, 0x49, 0x8e, 0x36, 0x2b, 0x2b, 0x06, 0x99, 0xc1, 0xe2, 0x70, 0x63, 0x8f, + 0xe2, 0xfe, 0xfe, 0xfe, 0x17, 0xdb, 0xfa, 0xbb, 0x6e, 0xfd, 0xe7, 0xd8, 0x3a, 0x7b, 0x68, 0x4c, + 0xfd, 0xe5, 0xfe, 0xde, 0x7a, 0x68, 0x1c, 0x7c, 0x3f, 0x3e, 0xac, 0x95, 0x06, 0x07, 0x3f, 0x4d, + 0x7e, 0xdf, 0x18, 0xe2, 0xe1, 0x7f, 0x52, 0x46, 0xfd, 0x74, 0xf0, 0xe3, 0xfe, 0xfe, 0x4d, 0x71, + 0xd3, 0x9e, 0x6d, 0x2b, 0x6b, 0x0d, 0xec, 0x20, 0xf0, 0x9a, 0x4e, 0x94, 0xea, 0xc0, 0x54, 0x73, + 0x30, 0x37, 0x23, 0x91, 0x0f, 0x99, 0xba, 0xef, 0xea, 0xf6, 0xe2, 0xe6, 0xf7, 0x8b, 0x1b, 0x50, + 0x81, 0xa0, 0x02, 0x41, 0x05, 0xaa, 0xc9, 0x8b, 0x70, 0xfb, 0x5d, 0xe1, 0x8f, 0x32, 0x99, 0x18, + 0x18, 0xc1, 0x8a, 0xc6, 0x1c, 0x6a, 0xd7, 0x2d, 0x6f, 0xc6, 0x1a, 0x3a, 0x8f, 0x7d, 0x3f, 0x08, + 0xf5, 0x6d, 0x60, 0x3c, 0x8f, 0xbe, 0xe5, 0x53, 0xb9, 0xe9, 0x0f, 0x86, 0x0f, 0x86, 0x0f, 0x86, + 0x8f, 0x7c, 0x53, 0xe1, 0x52, 0xa3, 0x57, 0xca, 0xb0, 0xc1, 0xea, 0x79, 0x3e, 0x83, 0xb9, 0x8a, + 0x66, 0xd1, 0x37, 0x56, 0xa5, 0xf2, 0x09, 0x4c, 0x15, 0x4c, 0x15, 0x4c, 0x95, 0xba, 0xf6, 0x59, + 0x6e, 0xbf, 0xfb, 0x28, 0x9d, 0xe9, 0xba, 0x4a, 0x85, 0xd0, 0xdb, 0xc2, 0x2c, 0xa7, 0x85, 0xde, + 0x16, 0xd9, 0xd9, 0x02, 0xf4, 0xb6, 0xc8, 0x1d, 0xdf, 0x34, 0xf4, 0x43, 0xc2, 0x67, 0x80, 0x2c, + 0xa3, 0x79, 0x10, 0x61, 0x01, 0xb6, 0x00, 0xb6, 0x20, 0xc2, 0x32, 0x67, 0xb0, 0xbe, 0x0a, 0x3f, + 0xa0, 0x56, 0x10, 0xcf, 0xac, 0xd7, 0x78, 0x22, 0x7d, 0x93, 0x55, 0x81, 0xb9, 0x82, 0xb9, 0x82, + 0xb9, 0x52, 0x93, 0x97, 0xbe, 0xe3, 0x86, 0x6f, 0x19, 0x8c, 0x55, 0x15, 0xf1, 0x55, 0x3a, 0xe0, + 0xbe, 0x84, 0xf8, 0x6a, 0xd3, 0x5b, 0x50, 0x41, 0x6c, 0xb5, 0xb1, 0xd8, 0x6a, 0x6b, 0x3a, 0xa3, + 0xc4, 0xdd, 0x00, 0xe2, 0x3f, 0x53, 0xb9, 0x7f, 0xe1, 0x76, 0xf4, 0xc8, 0xf8, 0xcf, 0x0c, 0xdd, + 0xbf, 0x80, 0x96, 0xea, 0x86, 0xc1, 0x1d, 0x8a, 0x05, 0x37, 0x60, 0x4d, 0x50, 0x2c, 0x88, 0xb8, + 0x08, 0x71, 0x11, 0x8a, 0x05, 0xc9, 0x73, 0xa0, 0x58, 0x30, 0xd5, 0x95, 0xe2, 0x5b, 0xb1, 0x05, + 0x2b, 0x87, 0x62, 0x41, 0x14, 0x0b, 0x66, 0x57, 0x38, 0x51, 0x2c, 0x88, 0x62, 0x41, 0x14, 0x0b, + 0xf2, 0x90, 0x28, 0x05, 0x14, 0x0b, 0xa6, 0x60, 0x11, 0x50, 0x2c, 0xc8, 0x4a, 0x69, 0xa2, 0x58, + 0x30, 0x37, 0x5b, 0x85, 0x62, 0x41, 0x8a, 0x41, 0x46, 0xb1, 0x20, 0x8a, 0x05, 0x0d, 0x59, 0x17, + 0x14, 0x0b, 0x82, 0x0a, 0x04, 0x15, 0xb8, 0xbd, 0x54, 0x20, 0x8a, 0x05, 0x95, 0xbe, 0x23, 0x8a, + 0x05, 0x61, 0xf8, 0x60, 0xf8, 0xb6, 0xc1, 0xf0, 0xed, 0x48, 0x2a, 0xab, 0xd7, 0x6e, 0x07, 0x82, + 0xc1, 0x60, 0xc5, 0xf3, 0xc0, 0xd0, 0xc0, 0xd0, 0xc0, 0xd0, 0x28, 0xc9, 0x4b, 0xdf, 0x71, 0xc3, + 0x5a, 0x85, 0xc1, 0xce, 0xbc, 0x45, 0x16, 0xaa, 0x51, 0x32, 0x0a, 0x55, 0x7e, 0xd9, 0xd9, 0x82, + 0xd2, 0xdb, 0x4a, 0xa5, 0x76, 0x5a, 0xa9, 0x1c, 0x9f, 0x9e, 0x9c, 0x1e, 0x9f, 0x55, 0xab, 0xa5, + 0x5a, 0x09, 0x45, 0x7f, 0xb9, 0xe2, 0x8d, 0x7a, 0x5e, 0xa7, 0x63, 0x39, 0x6e, 0x28, 0xfc, 0xaf, + 0x76, 0x87, 0xa3, 0x5d, 0xc1, 0xf4, 0x74, 0x80, 0x21, 0x80, 0x21, 0x80, 0x21, 0xca, 0x30, 0xe4, + 0xa4, 0xcc, 0x00, 0x43, 0x4e, 0x01, 0x43, 0x00, 0x43, 0x76, 0xa5, 0x18, 0xa6, 0x7c, 0x56, 0x39, + 0xab, 0x9d, 0x96, 0xcf, 0x00, 0x3e, 0x72, 0x06, 0x3e, 0xd0, 0x22, 0x09, 0x80, 0x05, 0x80, 0xa5, + 0x80, 0x16, 0x49, 0x68, 0x91, 0x04, 0xd4, 0xb2, 0x63, 0xa8, 0x05, 0x2d, 0x92, 0xf2, 0x07, 0x58, + 0xd0, 0x22, 0x09, 0xb0, 0x05, 0xb0, 0x65, 0x0b, 0x60, 0xcb, 0x8e, 0x9c, 0x2b, 0xfb, 0x9e, 0x17, + 0x5a, 0x2d, 0xd1, 0xb1, 0x5f, 0xf4, 0x8d, 0xd6, 0xd4, 0x5c, 0x30, 0x38, 0x30, 0x38, 0x30, 0x38, + 0x4a, 0xf2, 0x02, 0x62, 0x17, 0x21, 0x12, 0x42, 0x24, 0xc5, 0x2d, 0x00, 0xb1, 0x9b, 0xcf, 0x38, + 0x69, 0x04, 0x15, 0x9c, 0xa0, 0xc7, 0xd5, 0xa1, 0xf1, 0xf5, 0x84, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x20, 0xca, 0x00, 0x04, 0x09, 0x6e, 0x00, 0x20, 0x00, 0x20, 0x0a, 0x5b, 0x80, 0x04, 0xb7, 0xbc, + 0x43, 0x91, 0x20, 0xf4, 0xed, 0x70, 0x54, 0xb1, 0xa4, 0x07, 0x41, 0xc6, 0x13, 0x01, 0x7a, 0x00, + 0x7a, 0x00, 0x7a, 0x28, 0x43, 0x0f, 0x34, 0x78, 0x06, 0xf2, 0x00, 0xf2, 0x90, 0xdf, 0x82, 0x72, + 0x15, 0x40, 0x23, 0x57, 0x40, 0x03, 0xb7, 0x51, 0x00, 0xac, 0x00, 0xac, 0x00, 0xac, 0x00, 0xac, + 0xa4, 0x1d, 0xa3, 0x03, 0xac, 0x6c, 0x7a, 0x0b, 0x70, 0x1b, 0xc5, 0xe6, 0xa0, 0xca, 0xb6, 0xde, + 0x46, 0x41, 0xb9, 0x51, 0xa1, 0xa0, 0x75, 0x19, 0xc5, 0x6d, 0xf4, 0x44, 0x53, 0x77, 0x51, 0xec, + 0x31, 0xee, 0xcf, 0x10, 0x4a, 0xa8, 0x37, 0xd7, 0x2f, 0x7e, 0x70, 0x82, 0xb0, 0x1e, 0x86, 0x6a, + 0x09, 0x8c, 0x43, 0x1f, 0x70, 0xd1, 0x11, 0x43, 0x58, 0x30, 0xd4, 0x48, 0xb7, 0xdf, 0xe9, 0x28, + 0x5c, 0xab, 0xf1, 0xd1, 0xfe, 0x46, 0x1f, 0x7c, 0xed, 0xb7, 0x84, 0x2f, 0x5a, 0x3f, 0xbf, 0xc4, + 0x43, 0x59, 0x97, 0x90, 0x28, 0xda, 0x1a, 0x22, 0x5d, 0x54, 0xba, 0x8e, 0x84, 0x26, 0xc4, 0x72, + 0xe2, 0xbb, 0x5e, 0x18, 0x57, 0x7f, 0x62, 0xcd, 0x1a, 0xab, 0xae, 0x2d, 0x65, 0x4d, 0x25, 0x16, + 0x53, 0x7d, 0x11, 0x57, 0xaf, 0xde, 0xf2, 0x35, 0x59, 0xb1, 0x1e, 0x92, 0x17, 0xcb, 0x28, 0x5d, + 0x24, 0x23, 0x79, 0x71, 0x8c, 0xf4, 0x45, 0x31, 0x2a, 0xf1, 0x96, 0x7a, 0x5c, 0xa5, 0x1a, 0x3f, + 0x91, 0xe3, 0x24, 0x72, 0x3c, 0x44, 0x8a, 0x7b, 0xf4, 0x34, 0x44, 0xf6, 0x62, 0x96, 0xa2, 0xdd, + 0x0f, 0x9f, 0xad, 0xae, 0x13, 0x74, 0xed, 0xb0, 0xf9, 0x2c, 0xbf, 0x86, 0x49, 0x17, 0xc7, 0x99, + 0xe1, 0xb2, 0xde, 0x45, 0x09, 0x25, 0x2a, 0x87, 0xfb, 0x94, 0xf0, 0x9e, 0x1e, 0xce, 0x53, 0xc3, + 0x77, 0xed, 0x70, 0x5d, 0x3b, 0x3c, 0xd7, 0x0a, 0xc7, 0x79, 0xf1, 0x86, 0x72, 0x78, 0x9d, 0xec, + 0x57, 0xd3, 0xeb, 0xbb, 0xa1, 0xf0, 0x95, 0x32, 0x0f, 0x08, 0x99, 0x06, 0xc4, 0x90, 0x99, 0x00, + 0x69, 0x75, 0x42, 0x62, 0x5d, 0x62, 0x4d, 0x93, 0x9f, 0xe7, 0x88, 0xaf, 0x28, 0xd4, 0xa8, 0x4e, + 0x08, 0xcb, 0xb5, 0x64, 0x7c, 0x27, 0xf9, 0x2c, 0xab, 0x68, 0x28, 0xca, 0x68, 0x70, 0xc1, 0x3f, + 0x09, 0xb7, 0x2e, 0x5c, 0xfb, 0xb1, 0x23, 0x2c, 0x37, 0xec, 0x59, 0x43, 0x2f, 0xa3, 0xee, 0x9b, + 0x5e, 0x4f, 0x20, 0x69, 0x8b, 0x88, 0xe5, 0x4f, 0xf0, 0x6a, 0xf0, 0x6a, 0x6c, 0x5e, 0x4d, 0xbd, + 0x7c, 0x48, 0xb1, 0x5c, 0x88, 0x53, 0x45, 0x5b, 0x54, 0xd5, 0x6c, 0x41, 0x25, 0xa1, 0x92, 0x50, + 0x49, 0x56, 0x95, 0x1c, 0x7a, 0xbb, 0x20, 0x12, 0x14, 0x4b, 0xf5, 0x8e, 0xcd, 0xe4, 0x55, 0x17, + 0xcc, 0x01, 0x85, 0x83, 0xc2, 0xa5, 0xac, 0x70, 0xa4, 0xab, 0x18, 0x29, 0x57, 0x2e, 0xd2, 0xae, + 0x56, 0xd4, 0xb8, 0xe3, 0x58, 0xf3, 0xaa, 0x44, 0x9d, 0x3b, 0xa6, 0xb4, 0x6f, 0x78, 0xc9, 0xfc, + 0x15, 0x87, 0x0d, 0x93, 0x07, 0x56, 0x7a, 0x9b, 0x5e, 0xcb, 0xfb, 0xa6, 0xe3, 0xea, 0xc0, 0x5c, + 0x5c, 0x1d, 0xd8, 0xc8, 0x7a, 0xf4, 0x9f, 0xdd, 0xc3, 0x1f, 0xc9, 0x43, 0x61, 0x95, 0xa3, 0x9f, + 0xf5, 0xa7, 0xbe, 0x2b, 0x0e, 0x7e, 0xf6, 0x14, 0x56, 0x48, 0x76, 0x65, 0x54, 0x56, 0xa4, 0xb8, + 0xf2, 0xe4, 0x49, 0x72, 0x0d, 0x16, 0xbf, 0xfd, 0xfc, 0xbb, 0x2d, 0x78, 0xaf, 0xe2, 0xf0, 0xcb, + 0xb5, 0x3b, 0xde, 0x5f, 0x4b, 0xdf, 0x68, 0x82, 0xef, 0xc6, 0x9f, 0x5c, 0xb2, 0x3a, 0xab, 0x0f, + 0xb5, 0xd6, 0x62, 0x51, 0x19, 0xec, 0x29, 0xfb, 0x5d, 0x54, 0xd0, 0xa5, 0x32, 0x9a, 0x54, 0x46, + 0x8f, 0xb3, 0x68, 0x71, 0xfc, 0xcd, 0x99, 0x64, 0x72, 0xdd, 0x41, 0x54, 0xd1, 0x7e, 0x1a, 0x3d, + 0x59, 0xf2, 0xfc, 0x72, 0xf4, 0x71, 0xe6, 0xf3, 0xcb, 0x63, 0x13, 0xe7, 0x97, 0xeb, 0x45, 0x80, + 0x1a, 0x68, 0x6c, 0xfa, 0x04, 0x73, 0xad, 0x88, 0xf0, 0x18, 0x7a, 0xe9, 0x33, 0xcc, 0xe6, 0x78, + 0x1f, 0x15, 0xe3, 0xdc, 0x78, 0x9c, 0x5a, 0x6c, 0x5b, 0xca, 0x64, 0x6c, 0x2b, 0x2f, 0x6c, 0xdb, + 0x16, 0xdd, 0x4a, 0x0b, 0xa3, 0x99, 0xf8, 0x56, 0x56, 0x48, 0x93, 0x01, 0x8f, 0x76, 0xf3, 0x4f, + 0xaf, 0xdd, 0xa6, 0x37, 0xc5, 0x9f, 0x30, 0x52, 0xaf, 0x67, 0x52, 0x5c, 0x46, 0xda, 0xc9, 0x17, + 0x39, 0xfb, 0x5e, 0x27, 0xeb, 0x5e, 0x47, 0xd0, 0x75, 0x05, 0x9e, 0x4d, 0xf0, 0xd9, 0x14, 0x80, + 0x49, 0x11, 0xd4, 0x03, 0x00, 0x42, 0xc4, 0x4c, 0xcf, 0x9c, 0xd7, 0x6f, 0x6d, 0xa4, 0xd1, 0xd2, + 0x48, 0x33, 0x45, 0x5e, 0xa3, 0x4e, 0x80, 0x23, 0x25, 0x9e, 0x29, 0x0f, 0x9b, 0xab, 0x5e, 0x8f, + 0x33, 0xef, 0x5a, 0x23, 0xe5, 0x9d, 0x25, 0xd5, 0x9d, 0x7b, 0x69, 0xb9, 0x5a, 0x10, 0xb1, 0xae, + 0x71, 0x4a, 0xb9, 0xe5, 0xa6, 0x78, 0x0a, 0x05, 0x19, 0x29, 0xb6, 0xec, 0x30, 0x8a, 0x84, 0x2d, + 0xa7, 0x45, 0xf7, 0xc4, 0xd3, 0x93, 0xc0, 0x09, 0xc3, 0x09, 0x6f, 0xa1, 0x13, 0xa6, 0x8b, 0x78, + 0x06, 0xd8, 0xeb, 0x69, 0x76, 0xf5, 0x35, 0x69, 0x5b, 0x1e, 0x1c, 0x7c, 0x3f, 0x1d, 0x64, 0x88, + 0x65, 0x55, 0xb1, 0x5e, 0x6d, 0xdb, 0xe9, 0xf4, 0x7d, 0x61, 0x75, 0xbd, 0x96, 0xa0, 0x9b, 0xaf, + 0x99, 0x59, 0x60, 0xbf, 0x60, 0xbf, 0xb6, 0xd0, 0x7e, 0x69, 0xc8, 0x78, 0x41, 0xf3, 0x6a, 0x73, + 0xe2, 0x95, 0xe6, 0x66, 0x2c, 0x86, 0xe3, 0x0e, 0x61, 0xe2, 0x57, 0x27, 0x7c, 0xb1, 0x7a, 0xbe, + 0xf7, 0xa8, 0x61, 0x35, 0xe6, 0x66, 0x82, 0xe5, 0x80, 0xe5, 0x00, 0xfd, 0x00, 0xfa, 0x01, 0xf4, + 0x03, 0xe8, 0x07, 0xd0, 0x0f, 0x72, 0xcb, 0xd6, 0xb5, 0xbf, 0x59, 0x31, 0x8f, 0x4f, 0xf7, 0xc4, + 0xd3, 0x93, 0xc0, 0x09, 0xc3, 0x09, 0xc3, 0x09, 0xc3, 0x09, 0xc3, 0x09, 0xc3, 0x09, 0xef, 0xb4, + 0x13, 0xce, 0x55, 0x33, 0x8f, 0xb1, 0xe1, 0x3e, 0x8a, 0xd2, 0x9b, 0x8e, 0x94, 0x12, 0x53, 0x0a, + 0xf2, 0xb9, 0x78, 0xd7, 0xf1, 0x63, 0x1e, 0xea, 0xc3, 0xc7, 0x3c, 0xc4, 0x5e, 0x3c, 0xc5, 0xea, + 0x14, 0xb9, 0x66, 0x15, 0x73, 0xd6, 0x5f, 0xa5, 0x57, 0x0f, 0x39, 0x4f, 0xa7, 0x8c, 0x3c, 0x1d, + 0x5e, 0x88, 0x82, 0x3c, 0x1d, 0xe4, 0xe9, 0x00, 0xa3, 0x03, 0xa3, 0x03, 0xa3, 0x03, 0xa3, 0x03, + 0xa3, 0x03, 0xa3, 0x6b, 0x11, 0x65, 0xc8, 0xd3, 0x81, 0x13, 0x86, 0x13, 0x36, 0x29, 0xe2, 0x05, + 0xe4, 0xe9, 0x20, 0x4f, 0x07, 0xf6, 0x0b, 0xf6, 0x6b, 0xa3, 0xf6, 0x0b, 0x79, 0x3a, 0xa3, 0xef, + 0x82, 0x3c, 0x1d, 0x58, 0x0e, 0x58, 0x0e, 0xd0, 0x0f, 0xa0, 0x1f, 0x40, 0x3f, 0x80, 0x7e, 0xd8, + 0xb8, 0x3b, 0x46, 0x9e, 0x0e, 0x9c, 0x30, 0x9c, 0x30, 0x9c, 0x30, 0x9c, 0x30, 0x9c, 0x30, 0x9c, + 0x30, 0xa7, 0x13, 0xce, 0x73, 0x9e, 0x8e, 0xea, 0x1d, 0x52, 0xb4, 0x34, 0x1d, 0x85, 0x7b, 0xa3, + 0xf2, 0xda, 0x7b, 0x6d, 0x76, 0x5d, 0xf9, 0x1a, 0xb0, 0xcd, 0xae, 0xa4, 0x89, 0xeb, 0x77, 0x9a, + 0x9e, 0x1b, 0xfa, 0x5e, 0xa7, 0x23, 0xfc, 0x40, 0xbe, 0x89, 0xd5, 0xf4, 0x20, 0xb4, 0xb2, 0x42, + 0x2b, 0xab, 0x45, 0xe2, 0x44, 0x6a, 0x67, 0x35, 0x1e, 0x8b, 0x96, 0x56, 0xa9, 0x46, 0x0b, 0x3b, + 0x9e, 0x2a, 0xa7, 0xd8, 0x7f, 0x6d, 0x91, 0xe0, 0xaa, 0xa5, 0xbb, 0x12, 0x84, 0x17, 0x21, 0x31, + 0x42, 0x62, 0x4a, 0x48, 0xac, 0xaa, 0x0c, 0xc9, 0xc0, 0x18, 0x9a, 0x68, 0x5e, 0xd6, 0x1e, 0xcd, + 0x82, 0x5b, 0xd6, 0x75, 0x14, 0x87, 0x4b, 0x81, 0xd8, 0x15, 0x89, 0x5d, 0xa1, 0x98, 0x15, 0x4b, + 0x33, 0xc4, 0xdc, 0xf8, 0x4d, 0xeb, 0x41, 0xe8, 0x3b, 0xee, 0x13, 0xc3, 0x55, 0xeb, 0xa5, 0xb7, + 0xb8, 0x6c, 0x99, 0x12, 0xcc, 0x4d, 0x85, 0x39, 0x53, 0x3f, 0x1f, 0x91, 0xdc, 0x3d, 0x25, 0xe8, + 0x3b, 0x9f, 0x3c, 0x7f, 0xea, 0x67, 0xa5, 0xb2, 0x17, 0x02, 0xa1, 0x71, 0xa8, 0x04, 0x9c, 0x5c, + 0x11, 0x31, 0x41, 0x81, 0x16, 0x7a, 0x4a, 0x26, 0x01, 0x84, 0x02, 0x84, 0xda, 0x1e, 0x08, 0x35, + 0x91, 0x6c, 0x7d, 0x20, 0x35, 0x35, 0x97, 0x1e, 0x9c, 0x2a, 0x01, 0x4e, 0x01, 0x4e, 0xe5, 0x07, + 0x4e, 0x51, 0x95, 0x2f, 0x99, 0xc0, 0xee, 0x7f, 0xa3, 0xe4, 0xdc, 0x2f, 0x15, 0xbd, 0x78, 0xbe, + 0xc3, 0x4c, 0x9c, 0xec, 0xe8, 0x2a, 0x25, 0xa7, 0x72, 0x9a, 0x50, 0x52, 0x6e, 0x65, 0x35, 0xa6, + 0xb4, 0xc6, 0x94, 0xd7, 0x90, 0x12, 0xeb, 0x29, 0xb3, 0xa6, 0x52, 0xf3, 0xc5, 0x4a, 0x73, 0x32, + 0xd7, 0x11, 0x76, 0xdb, 0x17, 0x6d, 0x0e, 0x91, 0x1b, 0xfb, 0xcb, 0x53, 0x86, 0xb9, 0x3e, 0xc5, + 0x41, 0xc7, 0x9b, 0x37, 0x71, 0xf4, 0x70, 0x14, 0x9b, 0x91, 0xbd, 0xcd, 0x6c, 0x9e, 0xce, 0xc9, + 0x36, 0x91, 0x2d, 0xe5, 0x65, 0x4f, 0x99, 0xd1, 0x0d, 0x0c, 0x2a, 0x0c, 0xea, 0x36, 0x18, 0x54, + 0x5d, 0xb4, 0x34, 0x41, 0x4d, 0x8a, 0x77, 0xaf, 0xca, 0xc3, 0x27, 0xf2, 0x0d, 0x82, 0x06, 0x71, + 0x14, 0xbb, 0xfa, 0x9b, 0x30, 0x03, 0x26, 0xcd, 0x81, 0x29, 0xb3, 0x60, 0xdc, 0x3c, 0x18, 0x37, + 0x13, 0x86, 0xcd, 0x05, 0x8f, 0xd9, 0x60, 0x32, 0x1f, 0xfc, 0xb8, 0x6c, 0x4e, 0x66, 0x49, 0x97, + 0xe2, 0x4a, 0x3b, 0xff, 0x33, 0xc6, 0x39, 0x49, 0x97, 0xea, 0xae, 0xfb, 0x8f, 0x57, 0xab, 0x0a, + 0x8c, 0x97, 0xf2, 0x4a, 0xaf, 0xf1, 0x5b, 0x03, 0x73, 0xeb, 0x56, 0xde, 0xae, 0x7d, 0x40, 0xd6, + 0x2f, 0xfd, 0x5d, 0xf7, 0x5f, 0x83, 0x75, 0xc6, 0xc1, 0x61, 0x8e, 0x84, 0xba, 0x06, 0xa1, 0x5e, + 0x2d, 0xd4, 0xb8, 0xd4, 0x38, 0x17, 0x97, 0x1a, 0xa7, 0xac, 0xe2, 0x7b, 0xd9, 0xfa, 0x5e, 0xfa, + 0xdf, 0x87, 0xc1, 0x68, 0x71, 0x71, 0xc1, 0xf3, 0x41, 0x0d, 0x07, 0x27, 0x8c, 0x98, 0x06, 0x31, + 0x0d, 0x62, 0x9a, 0x1c, 0xc6, 0x34, 0x76, 0xff, 0x9b, 0xd3, 0x71, 0x6c, 0xff, 0x85, 0xcf, 0x06, + 0x4c, 0xdb, 0x81, 0x2a, 0xe3, 0x94, 0x7a, 0x95, 0x66, 0x29, 0x02, 0x40, 0x8e, 0xca, 0xb4, 0x94, + 0x0c, 0xec, 0xdc, 0xf4, 0x4c, 0x95, 0x6c, 0x4b, 0xe7, 0x67, 0xac, 0xbe, 0x4a, 0x29, 0x42, 0x28, + 0x70, 0x55, 0xc4, 0x6d, 0x7a, 0x4b, 0x4b, 0xd5, 0x1c, 0xef, 0x29, 0x00, 0xa6, 0x71, 0x80, 0xd9, + 0x14, 0x7e, 0xe8, 0xb4, 0x9d, 0xa6, 0x1d, 0x0a, 0x23, 0x40, 0xf3, 0xd5, 0xfc, 0x00, 0x9c, 0x00, + 0x9c, 0x00, 0x9c, 0x3b, 0x07, 0x38, 0xb5, 0x13, 0xc3, 0x97, 0xf3, 0x60, 0x5b, 0x64, 0x8b, 0x7b, + 0x9e, 0x1f, 0xf2, 0x5b, 0xe0, 0x68, 0x56, 0x26, 0x09, 0x79, 0x2f, 0xda, 0x76, 0xbf, 0x13, 0x29, + 0x43, 0xad, 0x56, 0x3d, 0x81, 0x39, 0x87, 0x39, 0x87, 0x39, 0xdf, 0x3d, 0x73, 0x3e, 0x34, 0x29, + 0x96, 0xdb, 0xef, 0x3e, 0x4a, 0x17, 0x3e, 0xab, 0x98, 0x81, 0x1a, 0xe8, 0x03, 0xd0, 0x07, 0xa0, + 0x0f, 0x32, 0xb1, 0xa5, 0xb5, 0x6a, 0xf5, 0x04, 0x0c, 0x02, 0x18, 0x84, 0x55, 0xa8, 0xd5, 0x77, + 0x3c, 0xdf, 0x09, 0x5f, 0x0c, 0x20, 0xd7, 0xf1, 0xcc, 0x80, 0x99, 0x80, 0x99, 0x80, 0x99, 0x3b, + 0x07, 0x33, 0xfb, 0x8e, 0x1b, 0xbe, 0xc5, 0xf9, 0x14, 0x00, 0x26, 0x00, 0xe6, 0xd6, 0x02, 0xcc, + 0x72, 0x15, 0xf0, 0x12, 0xf0, 0x72, 0xc5, 0x36, 0x06, 0x11, 0xc8, 0x18, 0x5d, 0xe5, 0xd8, 0xb6, + 0x39, 0x0b, 0x80, 0x12, 0x72, 0xfa, 0xf5, 0x13, 0x00, 0x37, 0x01, 0x37, 0x01, 0x37, 0x77, 0x0e, + 0x6e, 0x3e, 0xda, 0xc1, 0x94, 0x15, 0xb0, 0x78, 0x8a, 0x72, 0x5f, 0x5b, 0x03, 0x8e, 0xe2, 0xdc, + 0x89, 0x06, 0x27, 0x9d, 0x81, 0x9a, 0x96, 0xd3, 0x7e, 0x97, 0x7c, 0xf7, 0xe0, 0xf5, 0x2f, 0xe2, + 0xbf, 0x47, 0x7d, 0x7c, 0xb6, 0xc8, 0x37, 0x84, 0xbe, 0xed, 0x06, 0x66, 0x4e, 0xcd, 0x26, 0x53, + 0xf3, 0x1f, 0x9d, 0xdd, 0x9d, 0x7f, 0x82, 0x8f, 0x81, 0x8f, 0x81, 0x8f, 0xd9, 0x3d, 0x1f, 0xc3, + 0x6d, 0x56, 0x0a, 0x9a, 0x37, 0xb0, 0x2d, 0x9d, 0x93, 0x76, 0x33, 0x9b, 0x41, 0x77, 0xb1, 0xd1, + 0x2a, 0x75, 0xcd, 0x46, 0x7e, 0xf3, 0x41, 0x0d, 0x5f, 0x63, 0xbf, 0x71, 0x27, 0xba, 0xa9, 0x9f, + 0x8f, 0x58, 0x1a, 0x54, 0x14, 0x58, 0xfb, 0xff, 0x8d, 0xbf, 0xe6, 0xd4, 0xcf, 0xa4, 0xb6, 0x80, + 0x7c, 0x72, 0xa1, 0xd3, 0x51, 0x64, 0x74, 0x0d, 0x01, 0x5b, 0x43, 0x11, 0xd5, 0x5b, 0x0d, 0x56, + 0x5a, 0x01, 0xae, 0x7e, 0x22, 0x65, 0xf4, 0x13, 0xc9, 0x84, 0x8b, 0x47, 0x3f, 0x11, 0x25, 0x98, + 0x8d, 0x7e, 0x22, 0x88, 0x00, 0x10, 0x01, 0x20, 0x02, 0xc8, 0x6a, 0x04, 0x80, 0x7e, 0x22, 0xcc, + 0xff, 0xa1, 0x9f, 0x88, 0xcc, 0x03, 0xd0, 0x4f, 0xc4, 0x80, 0x99, 0x48, 0x47, 0xa8, 0xd1, 0x4f, + 0x64, 0x8d, 0x50, 0xa3, 0x9f, 0x08, 0xfa, 0x89, 0x18, 0xc2, 0x13, 0x05, 0xf4, 0x13, 0x91, 0x0b, + 0x6a, 0xd0, 0x4f, 0x04, 0x31, 0x0d, 0x62, 0x9a, 0x1d, 0x8d, 0x69, 0xd0, 0x4f, 0x04, 0xf9, 0x9a, + 0xd3, 0xd3, 0x23, 0x5f, 0x73, 0xf1, 0x96, 0xa2, 0x9f, 0xc8, 0x66, 0xf7, 0x14, 0x00, 0xd3, 0x38, + 0xc0, 0x44, 0x3f, 0x11, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0xf4, 0x13, 0xc9, 0x80, 0x2d, 0x1e, + 0xa5, 0x5a, 0x08, 0x13, 0x66, 0x38, 0x99, 0x1a, 0x16, 0x18, 0x16, 0x18, 0x16, 0x78, 0xe7, 0x2c, + 0xf0, 0xa3, 0xe7, 0x75, 0x84, 0xed, 0x9a, 0x30, 0xc1, 0x25, 0xb4, 0x74, 0x5a, 0xb3, 0xf8, 0x68, + 0xe9, 0x04, 0x7b, 0x0e, 0x7b, 0x0e, 0x7b, 0xce, 0x6c, 0x52, 0xd0, 0xd2, 0x89, 0x55, 0x30, 0xc1, + 0xe0, 0x2e, 0x9f, 0x1f, 0x0c, 0xee, 0xc6, 0xb6, 0x14, 0x2d, 0x9d, 0x8c, 0xcc, 0x86, 0x96, 0x4e, + 0x52, 0x6e, 0x06, 0x2d, 0x9d, 0x00, 0x33, 0x01, 0x33, 0x77, 0x16, 0x66, 0xa2, 0xa5, 0x13, 0x00, + 0x26, 0x00, 0xe6, 0x76, 0x03, 0x4c, 0xb4, 0x74, 0x02, 0xbc, 0x5c, 0xb9, 0x8d, 0x68, 0xe9, 0x04, + 0xb8, 0x09, 0xb8, 0x09, 0xb8, 0x69, 0x1e, 0x6e, 0xa2, 0xa5, 0x53, 0xde, 0x7c, 0x03, 0x5a, 0x3a, + 0xc1, 0xc7, 0xc0, 0xc7, 0xc0, 0xc7, 0xe4, 0xc7, 0xc7, 0xa0, 0xa5, 0xd3, 0x46, 0x66, 0xd8, 0xb1, + 0x96, 0x4e, 0x1c, 0x2d, 0x82, 0x0a, 0xc6, 0x3b, 0x3a, 0xdd, 0x46, 0xdf, 0x72, 0x53, 0x0d, 0x9d, + 0xf6, 0x52, 0x94, 0xa3, 0xa1, 0xf9, 0xd7, 0x2e, 0x7c, 0x2c, 0x7e, 0x70, 0x82, 0xb0, 0x1e, 0x86, + 0x7a, 0x2d, 0x6b, 0x8a, 0x1f, 0x1d, 0xf7, 0xa2, 0x23, 0x86, 0x96, 0x3c, 0x28, 0xbe, 0x2b, 0xb8, + 0xfd, 0x4e, 0x47, 0xa3, 0xb5, 0xd5, 0x47, 0xfb, 0x1b, 0xdf, 0x64, 0xd7, 0x7e, 0x4b, 0xf8, 0xa2, + 0xf5, 0xf3, 0x4b, 0x3c, 0x55, 0xaa, 0x3b, 0xc4, 0xa4, 0xe1, 0x86, 0x35, 0xbb, 0xa8, 0xd5, 0x86, + 0xcc, 0x9c, 0x2e, 0xd3, 0xb4, 0x58, 0x5d, 0x07, 0xd5, 0x46, 0x28, 0xca, 0x82, 0xae, 0x0c, 0x98, + 0xd8, 0x7b, 0xc2, 0x86, 0xf3, 0x6f, 0xb4, 0xda, 0xee, 0xca, 0xef, 0x91, 0xc2, 0xfe, 0x14, 0xe3, + 0xd7, 0x51, 0xdb, 0x95, 0x04, 0x76, 0x45, 0xa3, 0x15, 0xa5, 0x81, 0x16, 0x5a, 0x91, 0x43, 0x28, + 0x9d, 0x50, 0x89, 0x23, 0x24, 0xd2, 0x0d, 0x7d, 0xd8, 0x42, 0x1c, 0xb6, 0x50, 0x86, 0x29, 0x64, + 0x31, 0x6b, 0x73, 0xc8, 0xa1, 0x46, 0xb2, 0xe7, 0x1d, 0x61, 0xb7, 0x69, 0x5c, 0x95, 0x0e, 0x27, + 0x95, 0x70, 0x4f, 0x6f, 0xde, 0xc4, 0x1d, 0x44, 0x8f, 0xd4, 0xd9, 0x25, 0x33, 0xa6, 0x82, 0xd6, + 0x6f, 0x53, 0xab, 0xbf, 0x26, 0xb1, 0x9f, 0x26, 0xb9, 0x7f, 0x26, 0x8c, 0xc5, 0x4e, 0x1a, 0x0b, + 0x6a, 0xbf, 0x4a, 0x9a, 0xf7, 0xe4, 0xf0, 0xa2, 0x4c, 0x44, 0xa5, 0x36, 0x31, 0xc9, 0x41, 0x44, + 0x72, 0x12, 0x8f, 0x5c, 0x44, 0x23, 0x3b, 0xb1, 0xc8, 0x4e, 0x24, 0x32, 0x13, 0x87, 0xe9, 0xc6, + 0xed, 0xda, 0x44, 0x20, 0x5f, 0x11, 0xaa, 0x66, 0xd1, 0x29, 0x62, 0xad, 0xc5, 0xb1, 0x16, 0x95, + 0x2a, 0x63, 0x8a, 0xb2, 0x08, 0x1c, 0x98, 0x02, 0x68, 0xda, 0x63, 0xdc, 0xb9, 0x31, 0x87, 0xa5, + 0xe0, 0x04, 0x68, 0x8c, 0x95, 0x16, 0x43, 0xa5, 0xc5, 0x48, 0xd1, 0x18, 0x28, 0xd9, 0xf5, 0x23, + 0x4a, 0x3c, 0x97, 0xa4, 0x17, 0x95, 0x10, 0x34, 0x83, 0x6c, 0xcb, 0x49, 0xf5, 0x7a, 0x19, 0x5d, + 0xfd, 0x89, 0x35, 0xab, 0xaf, 0xba, 0xea, 0x5a, 0xab, 0x2d, 0xb1, 0xc4, 0x1a, 0x4b, 0xbb, 0x7a, + 0x3d, 0x97, 0xaf, 0xd2, 0xe2, 0x7f, 0x59, 0xb2, 0x6e, 0xb2, 0xeb, 0xa5, 0xbc, 0x4e, 0x2b, 0xd6, + 0x46, 0x71, 0x4d, 0x16, 0xaf, 0xc3, 0xfc, 0x5b, 0x2e, 0x78, 0xc3, 0x62, 0xcf, 0xf7, 0x9a, 0x22, + 0x08, 0xc4, 0xf2, 0x4e, 0xed, 0x53, 0xc5, 0x07, 0xe3, 0x8f, 0x2e, 0x59, 0xa9, 0xd5, 0x21, 0xdf, + 0x5a, 0xc4, 0x2a, 0x83, 0x48, 0x27, 0x88, 0xb3, 0x69, 0x0d, 0xbf, 0xcf, 0xaa, 0x45, 0x94, 0x04, + 0x94, 0xca, 0x80, 0x51, 0x19, 0x10, 0xce, 0x02, 0xbe, 0xf8, 0x8b, 0x33, 0x49, 0xe7, 0xba, 0x00, + 0x68, 0xbc, 0x6b, 0xeb, 0x97, 0xe1, 0xd5, 0x36, 0xaf, 0x5b, 0x04, 0xb9, 0xf8, 0x5e, 0x3a, 0x9e, + 0x57, 0x09, 0x47, 0x14, 0x84, 0x80, 0x1a, 0x5d, 0x90, 0xa3, 0x08, 0x72, 0xb4, 0xa0, 0x26, 0x24, + 0x3c, 0xae, 0x40, 0x36, 0x7a, 0x2e, 0xf6, 0x14, 0x7a, 0x51, 0x4d, 0x04, 0x49, 0xfa, 0x60, 0x4f, + 0x31, 0x16, 0x56, 0x8e, 0x7d, 0x29, 0xb1, 0x2e, 0x41, 0xc8, 0x74, 0x43, 0x59, 0xed, 0xd0, 0x55, + 0x3b, 0x54, 0xa5, 0x09, 0xa1, 0x19, 0x74, 0xad, 0x1c, 0x69, 0x6a, 0xf0, 0xbf, 0x14, 0xde, 0x77, + 0x9a, 0xef, 0x8d, 0x62, 0xa6, 0xa3, 0xa1, 0xc0, 0x73, 0x41, 0x3c, 0x29, 0xe0, 0xa4, 0xc2, 0xea, + 0x92, 0xd8, 0x5c, 0x45, 0x16, 0x57, 0x99, 0xbd, 0x85, 0x62, 0xe6, 0x50, 0x31, 0x55, 0x39, 0xd7, + 0xa2, 0xed, 0x3f, 0x05, 0xf4, 0xd3, 0x87, 0x68, 0xf4, 0x2e, 0x9c, 0x54, 0x2a, 0x8b, 0xf3, 0xae, + 0x9c, 0x3d, 0xa8, 0x8a, 0x7b, 0x3a, 0x7c, 0x9d, 0xfe, 0x39, 0x25, 0x99, 0x01, 0x25, 0x32, 0x9f, + 0xaa, 0x6f, 0xa8, 0x95, 0x5e, 0xc5, 0x92, 0x56, 0xc5, 0x92, 0x4e, 0xa5, 0x97, 0x46, 0x65, 0xe6, + 0x44, 0xb6, 0xd9, 0xeb, 0x5b, 0xfd, 0xc0, 0x7e, 0x12, 0x31, 0x39, 0x40, 0x37, 0x8f, 0x73, 0x33, + 0xc1, 0x54, 0xc2, 0x54, 0x6e, 0x9d, 0xa9, 0x6c, 0x7a, 0x7d, 0x37, 0x14, 0x7e, 0xad, 0xa2, 0x61, + 0x2d, 0x09, 0x77, 0xf4, 0x68, 0x16, 0xb3, 0xeb, 0x25, 0xa5, 0x32, 0x1c, 0x85, 0xb2, 0xd4, 0xc2, + 0x70, 0x15, 0x9b, 0x73, 0xd6, 0x1f, 0x0f, 0xf4, 0x52, 0x74, 0x33, 0xb7, 0xb4, 0xa5, 0xb7, 0x95, + 0x4a, 0xed, 0xb4, 0x52, 0x39, 0x3e, 0x3d, 0x39, 0x3d, 0x3e, 0xab, 0x56, 0x4b, 0x35, 0xdd, 0x4e, + 0xf1, 0xac, 0xab, 0x9d, 0xd2, 0x01, 0x6b, 0x23, 0x53, 0x9e, 0xb9, 0x1f, 0x08, 0x9f, 0xc3, 0x2f, + 0x47, 0xf3, 0xc0, 0x2b, 0xc3, 0x2b, 0xc3, 0x2b, 0xc3, 0x2b, 0xc3, 0x2b, 0xc3, 0x2b, 0xc3, 0x2b, + 0xd3, 0xbc, 0x72, 0xe8, 0x74, 0x9c, 0xbf, 0x69, 0x19, 0x52, 0xb3, 0x6e, 0x79, 0x6a, 0x22, 0xf8, + 0x65, 0xf8, 0xe5, 0xad, 0xf3, 0xcb, 0x3d, 0xe1, 0x37, 0x85, 0x1b, 0xda, 0x4f, 0x42, 0xc3, 0x31, + 0x57, 0xe1, 0x98, 0xe1, 0x98, 0xb3, 0xea, 0x98, 0x8f, 0x8f, 0xe1, 0x87, 0x37, 0xe1, 0x87, 0xbb, + 0xa2, 0xeb, 0xf9, 0x2f, 0xa3, 0xc0, 0x96, 0xee, 0x84, 0x67, 0x66, 0x81, 0x07, 0x86, 0x07, 0xde, + 0x3a, 0x0f, 0xdc, 0x77, 0xdc, 0x10, 0x61, 0x31, 0xbc, 0x2f, 0xc2, 0x62, 0xb8, 0xe3, 0x14, 0xdc, + 0x31, 0x47, 0x64, 0xbc, 0x60, 0x2e, 0xb8, 0x66, 0xb8, 0x66, 0x04, 0xc7, 0x08, 0x8e, 0xe1, 0x9e, + 0x11, 0x1c, 0xc3, 0x1b, 0xaf, 0x5d, 0x36, 0x74, 0xe4, 0x81, 0xc7, 0x85, 0xc7, 0x9d, 0xdf, 0xf1, + 0xd4, 0xf3, 0x5c, 0x8d, 0x68, 0x77, 0x8f, 0x70, 0x1f, 0x3f, 0xa1, 0x16, 0x0a, 0xba, 0x0d, 0xdd, + 0x06, 0xd1, 0x05, 0x24, 0x0d, 0x24, 0x0d, 0xa2, 0x0b, 0xd0, 0x7a, 0xbc, 0x6c, 0x41, 0x68, 0xfb, + 0xa1, 0x15, 0x3a, 0x5d, 0xbd, 0x36, 0x76, 0xe3, 0x39, 0xe0, 0x8a, 0xe1, 0x8a, 0xb7, 0xce, 0x15, + 0x0f, 0x25, 0x3b, 0x74, 0x9a, 0x7f, 0x06, 0xa9, 0xfb, 0xe3, 0xcf, 0xee, 0xc8, 0x96, 0x15, 0x5d, + 0xdb, 0xf5, 0x02, 0xd1, 0xf4, 0xdc, 0x16, 0xa9, 0x4f, 0x2f, 0xfc, 0x3a, 0xfc, 0x3a, 0xfc, 0x7a, + 0xee, 0xfd, 0x7a, 0xae, 0x9a, 0x84, 0x25, 0x5d, 0x8d, 0xc6, 0x3f, 0x29, 0x37, 0xc0, 0x93, 0xec, + 0xd6, 0xf4, 0x69, 0xfc, 0xa0, 0xf1, 0x4f, 0x2a, 0xad, 0xee, 0x4c, 0x37, 0x05, 0x8b, 0x5b, 0xd9, + 0xad, 0xa7, 0x29, 0xd4, 0x8a, 0x82, 0x49, 0x45, 0xc0, 0xa4, 0xa2, 0x5f, 0xb5, 0x22, 0xdf, 0x4d, + 0xf5, 0x48, 0x9b, 0x13, 0x36, 0xbe, 0x06, 0x69, 0x73, 0xe2, 0x95, 0xcf, 0xee, 0x68, 0xeb, 0x9a, + 0x8c, 0x51, 0x56, 0x44, 0xa7, 0x3f, 0x5a, 0x10, 0x3c, 0x5b, 0x81, 0xf0, 0xbf, 0xae, 0x28, 0x05, + 0x9b, 0x04, 0x18, 0x93, 0xcf, 0x66, 0xa3, 0x43, 0x5a, 0xf0, 0x12, 0x58, 0xa1, 0xf0, 0xbb, 0xb9, + 0xec, 0x92, 0x96, 0x7c, 0xf9, 0xb4, 0x3a, 0xa5, 0x35, 0xc7, 0xab, 0x2f, 0xd9, 0x28, 0x2d, 0xfe, + 0x3c, 0x73, 0x9f, 0xb4, 0x63, 0x33, 0x7d, 0xd2, 0x24, 0x44, 0x81, 0x1a, 0xff, 0x6d, 0xbe, 0x57, + 0xda, 0x7a, 0x51, 0xe1, 0xf1, 0x92, 0xd2, 0xfd, 0xd2, 0x84, 0x6b, 0x3f, 0x76, 0x08, 0xbd, 0x99, + 0xe2, 0x71, 0xb2, 0x8d, 0x78, 0x26, 0x17, 0x28, 0x0e, 0xd7, 0x6e, 0x4b, 0x9a, 0xad, 0x29, 0x48, + 0xaa, 0x2e, 0x63, 0x91, 0xbd, 0xbe, 0x4e, 0xf2, 0x92, 0x6c, 0x06, 0x6d, 0xd3, 0x9b, 0xae, 0x3d, + 0x7a, 0x5e, 0x47, 0xd8, 0x2e, 0xa5, 0xe9, 0x5a, 0x29, 0xc5, 0xa6, 0x69, 0x3d, 0xdf, 0x0b, 0xbd, + 0xa6, 0xd7, 0xb1, 0xbe, 0x0a, 0x3f, 0x50, 0x09, 0x2a, 0xa6, 0xfb, 0x63, 0xce, 0xce, 0xa0, 0xae, + 0xad, 0xbf, 0x97, 0xa1, 0xab, 0xd0, 0xd5, 0xcd, 0xe9, 0xaa, 0x70, 0xfb, 0x5d, 0xe1, 0xab, 0xe6, + 0x78, 0x52, 0x6e, 0xd5, 0x54, 0xbc, 0x35, 0x93, 0x47, 0xc7, 0x7d, 0x3b, 0x14, 0x56, 0xc7, 0xe9, + 0x3a, 0xa1, 0xba, 0x76, 0x4f, 0x8d, 0x85, 0x8a, 0x42, 0x45, 0x37, 0xa6, 0xa2, 0x7d, 0xc7, 0x0d, + 0x4b, 0x35, 0x82, 0x76, 0xd6, 0x14, 0x86, 0xd0, 0xf8, 0x76, 0x5a, 0x2f, 0x38, 0x8d, 0xe3, 0x24, + 0xbd, 0x8b, 0x72, 0x34, 0xf9, 0x74, 0x0e, 0x66, 0x77, 0x40, 0xeb, 0x7c, 0xb7, 0xf1, 0x25, 0xab, + 0x55, 0xab, 0x27, 0xd5, 0x0d, 0x2e, 0x9b, 0x21, 0x82, 0xba, 0x91, 0x66, 0x93, 0x5e, 0x11, 0x0c, + 0x41, 0x22, 0xd5, 0x1d, 0xcd, 0x0e, 0x87, 0x47, 0x82, 0x47, 0x82, 0x47, 0x82, 0x47, 0x82, 0x47, + 0x82, 0x47, 0x22, 0x7b, 0xa4, 0xd0, 0xe9, 0x0a, 0xaf, 0x4f, 0xf0, 0x45, 0xe3, 0x81, 0xf0, 0x42, + 0xf0, 0x42, 0xf0, 0x42, 0xf0, 0x42, 0xf0, 0x42, 0xf0, 0x42, 0x84, 0x4f, 0x6c, 0x2a, 0xf7, 0x62, + 0x72, 0x3a, 0x7f, 0x24, 0x75, 0x72, 0x5b, 0x90, 0xcf, 0x34, 0xb8, 0x0d, 0x9e, 0x6f, 0xa3, 0x99, + 0x1f, 0x62, 0x2f, 0x46, 0x4d, 0xbd, 0x58, 0x99, 0xf3, 0x20, 0x73, 0xdb, 0x8b, 0xd2, 0x2d, 0x2f, + 0x59, 0xb9, 0xc3, 0x0b, 0x67, 0xd3, 0x0c, 0x6a, 0x83, 0xb3, 0x69, 0x80, 0x46, 0x80, 0xc6, 0xc5, + 0x3b, 0x87, 0xb3, 0x69, 0x79, 0x6d, 0xc5, 0xd9, 0x34, 0x74, 0x75, 0x93, 0xba, 0x8a, 0xb3, 0xe9, + 0xa5, 0x4b, 0x83, 0xb3, 0x69, 0xa8, 0x28, 0x38, 0x18, 0x70, 0x30, 0xe0, 0x60, 0xc0, 0xc1, 0x70, + 0xf8, 0x22, 0x9c, 0x4d, 0xc3, 0x23, 0xc1, 0x23, 0xc1, 0x23, 0xc1, 0x23, 0xc1, 0x23, 0x65, 0xc3, + 0x23, 0xe1, 0x6c, 0x1a, 0x5e, 0x08, 0x5e, 0x08, 0x5e, 0x08, 0x5e, 0x08, 0x5e, 0xc8, 0x90, 0x17, + 0xca, 0xfa, 0xd9, 0xb4, 0x6c, 0xf7, 0x09, 0xe5, 0xa3, 0x69, 0x89, 0x6e, 0x13, 0x59, 0x6d, 0x0a, + 0xb0, 0xb6, 0xb0, 0x9e, 0xb2, 0x20, 0x5a, 0x5d, 0x01, 0x56, 0x1e, 0xc6, 0x4b, 0x1d, 0xc2, 0x4b, + 0xf7, 0x02, 0x28, 0xb3, 0xf5, 0x02, 0xc8, 0x6b, 0x1b, 0x80, 0xd4, 0x3a, 0x00, 0x3c, 0x7a, 0x9e, + 0x64, 0x93, 0xb9, 0xe9, 0xa3, 0x45, 0xa9, 0x9e, 0x72, 0x92, 0xe6, 0x3d, 0x8d, 0x3e, 0x00, 0xdb, + 0x9a, 0x66, 0x61, 0x3a, 0xc3, 0x42, 0x1a, 0x18, 0x12, 0x3b, 0xb2, 0x29, 0x74, 0x60, 0xa3, 0x76, + 0x5c, 0x53, 0x44, 0x8f, 0x0a, 0x18, 0x98, 0x82, 0x16, 0xa9, 0x7d, 0x15, 0x89, 0xe8, 0x50, 0x07, + 0xde, 0xa8, 0xf4, 0xaa, 0xa4, 0xa0, 0x40, 0xdd, 0xa5, 0xd0, 0xef, 0x68, 0xa6, 0xb5, 0x3a, 0x4c, + 0xe0, 0xac, 0x61, 0x20, 0x6f, 0xae, 0xd9, 0xf7, 0x7d, 0xe1, 0x86, 0x56, 0xcb, 0x0e, 0x85, 0x9a, + 0x69, 0x9f, 0x1b, 0x09, 0x0b, 0x0f, 0x0b, 0xff, 0x6a, 0xbd, 0x87, 0xb2, 0x61, 0xd9, 0x6e, 0x4b, + 0xb6, 0xad, 0xec, 0xa4, 0xa3, 0xbd, 0xc4, 0x67, 0x3f, 0xd9, 0x61, 0x28, 0x7c, 0x57, 0xda, 0x5c, + 0x17, 0xff, 0xfb, 0xe5, 0xd8, 0x3a, 0x6b, 0x7c, 0xaf, 0x0c, 0xee, 0xef, 0xad, 0xd1, 0x8f, 0xe5, + 0xe9, 0x1f, 0xef, 0xc6, 0x3f, 0xbc, 0x9b, 0xfb, 0x61, 0xff, 0xfe, 0xfe, 0x4d, 0xf4, 0xf3, 0xff, + 0x1c, 0xfc, 0xf4, 0x9f, 0x2f, 0xff, 0x63, 0x35, 0xe6, 0x3e, 0xf1, 0x8f, 0xe2, 0x46, 0xd4, 0xb7, + 0xe5, 0x75, 0x6d, 0xc7, 0xb5, 0xa4, 0xae, 0xd6, 0x98, 0xec, 0xca, 0xd4, 0x20, 0x28, 0x2d, 0x94, + 0x96, 0x2c, 0x1e, 0xca, 0x2a, 0xfb, 0x41, 0xb8, 0x4f, 0x51, 0x34, 0xbb, 0x15, 0x00, 0xab, 0x04, + 0x80, 0x35, 0x5e, 0x8a, 0x72, 0xf5, 0x24, 0x87, 0x78, 0xca, 0x84, 0x93, 0xd9, 0xdf, 0xdf, 0xff, + 0x62, 0x5b, 0x7f, 0xd7, 0xad, 0xff, 0x1c, 0x5b, 0x67, 0x0f, 0x8d, 0xa9, 0xbf, 0xdc, 0xdf, 0x5b, + 0x0f, 0x8d, 0x83, 0xef, 0xc7, 0x87, 0xb5, 0xd2, 0xe0, 0xe0, 0xa7, 0xc9, 0xef, 0x1b, 0xf7, 0xf7, + 0x6f, 0x0e, 0xfe, 0x49, 0x19, 0xf5, 0xd3, 0xc1, 0x8f, 0xfb, 0xfb, 0x37, 0x9b, 0xf1, 0x3c, 0xcf, + 0x5e, 0x10, 0xaa, 0xb9, 0x9d, 0x64, 0x04, 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, 0x0e, 0x7c, + 0x0e, 0x7c, 0x8e, 0x92, 0xcf, 0xe9, 0x78, 0x4f, 0x8e, 0x6b, 0x3d, 0xda, 0xae, 0x2b, 0x7c, 0x79, + 0xbf, 0x33, 0x33, 0x0a, 0xbe, 0x07, 0xbe, 0xe7, 0xd5, 0x7a, 0x4b, 0xdf, 0xbf, 0x27, 0x79, 0xdf, + 0x1e, 0x4d, 0xb6, 0xbb, 0x5e, 0xd8, 0x52, 0x16, 0xed, 0xe9, 0x41, 0x90, 0x6c, 0x48, 0xf6, 0xe6, + 0x24, 0x7b, 0xb3, 0x07, 0xe0, 0x6b, 0x92, 0x02, 0x64, 0xcf, 0xbe, 0x97, 0xa7, 0x00, 0xc8, 0x9d, + 0x7b, 0x87, 0xa2, 0xe3, 0x8a, 0x50, 0xba, 0x21, 0xfe, 0xec, 0xc7, 0xd1, 0x13, 0x1f, 0x3d, 0xf1, + 0x65, 0xb6, 0x3c, 0x4d, 0x53, 0x8d, 0xbe, 0x03, 0xdb, 0xdb, 0x77, 0xa0, 0x6d, 0x77, 0x02, 0x34, + 0x1e, 0x40, 0x46, 0xb0, 0x6e, 0xfc, 0xbf, 0xfd, 0x8d, 0x07, 0x50, 0x94, 0x0c, 0x55, 0x43, 0xf2, + 0xbd, 0xc4, 0x10, 0x24, 0xdf, 0x9b, 0x25, 0x21, 0x09, 0xcc, 0xac, 0x16, 0x43, 0xcb, 0xbd, 0x64, + 0x48, 0xbe, 0xd7, 0xf6, 0x45, 0x28, 0x4a, 0x86, 0x47, 0x82, 0x47, 0x82, 0x47, 0x82, 0x47, 0x82, + 0x47, 0xca, 0x86, 0x47, 0x42, 0x51, 0x32, 0xbc, 0x10, 0xbc, 0x10, 0xbc, 0x10, 0xbc, 0x10, 0xbc, + 0x90, 0x21, 0x2f, 0x94, 0xc9, 0xa2, 0xe4, 0x99, 0xd3, 0x3b, 0xf6, 0x9e, 0xd9, 0x77, 0xd1, 0xec, + 0x68, 0x9b, 0x8d, 0xe3, 0x2b, 0x4d, 0x87, 0x8b, 0xe3, 0x2b, 0x60, 0x47, 0x60, 0x47, 0x23, 0xd8, + 0x11, 0xc7, 0x57, 0x50, 0x35, 0xa8, 0x1a, 0xc2, 0x34, 0x84, 0x69, 0x08, 0xd3, 0x10, 0xa6, 0xe1, + 0xf8, 0x0a, 0x1e, 0x09, 0x1e, 0x09, 0x1e, 0x09, 0x1e, 0x09, 0x1e, 0x29, 0x47, 0x1e, 0x09, 0xc7, + 0x57, 0xf0, 0x42, 0xf0, 0x42, 0xf0, 0x42, 0xf0, 0x42, 0xf0, 0x42, 0x86, 0xbc, 0x50, 0x0e, 0x8e, + 0xaf, 0x98, 0xdb, 0xea, 0xce, 0x9c, 0x5e, 0xe5, 0xb8, 0xb3, 0xae, 0x4c, 0x85, 0x1e, 0x71, 0x59, + 0xa4, 0xeb, 0x0c, 0xf7, 0x56, 0xbc, 0x78, 0xb1, 0xde, 0x7f, 0x1a, 0xfa, 0x31, 0xd1, 0x5a, 0x68, + 0x9e, 0xd7, 0xd4, 0x1f, 0x1e, 0x8d, 0x5c, 0xdf, 0xbb, 0xd1, 0xcb, 0x2e, 0x2b, 0x40, 0x7c, 0x2f, + 0x82, 0xa6, 0xef, 0xf4, 0xe2, 0x45, 0x2d, 0xd6, 0x5b, 0x2d, 0xc7, 0x7d, 0x2a, 0x0c, 0x5f, 0x71, + 0x84, 0x51, 0x0a, 0x2d, 0x3b, 0xb4, 0x0b, 0xa1, 0x57, 0x08, 0x9f, 0x45, 0x61, 0x34, 0x55, 0xa1, + 0xeb, 0xb5, 0x44, 0x27, 0x13, 0x15, 0x8d, 0x3d, 0xe1, 0xb6, 0x3b, 0xde, 0x5f, 0x39, 0x2c, 0x67, + 0x1c, 0x7f, 0xf3, 0xb4, 0x6a, 0x19, 0x93, 0x07, 0x4a, 0x9f, 0x06, 0x4b, 0x2c, 0xee, 0x22, 0x09, + 0x3a, 0xf7, 0xdc, 0xd0, 0x76, 0x5c, 0xe1, 0x17, 0xda, 0x9e, 0x1f, 0x09, 0xd2, 0x70, 0x92, 0x95, + 0x32, 0x23, 0x29, 0x3b, 0xca, 0xe8, 0x99, 0x76, 0xb6, 0x2c, 0xf7, 0xda, 0x85, 0x1c, 0x1e, 0x2c, + 0xaf, 0x95, 0x39, 0x49, 0x9f, 0xa6, 0x2a, 0xb3, 0x6b, 0xac, 0x5e, 0xe3, 0xb5, 0xd5, 0x5b, 0x6d, + 0xe6, 0x65, 0xcd, 0x7b, 0x71, 0x61, 0xeb, 0x72, 0x09, 0x43, 0x3e, 0xbb, 0x3e, 0x93, 0xef, 0x3a, + 0xfa, 0x29, 0xd6, 0xc0, 0x65, 0xdf, 0xb2, 0xe8, 0x04, 0xbf, 0xd8, 0x7f, 0x8a, 0x1b, 0xcf, 0x9b, + 0xdf, 0xa9, 0xd7, 0xdf, 0xbc, 0x38, 0xfd, 0x4f, 0x33, 0xdf, 0xec, 0xbd, 0xf8, 0xea, 0x34, 0x63, + 0xaf, 0x3a, 0xd8, 0x1b, 0xfc, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x87, 0xcd, 0xba, 0xcd, 0x9c, 0x25, 0x10, 0x00, + } +) + +// ΛEnumTypes is a map, keyed by a YANG schema path, of the enumerated types that +// correspond with the leaf. The type is represented as a reflect.Type. The naming +// of the map ensures that there are no clashes with valid YANG identifiers. +var ΛEnumTypes = map[string][]reflect.Type{ + "/components/component/state/oper-status": { + reflect.TypeOf((E_OpenconfigPlatformTypes_COMPONENT_OPER_STATUS)(0)), + }, + "/components/component/state/temperature/alarm-severity": { + reflect.TypeOf((E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY)(0)), + }, + "/components/component/state/type": { + reflect.TypeOf((E_OpenconfigPlatformTypes_OPENCONFIG_HARDWARE_COMPONENT)(0)), + reflect.TypeOf((E_OpenconfigPlatformTypes_OPENCONFIG_SOFTWARE_COMPONENT)(0)), + }, + "/interfaces/interface/config/type": { + reflect.TypeOf((E_IETFInterfaces_InterfaceType)(0)), + }, + "/interfaces/interface/state/admin-status": { + reflect.TypeOf((E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus)(0)), + }, + "/interfaces/interface/state/oper-status": { + reflect.TypeOf((E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus)(0)), + }, + "/interfaces/interface/state/type": { + reflect.TypeOf((E_IETFInterfaces_InterfaceType)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/state/admin-status": { + reflect.TypeOf((E_OpenconfigInterfaces_Interfaces_Interface_State_AdminStatus)(0)), + }, + "/interfaces/interface/subinterfaces/subinterface/state/oper-status": { + reflect.TypeOf((E_OpenconfigInterfaces_Interfaces_Interface_State_OperStatus)(0)), + }, + "/messages/config/severity": { + reflect.TypeOf((E_OpenconfigMessages_SyslogSeverity)(0)), + }, + "/messages/debug-entries/debug-service/config/service": { + reflect.TypeOf((E_OpenconfigMessages_DEBUG_SERVICE)(0)), + }, + "/messages/debug-entries/debug-service/service": { + reflect.TypeOf((E_OpenconfigMessages_DEBUG_SERVICE)(0)), + }, + "/messages/debug-entries/debug-service/state/service": { + reflect.TypeOf((E_OpenconfigMessages_DEBUG_SERVICE)(0)), + }, + "/messages/state/severity": { + reflect.TypeOf((E_OpenconfigMessages_SyslogSeverity)(0)), + }, + "/system/aaa/accounting/config/accounting-method": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_METHOD_TYPE)(0)), + }, + "/system/aaa/accounting/events/event/config/event-type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE)(0)), + }, + "/system/aaa/accounting/events/event/config/record": { + reflect.TypeOf((E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record)(0)), + }, + "/system/aaa/accounting/events/event/event-type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE)(0)), + }, + "/system/aaa/accounting/events/event/state/event-type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_ACCOUNTING_EVENT_TYPE)(0)), + }, + "/system/aaa/accounting/events/event/state/record": { + reflect.TypeOf((E_OpenconfigSystem_System_Aaa_Accounting_Events_Event_Config_Record)(0)), + }, + "/system/aaa/accounting/state/accounting-method": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_METHOD_TYPE)(0)), + }, + "/system/aaa/authentication/config/authentication-method": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_METHOD_TYPE)(0)), + }, + "/system/aaa/authentication/state/authentication-method": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_METHOD_TYPE)(0)), + }, + "/system/aaa/authentication/users/user/config/role": { + reflect.TypeOf((E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES)(0)), + }, + "/system/aaa/authentication/users/user/state/role": { + reflect.TypeOf((E_OpenconfigAaaTypes_SYSTEM_DEFINED_ROLES)(0)), + }, + "/system/aaa/authorization/config/authorization-method": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_METHOD_TYPE)(0)), + }, + "/system/aaa/authorization/events/event/config/event-type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE)(0)), + }, + "/system/aaa/authorization/events/event/event-type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE)(0)), + }, + "/system/aaa/authorization/events/event/state/event-type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_AUTHORIZATION_EVENT_TYPE)(0)), + }, + "/system/aaa/authorization/state/authorization-method": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_METHOD_TYPE)(0)), + }, + "/system/aaa/server-groups/server-group/config/type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_SERVER_TYPE)(0)), + }, + "/system/aaa/server-groups/server-group/state/type": { + reflect.TypeOf((E_OpenconfigAaaTypes_AAA_SERVER_TYPE)(0)), + }, + "/system/alarms/alarm/state/severity": { + reflect.TypeOf((E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_SEVERITY)(0)), + }, + "/system/alarms/alarm/state/type-id": { + reflect.TypeOf((E_OpenconfigAlarmTypes_OPENCONFIG_ALARM_TYPE_ID)(0)), + }, + "/system/cpus/cpu/index": { + reflect.TypeOf((E_OpenconfigSystem_System_Cpus_Cpu_State_Index)(0)), + }, + "/system/cpus/cpu/state/index": { + reflect.TypeOf((E_OpenconfigSystem_System_Cpus_Cpu_State_Index)(0)), + }, + "/system/grpc-server/config/listen-addresses": { + reflect.TypeOf((E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses)(0)), + }, + "/system/grpc-server/state/listen-addresses": { + reflect.TypeOf((E_OpenconfigSystem_System_GrpcServer_Config_ListenAddresses)(0)), + }, + "/system/logging/console/selectors/selector/config/facility": { + reflect.TypeOf((E_OpenconfigSystemLogging_SYSLOG_FACILITY)(0)), + }, + "/system/logging/console/selectors/selector/config/severity": { + reflect.TypeOf((E_OpenconfigSystemLogging_SyslogSeverity)(0)), + }, + "/system/logging/console/selectors/selector/facility": { + reflect.TypeOf((E_OpenconfigSystemLogging_SYSLOG_FACILITY)(0)), + }, + "/system/logging/console/selectors/selector/severity": { + reflect.TypeOf((E_OpenconfigSystemLogging_SyslogSeverity)(0)), + }, + "/system/logging/console/selectors/selector/state/facility": { + reflect.TypeOf((E_OpenconfigSystemLogging_SYSLOG_FACILITY)(0)), + }, + "/system/logging/console/selectors/selector/state/severity": { + reflect.TypeOf((E_OpenconfigSystemLogging_SyslogSeverity)(0)), + }, + "/system/logging/remote-servers/remote-server/selectors/selector/config/facility": { + reflect.TypeOf((E_OpenconfigSystemLogging_SYSLOG_FACILITY)(0)), + }, + "/system/logging/remote-servers/remote-server/selectors/selector/config/severity": { + reflect.TypeOf((E_OpenconfigSystemLogging_SyslogSeverity)(0)), + }, + "/system/logging/remote-servers/remote-server/selectors/selector/facility": { + reflect.TypeOf((E_OpenconfigSystemLogging_SYSLOG_FACILITY)(0)), + }, + "/system/logging/remote-servers/remote-server/selectors/selector/severity": { + reflect.TypeOf((E_OpenconfigSystemLogging_SyslogSeverity)(0)), + }, + "/system/logging/remote-servers/remote-server/selectors/selector/state/facility": { + reflect.TypeOf((E_OpenconfigSystemLogging_SYSLOG_FACILITY)(0)), + }, + "/system/logging/remote-servers/remote-server/selectors/selector/state/severity": { + reflect.TypeOf((E_OpenconfigSystemLogging_SyslogSeverity)(0)), + }, + "/system/messages/config/severity": { + reflect.TypeOf((E_OpenconfigMessages_SyslogSeverity)(0)), + }, + "/system/messages/debug-entries/debug-service/config/service": { + reflect.TypeOf((E_OpenconfigMessages_DEBUG_SERVICE)(0)), + }, + "/system/messages/debug-entries/debug-service/service": { + reflect.TypeOf((E_OpenconfigMessages_DEBUG_SERVICE)(0)), + }, + "/system/messages/debug-entries/debug-service/state/service": { + reflect.TypeOf((E_OpenconfigMessages_DEBUG_SERVICE)(0)), + }, + "/system/messages/state/severity": { + reflect.TypeOf((E_OpenconfigMessages_SyslogSeverity)(0)), + }, + "/system/ntp/ntp-keys/ntp-key/config/key-type": { + reflect.TypeOf((E_OpenconfigSystem_NTP_AUTH_TYPE)(0)), + }, + "/system/ntp/ntp-keys/ntp-key/state/key-type": { + reflect.TypeOf((E_OpenconfigSystem_NTP_AUTH_TYPE)(0)), + }, + "/system/ntp/servers/server/config/association-type": { + reflect.TypeOf((E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType)(0)), + }, + "/system/ntp/servers/server/state/association-type": { + reflect.TypeOf((E_OpenconfigSystem_System_Ntp_Servers_Server_Config_AssociationType)(0)), + }, + "/system/openflow/agent/config/failure-mode": { + reflect.TypeOf((E_OpenconfigOpenflow_FailureMode)(0)), + }, + "/system/openflow/agent/state/failure-mode": { + reflect.TypeOf((E_OpenconfigOpenflow_FailureMode)(0)), + }, + "/system/openflow/controllers/controller/connections/connection/config/transport": { + reflect.TypeOf((E_OpenconfigOpenflow_Transport)(0)), + }, + "/system/openflow/controllers/controller/connections/connection/state/transport": { + reflect.TypeOf((E_OpenconfigOpenflow_Transport)(0)), + }, + "/system/ssh-server/config/protocol-version": { + reflect.TypeOf((E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion)(0)), + }, + "/system/ssh-server/state/protocol-version": { + reflect.TypeOf((E_OpenconfigSystem_System_SshServer_Config_ProtocolVersion)(0)), + }, +} diff --git a/forks/google/gnmi/modeldata/modeldata.go b/forks/google/gnmi/modeldata/modeldata.go new file mode 100644 index 0000000000000000000000000000000000000000..dac86fba7006a025ca17b448318dd73dcd3e41bf --- /dev/null +++ b/forks/google/gnmi/modeldata/modeldata.go @@ -0,0 +1,57 @@ +/* Copyright 2017 Google Inc. + +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 + + https://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. +*/ + +// Package modeldata contains the following model data in gnmi proto struct: +// openconfig-interfaces 2.0.0, +// openconfig-openflow 0.1.0, +// openconfig-platform 0.5.0, +// openconfig-system 0.2.0. +package modeldata + +import ( + pb "github.com/openconfig/gnmi/proto/gnmi" +) + +const ( + // OpenconfigInterfacesModel is the openconfig YANG model for interfaces. + OpenconfigInterfacesModel = "openconfig-interfaces" + // OpenconfigOpenflowModel is the openconfig YANG model for openflow. + OpenconfigOpenflowModel = "openconfig-openflow" + // OpenconfigPlatformModel is the openconfig YANG model for platform. + OpenconfigPlatformModel = "openconfig-platform" + // OpenconfigSystemModel is the openconfig YANG model for system. + OpenconfigSystemModel = "openconfig-system" +) + +var ( + // ModelData is a list of supported models. + ModelData = []*pb.ModelData{{ + Name: OpenconfigInterfacesModel, + Organization: "OpenConfig working group", + Version: "2.0.0", + }, { + Name: OpenconfigOpenflowModel, + Organization: "OpenConfig working group", + Version: "0.1.0", + }, { + Name: OpenconfigPlatformModel, + Organization: "OpenConfig working group", + Version: "0.5.0", + }, { + Name: OpenconfigSystemModel, + Organization: "OpenConfig working group", + Version: "0.2.0", + }} +) diff --git a/forks/google/gnmi/server.go b/forks/google/gnmi/server.go new file mode 100644 index 0000000000000000000000000000000000000000..3af5d9b50e74aa79c77a87f116920349374fbdc9 --- /dev/null +++ b/forks/google/gnmi/server.go @@ -0,0 +1,602 @@ +/* Copyright 2017 Google Inc. + +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 + + https://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. +*/ + +// Package gnmi implements a gnmi server to mock a device with YANG models. +package gnmi + +import ( + "bytes" + "compress/gzip" + "encoding/json" + "fmt" + "io/ioutil" + "reflect" + "strconv" + "sync" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + log "github.com/golang/glog" + "github.com/golang/protobuf/proto" + "github.com/openconfig/gnmi/value" + "github.com/openconfig/ygot/util" + "github.com/openconfig/ygot/ygot" + "github.com/openconfig/ygot/ytypes" + + dpb "github.com/golang/protobuf/protoc-gen-go/descriptor" + pb "github.com/openconfig/gnmi/proto/gnmi" +) + +// ConfigCallback is the signature of the function to apply a validated config to the physical device. +type ConfigCallback func(ygot.ValidatedGoStruct) error + +var ( + pbRootPath = &pb.Path{} + supportedEncodings = []pb.Encoding{pb.Encoding_PROTO} +) + +// Server struct maintains the data structure for device config and implements the interface of gnmi server. +// It supports Capabilities, Get, and Set APIs. +// Typical usage: +// g := grpc.NewServer() +// s, err := Server.NewServer(model, config, callback) +// pb.NewServer(g, s) +// reflection.Register(g) +// listen, err := net.Listen("tcp", ":8080") +// g.Serve(listen) +// +// For a real device, apply the config changes to the hardware in the callback function. +// Arguments: +// newConfig: new root config to be applied on the device. + +type Server struct { + model *Model + callback ConfigCallback + + config ygot.ValidatedGoStruct + mu sync.RWMutex // mu is the RW lock to protect the access to config +} + +// NewServer creates an instance of Server with given json config. +func NewServer(model *Model, config []byte, callback ConfigCallback) (*Server, error) { + rootStruct, err := model.NewConfigStruct(config) + if err != nil { + return nil, err + } + s := &Server{ + model: model, + config: rootStruct, + callback: callback, + } + if config != nil && s.callback != nil { + if err := s.callback(rootStruct); err != nil { + return nil, err + } + } + return s, nil +} + +// checkEncodingAndModel checks whether encoding and models are supported by the server. Return error if anything is unsupported. +func (s *Server) checkEncodingAndModel(encoding pb.Encoding, models []*pb.ModelData) error { + hasSupportedEncoding := false + for _, supportedEncoding := range supportedEncodings { + if encoding == supportedEncoding { + hasSupportedEncoding = true + break + } + } + if !hasSupportedEncoding { + return fmt.Errorf("unsupported encoding: %s", pb.Encoding_name[int32(encoding)]) + } + for _, m := range models { + isSupported := false + for _, supportedModel := range s.model.modelData { + if reflect.DeepEqual(m, supportedModel) { + isSupported = true + break + } + } + if !isSupported { + return fmt.Errorf("unsupported model: %v", m) + } + } + return nil +} + +// doDelete deletes the path from the json tree if the path exists. If success, +// it calls the callback function to apply the change to the device hardware. +func (s *Server) doDelete(jsonTree map[string]interface{}, prefix, path *pb.Path) (*pb.UpdateResult, error) { + // Update json tree of the device config + var curNode interface{} = jsonTree + pathDeleted := false + fullPath := gnmiFullPath(prefix, path) + schema := s.model.schemaTreeRoot + for i, elem := range fullPath.Elem { // Delete sub-tree or leaf node. + node, ok := curNode.(map[string]interface{}) + if !ok { + break + } + + // Delete node + if i == len(fullPath.Elem)-1 { + if elem.GetKey() == nil { + delete(node, elem.Name) + pathDeleted = true + break + } + pathDeleted = deleteKeyedListEntry(node, elem) + break + } + + if curNode, schema = getChildNode(node, schema, elem, false); curNode == nil { + break + } + } + if reflect.DeepEqual(fullPath, pbRootPath) { // Delete root + for k := range jsonTree { + delete(jsonTree, k) + } + } + + // Apply the validated operation to the config tree and device. + if pathDeleted { + newConfig, err := s.toGoStruct(jsonTree) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + if s.callback != nil { + if applyErr := s.callback(newConfig); applyErr != nil { + if rollbackErr := s.callback(s.config); rollbackErr != nil { + return nil, status.Errorf(codes.Internal, "error in rollback the failed operation (%v): %v", applyErr, rollbackErr) + } + return nil, status.Errorf(codes.Aborted, "error in applying operation to device: %v", applyErr) + } + } + } + return &pb.UpdateResult{ + Path: path, + Op: pb.UpdateResult_DELETE, + }, nil +} + +// doReplaceOrUpdate validates the replace or update operation to be applied to +// the device, modifies the json tree of the config struct, then calls the +// callback function to apply the operation to the device hardware. +func (s *Server) doReplaceOrUpdate(jsonTree map[string]interface{}, op pb.UpdateResult_Operation, prefix, path *pb.Path, val *pb.TypedValue) (*pb.UpdateResult, error) { + // Validate the operation. + fullPath := gnmiFullPath(prefix, path) + emptyNode, _, err := ytypes.GetOrCreateNode(s.model.schemaTreeRoot, s.model.newRootValue(), fullPath) + if err != nil { + return nil, status.Errorf(codes.NotFound, "path %v is not found in the config structure: %v", fullPath, err) + } + var nodeVal interface{} + nodeStruct, ok := emptyNode.(ygot.ValidatedGoStruct) + if ok { + if err := s.model.jsonUnmarshaler(val.GetJsonIetfVal(), nodeStruct); err != nil { + return nil, status.Errorf(codes.InvalidArgument, "unmarshaling json data to config struct fails: %v", err) + } + if err := nodeStruct.Validate(); err != nil { + return nil, status.Errorf(codes.InvalidArgument, "config data validation fails: %v", err) + } + var err error + if nodeVal, err = ygot.ConstructIETFJSON(nodeStruct, &ygot.RFC7951JSONConfig{}); err != nil { + msg := fmt.Sprintf("error in constructing IETF JSON tree from config struct: %v", err) + log.Error(msg) + return nil, status.Error(codes.Internal, msg) + } + } else { + var err error + if nodeVal, err = value.ToScalar(val); err != nil { + return nil, status.Errorf(codes.Internal, "cannot convert leaf node to scalar type: %v", err) + } + } + + // Update json tree of the device config. + var curNode interface{} = jsonTree + schema := s.model.schemaTreeRoot + for i, elem := range fullPath.Elem { + switch node := curNode.(type) { + case map[string]interface{}: + // Set node value. + if i == len(fullPath.Elem)-1 { + if elem.GetKey() == nil { + if grpcStatusError := setPathWithoutAttribute(op, node, elem, nodeVal); grpcStatusError != nil { + return nil, grpcStatusError + } + break + } + if grpcStatusError := setPathWithAttribute(op, node, elem, nodeVal); grpcStatusError != nil { + return nil, grpcStatusError + } + break + } + + if curNode, schema = getChildNode(node, schema, elem, true); curNode == nil { + return nil, status.Errorf(codes.NotFound, "path elem not found: %v", elem) + } + case []interface{}: + return nil, status.Errorf(codes.NotFound, "incompatible path elem: %v", elem) + default: + return nil, status.Errorf(codes.Internal, "wrong node type: %T", curNode) + } + } + if reflect.DeepEqual(fullPath, pbRootPath) { // Replace/Update root. + if op == pb.UpdateResult_UPDATE { + return nil, status.Error(codes.Unimplemented, "update the root of config tree is unsupported") + } + nodeValAsTree, ok := nodeVal.(map[string]interface{}) + if !ok { + return nil, status.Errorf(codes.InvalidArgument, "expect a tree to replace the root, got a scalar value: %T", nodeVal) + } + for k := range jsonTree { + delete(jsonTree, k) + } + for k, v := range nodeValAsTree { + jsonTree[k] = v + } + } + newConfig, err := s.toGoStruct(jsonTree) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + // Apply the validated operation to the device. + if s.callback != nil { + if applyErr := s.callback(newConfig); applyErr != nil { + if rollbackErr := s.callback(s.config); rollbackErr != nil { + return nil, status.Errorf(codes.Internal, "error in rollback the failed operation (%v): %v", applyErr, rollbackErr) + } + return nil, status.Errorf(codes.Aborted, "error in applying operation to device: %v", applyErr) + } + } + return &pb.UpdateResult{ + Path: path, + Op: op, + }, nil +} + +func (s *Server) toGoStruct(jsonTree map[string]interface{}) (ygot.ValidatedGoStruct, error) { + jsonDump, err := json.Marshal(jsonTree) + if err != nil { + return nil, fmt.Errorf("error in marshaling IETF JSON tree to bytes: %v", err) + } + goStruct, err := s.model.NewConfigStruct(jsonDump) + if err != nil { + return nil, fmt.Errorf("error in creating config struct from IETF JSON data: %v", err) + } + return goStruct, nil +} + +// getGNMIServiceVersion returns a pointer to the gNMI service version string. +// The method is non-trivial because of the way it is defined in the proto file. +func getGNMIServiceVersion() (*string, error) { + gzB := (&pb.Update{}).ProtoReflect().Descriptor() + r, err := gzip.NewReader(bytes.NewReader([]byte(gzB.Name()))) + if err != nil { + return nil, fmt.Errorf("error in initializing gzip reader: %v", err) + } + defer r.Close() + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, fmt.Errorf("error in reading gzip data: %v", err) + } + desc := &dpb.FileDescriptorProto{} + if err := proto.Unmarshal(b, desc); err != nil { + return nil, fmt.Errorf("error in unmarshaling proto: %v", err) + } + ver, err := proto.GetExtension(desc.Options, pb.E_GnmiService) + if err != nil { + return nil, fmt.Errorf("error in getting version from proto extension: %v", err) + } + return ver.(*string), nil +} + +// deleteKeyedListEntry deletes the keyed list entry from node that matches the +// path elem. If the entry is the only one in keyed list, deletes the entire +// list. If the entry is found and deleted, the function returns true. If it is +// not found, the function returns false. +func deleteKeyedListEntry(node map[string]interface{}, elem *pb.PathElem) bool { + curNode, ok := node[elem.Name] + if !ok { + return false + } + + keyedList, ok := curNode.([]interface{}) + if !ok { + return false + } + for i, n := range keyedList { + m, ok := n.(map[string]interface{}) + if !ok { + log.Errorf("expect map[string]interface{} for a keyed list entry, got %T", n) + return false + } + keyMatching := true + for k, v := range elem.Key { + attrVal, ok := m[k] + if !ok { + return false + } + if v != fmt.Sprintf("%v", attrVal) { + keyMatching = false + break + } + } + if keyMatching { + listLen := len(keyedList) + if listLen == 1 { + delete(node, elem.Name) + return true + } + keyedList[i] = keyedList[listLen-1] + node[elem.Name] = keyedList[0 : listLen-1] + return true + } + } + return false +} + +// gnmiFullPath builds the full path from the prefix and path. +func gnmiFullPath(prefix, path *pb.Path) *pb.Path { + fullPath := &pb.Path{Origin: path.Origin} + if path.GetElem() != nil { + fullPath.Elem = append(prefix.GetElem(), path.GetElem()...) + } + return fullPath +} + +// isNIl checks if an interface is nil or its value is nil. +func isNil(i interface{}) bool { + if i == nil { + return true + } + switch kind := reflect.ValueOf(i).Kind(); kind { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return reflect.ValueOf(i).IsNil() + default: + return false + } +} + +// setPathWithAttribute replaces or updates a child node of curNode in the IETF +// JSON config tree, where the child node is indexed by pathElem with attribute. +// The function returns grpc status error if unsuccessful. +func setPathWithAttribute(op pb.UpdateResult_Operation, curNode map[string]interface{}, pathElem *pb.PathElem, nodeVal interface{}) error { + nodeValAsTree, ok := nodeVal.(map[string]interface{}) + if !ok { + return status.Errorf(codes.InvalidArgument, "expect nodeVal is a json node of map[string]interface{}, received %T", nodeVal) + } + m := getKeyedListEntry(curNode, pathElem, true) + if m == nil { + return status.Errorf(codes.NotFound, "path elem not found: %v", pathElem) + } + if op == pb.UpdateResult_REPLACE { + for k := range m { + delete(m, k) + } + } + for attrKey, attrVal := range pathElem.GetKey() { + m[attrKey] = attrVal + if asNum, err := strconv.ParseFloat(attrVal, 64); err == nil { + m[attrKey] = asNum + } + for k, v := range nodeValAsTree { + if k == attrKey && fmt.Sprintf("%v", v) != attrVal { + return status.Errorf(codes.InvalidArgument, "invalid config data: %v is a path attribute", k) + } + } + } + for k, v := range nodeValAsTree { + m[k] = v + } + return nil +} + +// setPathWithoutAttribute replaces or updates a child node of curNode in the +// IETF config tree, where the child node is indexed by pathElem without +// attribute. The function returns grpc status error if unsuccessful. +func setPathWithoutAttribute(op pb.UpdateResult_Operation, curNode map[string]interface{}, pathElem *pb.PathElem, nodeVal interface{}) error { + target, hasElem := curNode[pathElem.Name] + nodeValAsTree, nodeValIsTree := nodeVal.(map[string]interface{}) + if op == pb.UpdateResult_REPLACE || !hasElem || !nodeValIsTree { + curNode[pathElem.Name] = nodeVal + return nil + } + targetAsTree, ok := target.(map[string]interface{}) + if !ok { + return status.Errorf(codes.Internal, "error in setting path: expect map[string]interface{} to update, got %T", target) + } + for k, v := range nodeValAsTree { + targetAsTree[k] = v + } + return nil +} + +// Capabilities returns supported encodings and supported models. +func (s *Server) Capabilities(ctx context.Context, req *pb.CapabilityRequest) (*pb.CapabilityResponse, error) { + ver, err := getGNMIServiceVersion() + if err != nil { + return nil, status.Errorf(codes.Internal, "error in getting gnmi service version: %v", err) + } + return &pb.CapabilityResponse{ + SupportedModels: s.model.modelData, + SupportedEncodings: supportedEncodings, + GNMIVersion: *ver, + }, nil +} + +// Get implements the Get RPC in gNMI spec. +func (s *Server) Get(ctx context.Context, req *pb.GetRequest) (*pb.GetResponse, error) { + if req.GetType() != pb.GetRequest_ALL { + return nil, status.Errorf(codes.Unimplemented, "unsupported request type: %s", pb.GetRequest_DataType_name[int32(req.GetType())]) + } + if err := s.checkEncodingAndModel(req.GetEncoding(), req.GetUseModels()); err != nil { + return nil, status.Error(codes.Unimplemented, err.Error()) + } + + prefix := req.GetPrefix() + paths := req.GetPath() + notifications := make([]*pb.Notification, 0) + + s.mu.RLock() + defer s.mu.RUnlock() + + for _, path := range paths { + // Get schema node for path from config struct. + fullPath := path + if prefix != nil { + fullPath = gnmiFullPath(prefix, path) + } + if fullPath.GetElem() == nil && fullPath.GetElement() != nil { + return nil, status.Error(codes.Unimplemented, "deprecated path element type is unsupported") + } + opts := []ytypes.GetNodeOpt{&ytypes.GetHandleWildcards{}, &ytypes.GetPartialKeyMatch{}} + nodes, err := ytypes.GetNode(s.model.schemaTreeRoot, s.config, fullPath, opts...) + if len(nodes) == 0 || err != nil || util.IsValueNil(nodes[0].Data) { + return nil, status.Errorf(codes.NotFound, "path %v not found: %v", fullPath, err) + } + for _, n := range nodes { + node := n.Data + ts := time.Now().UnixNano() + + nodeStruct, ok := node.(ygot.GoStruct) + // Return leaf node. + if !ok { + var val *pb.TypedValue + switch kind := reflect.ValueOf(node).Kind(); kind { + case reflect.Ptr, reflect.Interface: + var err error + val, err = value.FromScalar(reflect.ValueOf(node).Elem().Interface()) + if err != nil { + msg := fmt.Sprintf("leaf node %v does not contain a scalar type value: %v", path, err) + log.Error(msg) + return nil, status.Error(codes.Internal, msg) + } + case reflect.Int64: + enumMap, ok := s.model.enumData[reflect.TypeOf(node).Name()] + if !ok { + return nil, status.Error(codes.Internal, "not a GoStruct enumeration type") + } + val = &pb.TypedValue{ + Value: &pb.TypedValue_StringVal{ + StringVal: enumMap[reflect.ValueOf(node).Int()].Name, + }, + } + default: + return nil, status.Errorf(codes.Internal, "unexpected kind of leaf node type: %v %v", node, kind) + } + + update := &pb.Update{Path: path, Val: val} + notification := &pb.Notification{ + Timestamp: ts, + Prefix: prefix, + Update: []*pb.Update{update}, + } + notifications = append(notifications, notification) + continue + } + + if req.GetUseModels() != nil { + return nil, status.Errorf(codes.Unimplemented, "filtering Get using use_models is unsupported, got: %v", req.GetUseModels()) + } + + nots, err := ygot.TogNMINotifications(nodeStruct, ts, ygot.GNMINotificationsConfig{ + UsePathElem: false, + StringSlicePrefix: []string{"interfaces", "interface"}, + }) + + if err != nil { + return nil, err + } + + notifications = append(notifications, nots...) + + } + } + + return &pb.GetResponse{Notification: notifications}, nil +} + +// Set implements the Set RPC in gNMI spec. +func (s *Server) Set(ctx context.Context, req *pb.SetRequest) (*pb.SetResponse, error) { + s.mu.Lock() + defer s.mu.Unlock() + + jsonTree, err := ygot.ConstructIETFJSON(s.config, &ygot.RFC7951JSONConfig{}) + if err != nil { + msg := fmt.Sprintf("error in constructing IETF JSON tree from config struct: %v", err) + log.Error(msg) + return nil, status.Error(codes.Internal, msg) + } + + prefix := req.GetPrefix() + var results []*pb.UpdateResult + + for _, path := range req.GetDelete() { + res, grpcStatusError := s.doDelete(jsonTree, prefix, path) + if grpcStatusError != nil { + return nil, grpcStatusError + } + results = append(results, res) + } + for _, upd := range req.GetReplace() { + res, grpcStatusError := s.doReplaceOrUpdate(jsonTree, pb.UpdateResult_REPLACE, prefix, upd.GetPath(), upd.GetVal()) + if grpcStatusError != nil { + return nil, grpcStatusError + } + results = append(results, res) + } + for _, upd := range req.GetUpdate() { + res, grpcStatusError := s.doReplaceOrUpdate(jsonTree, pb.UpdateResult_UPDATE, prefix, upd.GetPath(), upd.GetVal()) + if grpcStatusError != nil { + return nil, grpcStatusError + } + results = append(results, res) + } + + jsonDump, err := json.Marshal(jsonTree) + if err != nil { + msg := fmt.Sprintf("error in marshaling IETF JSON tree to bytes: %v", err) + log.Error(msg) + return nil, status.Error(codes.Internal, msg) + } + rootStruct, err := s.model.NewConfigStruct(jsonDump) + if err != nil { + msg := fmt.Sprintf("error in creating config struct from IETF JSON data: %v", err) + log.Error(msg) + return nil, status.Error(codes.Internal, msg) + } + s.config = rootStruct + return &pb.SetResponse{ + Prefix: req.GetPrefix(), + Response: results, + }, nil +} + +// Subscribe method is not implemented. +func (s *Server) Subscribe(stream pb.GNMI_SubscribeServer) error { + return status.Error(codes.Unimplemented, "Subscribe is not implemented.") +} + +// InternalUpdate is an experimental feature to let the server update its +// internal states. Use it with your own risk. +func (s *Server) InternalUpdate(fp func(config ygot.ValidatedGoStruct) error) error { + s.mu.Lock() + defer s.mu.Unlock() + return fp(s.config) +} diff --git a/forks/google/gnmi/server_test.go b/forks/google/gnmi/server_test.go new file mode 100644 index 0000000000000000000000000000000000000000..68ffea696df150f69e722256389f472a875de107 --- /dev/null +++ b/forks/google/gnmi/server_test.go @@ -0,0 +1,1161 @@ +/* Copyright 2017 Google Inc. + +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 + + https://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. +*/ + +package gnmi + +import ( + "encoding/json" + "reflect" + "testing" + + "github.com/golang/protobuf/proto" + "github.com/openconfig/gnmi/value" + "github.com/openconfig/ygot/ygot" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + pb "github.com/openconfig/gnmi/proto/gnmi" + + "github.com/google/gnxi/gnmi/modeldata" + "github.com/google/gnxi/gnmi/modeldata/gostruct" +) + +var ( + // model is the model for test config server. + model = &Model{ + modelData: modeldata.ModelData, + structRootType: reflect.TypeOf((*gostruct.Device)(nil)), + schemaTreeRoot: gostruct.SchemaTree["Device"], + jsonUnmarshaler: gostruct.Unmarshal, + enumData: gostruct.ΛEnum, + } +) + +func TestCapabilities(t *testing.T) { + s, err := NewServer(model, nil, nil) + if err != nil { + t.Fatalf("error in creating server: %v", err) + } + resp, err := s.Capabilities(nil, &pb.CapabilityRequest{}) + if err != nil { + t.Fatalf("got error %v, want nil", err) + } + if !reflect.DeepEqual(resp.GetSupportedModels(), model.modelData) { + t.Errorf("got supported models %v\nare not the same as\nmodel supported by the server %v", resp.GetSupportedModels(), model.modelData) + } + if !reflect.DeepEqual(resp.GetSupportedEncodings(), supportedEncodings) { + t.Errorf("got supported encodings %v\nare not the same as\nencodings supported by the server %v", resp.GetSupportedEncodings(), supportedEncodings) + } +} + +func TestGet(t *testing.T) { + jsonConfigRoot := `{ + "openconfig-system:system": { + "openconfig-openflow:openflow": { + "agent": { + "config": { + "failure-mode": "SECURE", + "max-backoff": 10 + } + } + } + }, + "openconfig-platform:components": { + "component": [ + { + "config": { + "name": "swpri1-1-1" + }, + "name": "swpri1-1-1" + } + ] + } + }` + + s, err := NewServer(model, []byte(jsonConfigRoot), nil) + if err != nil { + t.Fatalf("error in creating server: %v", err) + } + + tds := []struct { + desc string + textPbPath string + modelData []*pb.ModelData + wantRetCode codes.Code + wantRespVal interface{} + }{{ + desc: "get valid but non-existing node", + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + `, + wantRetCode: codes.NotFound, + }, { + desc: "root node", + wantRetCode: codes.OK, + wantRespVal: jsonConfigRoot, + }, { + desc: "get non-enum type", + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "agent" > + elem: <name: "config" > + elem: <name: "max-backoff" > + `, + wantRetCode: codes.OK, + wantRespVal: uint64(10), + }, { + desc: "get enum type", + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "agent" > + elem: <name: "config" > + elem: <name: "failure-mode" > + `, + wantRetCode: codes.OK, + wantRespVal: "SECURE", + }, { + desc: "root child node", + textPbPath: `elem: <name: "components" >`, + wantRetCode: codes.OK, + wantRespVal: `{ + "openconfig-platform:component": [{ + "config": { + "name": "swpri1-1-1" + }, + "name": "swpri1-1-1" + }]}`, + }, { + desc: "node with attribute", + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + >`, + wantRetCode: codes.OK, + wantRespVal: `{ + "openconfig-platform:config": {"name": "swpri1-1-1"}, + "openconfig-platform:name": "swpri1-1-1" + }`, + }, { + desc: "node with attribute in its parent", + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + > + elem: <name: "config" >`, + wantRetCode: codes.OK, + wantRespVal: `{"openconfig-platform:name": "swpri1-1-1"}`, + }, { + desc: "ref leaf node", + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + > + elem: <name: "name" >`, + wantRetCode: codes.OK, + wantRespVal: "swpri1-1-1", + }, { + desc: "regular leaf node", + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + > + elem: <name: "config" > + elem: <name: "name" >`, + wantRetCode: codes.OK, + wantRespVal: "swpri1-1-1", + }, { + desc: "non-existing node: wrong path name", + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "foo" value: "swpri1-1-1" > + > + elem: <name: "bar" >`, + wantRetCode: codes.NotFound, + }, { + desc: "non-existing node: wrong path attribute", + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "foo" value: "swpri2-2-2" > + > + elem: <name: "name" >`, + wantRetCode: codes.NotFound, + }, { + desc: "use of model data not supported", + modelData: []*pb.ModelData{{}}, + wantRetCode: codes.Unimplemented, + }} + + for _, td := range tds { + t.Run(td.desc, func(t *testing.T) { + runTestGet(t, s, td.textPbPath, td.wantRetCode, td.wantRespVal, td.modelData) + }) + } +} + +// runTestGet requests a path from the server by Get grpc call, and compares if +// the return code and response value are expected. +func runTestGet(t *testing.T, s *Server, textPbPath string, wantRetCode codes.Code, wantRespVal interface{}, useModels []*pb.ModelData) { + // Send request + var pbPath pb.Path + if err := proto.UnmarshalText(textPbPath, &pbPath); err != nil { + t.Fatalf("error in unmarshaling path: %v", err) + } + req := &pb.GetRequest{ + Path: []*pb.Path{&pbPath}, + Encoding: pb.Encoding_JSON_IETF, + UseModels: useModels, + } + resp, err := s.Get(nil, req) + + // Check return code + gotRetStatus, ok := status.FromError(err) + if !ok { + t.Fatal("got a non-grpc error from grpc call") + } + if gotRetStatus.Code() != wantRetCode { + t.Fatalf("got return code %v, want %v", gotRetStatus.Code(), wantRetCode) + } + + // Check response value + var gotVal interface{} + if resp != nil { + notifs := resp.GetNotification() + if len(notifs) != 1 { + t.Fatalf("got %d notifications, want 1", len(notifs)) + } + updates := notifs[0].GetUpdate() + if len(updates) != 1 { + t.Fatalf("got %d updates in the notification, want 1", len(updates)) + } + val := updates[0].GetVal() + if val.GetJsonIetfVal() == nil { + gotVal, err = value.ToScalar(val) + if err != nil { + t.Errorf("got: %v, want a scalar value", gotVal) + } + } else { + // Unmarshal json data to gotVal container for comparison + if err := json.Unmarshal(val.GetJsonIetfVal(), &gotVal); err != nil { + t.Fatalf("error in unmarshaling IETF JSON data to json container: %v", err) + } + var wantJSONStruct interface{} + if err := json.Unmarshal([]byte(wantRespVal.(string)), &wantJSONStruct); err != nil { + t.Fatalf("error in unmarshaling IETF JSON data to json container: %v", err) + } + wantRespVal = wantJSONStruct + } + } + + if !reflect.DeepEqual(gotVal, wantRespVal) { + t.Errorf("got: %v (%T),\nwant %v (%T)", gotVal, gotVal, wantRespVal, wantRespVal) + } +} + +type gnmiSetTestCase struct { + desc string // description of test case. + initConfig string // config before the operation. + op pb.UpdateResult_Operation // operation type. + textPbPath string // text format of gnmi Path proto. + val *pb.TypedValue // value for UPDATE/REPLACE operations. always nil for DELETE. + wantRetCode codes.Code // grpc return code. + wantConfig string // config after the operation. +} + +func TestDelete(t *testing.T) { + tests := []gnmiSetTestCase{{ + desc: "delete leaf node", + initConfig: `{ + "system": { + "config": { + "hostname": "switch_a", + "login-banner": "Hello!" + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "config" > + elem: <name: "login-banner" > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "config": { + "hostname": "switch_a" + } + } + }`, + }, { + desc: "delete sub-tree", + initConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + }, + "config": { + "hostname": "switch_a" + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "config": { + "hostname": "switch_a" + } + } + }`, + }, { + desc: "delete a sub-tree with only one leaf node", + initConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + }, + "config": { + "hostname": "switch_a" + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + elem: <name: "config" > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "config": { + "hostname": "switch_a" + } + } + }`, + }, { + desc: "delete a leaf node whose parent has only this child", + initConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + }, + "config": { + "hostname": "switch_a" + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + elem: <name: "config" > + elem: <name: "timezone-name" > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "config": { + "hostname": "switch_a" + } + } + }`, + }, { + desc: "delete root", + initConfig: `{ + "system": { + "config": { + "hostname": "switch_a" + } + } + }`, + op: pb.UpdateResult_DELETE, + wantRetCode: codes.OK, + wantConfig: `{}`, + }, { + desc: "delete non-existing node", + initConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + elem: <name: "config" > + elem: <name: "foo-bar" > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + }, { + desc: "delete node with non-existing precedent path", + initConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + elem: <name: "foo-bar" > + elem: <name: "timezone-name" > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + }, { + desc: "delete node with non-existing attribute in precedent path", + initConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + elem: < + name: "config" + key: <key: "name" value: "foo" > + > + elem: <name: "timezone-name" >`, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + }, { + desc: "delete node with non-existing attribute", + initConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + elem: <name: "config" > + elem: < + name: "timezone-name" + key: <key: "name" value: "foo" > + > + elem: <name: "timezone-name" >`, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + } + } + }`, + }, { + desc: "delete leaf node with attribute in its precedent path", + initConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + }, + "state": { + "name": "swpri1-1-1", + "mfg-name": "foo bar inc." + } + } + ] + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + > + elem: <name: "state" > + elem: <name: "mfg-name" >`, + wantRetCode: codes.OK, + wantConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + }, + "state": { + "name": "swpri1-1-1" + } + } + ] + } + }`, + }, { + desc: "delete sub-tree with attribute in its precedent path", + initConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + }, + "state": { + "name": "swpri1-1-1", + "mfg-name": "foo bar inc." + } + } + ] + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + > + elem: <name: "state" >`, + wantRetCode: codes.OK, + wantConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + } + } + ] + } + }`, + }, { + desc: "delete path node with attribute", + initConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + } + }, + { + "name": "swpri1-1-2", + "config": { + "name": "swpri1-1-2" + } + } + ] + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + >`, + wantRetCode: codes.OK, + wantConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-2", + "config": { + "name": "swpri1-1-2" + } + } + ] + } + }`, + }, { + desc: "delete path node with int type attribute", + initConfig: `{ + "system": { + "openflow": { + "controllers": { + "controller": [ + { + "config": { + "name": "main" + }, + "connections": { + "connection": [ + { + "aux-id": 0, + "config": { + "address": "192.0.2.10", + "aux-id": 0 + } + } + ] + }, + "name": "main" + } + ] + } + } + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "controllers" > + elem: < + name: "controller" + key: <key: "name" value: "main" > + > + elem: <name: "connections" > + elem: < + name: "connection" + key: <key: "aux-id" value: "0" > + > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "openflow": { + "controllers": { + "controller": [ + { + "config": { + "name": "main" + }, + "name": "main" + } + ] + } + } + } + }`, + }, { + desc: "delete leaf node with non-existing attribute value", + initConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + } + } + ] + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "foo" > + >`, + wantRetCode: codes.OK, + wantConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + } + } + ] + } + }`, + }, { + desc: "delete leaf node with non-existing attribute value in precedent path", + initConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + }, + "state": { + "name": "swpri1-1-1", + "mfg-name": "foo bar inc." + } + } + ] + } + }`, + op: pb.UpdateResult_DELETE, + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "foo" > + > + elem: <name: "state" > + elem: <name: "mfg-name" > + `, + wantRetCode: codes.OK, + wantConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + }, + "state": { + "name": "swpri1-1-1", + "mfg-name": "foo bar inc." + } + } + ] + } + }`, + }} + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + runTestSet(t, model, tc) + }) + } +} + +func TestReplace(t *testing.T) { + systemConfig := `{ + "system": { + "clock": { + "config": { + "timezone-name": "Europe/Stockholm" + } + }, + "config": { + "hostname": "switch_a", + "login-banner": "Hello!" + } + } + }` + + tests := []gnmiSetTestCase{{ + desc: "replace root", + initConfig: `{}`, + op: pb.UpdateResult_REPLACE, + val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{ + JsonIetfVal: []byte(systemConfig), + }}, + wantRetCode: codes.OK, + wantConfig: systemConfig, + }, { + desc: "replace a subtree", + initConfig: `{}`, + op: pb.UpdateResult_REPLACE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "clock" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{ + JsonIetfVal: []byte(`{"config": {"timezone-name": "US/New York"}}`), + }, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "clock": { + "config": { + "timezone-name": "US/New York" + } + } + } + }`, + }, { + desc: "replace a keyed list subtree", + initConfig: `{}`, + op: pb.UpdateResult_REPLACE, + textPbPath: ` + elem: <name: "components" > + elem: < + name: "component" + key: <key: "name" value: "swpri1-1-1" > + >`, + val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{ + JsonIetfVal: []byte(`{"config": {"name": "swpri1-1-1"}}`), + }, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "components": { + "component": [ + { + "name": "swpri1-1-1", + "config": { + "name": "swpri1-1-1" + } + } + ] + } + }`, + }, { + desc: "replace node with int type attribute in its precedent path", + initConfig: `{ + "system": { + "openflow": { + "controllers": { + "controller": [ + { + "config": { + "name": "main" + }, + "name": "main" + } + ] + } + } + } + }`, + op: pb.UpdateResult_REPLACE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "controllers" > + elem: < + name: "controller" + key: <key: "name" value: "main" > + > + elem: <name: "connections" > + elem: < + name: "connection" + key: <key: "aux-id" value: "0" > + > + elem: <name: "config" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{ + JsonIetfVal: []byte(`{"address": "192.0.2.10", "aux-id": 0}`), + }, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "openflow": { + "controllers": { + "controller": [ + { + "config": { + "name": "main" + }, + "connections": { + "connection": [ + { + "aux-id": 0, + "config": { + "address": "192.0.2.10", + "aux-id": 0 + } + } + ] + }, + "name": "main" + } + ] + } + } + } + }`, + }, { + desc: "replace a leaf node of int type", + initConfig: `{}`, + op: pb.UpdateResult_REPLACE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "agent" > + elem: <name: "config" > + elem: <name: "backoff-interval" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_IntVal{IntVal: 5}, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "openflow": { + "agent": { + "config": { + "backoff-interval": 5 + } + } + } + } + }`, + }, { + desc: "replace a leaf node of string type", + initConfig: `{}`, + op: pb.UpdateResult_REPLACE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "agent" > + elem: <name: "config" > + elem: <name: "datapath-id" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_StringVal{StringVal: "00:16:3e:00:00:00:00:00"}, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "openflow": { + "agent": { + "config": { + "datapath-id": "00:16:3e:00:00:00:00:00" + } + } + } + } + }`, + }, { + desc: "replace a leaf node of enum type", + initConfig: `{}`, + op: pb.UpdateResult_REPLACE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "agent" > + elem: <name: "config" > + elem: <name: "failure-mode" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_StringVal{StringVal: "SECURE"}, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "openflow": { + "agent": { + "config": { + "failure-mode": "SECURE" + } + } + } + } + }`, + }, { + desc: "replace an non-existing leaf node", + initConfig: `{}`, + op: pb.UpdateResult_REPLACE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "openflow" > + elem: <name: "agent" > + elem: <name: "config" > + elem: <name: "foo-bar" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_StringVal{StringVal: "SECURE"}, + }, + wantRetCode: codes.NotFound, + wantConfig: `{}`, + }} + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + runTestSet(t, model, tc) + }) + } +} + +func TestUpdate(t *testing.T) { + tests := []gnmiSetTestCase{{ + desc: "update leaf node", + initConfig: `{ + "system": { + "config": { + "hostname": "switch_a" + } + } + }`, + op: pb.UpdateResult_UPDATE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "config" > + elem: <name: "domain-name" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_StringVal{StringVal: "foo.bar.com"}, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "config": { + "domain-name": "foo.bar.com", + "hostname": "switch_a" + } + } + }`, + }, { + desc: "update subtree", + initConfig: `{ + "system": { + "config": { + "hostname": "switch_a" + } + } + }`, + op: pb.UpdateResult_UPDATE, + textPbPath: ` + elem: <name: "system" > + elem: <name: "config" > + `, + val: &pb.TypedValue{ + Value: &pb.TypedValue_JsonIetfVal{ + JsonIetfVal: []byte(`{"domain-name": "foo.bar.com", "hostname": "switch_a"}`), + }, + }, + wantRetCode: codes.OK, + wantConfig: `{ + "system": { + "config": { + "domain-name": "foo.bar.com", + "hostname": "switch_a" + } + } + }`, + }} + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + runTestSet(t, model, tc) + }) + } +} + +func runTestSet(t *testing.T, m *Model, tc gnmiSetTestCase) { + // Create a new server with empty config + s, err := NewServer(m, []byte(tc.initConfig), nil) + if err != nil { + t.Fatalf("error in creating config server: %v", err) + } + + // Send request + var pbPath pb.Path + if err := proto.UnmarshalText(tc.textPbPath, &pbPath); err != nil { + t.Fatalf("error in unmarshaling path: %v", err) + } + var req *pb.SetRequest + switch tc.op { + case pb.UpdateResult_DELETE: + req = &pb.SetRequest{Delete: []*pb.Path{&pbPath}} + case pb.UpdateResult_REPLACE: + req = &pb.SetRequest{Replace: []*pb.Update{{Path: &pbPath, Val: tc.val}}} + case pb.UpdateResult_UPDATE: + req = &pb.SetRequest{Update: []*pb.Update{{Path: &pbPath, Val: tc.val}}} + default: + t.Fatalf("invalid op type: %v", tc.op) + } + _, err = s.Set(nil, req) + + // Check return code + gotRetStatus, ok := status.FromError(err) + if !ok { + t.Fatal("got a non-grpc error from grpc call") + } + if gotRetStatus.Code() != tc.wantRetCode { + t.Fatalf("got return code %v, want %v\nerror message: %v", gotRetStatus.Code(), tc.wantRetCode, err) + } + + // Check server config + wantConfigStruct, err := m.NewConfigStruct([]byte(tc.wantConfig)) + if err != nil { + t.Fatalf("wantConfig data cannot be loaded as a config struct: %v", err) + } + wantConfigJSON, err := ygot.ConstructIETFJSON(wantConfigStruct, &ygot.RFC7951JSONConfig{}) + if err != nil { + t.Fatalf("error in constructing IETF JSON tree from wanted config: %v", err) + } + gotConfigJSON, err := ygot.ConstructIETFJSON(s.config, &ygot.RFC7951JSONConfig{}) + if err != nil { + t.Fatalf("error in constructing IETF JSON tree from server config: %v", err) + } + if !reflect.DeepEqual(gotConfigJSON, wantConfigJSON) { + t.Fatalf("got server config %v\nwant: %v", gotConfigJSON, wantConfigJSON) + } +} diff --git a/forks/google/gnmi/util.go b/forks/google/gnmi/util.go new file mode 100644 index 0000000000000000000000000000000000000000..0a12c05bcc8b007b030831dea016c2e909ff046c --- /dev/null +++ b/forks/google/gnmi/util.go @@ -0,0 +1,102 @@ +package gnmi + +import ( + "fmt" + "strconv" + + log "github.com/golang/glog" + "github.com/openconfig/goyang/pkg/yang" + + pb "github.com/openconfig/gnmi/proto/gnmi" +) + +// getChildNode gets a node's child with corresponding schema specified by path +// element. If not found and createIfNotExist is set as true, an empty node is +// created and returned. +func getChildNode(node map[string]interface{}, schema *yang.Entry, elem *pb.PathElem, createIfNotExist bool) (interface{}, *yang.Entry) { + var nextSchema *yang.Entry + var ok bool + + if nextSchema, ok = schema.Dir[elem.Name]; !ok { + return nil, nil + } + + var nextNode interface{} + if elem.GetKey() == nil { + if nextNode, ok = node[elem.Name]; !ok { + if createIfNotExist { + node[elem.Name] = make(map[string]interface{}) + nextNode = node[elem.Name] + } + } + return nextNode, nextSchema + } + + nextNode = getKeyedListEntry(node, elem, createIfNotExist) + return nextNode, nextSchema +} + +// getKeyedListEntry finds the keyed list entry in node by the name and key of +// path elem. If entry is not found and createIfNotExist is true, an empty entry +// will be created (the list will be created if necessary). +func getKeyedListEntry(node map[string]interface{}, elem *pb.PathElem, createIfNotExist bool) map[string]interface{} { + curNode, ok := node[elem.Name] + if !ok { + if !createIfNotExist { + return nil + } + + // Create a keyed list as node child and initialize an entry. + m := make(map[string]interface{}) + for k, v := range elem.Key { + m[k] = v + if vAsNum, err := strconv.ParseFloat(v, 64); err == nil { + m[k] = vAsNum + } + } + node[elem.Name] = []interface{}{m} + return m + } + + // Search entry in keyed list. + keyedList, ok := curNode.([]interface{}) + if !ok { + return nil + } + for _, n := range keyedList { + m, ok := n.(map[string]interface{}) + if !ok { + log.Errorf("wrong keyed list entry type: %T", n) + return nil + } + keyMatching := true + // must be exactly match + for k, v := range elem.Key { + attrVal, ok := m[k] + if !ok { + return nil + } + if v != fmt.Sprintf("%v", attrVal) { + keyMatching = false + break + } + } + if keyMatching { + return m + } + } + if !createIfNotExist { + return nil + } + + // Create an entry in keyed list. + m := make(map[string]interface{}) + for k, v := range elem.Key { + m[k] = v + if vAsNum, err := strconv.ParseFloat(v, 64); err == nil { + m[k] = vAsNum + } + } + node[elem.Name] = append(keyedList, m) + return m +} diff --git a/go.mod b/go.mod index dd79e0b9f60580331c8fb96e184c765d554ff432..dd60fd272aab3c56c223acadd69ecda15a8b365d 100644 --- a/go.mod +++ b/go.mod @@ -4,19 +4,25 @@ go 1.14 require ( code.fbi.h-da.de/cocsn/swagger/apis v0.0.0-20200924152423-61030cab7b88 - code.fbi.h-da.de/cocsn/yang-modules/generated/tapi v0.0.0-20201116134549-765aa1790752 - github.com/BurntSushi/toml v0.3.1 + code.fbi.h-da.de/cocsn/yang-models v0.0.4 + github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591 github.com/go-openapi/runtime v0.19.22 github.com/go-openapi/strfmt v0.19.5 - github.com/golang/protobuf v1.4.2 + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b + github.com/golang/protobuf v1.4.3 + github.com/google/gnxi v0.0.0-20201221102247-c26672548161 + github.com/google/uuid v1.1.2 github.com/neo4j/neo4j-go-driver v1.8.3 - github.com/onsi/ginkgo v1.13.0 // indirect - github.com/openconfig/ygot v0.8.7 + github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802 + github.com/openconfig/goyang v0.2.3 + github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696 + github.com/openconfig/ygot v0.10.0 github.com/rivo/tview v0.0.0-20201018122409-d551c850a743 - github.com/tidwall/gjson v1.6.3 github.com/sirupsen/logrus v1.4.2 - golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect - google.golang.org/grpc v1.29.1 - google.golang.org/protobuf v1.23.0 + github.com/spf13/viper v1.7.1 + github.com/tidwall/gjson v1.6.3 + golang.org/x/net v0.0.0-20201216054612-986b41b23924 + google.golang.org/grpc v1.34.0 + google.golang.org/protobuf v1.25.0 ) diff --git a/go.sum b/go.sum index 6b90cf7a5ba559555977fa50e1c30c224c7bb174..969f8580799a31dd91384a2076fd0099e1f90d4b 100644 --- a/go.sum +++ b/go.sum @@ -1,46 +1,127 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= code.fbi.h-da.de/cocsn/swagger/apis v0.0.0-20200924152423-61030cab7b88 h1:cNqY3WEh+CX8+esxIwWU/uD7hRC5mPvuJmXzB07OeuA= code.fbi.h-da.de/cocsn/swagger/apis v0.0.0-20200924152423-61030cab7b88/go.mod h1:3jDZAOmepPl3kiukNGvPFkJEzgGczgrC3zJ2jcqVFSs= -code.fbi.h-da.de/cocsn/yang-modules/generated/tapi v0.0.0-20201116134549-765aa1790752 h1:hCeie9cCBt0gyETD0EAINuWqpEokf0ulP1Rv9F+rXB0= -code.fbi.h-da.de/cocsn/yang-modules/generated/tapi v0.0.0-20201116134549-765aa1790752/go.mod h1:EhCu5gVeMKHpjwoV5g5eycc7WcfU98jkPswLDRHQX5w= +code.fbi.h-da.de/cocsn/yang-models v0.0.4 h1:y/Ph5CaD2NJDPjoOuS59iKrMYf9bvpg2/hefC2RG6E4= +code.fbi.h-da.de/cocsn/yang-models v0.0.4/go.mod h1:7MnNmAQ9o84BpUepcaV6RB1mBGCNyXVJcdbKUl6rK0g= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.26.1 h1:3jnfWKD7gVwbB1KSy/lE0szA9duPuSFLViK0o/d3DgA= +github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/aristanetworks/fsnotify v1.4.2 h1:it2ydpY6k0aXB7qjb4vGhOYOL6YDC/sr8vhqwokFQwQ= +github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= +github.com/aristanetworks/glog v0.0.0-20191112221043-67e8567f59f3 h1:Bmjk+DjIi3tTAU0wxGaFbfjGUqlxxSXARq9A96Kgoos= +github.com/aristanetworks/glog v0.0.0-20191112221043-67e8567f59f3/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= +github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a h1:R7ghEBfKIqu/SDpGHS9Nj1fWPxkvxh6Lv4Wq6eS95G4= +github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a/go.mod h1:Q4lsGfepQE823ePrSNr2CjCz1oeeMECJ6k1yBVujrZg= +github.com/aristanetworks/splunk-hec-go v0.3.3 h1:O7zlcm4ve7JvqTyEK3vSBh1LngLezraqcxv8Ya6tQFY= +github.com/aristanetworks/splunk-hec-go v0.3.3/go.mod h1:1VHO9r17b0K7WmOlLb9nTk/2YanvOEnLMUgsFrxBROc= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY= github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.13.1/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= +github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.7.2 h1:2QxQoC1TS09S7fhCPsrvqYdvP1H5M1P1ih5ABm3BTYk= +github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= +github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591 h1:0WWUDZ1oxq7NxVyGo8M3KI5jbkiwNAdZFFzAdC68up4= github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591/go.mod h1:vSVL/GV5mCSlPC6thFP5kfOFdM9MGZcalipmpTxTgQA= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -53,7 +134,6 @@ github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQH github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= github.com/go-openapi/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/errors v0.19.6 h1:xZMThgv5SQ7SMbWtKFkCf9bBdvR2iEyw9k3zGZONuys= github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.19.7 h1:Lcq+o0mSwCLKACMxZhreVHigB9ebghJ/lrmeaqASbjo= github.com/go-openapi/errors v0.19.7/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= @@ -106,7 +186,6 @@ github.com/go-openapi/swag v0.19.9/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfT github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= -github.com/go-openapi/validate v0.19.10 h1:tG3SZ5DC5KF4cyt7nqLVcQXGj5A7mpaYkAcNPlDK+Yk= github.com/go-openapi/validate v0.19.10/go.mod h1:RKEZTUWDkxKQxN2jDT7ZnZi2bhZlbNMAuKvKB+IaGx8= github.com/go-openapi/validate v0.19.11 h1:8lCr0b9lNWKjVjW/hSZZvltUy+bULl7vbnCTsOzlhPo= github.com/go-openapi/validate v0.19.11/go.mod h1:Rzou8hA/CBw8donlS6WNEUQupNvUZ0waH08tGe6kAQ4= @@ -136,11 +215,17 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -151,29 +236,110 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/gnxi v0.0.0-20201221102247-c26672548161 h1:8Huhvr/sx+mAUzfujNPTCbq+z4LG1qUIu0smjXTaBw0= +github.com/google/gnxi v0.0.0-20201221102247-c26672548161/go.mod h1:dPTuHPVOqxZ2yGKPjymiMt1vrZa8KHXWKX+Lx1z5d88= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/protobuf v3.11.4+incompatible/go.mod h1:lUQ9D1ePzbH2PrIS7ob/bjm9HXyH5WHB0Akwh7URreM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d h1:/WZQPMZNsjZ7IlCpsLGdQBINg5bxKQ1K1sh6awxLtkA= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.1 h1:a/QY0o9S6wCi0XhxaMX/QmusicNUqCqFugR6WKPOSoQ= +github.com/klauspost/compress v1.10.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= +github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/reedsolomon v1.9.3 h1:N/VzgeMfHmLc+KHMD1UL/tNkfXAt8FnUqlgXGIduwAY= +github.com/klauspost/reedsolomon v1.9.3/go.mod h1:CwCi+NUr9pqSVktrkN+Ondf06rkhYZ/pcNv7fu+8Un4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -183,6 +349,10 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY= +github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -191,203 +361,443 @@ github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8 github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mholt/archiver/v3 v3.5.0/go.mod h1:qqTTPUK/HZPFgFQ/TJ3BzvTpF/dPtFVJXdQbCmeMxwc= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/moby v1.13.1/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/neo4j/neo4j-go-driver v1.8.3 h1:yfuo9YBAlezdIiogu92GwEir/81RD81dNwS5mY/wAIk= github.com/neo4j/neo4j-go-driver v1.8.3/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcLuHrG+/sUeP8gI= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.13.0 h1:M76yO2HkZASFjXL0HSoZJ1AYEmQxNJmY41Jx1zNUq1Y= -github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/gnmi v0.0.0-20200414194230-1597cc0f2600/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= -github.com/openconfig/gnmi v0.0.0-20200508230933-d19cebf5e7be h1:VEK8utxoyZu/hkpjLxvuBmK5yW3NmBo/v/Wu5VQAJVs= github.com/openconfig/gnmi v0.0.0-20200508230933-d19cebf5e7be/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= +github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802 h1:WXFwJlWOJINlwlyAZuNo4GdYZS6qPX36+rRUncLmN8Q= +github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= github.com/openconfig/goyang v0.0.0-20200115183954-d0a48929f0ea/go.mod h1:dhXaV0JgHJzdrHi2l+w0fZrwArtXL7jEFoiqLEdmkvU= -github.com/openconfig/goyang v0.0.0-20200616001533-c0659aea65dd/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= -github.com/openconfig/goyang v0.0.0-20200917201611-633eccb6fa97 h1:TaCuNSX/fiTuky8ouzC+JaCJN+OSOpjtYlLrn/uXxxE= -github.com/openconfig/goyang v0.0.0-20200917201611-633eccb6fa97/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= +github.com/openconfig/goyang v0.2.2 h1:J8hlJk1GSHrcr9vVI7dTvsThsKihWcNXRjWOkjRK0Cw= +github.com/openconfig/goyang v0.2.2/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= +github.com/openconfig/goyang v0.2.3 h1:pYxQ+VG6KNS3N5zkQeLmIBtc3gRs6JHZOKMD2/knlv4= +github.com/openconfig/goyang v0.2.3/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= +github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696 h1:yHCGAHg2zMaW8olLrqEt3SAHGcEx2aJPEQWMRCyravY= +github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2A+zigScwkSEb/cVQB0/ZMpU3rqiH6X7WRRsxgOGw= github.com/openconfig/ygot v0.6.0/go.mod h1:o30svNf7O0xK+R35tlx95odkDmZWS9JyWWQSmIhqwAs= -github.com/openconfig/ygot v0.8.7 h1:BKErV6vM15YGM1+XHDuLAQ938dYahzSgwlt9BIGFrdY= -github.com/openconfig/ygot v0.8.7/go.mod h1:AqXe0HNEITTcmcYkr+yzDMY8ofitImUdfZV4IgRsJWU= +github.com/openconfig/ygot v0.9.0/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5HspHcjlxSAQ= +github.com/openconfig/ygot v0.10.0 h1:EmgwLXbFiCBmEUlSI4/1fPuRzgf4EsD0sThmAmRqbYM= +github.com/openconfig/ygot v0.10.0/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5HspHcjlxSAQ= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3 h1:YtFkrqsMEj7YqpIhRteVxJxCeC3jJBieuLr0d4C4rSA= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/pierrec/lz4 v2.4.1+incompatible h1:mFe7ttWaflA46Mhqh+jUfjp2qTbPYxLB2/OyBppH9dg= +github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.0.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.1/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.1 h1:FFSuS004yOQEtDdTq+TAOLP5xUq63KqAFYyOi8zA+Y8= +github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.0.10 h1:QJQN3jYQhkamO4mhfUWqdDH2asK7ONOI9MTWjyAxNKM= +github.com/prometheus/procfs v0.0.10/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/tview v0.0.0-20201018122409-d551c850a743 h1:9BBjVJTRxuYBeCAv9DFH2hSzY0ujLx5sxMg5D3K/Xeg= github.com/rivo/tview v0.0.0-20201018122409-d551c850a743/go.mod h1:t7mcA3nlK9dxD1DMoz/DQRMWFMkGBUj6rJBM5VNfLFA= github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= +github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.4.1 h1:asw9sl74539yqavKaglDM5hFpdJVK0Y5Dr/JOgQ89nQ= +github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161 h1:89CEmDvlq/F7SJEOqkIdNDGJXrQIhuIx9D2DBXjavSU= +github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= +github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b h1:fj5tQ8acgNUr6O8LEplsxDhUIe2573iLkJc+PqnzZTI= +github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= github.com/tidwall/gjson v1.6.3 h1:aHoiiem0dr7GHkW001T1SMTJ7X5PvyekH5WX0whWGnI= github.com/tidwall/gjson v1.6.3/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tjfoc/gmsm v1.3.0 h1:i7c6Za/IlgBvnGxYpfD7L3TGuaS+v6oGcgq+J9/ecEA= +github.com/tjfoc/gmsm v1.3.0/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xtaci/kcp-go v5.4.20+incompatible h1:TN1uey3Raw0sTz0Fg8GkfM0uH3YwzhnZWQ1bABv5xAg= +github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= +github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= +github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE= go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201216054612-986b41b23924 h1:QsnDpLLOKwHBBDa8nDws4DYNc/ryVW2vCpxCs09d4PY= +golang.org/x/net v0.0.0-20201216054612-986b41b23924/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7 h1:XtNJkfEjb4zR3q20BBBcYUykVOEMgZeIUOpBPfNYgxg= golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e h1:AyodaIpKjppX+cBfTASF2E1US3H2JFBj920Ot3rtDjs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774 h1:CQVOmarCBFzTx0kbOU0ru54Cvot8SdSrNYjZPhQl+gk= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd h1:hHkvGJK23seRCflePJnVa9IMv8fsuavSCWKd11kDQFs= +golang.org/x/tools v0.0.0-20200221224223-e1da425f72fd/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200519141106-08726f379972 h1:6ydLqG65DIMNJf6p97WudGsmd1w3Ickm/LiZnBrREPI= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200519141106-08726f379972/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d h1:HV9Z9qMhQEsdlvxNFELgQ11RkMzO3CMkjEySjCtuLes= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a h1:stTHdEoWg1pQ8riaP5ROrjS6zy6wewH/Q2iwnLCQUXY= +gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/jcmturner/aescts.v1 v1.0.1 h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw= +gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= +gopkg.in/jcmturner/dnsutils.v1 v1.0.1 h1:cIuC1OLRGZrld+16ZJvvZxVJeKPsvd5eUIvxfoN5hSM= +gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= +gopkg.in/jcmturner/goidentity.v3 v3.0.0 h1:1duIyWiTaYvVx3YX2CYtpJbUFd7/UuPYCfgXtQ3VTbI= +gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= +gopkg.in/jcmturner/gokrb5.v7 v7.5.0 h1:a9tsXlIDD9SKxotJMK3niV7rPZAJeX2aD/0yg3qlIrg= +gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= +gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU= +gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= +gopkg.in/redis.v4 v4.2.4 h1:y3XbwQAiHwgNLUng56mgWYK39vsPqo8sT84XTEcxjr0= +gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -396,6 +806,10 @@ gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/gosdn.png b/gosdn.png new file mode 100644 index 0000000000000000000000000000000000000000..b16c83696fe11f6b983da0bf923457ecf59add8d Binary files /dev/null and b/gosdn.png differ diff --git a/gosdn.puml b/gosdn.puml new file mode 100644 index 0000000000000000000000000000000000000000..1dc2379006cdef8990adf2f73dc4fe5ddd414c51 --- /dev/null +++ b/gosdn.puml @@ -0,0 +1,118 @@ +@startuml +namespace nucleus { + class ClientConfig << (S,Aquamarine) >> { + + Identifier string + + Endpoint string + + Username string + + Password string + + GjsonDefaultPath string + + GjsonConnectionsPath string + + } + class Core << (S,Aquamarine) >> { + - devices <font color=blue>map</font>[string]Device + - southboundInterfaces <font color=blue>map</font>[string]interfaces.SouthboundInterface + - prinipalNetworkDomains <font color=blue>map</font>[uuid.UUID]interfaces.PrincipalNetworkDomain + - database database.Database + - config controllerConfig + + + IsRunning <font color=blue>chan</font> bool + + - readControllerConfig(configFileController string) error + + + Init(socket string, configFileController string, configFileClient string, IsRunningChannel <font color=blue>chan</font> bool) + + AttachDatabase() + + Shutdown() + + } + class Device << (S,Aquamarine) >> { + - device ygot.GoStruct + + + SBI interfaces.SouthboundInterface + + Config DeviceConfig + + } + class DeviceConfig << (S,Aquamarine) >> { + + Identifier uuid.UUID + + Endpoint string + + Username string + + Password string + + } + interface PrincipalNetworkDomain { + + Destroy() error + + AddSbi() error + + RemoveSbi() error + + AddDevice( interfaces.Device) error + + RemoveDevice(uuid uuid.UUID) error + + } + interface SouthboundInterface { + } + class buf << (S,Aquamarine) >> { + + Write(p []byte) (int, error) + + } + class controllerConfig << (S,Aquamarine) >> { + + CliSocket string + + DatabaseSocket string + + DatabaseUser string + + DatabasePassword string + + DatabaseCrypto bool + + ConfigPath string + + } + class logConnection << (S,Aquamarine) >> { + - stream proto.GrpcCli_CreateLogStreamServer + - id string + - active bool + - error <font color=blue>chan</font> error + + } + class nucleus.buf << (T, #FF7700) >> { + } + class pndImplementation << (S,Aquamarine) >> { + - name string + - sbiContainer <font color=blue>map</font>[string]*interfaces.SouthboundInterface + - devices <font color=blue>map</font>[uuid.UUID]Device + + + Destroy() error + + AddSbi() error + + RemoveSbi() error + + AddDevice(device Device) error + + RemoveDevice(uuid uuid.UUID) error + + } + class server << (S,Aquamarine) >> { + - core *Core + - logConnections []*logConnection + + + SayHello(ctx context.Context, in *proto.HelloRequest) (*proto.HelloReply, error) + + CreateLogStream(req *emptypb.Empty, stream proto.GrpcCli_CreateLogStreamServer) error + + BroadcastLog(log *proto.LogReply) + + Shutdown(ctx context.Context, in *proto.ShutdownRequest) (*proto.ShutdownReply, error) + + TAPIGetEdge(ctx context.Context, in *proto.TAPIRequest) (*proto.TAPIReply, error) + + TAPIGetEdgeNode(ctx context.Context, in *proto.TAPIRequest) (*proto.TAPIReply, error) + + TAPIGetLink(ctx context.Context, in *proto.TAPIRequest) (*proto.TAPIReply, error) + + } +} +"proto.UnimplementedGrpcCliServer" *-- "nucleus.server" + + +namespace sbi { + class OpenConfig << (S,Aquamarine) >> { + - name string + - clientContainer []Client + + + AddClient() error + + RemoveClient() error + + CollectHeartbeats() error + + ListClients() <font color=blue>map</font>[int]interfaces.Client + + } +} + + +"__builtin__.[]byte" #.. "nucleus.buf" +@enduml diff --git a/nucleus/cli-handling.go b/nucleus/cli-handling.go index 81c11d1a8e03c68d9071f2b2df2d202397002403..8a02188159b6bcc5372e45b2d84d87dc1153fb88 100644 --- a/nucleus/cli-handling.go +++ b/nucleus/cli-handling.go @@ -8,13 +8,18 @@ package nucleus import ( "context" + "errors" "io" "net" "os" "sync" + "github.com/google/uuid" + "github.com/spf13/viper" + pb "code.fbi.h-da.de/cocsn/gosdn/api/proto" - "code.fbi.h-da.de/cocsn/gosdn/sbi/restconf/client/ciena" + "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" + gpb "github.com/openconfig/gnmi/proto/gnmi" log "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/health" @@ -34,6 +39,7 @@ type server struct { pb.UnimplementedGrpcCliServer core *Core logConnections []*logConnection + devices map[uuid.UUID]Device } var srv *server @@ -52,7 +58,7 @@ func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloRe return &pb.HelloReply{Message: "Hello " + in.GetName(), GoSDNInfo: "goSDN in version: DEVELOP"}, nil } -//GetLog creates a continuous stream between client and server to send goSDN logs +//GetLog creates a continuous stream between ciena and server to send goSDN logs func (s *server) CreateLogStream(req *emptypb.Empty, stream pb.GrpcCli_CreateLogStreamServer) error { conn := &logConnection{ stream: stream, @@ -109,7 +115,7 @@ func getCLIGoing(core *Core) { log.Info("Starting: GetCLIGoing") // Boot-up the control interface for the cli - cliControlListener, err := net.Listen("tcp", core.config.CliSocket) + cliControlListener, err := net.Listen("tcp", viper.GetString("socket")) if err != nil { log.Fatal(err) } @@ -135,27 +141,144 @@ func getCLIGoing(core *Core) { // SBI specific calls, by now TAPI only func (s *server) TAPIGetEdge(ctx context.Context, in *pb.TAPIRequest) (*pb.TAPIReply, error) { log.Info("Received: ", in.GetName()) - if err := s.core.clients["ciena-mcp"].(*ciena.MCPClient).GetNodes(); err != nil { - log.Error(err) - return &pb.TAPIReply{Message: "TAPI error"}, nil - } + // TODO: Implement return &pb.TAPIReply{Message: "Done"}, nil } func (s *server) TAPIGetEdgeNode(ctx context.Context, in *pb.TAPIRequest) (*pb.TAPIReply, error) { log.Info("Received: ", in.GetName()) - if err := s.core.clients["ciena-mcp"].(*ciena.MCPClient).GetNodeEdgePoints(); err != nil { - log.Error(err) - return &pb.TAPIReply{Message: "TAPI error"}, nil - } + // TODO: Implement return &pb.TAPIReply{Message: "Done"}, nil } func (s *server) TAPIGetLink(ctx context.Context, in *pb.TAPIRequest) (*pb.TAPIReply, error) { log.Info("Received: ", in.GetName()) - if err := s.core.clients["ciena-mcp"].(*ciena.MCPClient).GetLinks(); err != nil { - log.Error(err) - return &pb.TAPIReply{Message: "TAPI error"}, nil - } + // TODO: Implement return &pb.TAPIReply{Message: "Done"}, nil } + +//CreatePND creates a new PND and adds it to the principalNetworkDomain map of +//the core +func (s *server) CreatePND(ctx context.Context, in *pb.CreatePNDRequest) (*pb.CreatePNDReply, error) { + log.Info("Received: Create a PND with the name", in.GetName()) + sbi := s.core.southboundInterfaces[in.GetSbi()] + id := uuid.New() + s.core.principalNetworkDomains[id] = NewPND(in.GetName(), in.GetDescription(), sbi) + + return &pb.CreatePNDReply{Message: "Created new PND: " + id.String()}, nil +} + +//GetAllPNDs is a request to get all current registered PNDs and returns a slim +//variant of PNDs and their respective devices +func (s *server) GetAllPNDs(ctx context.Context, in *emptypb.Empty) (*pb.AllPNDsReply, error) { + log.Info("Received: Get all PNDs") + var pnds []*pb.PND + for uuidPND, pnd := range s.core.principalNetworkDomains { + var devices []*pb.Device + for uuidDevice, device := range pnd.(*pndImplementation).devices { + tmpDevice := pb.Device{ + Uuid: uuidDevice.String(), + Address: device.Config.Address, + Username: device.Config.Username, + Password: device.Config.Password} + devices = append(devices, &tmpDevice) + } + tmpPND := pb.PND{ + Uuid: uuidPND.String(), + Name: pnd.GetName(), + Description: pnd.GetDescription(), + Sbi: pnd.GetSBIs()["default"].SbiIdentifier(), + Devices: devices, + } + pnds = append(pnds, &tmpPND) + } + return &pb.AllPNDsReply{Pnds: pnds}, nil +} + +//GetAllSBINames returns all registered SBIs from core. +func (s *server) GetAllSBINames(ctx context.Context, in *emptypb.Empty) (*pb.AllSBINamesReply, error) { + var sbiNames []string + for _, s := range s.core.southboundInterfaces { + sbiNames = append(sbiNames, s.SbiIdentifier()) + } + return &pb.AllSBINamesReply{SbiNames: sbiNames}, nil +} + +//AddDevice adds a new Device to a specific PND +//currently this is only working with gnmi transports +func (s *server) AddDevice(ctx context.Context, in *pb.AddDeviceRequest) (*pb.AddDeviceReply, error) { + log.Info("Received: AddDevice") + uuidPND, err := uuid.Parse(in.UuidPND) + if err != nil { + return &pb.AddDeviceReply{Message: err.Error()}, err + } + pnd, exists := s.core.principalNetworkDomains[uuidPND] + if exists != true { + log.Info(err) + return &pb.AddDeviceReply{Message: err.Error()}, err + } + sbi := s.core.principalNetworkDomains[uuidPND].GetSBIs()["default"] + + //TODO: could the transport and the related config be created in device? + transport := &Gnmi{SetNode: sbi.SetNode()} + cfg := &gnmi.Config{ + Addr: in.Device.Address, + Username: in.Device.Username, + Password: in.Device.Password, + Encoding: gpb.Encoding_JSON_IETF, + } + transport.SetConfig(cfg) + + newDevice := NewDevice(sbi, in.Device.Address, in.Device.Username, + in.Device.Password, transport) + + err = pnd.AddDevice(newDevice) + if err != nil { + log.Info(err) + return &pb.AddDeviceReply{Message: err.Error()}, err + } + + return &pb.AddDeviceReply{Message: "Added new Device: " + newDevice.Config.Uuid.String()}, err +} + +//HandleDeviceGetRequest handles a GET request via pnd.Request() +func (s *server) HandleDeviceGetRequest(ctx context.Context, in *pb.DeviceGetRequest) (*pb.DeviceGetReply, error) { + log.Info("Received: HandleDeviceGetRequest") + uuidPND, err := uuid.Parse(in.GetUuidPND()) + if err != nil { + log.Info(err) + return &pb.DeviceGetReply{Message: err.Error()}, err + } + uuidDevice, err := uuid.Parse(in.GetUuidDevice()) + if err != nil { + log.Info(err) + return &pb.DeviceGetReply{Message: err.Error()}, err + } + pnd, exists := s.core.principalNetworkDomains[uuidPND] + if exists != true { + err := errors.New("Couldnt find PND: UUID is wrong") + log.Info(err) + return &pb.DeviceGetReply{Message: err.Error()}, err + } + //check if the device exists + if !pnd.ContainsDevice(uuidDevice) { + err := errors.New("Couldnt find device: UUID is wrong") + log.Info(err) + return &pb.DeviceGetReply{Message: err.Error()}, err + } + + //GET request for the provided path + err = pnd.Request(uuidDevice, in.GetPath()) + if err != nil { + log.Info(err) + return &pb.DeviceGetReply{Message: err.Error()}, err + } + + d, err := pnd.MarshalDevice(uuidDevice) + if err != nil { + log.Info(err) + return &pb.DeviceGetReply{Message: err.Error()}, err + } + + return &pb.DeviceGetReply{Message: d}, nil +} diff --git a/nucleus/interfaces/clientConfig.go b/nucleus/clientConfig.go similarity index 80% rename from nucleus/interfaces/clientConfig.go rename to nucleus/clientConfig.go index b90df804102925a958eea25977486e275ebd48c3..297e7a7fe53d3dcc9c67dad5e09f95601141da65 100644 --- a/nucleus/interfaces/clientConfig.go +++ b/nucleus/clientConfig.go @@ -1,7 +1,8 @@ -package interfaces +package nucleus -// ClientConfig contains SBI client +// ClientConfig contains SBI ciena // configuration parameters +// Deprecated in favor of spf viper type ClientConfig struct { Identifier string `toml:"identifier"` Endpoint string `toml:"endpoint"` diff --git a/nucleus/controller.go b/nucleus/controller.go index 7d0541f881fb8ffd86e653c220bfcef4806eb5c6..a02b55424f458f6977a0b93849d8741b1056e384 100644 --- a/nucleus/controller.go +++ b/nucleus/controller.go @@ -1,58 +1,54 @@ package nucleus import ( + "fmt" + "os" + "code.fbi.h-da.de/cocsn/gosdn/database" - "code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces" - "code.fbi.h-da.de/cocsn/gosdn/sbi/restconf/client/ciena" - "github.com/BurntSushi/toml" + "github.com/google/uuid" log "github.com/sirupsen/logrus" - "os" + "github.com/spf13/viper" ) -type controllerConfig struct { - CliSocket string - DatabaseSocket string - DatabaseUser string - DatabasePassword string - DatabaseCrypto bool - ConfigPath string -} - -type clientConfigs struct { - Client []interfaces.ClientConfig `toml:"client"` -} - // Core is the representation of the controllers core type Core struct { - //Assert type with clients[key].(*MCPClient) - clients map[string]interfaces.Client - database database.Database - config controllerConfig - IsRunning chan bool + southboundInterfaces map[string]SouthboundInterface + principalNetworkDomains map[uuid.UUID]PrincipalNetworkDomain + database database.Database + IsRunning chan bool } -//Init does start-up housekeeping like reading controller and client config files -func (c *Core) Init(socket, configFileController, configFileClient string, IsRunningChannel chan bool) { - if err := c.readControllerConfig(configFileController); err != nil { - log.Fatal(err) - } - - if socket != "localhost:55055" { - c.config.CliSocket = socket +//Initialize does start-up housekeeping like reading controller config files +func (c *Core) Initialize(IsRunningChannel chan bool) { + // Set config defaults + viper.SetDefault("socket", "localhost:55055") + + // Set config path and read config + viper.SetConfigName("gosdn") + viper.SetConfigType("toml") + viper.AddConfigPath("/usr/local/etc/gosdn/") + viper.AddConfigPath("./configs/") + err := viper.ReadInConfig() + if err != nil { + log.Fatal(fmt.Errorf("Fatal error config file: %s \n", err)) } - c.AttachDatabase() + c.CreateSouthboundInterfaces() c.IsRunning = IsRunningChannel - - if err := c.readClientConfig(configFileClient); err != nil { - log.Fatal(err) - } } -// AttachDatabase connects to the database and passes the connectio to the controller core +// AttachDatabase connects to the database and passes the connection to the controller core func (c *Core) AttachDatabase() { - c.database = database.NewDatabaseClient(c.config.DatabaseSocket, c.config.DatabaseUser, c.config.DatabasePassword, c.config.DatabaseCrypto) + c.database = database.NewDatabaseClient() +} + +// CreateSouthboundInterfaces initializes the controller with his supported SBIs +func (c *Core) CreateSouthboundInterfaces() { + arista := &AristaOC{} + c.southboundInterfaces[arista.SbiIdentifier()] = arista + openconfig := &OpenConfig{} + c.southboundInterfaces[openconfig.SbiIdentifier()] = openconfig } // Shutdown waits for the shutdown signal and gracefully shuts down once it arrived @@ -60,50 +56,10 @@ func (c *Core) Shutdown() { <-c.IsRunning log.Info("Received shutdown signal. Shutting down") - f, err := os.Create(c.config.ConfigPath) + err := viper.WriteConfig() if err != nil { log.Fatal(err) } - enc := toml.NewEncoder(f) - if err := enc.Encode(c.config); err != nil { - log.Fatal(err) - } log.Info("Shutdown complete") os.Exit(0) } - -func (c *Core) readControllerConfig(configFileController string) error { - if configFileController == "" { - configFileController = "configs/gosdn.toml" - } - if _, err := os.Stat(configFileController); err != nil { - return err - } - - c.config = controllerConfig{} - if _, err := toml.DecodeFile(configFileController, &c.config); err != nil { - return err - } - - if c.config.ConfigPath == "" { - c.config.ConfigPath = configFileController - } - return nil -} - -func (c *Core) readClientConfig(configFileClient string) error { - if configFileClient == "" { - configFileClient = "configs/clients.toml" - } - if _, err := os.Stat(configFileClient); err != nil { - return err - } - clients := clientConfigs{} - if _, err := toml.DecodeFile(configFileClient, &clients); err != nil { - return err - } - for _, client := range clients.Client { - c.clients[client.Identifier] = ciena.NewMCPClient(client.Endpoint, client.Username, client.Password, &c.database, &client) - } - return nil -} diff --git a/nucleus/device.go b/nucleus/device.go new file mode 100644 index 0000000000000000000000000000000000000000..dcad6b388de25a0e8be66dd852a2bdd1edc00b70 --- /dev/null +++ b/nucleus/device.go @@ -0,0 +1,43 @@ +package nucleus + +import ( + "github.com/google/uuid" + "github.com/openconfig/ygot/ygot" +) + +type Device struct { + // Device inherits properties of ygot.GoStruct + ygot.GoStruct + + // SBI is the device's southbound interface implementation + SBI SouthboundInterface + + // Config is the device's config. Under revision + Config DeviceConfig + + // Transport is the device's Transport implementation + Transport Transport +} + +//NewDevice creates a Device +func NewDevice(sbi SouthboundInterface, addr, username, password string, + transport Transport) *Device { + return &Device{ + GoStruct: sbi.Schema().Root, + SBI: sbi, + Config: DeviceConfig{ + Uuid: uuid.New(), + Address: addr, + Username: username, + Password: password, + }, + Transport: transport, + } +} + +type DeviceConfig struct { + Uuid uuid.UUID + Address string + Username string + Password string +} diff --git a/nucleus/device_test.go b/nucleus/device_test.go new file mode 100644 index 0000000000000000000000000000000000000000..d98401ba952e4b94d4ebcc36da12905065e510fa --- /dev/null +++ b/nucleus/device_test.go @@ -0,0 +1,37 @@ +package nucleus + +import ( + "github.com/openconfig/ygot/ygot" + log "github.com/sirupsen/logrus" + "testing" +) + +func TestDevice_Add(t *testing.T) { + type fields struct { + ygot.GoStruct + SBI SouthboundInterface + Config DeviceConfig + Transport Transport + } + type args struct { + resp interface{} + } + tests := []struct { + name string + fields fields + args args + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + d := Device{ + GoStruct: tt.fields.SBI.Schema().Root, + SBI: tt.fields.SBI, + Config: tt.fields.Config, + Transport: tt.fields.Transport, + } + log.Debug(d.SBI.SbiIdentifier()) + }) + } +} diff --git a/nucleus/gnmi_transport.go b/nucleus/gnmi_transport.go new file mode 100644 index 0000000000000000000000000000000000000000..5d9dde72e3fc9a4beb7d9bcfdb18d079579aa058 --- /dev/null +++ b/nucleus/gnmi_transport.go @@ -0,0 +1,174 @@ +package nucleus + +import ( + "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" + "context" + "errors" + gpb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/gnmi/proto/gnmi_ext" + "github.com/openconfig/goyang/pkg/yang" + "github.com/openconfig/ygot/ytypes" + log "github.com/sirupsen/logrus" + "strings" +) + +type Gnmi struct { + SetNode func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error + RespChan chan *gpb.SubscribeResponse + config *gnmi.Config +} + +func (g *Gnmi) SetConfig(config *gnmi.Config) { + g.config = config +} + +func (g *Gnmi) GetConfig() *gnmi.Config { + return g.config +} + +// interface satisfaction for now +// TODO: Convert to meaningfiul calls +func (g *Gnmi) Get(ctx context.Context, params ...string) (interface{}, error) { + paths := gnmi.SplitPaths(params) + return g.get(ctx, paths, "") +} +func (g *Gnmi) Set(ctx context.Context, params ...string) (interface{}, error) { return nil, nil } +func (g *Gnmi) Subscribe(ctx context.Context, params ...string) error { + return g.subscribe(ctx) +} + +func (g *Gnmi) Type() string { + return "gnmi" +} + +// ProcessResponse takes a gNMI response and serializes the contents to the root struct. +func (g *Gnmi) ProcessResponse(resp interface{}, root interface{}, s *ytypes.Schema) error { + models := s.SchemaTree + opts := []ytypes.SetNodeOpt{&ytypes.InitMissingElements{}, &ytypes.TolerateJSONInconsistencies{}} + r := resp.(*gpb.GetResponse) + rn := r.Notification + for _, msg := range rn { + for _, update := range msg.Update { + prefix := msg.Prefix + path := update.Path + fullPath := path + if prefix != nil { + var err error + fullPath, err = gnmiFullPath(prefix, path) + if err != nil { + return err + } + } + modelKey := extractModelKey(fullPath) + + log.Debug(modelKey) + + schema := models["Device"] + if err := g.SetNode(schema, root, update.Path, update.Val, opts...); err != nil { + log.Error(err) + } + } + } + return nil +} + +// extractModelKey extracts the model's key from the full path. Highly model specific for now +// TODO: Remove hard coded model prefix +// TODO: Figure out why path.Elem() is empty but path.Elememt() is deprecated +func extractModelKey(path *gpb.Path) string { + var b strings.Builder + delim := "_" + b.WriteString("OpenconfigInterfaces") + for i := 0; i < len(path.Elem)-1; i++ { + pathElement := path.Elem[i] + b.WriteString(delim) + b.WriteString(strings.Title(pathElement.Name)) + } + return b.String() +} + +// gnmiFullPath builds the full path from the prefix and path. +// Copycat from forks/google/gnmi/server.go +func gnmiFullPath(prefix, path *gpb.Path) (*gpb.Path, error) { + fullPath := &gpb.Path{Origin: path.Origin} + if path.GetElement() != nil { + return nil, errors.New("deprecated path element type is unsupported") + } + if path.GetElem() != nil { + fullPath.Elem = append(prefix.GetElem(), path.GetElem()...) + } + return fullPath, nil +} + +// Capabilities calls GNMI capabilities +func (g *Gnmi) Capabilities(ctx context.Context) (interface{}, error) { + client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config)) + if err != nil { + return nil, err + } + resp, err := client.Capabilities(ctx, &gpb.CapabilityRequest{}) + if err != nil { + return nil, err + } + return resp, nil +} + +// Get calls GNMI get +func (g *Gnmi) get(ctx context.Context, paths [][]string, origin string) (interface{}, error) { + ctx = gnmi.NewContext(ctx, g.config) + ctx = context.WithValue(ctx, "config", g.config) + req, err := gnmi.NewGetRequest(ctx, paths, origin) + if err != nil { + return nil, err + } + return g.getWithRequest(ctx, req) +} + +// getWithRequest takes a fully formed GetRequest, performs the Get, +// and returns any response. +func (g *Gnmi) getWithRequest(ctx context.Context, req *gpb.GetRequest) (interface{}, error) { + client, err := gnmi.Dial(g.config) + if err != nil { + return nil, err + } + resp, err := client.Get(ctx, req) + if err != nil { + return nil, err + } + return resp, nil +} + +// Set calls GNMI set +func (g *Gnmi) set(ctx context.Context, setOps []*gnmi.Operation, + exts ...*gnmi_ext.Extension) error { + ctx = gnmi.NewContext(ctx, g.config) + client, err := gnmi.Dial(g.config) + if err != nil { + return err + } + return gnmi.Set(ctx, client, setOps, exts...) +} + +// Subscribe calls GNMI subscribe +func (g *Gnmi) subscribe(ctx context.Context) error { + ctx = gnmi.NewContext(ctx, g.config) + client, err := gnmi.Dial(g.config) + if err != nil { + return err + } + opts := ctx.Value("opts").(*gnmi.SubscribeOptions) + go func() { + for { + resp := <-g.RespChan + if err := gnmi.LogSubscribeResponse(resp); err != nil { + log.Fatal(err) + } + } + }() + return gnmi.SubscribeErr(ctx, client, opts, g.RespChan) +} + +// Close calls GNMI close +func (g *Gnmi) Close() error { + return nil +} diff --git a/nucleus/gnmi_transport_test.go b/nucleus/gnmi_transport_test.go new file mode 100644 index 0000000000000000000000000000000000000000..04fd14215216703ae7259fc4a5c8619c30dab5cd --- /dev/null +++ b/nucleus/gnmi_transport_test.go @@ -0,0 +1,194 @@ +package nucleus + +import ( + "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" + "context" + gpb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/gnmi/proto/gnmi_ext" + "reflect" + "testing" +) + +func TestGetWithRequest(t *testing.T) { + type args struct { + ctx context.Context + req *gpb.GetRequest + } + tests := []struct { + name string + args args + want interface{} + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := getWithRequest(tt.args.ctx, tt.args.req) + if (err != nil) != tt.wantErr { + t.Errorf("getWithRequest() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("getWithRequest() got = %v, want %v", got, tt.want) + } + }) + } +} + +func TestGnmi_Capabilities(t *testing.T) { + type args struct { + ctx context.Context + } + tests := []struct { + name string + g Gnmi + args args + want interface{} + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.g.Capabilities(tt.args.ctx) + if (err != nil) != tt.wantErr { + t.Errorf("Capabilities() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("Capabilities() got = %v, want %v", got, tt.want) + } + }) + } +} + +func TestGnmi_Close(t *testing.T) { + tests := []struct { + name string + g Gnmi + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := tt.g.Close(); (err != nil) != tt.wantErr { + t.Errorf("Close() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestGnmi_Get(t *testing.T) { + type args struct { + ctx context.Context + paths [][]string + origin string + } + tests := []struct { + name string + g Gnmi + args args + want interface{} + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.g.Get(tt.args.ctx, tt.args.paths, tt.args.origin) + if (err != nil) != tt.wantErr { + t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("Get() got = %v, want %v", got, tt.want) + } + }) + } +} + +func TestGnmi_GetConfig(t *testing.T) { + tests := []struct { + name string + g Gnmi + want interface{} + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.g.GetConfig(); !reflect.DeepEqual(got, tt.want) { + t.Errorf("GetConfig() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestGnmi_Set(t *testing.T) { + type args struct { + ctx context.Context + setOps []*gnmi.Operation + exts []*gnmi_ext.Extension + } + tests := []struct { + name string + g Gnmi + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := tt.g.Set(tt.args.ctx, tt.args.setOps, tt.args.exts...); (err != nil) != tt.wantErr { + t.Errorf("Set() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestGnmi_SetConfig(t *testing.T) { + type args struct { + in0 interface{} + } + tests := []struct { + name string + g Gnmi + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := tt.g.SetConfig(tt.args.in0); (err != nil) != tt.wantErr { + t.Errorf("SetConfig() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestGnmi_Subscribe(t *testing.T) { + type args struct { + ctx context.Context + subscribeOptions *gnmi.SubscribeOptions + respChan chan<- *gpb.SubscribeResponse + } + tests := []struct { + name string + g Gnmi + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := tt.g.Subscribe(tt.args.ctx, tt.args.subscribeOptions, tt.args.respChan); (err != nil) != tt.wantErr { + t.Errorf("Subscribe() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/nucleus/interfaces/client.go b/nucleus/interfaces/client.go deleted file mode 100644 index 4d0b9e1ceaf68a23f8089fb0703efd219546a217..0000000000000000000000000000000000000000 --- a/nucleus/interfaces/client.go +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces - -// Client provides an interface for -// SBI protocol clients -type Client interface { - GetConfig() ClientConfig -} diff --git a/nucleus/nucleus-core.go b/nucleus/nucleus-core.go index 4e92cf46abe187399459dfb8aa5428ee450d0af0..ae6d78056beb1e9c7d19e9385026f0117d033a91 100644 --- a/nucleus/nucleus-core.go +++ b/nucleus/nucleus-core.go @@ -1,23 +1,25 @@ package nucleus import ( + "time" + "code.fbi.h-da.de/cocsn/gosdn/database" - "code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces" + "github.com/google/uuid" log "github.com/sirupsen/logrus" - "time" ) //StartAndRun is used to start the core of the controller and any auxiliary services. -func StartAndRun(socket, filename string, IsRunningChannel chan bool) { +func StartAndRun(IsRunningChannel chan bool) { log.Info("This is the network superintendent...") log.Info("Starting my ducks") - // Init the Core + // Initialize the Core core := Core{ - clients: make(map[string]interfaces.Client), - database: database.Database{}, + principalNetworkDomains: make(map[uuid.UUID]PrincipalNetworkDomain), + southboundInterfaces: make(map[string]SouthboundInterface), + database: database.Database{}, } - core.Init(socket, filename, "", IsRunningChannel) + core.Initialize(IsRunningChannel) // Start the GRCP CLI go getCLIGoing(&core) go core.Shutdown() diff --git a/nucleus/principalNetworkDomain.go b/nucleus/principalNetworkDomain.go new file mode 100644 index 0000000000000000000000000000000000000000..bc3307cb580aab6b99ea8a5b425d4d03d834a40d --- /dev/null +++ b/nucleus/principalNetworkDomain.go @@ -0,0 +1,155 @@ +package nucleus + +import ( + "context" + + "encoding/json" + "github.com/google/uuid" +) + +// PrincipalNetworkDomain provides an +// interface for PND implementations +type PrincipalNetworkDomain interface { + Destroy() error + AddSbi(SouthboundInterface) error + RemoveSbi(string) error + AddDevice(*Device) error + RemoveDevice(uuid.UUID) error + Request(uuid.UUID, string) error + RequestAll(string) error + GetName() string + GetDescription() string + MarshalDevice(uuid.UUID) (string, error) + ContainsDevice(uuid.UUID) bool + GetSBIs() map[string]SouthboundInterface +} + +type pndImplementation struct { + name string + description string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device +} + +//NewPND creates a Principle Network Domain +func NewPND(name, description string, sbi SouthboundInterface) PrincipalNetworkDomain { + sbic := make(map[string]SouthboundInterface) + sbic["default"] = sbi + devices := make(map[uuid.UUID]*Device) + return &pndImplementation{ + name: name, + description: description, + sbi: sbic, + devices: devices, + } +} + +//GetName returns the name of the PND +func (pnd *pndImplementation) GetName() string { + return pnd.name +} + +//HasDevice checks if the given device uuid is registered for this PND +func (pnd *pndImplementation) ContainsDevice(uuid uuid.UUID) bool { + _, exists := pnd.devices[uuid] + return exists +} + +//GetDescription returns the current description of the PND +func (pnd *pndImplementation) GetDescription() string { + return pnd.description +} + +//GetSBIs returns the registered SBIs +func (pnd *pndImplementation) GetSBIs() map[string]SouthboundInterface { + return pnd.sbi +} + +// Interface satisfaction +func (pnd *pndImplementation) Destroy() error { + return destroy() +} + +//AddSbi adds a SBI to the PND which will be supported +func (pnd *pndImplementation) AddSbi(sbi SouthboundInterface) error { + return pnd.addSbi(sbi) +} + +//AddSbi removes a SBI from the PND +//TODO: this should to recursivly through +//devices and remove the devices using +//this SBI +func (pnd *pndImplementation) RemoveSbi(sbiIdentifier string) error { + return pnd.removeSbi(sbiIdentifier) +} + +//AddDevice adds a new device to the PND +func (pnd *pndImplementation) AddDevice(device *Device) error { + return pnd.addDevice(device) +} + +//RemoveDevice removes a device from the PND +func (pnd *pndImplementation) RemoveDevice(uuid uuid.UUID) error { + return pnd.removeDevice(uuid) +} + +// Actual implementation, bind to struct if +// neccessary +func destroy() error { + return nil +} + +func (pnd *pndImplementation) addSbi(sbi SouthboundInterface) error { + pnd.sbi[sbi.SbiIdentifier()] = sbi + return nil +} + +func (pnd *pndImplementation) removeSbi(sbiIdentifier string) error { + delete(pnd.sbi, sbiIdentifier) + return nil +} + +func (pnd *pndImplementation) addDevice(device *Device) error { + pnd.devices[device.Config.Uuid] = device + return nil +} + +func (pnd *pndImplementation) removeDevice(uuid uuid.UUID) error { + delete(pnd.devices, uuid) + return nil +} + +func (pnd *pndImplementation) MarshalDevice(uuid uuid.UUID) (string, error) { + d := pnd.devices[uuid] + json, err := json.MarshalIndent(d.GoStruct, "", "\t") + if err != nil { + return "", err + } + + return string(json), nil +} + +//Request sends a request for a specific device +func (pnd *pndImplementation) Request(uuid uuid.UUID, path string) error { + d := pnd.devices[uuid] + ctx := context.Background() + res, err := d.Transport.Get(ctx, path) + if err != nil { + return err + } + err = d.Transport.ProcessResponse(res, d.GoStruct, d.SBI.Schema()) + if err != nil { + return err + } + return nil +} + +//RequestAll sends a request for all registered devices +func (pnd *pndImplementation) RequestAll(path string) error { + for k := range pnd.devices { + if err := pnd.Request(k, path); err != nil { + return err + } + } + return nil +} diff --git a/nucleus/principalNetworkDomain_test.go b/nucleus/principalNetworkDomain_test.go new file mode 100644 index 0000000000000000000000000000000000000000..a5712e995138512966054471d1a905aeaf8c7935 --- /dev/null +++ b/nucleus/principalNetworkDomain_test.go @@ -0,0 +1,325 @@ +package nucleus + +import ( + "github.com/google/uuid" + "reflect" + "testing" +) + +func TestNewPND(t *testing.T) { + type args struct { + name string + desc string + sbi SouthboundInterface + } + tests := []struct { + name string + args args + want PrincipalNetworkDomain + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := NewPND(tt.args.name, tt.args.desc, tt.args.sbi); !reflect.DeepEqual(got, tt.want) { + t.Errorf("NewPND() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_addSbi(t *testing.T) { + type fields struct { + name string + desc string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + sbi SouthboundInterface + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + description: tt.fields.desc, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.addSbi(tt.args.sbi); (err != nil) != tt.wantErr { + t.Errorf("addSbi() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_destroy(t *testing.T) { + tests := []struct { + name string + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := destroy(); (err != nil) != tt.wantErr { + t.Errorf("destroy() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_pndImplementation_AddDevice(t *testing.T) { + type fields struct { + name string + desc string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + device Device + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + description: tt.fields.desc, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.AddDevice(&tt.args.device); (err != nil) != tt.wantErr { + t.Errorf("AddDevice() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_pndImplementation_AddSbi(t *testing.T) { + type fields struct { + name string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + sbi SouthboundInterface + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.AddSbi(tt.args.sbi); (err != nil) != tt.wantErr { + t.Errorf("AddSbi() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_pndImplementation_Destroy(t *testing.T) { + type fields struct { + name string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + tests := []struct { + name string + fields fields + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.Destroy(); (err != nil) != tt.wantErr { + t.Errorf("Destroy() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_pndImplementation_RemoveDevice(t *testing.T) { + type fields struct { + name string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + uuid uuid.UUID + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.RemoveDevice(tt.args.uuid); (err != nil) != tt.wantErr { + t.Errorf("RemoveDevice() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_pndImplementation_RemoveSbi(t *testing.T) { + type fields struct { + name string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + sbi SouthboundInterface + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.RemoveSbi(tt.args.sbi.SbiIdentifier()); (err != nil) != tt.wantErr { + t.Errorf("RemoveSbi() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_pndImplementation_addDevice(t *testing.T) { + type fields struct { + name string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + device Device + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.addDevice(&tt.args.device); (err != nil) != tt.wantErr { + t.Errorf("addDevice() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_pndImplementation_removeDevice(t *testing.T) { + type fields struct { + name string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + uuid uuid.UUID + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.removeDevice(tt.args.uuid); (err != nil) != tt.wantErr { + t.Errorf("removeDevice() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func Test_removeSbi(t *testing.T) { + type fields struct { + name string + sbi map[string]SouthboundInterface + devices map[uuid.UUID]*Device + } + type args struct { + uuid uuid.UUID + sbi SouthboundInterface + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pnd := &pndImplementation{ + name: tt.fields.name, + sbi: tt.fields.sbi, + devices: tt.fields.devices, + } + if err := pnd.removeSbi(tt.args.sbi.SbiIdentifier()); (err != nil) != tt.wantErr { + t.Errorf("removeSbi() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/nucleus/restconf_transport.go b/nucleus/restconf_transport.go new file mode 100644 index 0000000000000000000000000000000000000000..452bc6d9916e0bdb5a25e3b152c1ccc75f9d41c9 --- /dev/null +++ b/nucleus/restconf_transport.go @@ -0,0 +1,18 @@ +package nucleus + +import "context" + +type Restconf struct { +} + +func (rc *Restconf) SetConfig(interface{}) error { + return nil +} + +func (rc *Restconf) GetConfig() interface{} { + return nil +} + +func (rc *Restconf) Subscribe(ctx context.Context, params ...string) error { + return nil +} diff --git a/nucleus/restconf_transport_test.go b/nucleus/restconf_transport_test.go new file mode 100644 index 0000000000000000000000000000000000000000..57fb9de6f74e08b09fd1a93e551286d87b4358aa --- /dev/null +++ b/nucleus/restconf_transport_test.go @@ -0,0 +1,67 @@ +package nucleus + +import ( + "context" + "reflect" + "testing" +) + +func TestRestconf_GetConfig(t *testing.T) { + tests := []struct { + name string + want interface{} + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rc := &Restconf{} + if got := rc.GetConfig(); !reflect.DeepEqual(got, tt.want) { + t.Errorf("GetConfig() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestRestconf_SetConfig(t *testing.T) { + type args struct { + in0 interface{} + } + tests := []struct { + name string + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rc := &Restconf{} + if err := rc.SetConfig(tt.args.in0); (err != nil) != tt.wantErr { + t.Errorf("SetConfig() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestRestconf_Subscribe(t *testing.T) { + type args struct { + ctx context.Context + params []string + } + tests := []struct { + name string + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rc := &Restconf{} + if err := rc.Subscribe(tt.args.ctx, tt.args.params...); (err != nil) != tt.wantErr { + t.Errorf("Subscribe() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/nucleus/southbound.go b/nucleus/southbound.go new file mode 100644 index 0000000000000000000000000000000000000000..2a31d78f270f01e0cb153cdca907ee9422cfbc25 --- /dev/null +++ b/nucleus/southbound.go @@ -0,0 +1,97 @@ +package nucleus + +import ( + "code.fbi.h-da.de/cocsn/yang-models/generated/arista" + "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" + log "github.com/golang/glog" + gpb "github.com/openconfig/gnmi/proto/gnmi" + "github.com/openconfig/goyang/pkg/yang" + "github.com/openconfig/ygot/ytypes" +) + +// SouthboundInterface provides an +// interface for SBI implementations +type SouthboundInterface interface { + // deprecated + SbiIdentifier() string + + // SetNode injects SBI specific model + // representation to the transport. + // Needed for type assertion. + SetNode() func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error + Schema() *ytypes.Schema +} + +type Tapi struct { +} + +// OpenConfig is the implementation of an OpenConfig SBI. +// The struct holds the YANG schema and a function that +// returns an SBI specific SetNode function. +type OpenConfig struct { + // deprecated + transport Transport + + schema *ytypes.Schema +} + +// SbiIdentifier returns the string representation of +// the SBI +// deprecated +func (oc *OpenConfig) SbiIdentifier() string { + return "openconfig" +} + +func (oc *OpenConfig) Schema() *ytypes.Schema { + schema, err := openconfig.Schema() + if err != nil { + log.Fatal(err) + } + return schema +} + +// SetNode injects OpenConfig specific model +// representation to the transport. +// Needed for type assertion. +func (oc *OpenConfig) SetNode() func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error { + return func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error { + if err := ytypes.SetNode(schema, root.(*openconfig.Device), path, val, opts...); err != nil { + return err + } + return nil + } +} + +// deprecated +// Use for prototyping only. +// Use OpenConfig instead +type AristaOC struct { + // deprecated + transport Transport + + schema *ytypes.Schema +} + +func (oc *AristaOC) SbiIdentifier() string { + return "arista" +} + +func (oc *AristaOC) Schema() *ytypes.Schema { + schema, err := arista.Schema() + if err != nil { + log.Fatal(err) + } + return schema +} + +// SetNode injects AristaOC specific model +// representation to the transport. +// Needed for type assertion. +func (oc *AristaOC) SetNode() func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error { + return func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error { + if err := ytypes.SetNode(schema, root.(*arista.Device), path, val, opts...); err != nil { + return err + } + return nil + } +} diff --git a/nucleus/southbound_test.go b/nucleus/southbound_test.go new file mode 100644 index 0000000000000000000000000000000000000000..72536cbbb63612ae3e74312393ee4a94c462d91a --- /dev/null +++ b/nucleus/southbound_test.go @@ -0,0 +1,50 @@ +package nucleus + +import "testing" + +func TestOpenConfig_SbiIdentifier(t *testing.T) { + type fields struct { + transport Transport + } + tests := []struct { + name string + fields fields + want string + }{ + {name: "default", want: "openconfig"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + oc := &OpenConfig{ + transport: tt.fields.transport, + } + if got := oc.SbiIdentifier(); got != tt.want { + t.Errorf("SbiIdentifier() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestOpenConfig_OpenconfigInterfaces(t *testing.T) { + type fields struct { + transport Transport + } + type args struct { + device Device + } + tests := []struct { + name string + fields fields + args args + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + oc := &OpenConfig{ + transport: tt.fields.transport, + } + oc.OpenconfigInterfaces(tt.args.device) + }) + } +} diff --git a/nucleus/transport.go b/nucleus/transport.go new file mode 100644 index 0000000000000000000000000000000000000000..b3e397890bbd00ccd6082b1dd344f142ccdcc1d6 --- /dev/null +++ b/nucleus/transport.go @@ -0,0 +1,31 @@ +package nucleus + +import ( + "bytes" + "context" + "github.com/openconfig/ygot/ytypes" + "io" +) + +// Transport provides an interface for +// Transport implementations like RESTCONF +// or gnmi +type Transport interface { + Get(ctx context.Context, params ...string) (interface{}, error) + Set(ctx context.Context, params ...string) (interface{}, error) + Subscribe(ctx context.Context, params ...string) error + Type() string + ProcessResponse(resp interface{},root interface{}, models *ytypes.Schema) error +} + +// YANGConsumer is a auxillary type to redirect the response +// of an RESTCONF call to a ygot YANG unmarshaler +type YANGConsumer struct { + Data *bytes.Buffer +} + +// Consume reads the received data into a byte buffer +func (yc YANGConsumer) Consume(reader io.Reader, _ interface{}) error { + _, err := yc.Data.ReadFrom(reader) + return err +} diff --git a/nucleus/util/path_traversal.go b/nucleus/util/path_traversal.go new file mode 100644 index 0000000000000000000000000000000000000000..c9a1ac39d870fffc1d5e400a9715ee1a9830f800 --- /dev/null +++ b/nucleus/util/path_traversal.go @@ -0,0 +1,120 @@ +package util + +import ( + "fmt" + "github.com/openconfig/goyang/pkg/yang" + "github.com/openconfig/ygot/ytypes" + log "github.com/sirupsen/logrus" + "strings" +) + +const DELIM = "/" + +type PathElement struct { + Children []*PathElement + Name string +} + +func (p *PathElement) Print() { + printPE(0, p) +} + +func printPE(indent int, pe *PathElement) { + for i := 0; i < indent; i++ { + fmt.Print(" ") + } + fmt.Println(pe.Name) + if len(pe.Children) > 0 { + for _, p := range pe.Children { + printPE(indent+1, p) + } + } +} + +func NewPaths() Paths { + return make(map[string]*PathElement) +} + +type Paths map[string]*PathElement + +func processEntry(e *yang.Entry) *PathElement { + if e.Dir != nil { + elem := &PathElement{ + Children: make([]*PathElement, len(e.Dir)), + Name: e.Name, + } + i := 0 + for _, v := range e.Dir { + elem.Children[i] = processEntry(v) + i++ + } + return elem + } + leaf := &PathElement{ + Name: e.Name, + } + return leaf +} + +func (p Paths) ParseSchema(schema *ytypes.Schema, root string) error { + tree := schema.SchemaTree + for k, v := range tree { + if v.Parent != nil { + if v.Parent.Name == root { + path := processEntry(v) + p[k] = path + } + } + } + return nil +} + +func (p Paths) StringBuilder() []string { + paths := make([]string, 0) + ch := make(chan string) + stop := make(chan bool) + val := make(chan []string) + go appendix(ch, stop, val) + for _, v := range p { + var b strings.Builder + stringBuilder(ch, &b, v) + } + stop <- true + paths = <-val + return paths +} + +func appendix(c chan string, stop chan bool,p chan []string) { + paths := make([]string, 0) + var sig bool + for { + select { + case path := <-c: + paths = append(paths, path) + log.Debug(path) + case sig = <-stop: + log.Debugf("Signal received: %v", sig) + + } + if sig {break} + } + p <- paths +} + +func stringBuilder(ch chan string, b *strings.Builder, v *PathElement) { + if b.Len() == 0 { + b.WriteString(DELIM) + } + b.WriteString(v.Name) + if v.Children != nil { + b.WriteString(DELIM) + for _, c := range v.Children { + var b_cpy strings.Builder + b_cpy.WriteString(b.String()) + stringBuilder(ch, &b_cpy, c) + } + } else { + log.Debug("leaf") + ch <- b.String() + } +} diff --git a/sbi/restconf/client/ciena/client.go b/plugins/ciena/mcp.go similarity index 81% rename from sbi/restconf/client/ciena/client.go rename to plugins/ciena/mcp.go index 7b994496a17a145ce2b6ed5c207e0fb55b8b8435..2c51eed50c44cbe1cd8a4c7c888a22240227beaa 100644 --- a/sbi/restconf/client/ciena/client.go +++ b/plugins/ciena/mcp.go @@ -3,53 +3,64 @@ package ciena import ( "bytes" "code.fbi.h-da.de/cocsn/gosdn/database" - "code.fbi.h-da.de/cocsn/gosdn/nucleus/interfaces" - "code.fbi.h-da.de/cocsn/gosdn/sbi/restconf/util" + "code.fbi.h-da.de/cocsn/gosdn/nucleus" apiclient "code.fbi.h-da.de/cocsn/swagger/apis/mcp/client" - "code.fbi.h-da.de/cocsn/yang-modules/generated/tapi" + "code.fbi.h-da.de/cocsn/yang-models/generated/tapi" "crypto/tls" "encoding/json" "github.com/go-openapi/runtime" httptransport "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/openconfig/ygot/ygot" - "github.com/tidwall/gjson" log "github.com/sirupsen/logrus" + "github.com/tidwall/gjson" "net/http" "strings" ) -//MCPClient handles requests to a Ciena MCP RESTCONF endpoint -type MCPClient struct { +//Mcp handles requests to a Ciena MCP RESTCONF endpoint +type Mcp struct { transport *httptransport.Runtime client *apiclient.ServiceTopologyTAPI database *database.Database buffer *bytes.Buffer - config *interfaces.ClientConfig + config *nucleus.ClientConfig device ygot.GoStruct } // GetConfig returns a ClientConfig struct containing -// the current configuration stat of the Ciena SBI client -func (c MCPClient) GetConfig() interfaces.ClientConfig { +// the current configuration stat of the Ciena SBI ciena +func (c Mcp) GetConfig() nucleus.ClientConfig { return *c.config } -//NewMCPClient creates a Ciena flavores TAPI client -func NewMCPClient(endpoint, username, password string, database *database.Database, config *interfaces.ClientConfig) *MCPClient { +// ListPorts is a stub to satisfy the interface +// TODO: Implement +func (c Mcp) ListPorts() interface{} { + return nil +} + +// PushReceiver is a stub to satisfy the interface +// TODO: Implement +func (c Mcp) PushReceiver() error { + return nil +} + +//NewMCPClient creates a Ciena flavores TAPI ciena +func NewMCPClient(endpoint, username, password string, database *database.Database, config *nucleus.ClientConfig) *Mcp { // create the transport transport := httptransport.New(endpoint, "/", nil) transport.Transport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} - // create the API client, with the transport + // create the API ciena, with the transport basicAuth := httptransport.BasicAuth(username, password) - // authenticate client + // authenticate ciena transport.DefaultAuthentication = basicAuth client := apiclient.New(transport, strfmt.Default) buffer := new(bytes.Buffer) - transport.Consumers[runtime.JSONMime] = util.YANGConsumer{Data: buffer} + transport.Consumers[runtime.JSONMime] = nucleus.YANGConsumer{Data: buffer} - return &MCPClient{ + return &Mcp{ transport: transport, client: client, database: database, @@ -60,8 +71,8 @@ func NewMCPClient(endpoint, username, password string, database *database.Databa } // GetConnections implements the TAPI Connectivity GetConnections call with a grain of -// Ciena salt. The response is written to the client's buffer and passed to the database -func (c *MCPClient) GetConnections() error { +// Ciena salt. The response is written to the ciena's buffer and passed to the database +func (c *Mcp) GetConnections() error { defer c.buffer.Reset() _, err := c.client.TapiConnectivityCore.GetTapiCoreContextConnection(nil) if err != nil { @@ -87,8 +98,8 @@ func (c *MCPClient) GetConnections() error { } // GetLinks implements the TAPI Topology GetLinks call with a grain of -// Ciena salt. The response is written to the client's buffer and passed to the database -func (c *MCPClient) GetLinks() error { +// Ciena salt. The response is written to the ciena's buffer and passed to the database +func (c *Mcp) GetLinks() error { defer c.buffer.Reset() _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyLink(nil) if err != nil { @@ -114,8 +125,8 @@ func (c *MCPClient) GetLinks() error { } // GetNodes implements the TAPI Topology GetNodes call with a grain of -// Ciena salt. The response is written to the client's buffer and passed to the database -func (c *MCPClient) GetNodes() error { +// Ciena salt. The response is written to the ciena's buffer and passed to the database +func (c *Mcp) GetNodes() error { defer c.buffer.Reset() _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyNode(nil) if err != nil { @@ -141,8 +152,8 @@ func (c *MCPClient) GetNodes() error { } // GetNodeEdgePoints implements the TAPI Topology GetNodeEdgePoints call with a grain of -// Ciena salt. The response is written to the client's buffer and passed to the database -func (c *MCPClient) GetNodeEdgePoints() error { +// Ciena salt. The response is written to the ciena's buffer and passed to the database +func (c *Mcp) GetNodeEdgePoints() error { defer c.buffer.Reset() _, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyNodeEdgePoint(nil) if err != nil { diff --git a/plugins/sbi-general.go b/plugins/sbi-general.go new file mode 100644 index 0000000000000000000000000000000000000000..4a4ce3272fcbbe8ca40a0ec0b9925e9b76959b6b --- /dev/null +++ b/plugins/sbi-general.go @@ -0,0 +1,40 @@ +package plugins + +import ( + "fmt" + "os" + "plugin" +) + +type SBIGreeter interface { + SBIHello() +} + +func SBILoader() { + modPath := "/Users/mls/go/src/code.fbi.h-da.de/cocsn/byowsbi/byowsbi.o" + + // open the so file that contains the SBI-plugin as step before loading the symbols + plug, err := plugin.Open(modPath) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + // loading the symbols + sbiModule, err := plug.Lookup("SBIGreeter") + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + // Assert the loaded symbol + var sbigreeter SBIGreeter + sbigreeter, ok := sbiModule.(SBIGreeter) + if !ok { + fmt.Println("unexpected type from module symbol") + os.Exit(1) + } + + // use me! + sbigreeter.SBIHello() +} diff --git a/sbi/restconf/util/unmarshal.go b/sbi/restconf/util/unmarshal.go deleted file mode 100644 index 9c85a8cb4d23329efe33cad50d86fa88463e4fa6..0000000000000000000000000000000000000000 --- a/sbi/restconf/util/unmarshal.go +++ /dev/null @@ -1,18 +0,0 @@ -package util - -import ( - "bytes" - "io" -) - -// YANGConsumer is a auxillary type to redirect the response -// of an RESTCONF call to a ygot YANG unmarshaler -type YANGConsumer struct { - Data *bytes.Buffer -} - -// Consume reads the received data into a byte buffer -func (yc YANGConsumer) Consume(reader io.Reader, _ interface{}) error { - _, err := yc.Data.ReadFrom(reader) - return err -}