diff --git a/pkg/kubelet/apis/cri/services.go b/pkg/kubelet/apis/cri/services.go index c4c91d6cde0..11ee088dbf8 100644 --- a/pkg/kubelet/apis/cri/services.go +++ b/pkg/kubelet/apis/cri/services.go @@ -72,12 +72,23 @@ type PodSandboxManager interface { PortForward(*runtimeapi.PortForwardRequest) (*runtimeapi.PortForwardResponse, error) } +// ContainerStatsManager contains methods for retriving the container +// statistics. +type ContainerStatsManager interface { + // ContainerStats returns stats of the container. If the container does not + // exist, the call returns an error. + ContainerStats(req *runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) + // ListContainerStats returns stats of all running containers. + ListContainerStats(req *runtimeapi.ListContainerStatsRequest) (*runtimeapi.ListContainerStatsResponse, error) +} + // RuntimeService interface should be implemented by a container runtime. // The methods should be thread-safe. type RuntimeService interface { RuntimeVersioner ContainerManager PodSandboxManager + ContainerStatsManager // UpdateRuntimeConfig updates runtime configuration if specified UpdateRuntimeConfig(runtimeConfig *runtimeapi.RuntimeConfig) error @@ -98,5 +109,5 @@ type ImageManagerService interface { // RemoveImage removes the image. RemoveImage(image *runtimeapi.ImageSpec) error // ImageFsInfo returns information of the filesystem that is used to store images. - ImageFsInfo() (*runtimeapi.FsInfo, error) + ImageFsInfo(req *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) } diff --git a/pkg/kubelet/apis/cri/testing/fake_image_service.go b/pkg/kubelet/apis/cri/testing/fake_image_service.go index a751ccdb5c5..6f18cb5490d 100644 --- a/pkg/kubelet/apis/cri/testing/fake_image_service.go +++ b/pkg/kubelet/apis/cri/testing/fake_image_service.go @@ -126,7 +126,7 @@ func (r *FakeImageService) RemoveImage(image *runtimeapi.ImageSpec) error { } // ImageFsInfo returns information of the filesystem that is used to store images. -func (r *FakeImageService) ImageFsInfo() (*runtimeapi.FsInfo, error) { +func (r *FakeImageService) ImageFsInfo(req *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) { r.Lock() defer r.Unlock() diff --git a/pkg/kubelet/apis/cri/testing/fake_runtime_service.go b/pkg/kubelet/apis/cri/testing/fake_runtime_service.go index 12fac28bd09..37cb26ecb6f 100644 --- a/pkg/kubelet/apis/cri/testing/fake_runtime_service.go +++ b/pkg/kubelet/apis/cri/testing/fake_runtime_service.go @@ -389,3 +389,11 @@ func (r *FakeRuntimeService) Attach(req *runtimeapi.AttachRequest) (*runtimeapi. func (r *FakeRuntimeService) UpdateRuntimeConfig(runtimeCOnfig *runtimeapi.RuntimeConfig) error { return nil } + +func (r *FakeRuntimeService) ContainerStats(req *runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) { + return nil, fmt.Errorf("Not implemented") +} + +func (r *FakeRuntimeService) ListContainerStats(req *runtimeapi.ListContainerStatsRequest) (*runtimeapi.ListContainerStatsResponse, error) { + return nil, fmt.Errorf("Not implemented") +} diff --git a/pkg/kubelet/apis/cri/v1alpha1/api.pb.go b/pkg/kubelet/apis/cri/v1alpha1/api.pb.go index 0e9f0866def..a8e85effba1 100644 --- a/pkg/kubelet/apis/cri/v1alpha1/api.pb.go +++ b/pkg/kubelet/apis/cri/v1alpha1/api.pb.go @@ -108,8 +108,18 @@ limitations under the License. StatusResponse ImageFsInfoRequest UInt64Value - FsInfo + StorageIdentifier + FilesystemUsage ImageFsInfoResponse + ContainerStatsRequest + ContainerStatsResponse + ListContainerStatsRequest + ContainerStatsFilter + ListContainerStatsResponse + ContainerAttributes + ContainerStats + CpuUsage + MemoryUsage */ package v1alpha1 @@ -2849,86 +2859,65 @@ func (m *UInt64Value) GetValue() uint64 { return 0 } -// FsInfo contains data about filesystem usage. -type FsInfo struct { - // The block device name associated with the filesystem. - Device string `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"` - // The root directory for the images. - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - // CapacityBytes represents the total capacity (bytes) of the filesystems - // underlying storage. - CapacityBytes *UInt64Value `protobuf:"bytes,3,opt,name=capacity_bytes,json=capacityBytes" json:"capacity_bytes,omitempty"` - // AvailableBytes represents the storage space available (bytes) for the - // filesystem. - AvailableBytes *UInt64Value `protobuf:"bytes,4,opt,name=available_bytes,json=availableBytes" json:"available_bytes,omitempty"` +// StorageIdentifier uniquely identify the storage.. +type StorageIdentifier struct { + // UUID of the device. + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` +} + +func (m *StorageIdentifier) Reset() { *m = StorageIdentifier{} } +func (*StorageIdentifier) ProtoMessage() {} +func (*StorageIdentifier) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } + +func (m *StorageIdentifier) GetUuid() string { + if m != nil { + return m.Uuid + } + return "" +} + +// FilesystemUsage provides the filesystem usage information. +type FilesystemUsage struct { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // The underlying storage of the filesystem. + StorageId *StorageIdentifier `protobuf:"bytes,2,opt,name=storage_id,json=storageId" json:"storage_id,omitempty"` // UsedBytes represents the bytes used for images on the filesystem. // This may differ from the total bytes used on the filesystem and may not // equal CapacityBytes - AvailableBytes. - UsedBytes *UInt64Value `protobuf:"bytes,5,opt,name=used_bytes,json=usedBytes" json:"used_bytes,omitempty"` - // InodesCapacity represents the total inodes in the filesystem. - InodesCapacity *UInt64Value `protobuf:"bytes,6,opt,name=inodes_capacity,json=inodesCapacity" json:"inodes_capacity,omitempty"` - // InodesAvailable represents the free inodes in the filesystem. - InodesAvailable *UInt64Value `protobuf:"bytes,7,opt,name=inodes_available,json=inodesAvailable" json:"inodes_available,omitempty"` + UsedBytes *UInt64Value `protobuf:"bytes,3,opt,name=used_bytes,json=usedBytes" json:"used_bytes,omitempty"` // InodesUsed represents the inodes used by the images. // This may not equal InodesCapacity - InodesAvailable because the underlying // filesystem may also be used for purposes other than storing images. - InodesUsed *UInt64Value `protobuf:"bytes,8,opt,name=inodes_used,json=inodesUsed" json:"inodes_used,omitempty"` + InodesUsed *UInt64Value `protobuf:"bytes,4,opt,name=inodes_used,json=inodesUsed" json:"inodes_used,omitempty"` } -func (m *FsInfo) Reset() { *m = FsInfo{} } -func (*FsInfo) ProtoMessage() {} -func (*FsInfo) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{83} } +func (m *FilesystemUsage) Reset() { *m = FilesystemUsage{} } +func (*FilesystemUsage) ProtoMessage() {} +func (*FilesystemUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } -func (m *FsInfo) GetDevice() string { +func (m *FilesystemUsage) GetTimestamp() int64 { if m != nil { - return m.Device + return m.Timestamp } - return "" + return 0 } -func (m *FsInfo) GetPath() string { +func (m *FilesystemUsage) GetStorageId() *StorageIdentifier { if m != nil { - return m.Path - } - return "" -} - -func (m *FsInfo) GetCapacityBytes() *UInt64Value { - if m != nil { - return m.CapacityBytes + return m.StorageId } return nil } -func (m *FsInfo) GetAvailableBytes() *UInt64Value { - if m != nil { - return m.AvailableBytes - } - return nil -} - -func (m *FsInfo) GetUsedBytes() *UInt64Value { +func (m *FilesystemUsage) GetUsedBytes() *UInt64Value { if m != nil { return m.UsedBytes } return nil } -func (m *FsInfo) GetInodesCapacity() *UInt64Value { - if m != nil { - return m.InodesCapacity - } - return nil -} - -func (m *FsInfo) GetInodesAvailable() *UInt64Value { - if m != nil { - return m.InodesAvailable - } - return nil -} - -func (m *FsInfo) GetInodesUsed() *UInt64Value { +func (m *FilesystemUsage) GetInodesUsed() *UInt64Value { if m != nil { return m.InodesUsed } @@ -2936,17 +2925,262 @@ func (m *FsInfo) GetInodesUsed() *UInt64Value { } type ImageFsInfoResponse struct { - // filesystem information of images. - FsInfo *FsInfo `protobuf:"bytes,1,opt,name=fs_info,json=fsInfo" json:"fs_info,omitempty"` + // Information of image filesystem(s). + ImageFilesystems []*FilesystemUsage `protobuf:"bytes,1,rep,name=image_filesystems,json=imageFilesystems" json:"image_filesystems,omitempty"` } func (m *ImageFsInfoResponse) Reset() { *m = ImageFsInfoResponse{} } func (*ImageFsInfoResponse) ProtoMessage() {} -func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{84} } +func (*ImageFsInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{85} } -func (m *ImageFsInfoResponse) GetFsInfo() *FsInfo { +func (m *ImageFsInfoResponse) GetImageFilesystems() []*FilesystemUsage { if m != nil { - return m.FsInfo + return m.ImageFilesystems + } + return nil +} + +type ContainerStatsRequest struct { + // ID of the container for which to retrieve stats. + ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` +} + +func (m *ContainerStatsRequest) Reset() { *m = ContainerStatsRequest{} } +func (*ContainerStatsRequest) ProtoMessage() {} +func (*ContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{86} } + +func (m *ContainerStatsRequest) GetContainerId() string { + if m != nil { + return m.ContainerId + } + return "" +} + +type ContainerStatsResponse struct { + // Stats of the container. + Stats *ContainerStats `protobuf:"bytes,1,opt,name=stats" json:"stats,omitempty"` +} + +func (m *ContainerStatsResponse) Reset() { *m = ContainerStatsResponse{} } +func (*ContainerStatsResponse) ProtoMessage() {} +func (*ContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{87} } + +func (m *ContainerStatsResponse) GetStats() *ContainerStats { + if m != nil { + return m.Stats + } + return nil +} + +type ListContainerStatsRequest struct { + // Filter for the list request. + Filter *ContainerStatsFilter `protobuf:"bytes,1,opt,name=filter" json:"filter,omitempty"` +} + +func (m *ListContainerStatsRequest) Reset() { *m = ListContainerStatsRequest{} } +func (*ListContainerStatsRequest) ProtoMessage() {} +func (*ListContainerStatsRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{88} } + +func (m *ListContainerStatsRequest) GetFilter() *ContainerStatsFilter { + if m != nil { + return m.Filter + } + return nil +} + +// ContainerStatsFilter is used to filter containers. +// All those fields are combined with 'AND' +type ContainerStatsFilter struct { + // ID of the container. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // ID of the PodSandbox. + PodSandboxId string `protobuf:"bytes,2,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + LabelSelector map[string]string `protobuf:"bytes,3,rep,name=label_selector,json=labelSelector" json:"label_selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (m *ContainerStatsFilter) Reset() { *m = ContainerStatsFilter{} } +func (*ContainerStatsFilter) ProtoMessage() {} +func (*ContainerStatsFilter) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{89} } + +func (m *ContainerStatsFilter) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ContainerStatsFilter) GetPodSandboxId() string { + if m != nil { + return m.PodSandboxId + } + return "" +} + +func (m *ContainerStatsFilter) GetLabelSelector() map[string]string { + if m != nil { + return m.LabelSelector + } + return nil +} + +type ListContainerStatsResponse struct { + // Stats of the container. + Stats []*ContainerStats `protobuf:"bytes,1,rep,name=stats" json:"stats,omitempty"` +} + +func (m *ListContainerStatsResponse) Reset() { *m = ListContainerStatsResponse{} } +func (*ListContainerStatsResponse) ProtoMessage() {} +func (*ListContainerStatsResponse) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{90} } + +func (m *ListContainerStatsResponse) GetStats() []*ContainerStats { + if m != nil { + return m.Stats + } + return nil +} + +// ContainerAttributes provides basic information of the container. +type ContainerAttributes struct { + // ID of the container. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Metadata of the container. + Metadata *ContainerMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + // Key-value pairs that may be used to scope and select individual resources. + Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate the Container this status represents. + Annotations map[string]string `protobuf:"bytes,4,rep,name=annotations" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (m *ContainerAttributes) Reset() { *m = ContainerAttributes{} } +func (*ContainerAttributes) ProtoMessage() {} +func (*ContainerAttributes) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{91} } + +func (m *ContainerAttributes) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *ContainerAttributes) GetMetadata() *ContainerMetadata { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *ContainerAttributes) GetLabels() map[string]string { + if m != nil { + return m.Labels + } + return nil +} + +func (m *ContainerAttributes) GetAnnotations() map[string]string { + if m != nil { + return m.Annotations + } + return nil +} + +// ContainerStats provides the resource usage statistics for a container. +type ContainerStats struct { + // Information of the container. + Attributes *ContainerAttributes `protobuf:"bytes,1,opt,name=attributes" json:"attributes,omitempty"` + // CPU usage gathered from the container. + Cpu *CpuUsage `protobuf:"bytes,2,opt,name=cpu" json:"cpu,omitempty"` + // Memory usage gathered from the container. + Memory *MemoryUsage `protobuf:"bytes,3,opt,name=memory" json:"memory,omitempty"` + // Usage of the writeable layer. + WritableLayer *FilesystemUsage `protobuf:"bytes,4,opt,name=writable_layer,json=writableLayer" json:"writable_layer,omitempty"` +} + +func (m *ContainerStats) Reset() { *m = ContainerStats{} } +func (*ContainerStats) ProtoMessage() {} +func (*ContainerStats) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{92} } + +func (m *ContainerStats) GetAttributes() *ContainerAttributes { + if m != nil { + return m.Attributes + } + return nil +} + +func (m *ContainerStats) GetCpu() *CpuUsage { + if m != nil { + return m.Cpu + } + return nil +} + +func (m *ContainerStats) GetMemory() *MemoryUsage { + if m != nil { + return m.Memory + } + return nil +} + +func (m *ContainerStats) GetWritableLayer() *FilesystemUsage { + if m != nil { + return m.WritableLayer + } + return nil +} + +// CpuUsage provides the CPU usage information. +type CpuUsage struct { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Cumulative CPU usage (sum across all cores) since object creation. + UsageCoreNanoSeconds *UInt64Value `protobuf:"bytes,2,opt,name=usage_core_nano_seconds,json=usageCoreNanoSeconds" json:"usage_core_nano_seconds,omitempty"` +} + +func (m *CpuUsage) Reset() { *m = CpuUsage{} } +func (*CpuUsage) ProtoMessage() {} +func (*CpuUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{93} } + +func (m *CpuUsage) GetTimestamp() int64 { + if m != nil { + return m.Timestamp + } + return 0 +} + +func (m *CpuUsage) GetUsageCoreNanoSeconds() *UInt64Value { + if m != nil { + return m.UsageCoreNanoSeconds + } + return nil +} + +// MemoryUsage provides the memory usage information. +type MemoryUsage struct { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // The amount of working set memory in bytes. + WorkingSetBytes *UInt64Value `protobuf:"bytes,2,opt,name=working_set_bytes,json=workingSetBytes" json:"working_set_bytes,omitempty"` +} + +func (m *MemoryUsage) Reset() { *m = MemoryUsage{} } +func (*MemoryUsage) ProtoMessage() {} +func (*MemoryUsage) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{94} } + +func (m *MemoryUsage) GetTimestamp() int64 { + if m != nil { + return m.Timestamp + } + return 0 +} + +func (m *MemoryUsage) GetWorkingSetBytes() *UInt64Value { + if m != nil { + return m.WorkingSetBytes } return nil } @@ -3035,8 +3269,18 @@ func init() { proto.RegisterType((*StatusResponse)(nil), "v1alpha1.StatusResponse") proto.RegisterType((*ImageFsInfoRequest)(nil), "v1alpha1.ImageFsInfoRequest") proto.RegisterType((*UInt64Value)(nil), "v1alpha1.UInt64Value") - proto.RegisterType((*FsInfo)(nil), "v1alpha1.FsInfo") + proto.RegisterType((*StorageIdentifier)(nil), "v1alpha1.StorageIdentifier") + proto.RegisterType((*FilesystemUsage)(nil), "v1alpha1.FilesystemUsage") proto.RegisterType((*ImageFsInfoResponse)(nil), "v1alpha1.ImageFsInfoResponse") + proto.RegisterType((*ContainerStatsRequest)(nil), "v1alpha1.ContainerStatsRequest") + proto.RegisterType((*ContainerStatsResponse)(nil), "v1alpha1.ContainerStatsResponse") + proto.RegisterType((*ListContainerStatsRequest)(nil), "v1alpha1.ListContainerStatsRequest") + proto.RegisterType((*ContainerStatsFilter)(nil), "v1alpha1.ContainerStatsFilter") + proto.RegisterType((*ListContainerStatsResponse)(nil), "v1alpha1.ListContainerStatsResponse") + proto.RegisterType((*ContainerAttributes)(nil), "v1alpha1.ContainerAttributes") + proto.RegisterType((*ContainerStats)(nil), "v1alpha1.ContainerStats") + proto.RegisterType((*CpuUsage)(nil), "v1alpha1.CpuUsage") + proto.RegisterType((*MemoryUsage)(nil), "v1alpha1.MemoryUsage") proto.RegisterEnum("v1alpha1.Protocol", Protocol_name, Protocol_value) proto.RegisterEnum("v1alpha1.PodSandboxState", PodSandboxState_name, PodSandboxState_value) proto.RegisterEnum("v1alpha1.ContainerState", ContainerState_name, ContainerState_value) @@ -3105,6 +3349,11 @@ type RuntimeServiceClient interface { Attach(ctx context.Context, in *AttachRequest, opts ...grpc.CallOption) (*AttachResponse, error) // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. PortForward(ctx context.Context, in *PortForwardRequest, opts ...grpc.CallOption) (*PortForwardResponse, error) + // ContainerStats returns stats of the container. If the container does not + // exist, the call returns an error. + ContainerStats(ctx context.Context, in *ContainerStatsRequest, opts ...grpc.CallOption) (*ContainerStatsResponse, error) + // ListContainerStats returns stats of all running containers. + ListContainerStats(ctx context.Context, in *ListContainerStatsRequest, opts ...grpc.CallOption) (*ListContainerStatsResponse, error) // UpdateRuntimeConfig updates the runtime configuration based on the given request. UpdateRuntimeConfig(ctx context.Context, in *UpdateRuntimeConfigRequest, opts ...grpc.CallOption) (*UpdateRuntimeConfigResponse, error) // Status returns the status of the runtime. @@ -3263,6 +3512,24 @@ func (c *runtimeServiceClient) PortForward(ctx context.Context, in *PortForwardR return out, nil } +func (c *runtimeServiceClient) ContainerStats(ctx context.Context, in *ContainerStatsRequest, opts ...grpc.CallOption) (*ContainerStatsResponse, error) { + out := new(ContainerStatsResponse) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ContainerStats", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *runtimeServiceClient) ListContainerStats(ctx context.Context, in *ListContainerStatsRequest, opts ...grpc.CallOption) (*ListContainerStatsResponse, error) { + out := new(ListContainerStatsResponse) + err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/ListContainerStats", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *runtimeServiceClient) UpdateRuntimeConfig(ctx context.Context, in *UpdateRuntimeConfigRequest, opts ...grpc.CallOption) (*UpdateRuntimeConfigResponse, error) { out := new(UpdateRuntimeConfigResponse) err := grpc.Invoke(ctx, "/v1alpha1.RuntimeService/UpdateRuntimeConfig", in, out, c.cc, opts...) @@ -3336,6 +3603,11 @@ type RuntimeServiceServer interface { Attach(context.Context, *AttachRequest) (*AttachResponse, error) // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. PortForward(context.Context, *PortForwardRequest) (*PortForwardResponse, error) + // ContainerStats returns stats of the container. If the container does not + // exist, the call returns an error. + ContainerStats(context.Context, *ContainerStatsRequest) (*ContainerStatsResponse, error) + // ListContainerStats returns stats of all running containers. + ListContainerStats(context.Context, *ListContainerStatsRequest) (*ListContainerStatsResponse, error) // UpdateRuntimeConfig updates the runtime configuration based on the given request. UpdateRuntimeConfig(context.Context, *UpdateRuntimeConfigRequest) (*UpdateRuntimeConfigResponse, error) // Status returns the status of the runtime. @@ -3634,6 +3906,42 @@ func _RuntimeService_PortForward_Handler(srv interface{}, ctx context.Context, d return interceptor(ctx, in, info, handler) } +func _RuntimeService_ContainerStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ContainerStatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeServiceServer).ContainerStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/v1alpha1.RuntimeService/ContainerStats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeServiceServer).ContainerStats(ctx, req.(*ContainerStatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RuntimeService_ListContainerStats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListContainerStatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeServiceServer).ListContainerStats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/v1alpha1.RuntimeService/ListContainerStats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeServiceServer).ListContainerStats(ctx, req.(*ListContainerStatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _RuntimeService_UpdateRuntimeConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpdateRuntimeConfigRequest) if err := dec(in); err != nil { @@ -3738,6 +4046,14 @@ var _RuntimeService_serviceDesc = grpc.ServiceDesc{ MethodName: "PortForward", Handler: _RuntimeService_PortForward_Handler, }, + { + MethodName: "ContainerStats", + Handler: _RuntimeService_ContainerStats_Handler, + }, + { + MethodName: "ListContainerStats", + Handler: _RuntimeService_ListContainerStats_Handler, + }, { MethodName: "UpdateRuntimeConfig", Handler: _RuntimeService_UpdateRuntimeConfig_Handler, @@ -7276,7 +7592,7 @@ func (m *UInt64Value) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *FsInfo) Marshal() (dAtA []byte, err error) { +func (m *StorageIdentifier) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -7286,83 +7602,70 @@ func (m *FsInfo) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *FsInfo) MarshalTo(dAtA []byte) (int, error) { +func (m *StorageIdentifier) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int _ = l - if len(m.Device) > 0 { + if len(m.Uuid) > 0 { dAtA[i] = 0xa i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Device))) - i += copy(dAtA[i:], m.Device) + i = encodeVarintApi(dAtA, i, uint64(len(m.Uuid))) + i += copy(dAtA[i:], m.Uuid) } - if len(m.Path) > 0 { + return i, nil +} + +func (m *FilesystemUsage) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *FilesystemUsage) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Timestamp != 0 { + dAtA[i] = 0x8 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) + } + if m.StorageId != nil { dAtA[i] = 0x12 i++ - i = encodeVarintApi(dAtA, i, uint64(len(m.Path))) - i += copy(dAtA[i:], m.Path) - } - if m.CapacityBytes != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintApi(dAtA, i, uint64(m.CapacityBytes.Size())) - n54, err := m.CapacityBytes.MarshalTo(dAtA[i:]) + i = encodeVarintApi(dAtA, i, uint64(m.StorageId.Size())) + n54, err := m.StorageId.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n54 } - if m.AvailableBytes != nil { - dAtA[i] = 0x22 + if m.UsedBytes != nil { + dAtA[i] = 0x1a i++ - i = encodeVarintApi(dAtA, i, uint64(m.AvailableBytes.Size())) - n55, err := m.AvailableBytes.MarshalTo(dAtA[i:]) + i = encodeVarintApi(dAtA, i, uint64(m.UsedBytes.Size())) + n55, err := m.UsedBytes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n55 } - if m.UsedBytes != nil { - dAtA[i] = 0x2a + if m.InodesUsed != nil { + dAtA[i] = 0x22 i++ - i = encodeVarintApi(dAtA, i, uint64(m.UsedBytes.Size())) - n56, err := m.UsedBytes.MarshalTo(dAtA[i:]) + i = encodeVarintApi(dAtA, i, uint64(m.InodesUsed.Size())) + n56, err := m.InodesUsed.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n56 } - if m.InodesCapacity != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintApi(dAtA, i, uint64(m.InodesCapacity.Size())) - n57, err := m.InodesCapacity.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n57 - } - if m.InodesAvailable != nil { - dAtA[i] = 0x3a - i++ - i = encodeVarintApi(dAtA, i, uint64(m.InodesAvailable.Size())) - n58, err := m.InodesAvailable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n58 - } - if m.InodesUsed != nil { - dAtA[i] = 0x42 - i++ - i = encodeVarintApi(dAtA, i, uint64(m.InodesUsed.Size())) - n59, err := m.InodesUsed.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n59 - } return i, nil } @@ -7381,16 +7684,367 @@ func (m *ImageFsInfoResponse) MarshalTo(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.FsInfo != nil { + if len(m.ImageFilesystems) > 0 { + for _, msg := range m.ImageFilesystems { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ContainerStatsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.ContainerId) > 0 { dAtA[i] = 0xa i++ - i = encodeVarintApi(dAtA, i, uint64(m.FsInfo.Size())) - n60, err := m.FsInfo.MarshalTo(dAtA[i:]) + i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) + i += copy(dAtA[i:], m.ContainerId) + } + return i, nil +} + +func (m *ContainerStatsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ContainerStatsResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Stats != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Stats.Size())) + n57, err := m.Stats.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n57 + } + return i, nil +} + +func (m *ListContainerStatsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListContainerStatsRequest) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Filter != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Filter.Size())) + n58, err := m.Filter.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n58 + } + return i, nil +} + +func (m *ContainerStatsFilter) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ContainerStatsFilter) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Id) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) + i += copy(dAtA[i:], m.Id) + } + if len(m.PodSandboxId) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) + i += copy(dAtA[i:], m.PodSandboxId) + } + if len(m.LabelSelector) > 0 { + for k := range m.LabelSelector { + dAtA[i] = 0x1a + i++ + v := m.LabelSelector[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + return i, nil +} + +func (m *ListContainerStatsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ListContainerStatsResponse) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Stats) > 0 { + for _, msg := range m.Stats { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ContainerAttributes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ContainerAttributes) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Id) > 0 { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.Id))) + i += copy(dAtA[i:], m.Id) + } + if m.Metadata != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Metadata.Size())) + n59, err := m.Metadata.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n59 + } + if len(m.Labels) > 0 { + for k := range m.Labels { + dAtA[i] = 0x1a + i++ + v := m.Labels[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + if len(m.Annotations) > 0 { + for k := range m.Annotations { + dAtA[i] = 0x22 + i++ + v := m.Annotations[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } + return i, nil +} + +func (m *ContainerStats) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ContainerStats) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Attributes != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Attributes.Size())) + n60, err := m.Attributes.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n60 } + if m.Cpu != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Cpu.Size())) + n61, err := m.Cpu.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n61 + } + if m.Memory != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Memory.Size())) + n62, err := m.Memory.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n62 + } + if m.WritableLayer != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.WritableLayer.Size())) + n63, err := m.WritableLayer.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n63 + } + return i, nil +} + +func (m *CpuUsage) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CpuUsage) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Timestamp != 0 { + dAtA[i] = 0x8 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) + } + if m.UsageCoreNanoSeconds != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.UsageCoreNanoSeconds.Size())) + n64, err := m.UsageCoreNanoSeconds.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n64 + } + return i, nil +} + +func (m *MemoryUsage) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MemoryUsage) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Timestamp != 0 { + dAtA[i] = 0x8 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.Timestamp)) + } + if m.WorkingSetBytes != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(m.WorkingSetBytes.Size())) + n65, err := m.WorkingSetBytes.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n65 + } return i, nil } @@ -8806,37 +9460,30 @@ func (m *UInt64Value) Size() (n int) { return n } -func (m *FsInfo) Size() (n int) { +func (m *StorageIdentifier) Size() (n int) { var l int _ = l - l = len(m.Device) + l = len(m.Uuid) if l > 0 { n += 1 + l + sovApi(uint64(l)) } - l = len(m.Path) - if l > 0 { - n += 1 + l + sovApi(uint64(l)) + return n +} + +func (m *FilesystemUsage) Size() (n int) { + var l int + _ = l + if m.Timestamp != 0 { + n += 1 + sovApi(uint64(m.Timestamp)) } - if m.CapacityBytes != nil { - l = m.CapacityBytes.Size() - n += 1 + l + sovApi(uint64(l)) - } - if m.AvailableBytes != nil { - l = m.AvailableBytes.Size() + if m.StorageId != nil { + l = m.StorageId.Size() n += 1 + l + sovApi(uint64(l)) } if m.UsedBytes != nil { l = m.UsedBytes.Size() n += 1 + l + sovApi(uint64(l)) } - if m.InodesCapacity != nil { - l = m.InodesCapacity.Size() - n += 1 + l + sovApi(uint64(l)) - } - if m.InodesAvailable != nil { - l = m.InodesAvailable.Size() - n += 1 + l + sovApi(uint64(l)) - } if m.InodesUsed != nil { l = m.InodesUsed.Size() n += 1 + l + sovApi(uint64(l)) @@ -8847,8 +9494,152 @@ func (m *FsInfo) Size() (n int) { func (m *ImageFsInfoResponse) Size() (n int) { var l int _ = l - if m.FsInfo != nil { - l = m.FsInfo.Size() + if len(m.ImageFilesystems) > 0 { + for _, e := range m.ImageFilesystems { + l = e.Size() + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func (m *ContainerStatsRequest) Size() (n int) { + var l int + _ = l + l = len(m.ContainerId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *ContainerStatsResponse) Size() (n int) { + var l int + _ = l + if m.Stats != nil { + l = m.Stats.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *ListContainerStatsRequest) Size() (n int) { + var l int + _ = l + if m.Filter != nil { + l = m.Filter.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *ContainerStatsFilter) Size() (n int) { + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + l = len(m.PodSandboxId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if len(m.LabelSelector) > 0 { + for k, v := range m.LabelSelector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ListContainerStatsResponse) Size() (n int) { + var l int + _ = l + if len(m.Stats) > 0 { + for _, e := range m.Stats { + l = e.Size() + n += 1 + l + sovApi(uint64(l)) + } + } + return n +} + +func (m *ContainerAttributes) Size() (n int) { + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if m.Metadata != nil { + l = m.Metadata.Size() + n += 1 + l + sovApi(uint64(l)) + } + if len(m.Labels) > 0 { + for k, v := range m.Labels { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) + } + } + if len(m.Annotations) > 0 { + for k, v := range m.Annotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ContainerStats) Size() (n int) { + var l int + _ = l + if m.Attributes != nil { + l = m.Attributes.Size() + n += 1 + l + sovApi(uint64(l)) + } + if m.Cpu != nil { + l = m.Cpu.Size() + n += 1 + l + sovApi(uint64(l)) + } + if m.Memory != nil { + l = m.Memory.Size() + n += 1 + l + sovApi(uint64(l)) + } + if m.WritableLayer != nil { + l = m.WritableLayer.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *CpuUsage) Size() (n int) { + var l int + _ = l + if m.Timestamp != 0 { + n += 1 + sovApi(uint64(m.Timestamp)) + } + if m.UsageCoreNanoSeconds != nil { + l = m.UsageCoreNanoSeconds.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *MemoryUsage) Size() (n int) { + var l int + _ = l + if m.Timestamp != 0 { + n += 1 + sovApi(uint64(m.Timestamp)) + } + if m.WorkingSetBytes != nil { + l = m.WorkingSetBytes.Size() n += 1 + l + sovApi(uint64(l)) } return n @@ -9970,18 +10761,24 @@ func (this *UInt64Value) String() string { }, "") return s } -func (this *FsInfo) String() string { +func (this *StorageIdentifier) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&FsInfo{`, - `Device:` + fmt.Sprintf("%v", this.Device) + `,`, - `Path:` + fmt.Sprintf("%v", this.Path) + `,`, - `CapacityBytes:` + strings.Replace(fmt.Sprintf("%v", this.CapacityBytes), "UInt64Value", "UInt64Value", 1) + `,`, - `AvailableBytes:` + strings.Replace(fmt.Sprintf("%v", this.AvailableBytes), "UInt64Value", "UInt64Value", 1) + `,`, + s := strings.Join([]string{`&StorageIdentifier{`, + `Uuid:` + fmt.Sprintf("%v", this.Uuid) + `,`, + `}`, + }, "") + return s +} +func (this *FilesystemUsage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FilesystemUsage{`, + `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, + `StorageId:` + strings.Replace(fmt.Sprintf("%v", this.StorageId), "StorageIdentifier", "StorageIdentifier", 1) + `,`, `UsedBytes:` + strings.Replace(fmt.Sprintf("%v", this.UsedBytes), "UInt64Value", "UInt64Value", 1) + `,`, - `InodesCapacity:` + strings.Replace(fmt.Sprintf("%v", this.InodesCapacity), "UInt64Value", "UInt64Value", 1) + `,`, - `InodesAvailable:` + strings.Replace(fmt.Sprintf("%v", this.InodesAvailable), "UInt64Value", "UInt64Value", 1) + `,`, `InodesUsed:` + strings.Replace(fmt.Sprintf("%v", this.InodesUsed), "UInt64Value", "UInt64Value", 1) + `,`, `}`, }, "") @@ -9992,7 +10789,137 @@ func (this *ImageFsInfoResponse) String() string { return "nil" } s := strings.Join([]string{`&ImageFsInfoResponse{`, - `FsInfo:` + strings.Replace(fmt.Sprintf("%v", this.FsInfo), "FsInfo", "FsInfo", 1) + `,`, + `ImageFilesystems:` + strings.Replace(fmt.Sprintf("%v", this.ImageFilesystems), "FilesystemUsage", "FilesystemUsage", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStatsRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStatsRequest{`, + `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStatsResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStatsResponse{`, + `Stats:` + strings.Replace(fmt.Sprintf("%v", this.Stats), "ContainerStats", "ContainerStats", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ListContainerStatsRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ListContainerStatsRequest{`, + `Filter:` + strings.Replace(fmt.Sprintf("%v", this.Filter), "ContainerStatsFilter", "ContainerStatsFilter", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStatsFilter) String() string { + if this == nil { + return "nil" + } + keysForLabelSelector := make([]string, 0, len(this.LabelSelector)) + for k := range this.LabelSelector { + keysForLabelSelector = append(keysForLabelSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabelSelector) + mapStringForLabelSelector := "map[string]string{" + for _, k := range keysForLabelSelector { + mapStringForLabelSelector += fmt.Sprintf("%v: %v,", k, this.LabelSelector[k]) + } + mapStringForLabelSelector += "}" + s := strings.Join([]string{`&ContainerStatsFilter{`, + `Id:` + fmt.Sprintf("%v", this.Id) + `,`, + `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, + `LabelSelector:` + mapStringForLabelSelector + `,`, + `}`, + }, "") + return s +} +func (this *ListContainerStatsResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ListContainerStatsResponse{`, + `Stats:` + strings.Replace(fmt.Sprintf("%v", this.Stats), "ContainerStats", "ContainerStats", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerAttributes) String() string { + if this == nil { + return "nil" + } + keysForLabels := make([]string, 0, len(this.Labels)) + for k := range this.Labels { + keysForLabels = append(keysForLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + mapStringForLabels := "map[string]string{" + for _, k := range keysForLabels { + mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) + } + mapStringForLabels += "}" + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&ContainerAttributes{`, + `Id:` + fmt.Sprintf("%v", this.Id) + `,`, + `Metadata:` + strings.Replace(fmt.Sprintf("%v", this.Metadata), "ContainerMetadata", "ContainerMetadata", 1) + `,`, + `Labels:` + mapStringForLabels + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStats) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStats{`, + `Attributes:` + strings.Replace(fmt.Sprintf("%v", this.Attributes), "ContainerAttributes", "ContainerAttributes", 1) + `,`, + `Cpu:` + strings.Replace(fmt.Sprintf("%v", this.Cpu), "CpuUsage", "CpuUsage", 1) + `,`, + `Memory:` + strings.Replace(fmt.Sprintf("%v", this.Memory), "MemoryUsage", "MemoryUsage", 1) + `,`, + `WritableLayer:` + strings.Replace(fmt.Sprintf("%v", this.WritableLayer), "FilesystemUsage", "FilesystemUsage", 1) + `,`, + `}`, + }, "") + return s +} +func (this *CpuUsage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CpuUsage{`, + `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, + `UsageCoreNanoSeconds:` + strings.Replace(fmt.Sprintf("%v", this.UsageCoreNanoSeconds), "UInt64Value", "UInt64Value", 1) + `,`, + `}`, + }, "") + return s +} +func (this *MemoryUsage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&MemoryUsage{`, + `Timestamp:` + fmt.Sprintf("%v", this.Timestamp) + `,`, + `WorkingSetBytes:` + strings.Replace(fmt.Sprintf("%v", this.WorkingSetBytes), "UInt64Value", "UInt64Value", 1) + `,`, `}`, }, "") return s @@ -21300,7 +22227,7 @@ func (m *UInt64Value) Unmarshal(dAtA []byte) error { } return nil } -func (m *FsInfo) Unmarshal(dAtA []byte) error { +func (m *StorageIdentifier) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21323,15 +22250,15 @@ func (m *FsInfo) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: FsInfo: wiretype end group for non-group") + return fmt.Errorf("proto: StorageIdentifier: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: FsInfo: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: StorageIdentifier: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Device", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Uuid", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -21356,13 +22283,82 @@ func (m *FsInfo) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Device = string(dAtA[iNdEx:postIndex]) + m.Uuid = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FilesystemUsage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FilesystemUsage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FilesystemUsage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + m.Timestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timestamp |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StorageId", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowApi @@ -21372,88 +22368,26 @@ func (m *FsInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + msglen |= (int(b) & 0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthApi } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex > l { return io.ErrUnexpectedEOF } - m.Path = string(dAtA[iNdEx:postIndex]) + if m.StorageId == nil { + m.StorageId = &StorageIdentifier{} + } + if err := m.StorageId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CapacityBytes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.CapacityBytes == nil { - m.CapacityBytes = &UInt64Value{} - } - if err := m.CapacityBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AvailableBytes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.AvailableBytes == nil { - m.AvailableBytes = &UInt64Value{} - } - if err := m.AvailableBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field UsedBytes", wireType) } @@ -21486,73 +22420,7 @@ func (m *FsInfo) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InodesCapacity", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InodesCapacity == nil { - m.InodesCapacity = &UInt64Value{} - } - if err := m.InodesCapacity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InodesAvailable", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowApi - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthApi - } - postIndex := iNdEx + msglen - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.InodesAvailable == nil { - m.InodesAvailable = &UInt64Value{} - } - if err := m.InodesAvailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 8: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field InodesUsed", wireType) } @@ -21637,7 +22505,7 @@ func (m *ImageFsInfoResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FsInfo", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ImageFilesystems", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21661,10 +22529,1288 @@ func (m *ImageFsInfoResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.FsInfo == nil { - m.FsInfo = &FsInfo{} + m.ImageFilesystems = append(m.ImageFilesystems, &FilesystemUsage{}) + if err := m.ImageFilesystems[len(m.ImageFilesystems)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if err := m.FsInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStatsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStatsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStatsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStatsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Stats == nil { + m.Stats = &ContainerStats{} + } + if err := m.Stats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListContainerStatsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListContainerStatsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListContainerStatsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Filter", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Filter == nil { + m.Filter = &ContainerStatsFilter{} + } + if err := m.Filter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStatsFilter) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStatsFilter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStatsFilter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodSandboxId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PodSandboxId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.LabelSelector == nil { + m.LabelSelector = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.LabelSelector[mapkey] = mapvalue + } else { + var mapvalue string + m.LabelSelector[mapkey] = mapvalue + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListContainerStatsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListContainerStatsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListContainerStatsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Stats = append(m.Stats, &ContainerStats{}) + if err := m.Stats[len(m.Stats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerAttributes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerAttributes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerAttributes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Metadata == nil { + m.Metadata = &ContainerMetadata{} + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Labels == nil { + m.Labels = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Labels[mapkey] = mapvalue + } else { + var mapvalue string + m.Labels[mapkey] = mapvalue + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Annotations[mapkey] = mapvalue + } else { + var mapvalue string + m.Annotations[mapkey] = mapvalue + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStats) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStats: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStats: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Attributes == nil { + m.Attributes = &ContainerAttributes{} + } + if err := m.Attributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Cpu", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Cpu == nil { + m.Cpu = &CpuUsage{} + } + if err := m.Cpu.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Memory", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Memory == nil { + m.Memory = &MemoryUsage{} + } + if err := m.Memory.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WritableLayer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.WritableLayer == nil { + m.WritableLayer = &FilesystemUsage{} + } + if err := m.WritableLayer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CpuUsage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CpuUsage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CpuUsage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + m.Timestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timestamp |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UsageCoreNanoSeconds", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.UsageCoreNanoSeconds == nil { + m.UsageCoreNanoSeconds = &UInt64Value{} + } + if err := m.UsageCoreNanoSeconds.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemoryUsage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemoryUsage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemoryUsage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) + } + m.Timestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timestamp |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkingSetBytes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.WorkingSetBytes == nil { + m.WorkingSetBytes = &UInt64Value{} + } + if err := m.WorkingSetBytes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -21797,242 +23943,259 @@ var ( func init() { proto.RegisterFile("api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 3782 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3b, 0x4d, 0x6f, 0x1b, 0x57, - 0x92, 0x22, 0x29, 0x51, 0x64, 0x51, 0xfc, 0xd0, 0xd3, 0x17, 0x45, 0xd9, 0xb2, 0xd4, 0x89, 0x63, - 0x5b, 0xd9, 0xc8, 0x6b, 0xd9, 0x1b, 0x7b, 0x9d, 0xd8, 0x31, 0x2d, 0xc9, 0x86, 0x62, 0x5b, 0xd6, - 0x36, 0xad, 0x6c, 0x76, 0xb3, 0x40, 0x6f, 0x8b, 0xfd, 0x44, 0xb5, 0x4d, 0x76, 0x77, 0xba, 0x9b, - 0x8a, 0xb5, 0xa7, 0xbd, 0x2f, 0x16, 0x08, 0x76, 0x6f, 0x7b, 0x5c, 0x0c, 0x30, 0x40, 0xe6, 0x30, - 0x97, 0x39, 0xcf, 0x39, 0xc0, 0x7c, 0x60, 0x6e, 0x33, 0xc7, 0x89, 0x07, 0x98, 0xf3, 0xfc, 0x84, - 0xc1, 0xfb, 0xea, 0x7e, 0xfd, 0x45, 0x4b, 0x4e, 0x30, 0xf1, 0x49, 0xfd, 0xea, 0x55, 0xd5, 0xab, - 0x57, 0x55, 0xaf, 0x5e, 0x55, 0xf1, 0x09, 0xca, 0xba, 0x63, 0xae, 0x3b, 0xae, 0xed, 0xdb, 0xa8, - 0x74, 0x7c, 0x4d, 0xef, 0x3b, 0x47, 0xfa, 0xb5, 0xd6, 0x07, 0x3d, 0xd3, 0x3f, 0x1a, 0x1e, 0xac, - 0x77, 0xed, 0xc1, 0xd5, 0x9e, 0xdd, 0xb3, 0xaf, 0x52, 0x84, 0x83, 0xe1, 0x21, 0x1d, 0xd1, 0x01, - 0xfd, 0x62, 0x84, 0xca, 0x1a, 0xd4, 0x3e, 0xc3, 0xae, 0x67, 0xda, 0x96, 0x8a, 0xbf, 0x1c, 0x62, - 0xcf, 0x47, 0x4d, 0x98, 0x3c, 0x66, 0x90, 0x66, 0x6e, 0x25, 0x77, 0xb9, 0xac, 0x8a, 0xa1, 0xf2, - 0xd3, 0x1c, 0xd4, 0x03, 0x64, 0xcf, 0xb1, 0x2d, 0x0f, 0x67, 0x63, 0xa3, 0x55, 0x98, 0x72, 0x87, - 0x96, 0x6f, 0x0e, 0xb0, 0x66, 0xe9, 0x03, 0xdc, 0xcc, 0xd3, 0xe9, 0x0a, 0x87, 0xed, 0xea, 0x03, - 0x8c, 0x2e, 0x41, 0x5d, 0xa0, 0x08, 0x26, 0x05, 0x8a, 0x55, 0xe3, 0x60, 0xbe, 0x1a, 0x5a, 0x87, - 0x19, 0x81, 0xa8, 0x3b, 0x66, 0x80, 0x3c, 0x4e, 0x91, 0xa7, 0xf9, 0x54, 0xdb, 0x31, 0x39, 0xbe, - 0xf2, 0x05, 0x94, 0xb7, 0x76, 0x3b, 0x9b, 0xb6, 0x75, 0x68, 0xf6, 0x88, 0x88, 0x1e, 0x76, 0x09, - 0x4d, 0x33, 0xb7, 0x52, 0x20, 0x22, 0xf2, 0x21, 0x6a, 0x41, 0xc9, 0xc3, 0xba, 0xdb, 0x3d, 0xc2, - 0x5e, 0x33, 0x4f, 0xa7, 0x82, 0x31, 0xa1, 0xb2, 0x1d, 0xdf, 0xb4, 0x2d, 0xaf, 0x59, 0x60, 0x54, - 0x7c, 0xa8, 0xfc, 0x5f, 0x0e, 0x2a, 0x7b, 0xb6, 0xeb, 0x3f, 0xd1, 0x1d, 0xc7, 0xb4, 0x7a, 0x68, - 0x1d, 0x4a, 0x54, 0x97, 0x5d, 0xbb, 0x4f, 0x75, 0x50, 0xdb, 0x40, 0xeb, 0xc2, 0x1c, 0xeb, 0x7b, - 0x7c, 0x46, 0x0d, 0x70, 0xd0, 0x45, 0xa8, 0x75, 0x6d, 0xcb, 0xd7, 0x4d, 0x0b, 0xbb, 0x9a, 0x63, - 0xbb, 0x3e, 0x55, 0xcd, 0x84, 0x5a, 0x0d, 0xa0, 0x84, 0x3b, 0x5a, 0x82, 0xf2, 0x91, 0xed, 0xf9, - 0x0c, 0xa3, 0x40, 0x31, 0x4a, 0x04, 0x40, 0x27, 0x17, 0x60, 0x92, 0x4e, 0x9a, 0x0e, 0x57, 0x42, - 0x91, 0x0c, 0x77, 0x1c, 0xe5, 0xeb, 0x1c, 0x4c, 0x3c, 0xb1, 0x87, 0x96, 0x1f, 0x5b, 0x46, 0xf7, - 0x8f, 0xb8, 0x81, 0xa4, 0x65, 0x74, 0xff, 0x28, 0x5c, 0x86, 0x60, 0x30, 0x1b, 0xb1, 0x65, 0xc8, - 0x64, 0x0b, 0x4a, 0x2e, 0xd6, 0x0d, 0xdb, 0xea, 0x9f, 0x50, 0x11, 0x4a, 0x6a, 0x30, 0x26, 0xc6, - 0xf3, 0x70, 0xdf, 0xb4, 0x86, 0x2f, 0x35, 0x17, 0xf7, 0xf5, 0x03, 0xdc, 0xa7, 0xa2, 0x94, 0xd4, - 0x1a, 0x07, 0xab, 0x0c, 0xaa, 0x3c, 0x87, 0x3a, 0xb1, 0xb6, 0xe7, 0xe8, 0x5d, 0xfc, 0x94, 0xea, - 0x90, 0xf8, 0x06, 0x5d, 0xd4, 0xc2, 0xfe, 0x57, 0xb6, 0xfb, 0x82, 0x4a, 0x56, 0x52, 0x2b, 0x04, - 0xb6, 0xcb, 0x40, 0x68, 0x11, 0x4a, 0x4c, 0x2e, 0xd3, 0xa0, 0x62, 0x95, 0x54, 0xba, 0xe3, 0x3d, - 0xd3, 0x08, 0xa6, 0x4c, 0xa7, 0xcb, 0xa5, 0x9a, 0x64, 0xbb, 0xef, 0x2a, 0x0a, 0xc0, 0x8e, 0xe5, - 0x7f, 0x78, 0xe3, 0x33, 0xbd, 0x3f, 0xc4, 0x68, 0x16, 0x26, 0x8e, 0xc9, 0x07, 0xe5, 0x5f, 0x50, - 0xd9, 0x40, 0xf9, 0x7d, 0x1e, 0x96, 0x1e, 0x13, 0x01, 0x3b, 0xba, 0x65, 0x1c, 0xd8, 0x2f, 0x3b, - 0xb8, 0x3b, 0x74, 0x4d, 0xff, 0x64, 0xd3, 0xb6, 0x7c, 0xfc, 0xd2, 0x47, 0x0f, 0x60, 0xda, 0x12, - 0xf2, 0x6a, 0xc2, 0x07, 0x08, 0x87, 0xca, 0xc6, 0x62, 0x68, 0xd8, 0xd8, 0x96, 0xd4, 0x86, 0x15, - 0x05, 0x78, 0xe8, 0x5e, 0xa8, 0x20, 0xc1, 0x25, 0x4f, 0xb9, 0x2c, 0x84, 0x5c, 0x3a, 0xdb, 0x54, - 0x12, 0xce, 0x43, 0x68, 0x4e, 0x70, 0xb8, 0x01, 0xe4, 0xb8, 0x68, 0xba, 0xa7, 0x0d, 0x3d, 0xec, - 0xd2, 0xbd, 0x56, 0x36, 0x66, 0x43, 0xea, 0x70, 0xab, 0x6a, 0xd9, 0x1d, 0x5a, 0x6d, 0x6f, 0xdf, - 0xc3, 0x2e, 0x3d, 0x55, 0xdc, 0x48, 0x9a, 0x6b, 0xdb, 0xfe, 0xa1, 0x27, 0x0c, 0x23, 0xc0, 0x2a, - 0x85, 0xa2, 0xab, 0x30, 0xe3, 0x0d, 0x1d, 0xa7, 0x8f, 0x07, 0xd8, 0xf2, 0xf5, 0xbe, 0xd6, 0x73, - 0xed, 0xa1, 0xe3, 0x35, 0x27, 0x56, 0x0a, 0x97, 0x0b, 0x2a, 0x92, 0xa7, 0x1e, 0xd2, 0x19, 0xb4, - 0x0c, 0xe0, 0xb8, 0xe6, 0xb1, 0xd9, 0xc7, 0x3d, 0x6c, 0x34, 0x8b, 0x94, 0xa9, 0x04, 0x51, 0xfe, - 0x27, 0x0f, 0x73, 0x74, 0x3f, 0x7b, 0xb6, 0xc1, 0x95, 0xcb, 0xcf, 0xe0, 0x3b, 0x50, 0xed, 0x52, - 0xf6, 0x9a, 0xa3, 0xbb, 0xd8, 0xf2, 0xb9, 0x2f, 0x4e, 0x31, 0xe0, 0x1e, 0x85, 0xa1, 0x3d, 0x68, - 0x78, 0xdc, 0x16, 0x5a, 0x97, 0x19, 0x83, 0x6b, 0xec, 0x62, 0xb8, 0xe7, 0x11, 0x96, 0x53, 0xeb, - 0x5e, 0xc2, 0x94, 0x93, 0xde, 0x89, 0xd7, 0xf5, 0xfb, 0xec, 0x10, 0x57, 0x36, 0xfe, 0x2e, 0xc6, - 0x28, 0x2e, 0xe8, 0x7a, 0x87, 0xa1, 0x6f, 0x5b, 0xbe, 0x7b, 0xa2, 0x0a, 0xe2, 0xd6, 0x6d, 0x98, - 0x92, 0x27, 0x50, 0x03, 0x0a, 0x2f, 0xf0, 0x09, 0xdf, 0x04, 0xf9, 0x0c, 0x5d, 0x8d, 0x1d, 0x21, - 0x36, 0xb8, 0x9d, 0xbf, 0x95, 0x53, 0x5c, 0x40, 0xe1, 0x2a, 0x4f, 0xb0, 0xaf, 0x1b, 0xba, 0xaf, - 0x23, 0x04, 0xe3, 0x34, 0x2a, 0x32, 0x16, 0xf4, 0x9b, 0x70, 0x1d, 0x72, 0x6f, 0x2f, 0xab, 0xe4, - 0x13, 0x9d, 0x83, 0x72, 0xe0, 0x56, 0x3c, 0x34, 0x86, 0x00, 0x12, 0xa2, 0x74, 0xdf, 0xc7, 0x03, - 0xc7, 0xa7, 0x06, 0xae, 0xaa, 0x62, 0xa8, 0xfc, 0x72, 0x1c, 0x1a, 0x09, 0x1b, 0xdc, 0x82, 0xd2, - 0x80, 0x2f, 0xcf, 0xdd, 0xf9, 0x9c, 0x14, 0xa7, 0x12, 0x22, 0xaa, 0x01, 0x36, 0x09, 0x03, 0xe4, - 0x80, 0x49, 0x61, 0x3c, 0x18, 0x13, 0xcb, 0xf6, 0xed, 0x9e, 0x66, 0x98, 0x2e, 0xee, 0xfa, 0xb6, - 0x7b, 0xc2, 0xc5, 0x9c, 0xea, 0xdb, 0xbd, 0x2d, 0x01, 0x43, 0x1b, 0x00, 0x86, 0xe5, 0x11, 0xa3, - 0x1e, 0x9a, 0x3d, 0x2a, 0x6c, 0x65, 0x63, 0x26, 0x5c, 0x3c, 0x88, 0xd5, 0x6a, 0xd9, 0xb0, 0x3c, - 0x2e, 0xee, 0x6d, 0xa8, 0x92, 0xd0, 0xa7, 0x0d, 0x58, 0x98, 0x65, 0x7e, 0x59, 0xd9, 0x98, 0x93, - 0x65, 0x0e, 0x82, 0xb0, 0x3a, 0xe5, 0x84, 0x03, 0x0f, 0xdd, 0x85, 0x22, 0x8d, 0x3d, 0x5e, 0xb3, - 0x48, 0x89, 0xde, 0x4b, 0xdb, 0x28, 0xb7, 0xf8, 0x63, 0x8a, 0xc8, 0x0c, 0xce, 0xa9, 0xd0, 0x13, - 0xa8, 0xe8, 0x96, 0x65, 0xfb, 0x3a, 0x3b, 0xb6, 0x93, 0x94, 0xc9, 0xfb, 0x23, 0x98, 0xb4, 0x43, - 0x6c, 0xc6, 0x49, 0xa6, 0x47, 0xff, 0x00, 0x13, 0xf4, 0x5c, 0x37, 0x4b, 0x74, 0xe7, 0x17, 0x5e, - 0xe3, 0x84, 0x2a, 0xc3, 0x6e, 0xfd, 0x23, 0x54, 0x24, 0xe1, 0xce, 0xe2, 0x74, 0xad, 0xbb, 0xd0, - 0x88, 0x8b, 0x74, 0x26, 0xa7, 0xfd, 0x14, 0x66, 0xd5, 0xa1, 0x15, 0x0a, 0x26, 0x92, 0x83, 0x0d, - 0x28, 0x72, 0x23, 0x32, 0x0f, 0x6a, 0x65, 0xeb, 0x44, 0xe5, 0x98, 0xca, 0x1d, 0x98, 0x8b, 0xf1, - 0xe2, 0xb9, 0xc3, 0xbb, 0x50, 0x73, 0x6c, 0x43, 0xf3, 0x18, 0x58, 0x33, 0x0d, 0x11, 0x15, 0x9c, - 0x00, 0x77, 0xc7, 0x20, 0xe4, 0x1d, 0xdf, 0x76, 0x92, 0xb2, 0x9c, 0x8e, 0xbc, 0x09, 0xf3, 0x71, - 0x72, 0xb6, 0xbc, 0xf2, 0x09, 0x2c, 0xa8, 0x78, 0x60, 0x1f, 0xe3, 0x37, 0x65, 0xdd, 0x82, 0x66, - 0x92, 0x41, 0xc8, 0x3c, 0x84, 0x76, 0x7c, 0xdd, 0x1f, 0x7a, 0x67, 0x63, 0x7e, 0x45, 0x66, 0xc0, - 0x2f, 0x45, 0xc6, 0x07, 0xd5, 0x20, 0x6f, 0x3a, 0x9c, 0x28, 0x6f, 0x3a, 0xca, 0x3d, 0x28, 0x07, - 0xb7, 0x11, 0xba, 0x1e, 0xe6, 0x2d, 0xf9, 0xd7, 0xdd, 0x59, 0x41, 0x4a, 0xf3, 0x38, 0x11, 0xb7, - 0xf9, 0x52, 0xd7, 0x01, 0x82, 0x78, 0x23, 0x2e, 0xc1, 0x99, 0x14, 0x86, 0xaa, 0x84, 0xa6, 0x7c, - 0x13, 0x89, 0x3e, 0x92, 0xd0, 0x46, 0x20, 0xb4, 0x11, 0x89, 0x46, 0xf9, 0x33, 0x45, 0xa3, 0xab, - 0x30, 0xe1, 0xf9, 0xba, 0xcf, 0x02, 0x62, 0x4d, 0xde, 0x5f, 0x74, 0x51, 0xac, 0x32, 0x3c, 0x74, - 0x1e, 0xa0, 0xeb, 0x62, 0xdd, 0xc7, 0x86, 0xa6, 0xb3, 0x50, 0x59, 0x50, 0xcb, 0x1c, 0xd2, 0xf6, - 0xd1, 0x47, 0x30, 0x29, 0xf2, 0x90, 0x09, 0x2a, 0xc8, 0x6a, 0x1a, 0xc7, 0x88, 0x09, 0x54, 0x41, - 0x11, 0x1e, 0xed, 0xe2, 0x6b, 0x8e, 0x36, 0x27, 0x64, 0xd8, 0x52, 0x80, 0x9a, 0xcc, 0x0e, 0x50, - 0x8c, 0xe4, 0x34, 0x01, 0xaa, 0x94, 0x1d, 0xa0, 0x38, 0x93, 0x91, 0x01, 0xea, 0xc7, 0x8c, 0x34, - 0xbb, 0xd0, 0x4c, 0x1e, 0x14, 0x1e, 0x20, 0x36, 0xa0, 0xe8, 0x51, 0xc8, 0xa8, 0x68, 0xc3, 0x69, - 0x38, 0xa6, 0xf2, 0x10, 0x66, 0x63, 0x6e, 0xc0, 0x72, 0xc1, 0xc0, 0x6b, 0x72, 0xa7, 0xf3, 0x1a, - 0xe5, 0x2f, 0x39, 0xd9, 0x8b, 0x1f, 0x98, 0x7d, 0x1f, 0xbb, 0x09, 0x2f, 0xbe, 0x21, 0xb8, 0x32, - 0x17, 0x5e, 0xce, 0xe4, 0xca, 0xb2, 0x34, 0xee, 0x90, 0xcf, 0xa0, 0x46, 0xed, 0xa8, 0x79, 0xb8, - 0x4f, 0x6f, 0x48, 0x9e, 0x9d, 0x7c, 0x90, 0x46, 0xce, 0x56, 0x66, 0x5e, 0xd0, 0xe1, 0xf8, 0xcc, - 0x84, 0xd5, 0xbe, 0x0c, 0x6b, 0xdd, 0x03, 0x94, 0x44, 0x3a, 0x93, 0x2d, 0x1e, 0x91, 0x30, 0x40, - 0x2a, 0x8c, 0x94, 0xb0, 0x7f, 0x48, 0xc5, 0x18, 0x65, 0x08, 0x26, 0xa8, 0xca, 0x31, 0x95, 0x9f, - 0x14, 0x00, 0xc2, 0xc9, 0xb7, 0xf8, 0xfc, 0xdf, 0x0a, 0xce, 0x22, 0xcb, 0x30, 0x56, 0xd2, 0x18, - 0xa6, 0x9e, 0xc2, 0x87, 0xd1, 0x53, 0xc8, 0x72, 0x8d, 0x8b, 0xa9, 0xe4, 0x6f, 0xed, 0xf9, 0xdb, - 0x82, 0xf9, 0xb8, 0xcd, 0xf9, 0xe9, 0x5b, 0x83, 0x09, 0xd3, 0xc7, 0x03, 0x56, 0x35, 0x47, 0xea, - 0x0e, 0x09, 0x99, 0xa1, 0x28, 0xab, 0x50, 0xde, 0x19, 0xe8, 0x3d, 0xdc, 0x71, 0x70, 0x97, 0x2c, - 0x66, 0x92, 0x01, 0x17, 0x80, 0x0d, 0x94, 0x0d, 0x28, 0x3d, 0xc2, 0x27, 0xec, 0x30, 0x9e, 0x52, - 0x40, 0xe5, 0x57, 0x39, 0x58, 0xa0, 0x71, 0x74, 0x53, 0xd4, 0xac, 0x2a, 0xf6, 0xec, 0xa1, 0xdb, - 0xc5, 0x1e, 0xb5, 0xaa, 0x33, 0xd4, 0x1c, 0xec, 0x9a, 0xb6, 0xc1, 0x2b, 0xbc, 0x72, 0xd7, 0x19, - 0xee, 0x51, 0x00, 0xa9, 0x6b, 0xc9, 0xf4, 0x97, 0x43, 0x9b, 0x3b, 0x58, 0x41, 0x2d, 0x75, 0x9d, - 0xe1, 0x3f, 0x91, 0xb1, 0xa0, 0xf5, 0x8e, 0x74, 0x17, 0x7b, 0xd4, 0x8f, 0x18, 0x6d, 0x87, 0x02, - 0xd0, 0x35, 0x98, 0x1b, 0xe0, 0x81, 0xed, 0x9e, 0x68, 0x7d, 0x73, 0x60, 0xfa, 0x9a, 0x69, 0x69, - 0x07, 0x27, 0x3e, 0xf6, 0xb8, 0xef, 0x20, 0x36, 0xf9, 0x98, 0xcc, 0xed, 0x58, 0xf7, 0xc9, 0x0c, - 0x52, 0xa0, 0x6a, 0xdb, 0x03, 0xcd, 0xeb, 0xda, 0x2e, 0xd6, 0x74, 0xe3, 0x39, 0xbd, 0x4a, 0x0a, - 0x6a, 0xc5, 0xb6, 0x07, 0x1d, 0x02, 0x6b, 0x1b, 0xcf, 0x15, 0x1d, 0xaa, 0x91, 0x7a, 0x8f, 0x14, - 0x01, 0xb4, 0xb0, 0xe3, 0x45, 0x00, 0xf9, 0x26, 0x30, 0xd7, 0xee, 0x0b, 0x3d, 0xd0, 0x6f, 0x02, - 0xf3, 0x4f, 0x1c, 0x51, 0x01, 0xd0, 0x6f, 0xa2, 0xb0, 0x3e, 0x3e, 0xe6, 0x45, 0x77, 0x59, 0x65, - 0x03, 0xc5, 0x00, 0xd8, 0xd4, 0x1d, 0xfd, 0xc0, 0xec, 0x9b, 0xfe, 0x09, 0xba, 0x02, 0x0d, 0xdd, - 0x30, 0xb4, 0xae, 0x80, 0x98, 0x58, 0xb4, 0x40, 0xea, 0xba, 0x61, 0x6c, 0x4a, 0x60, 0xf4, 0x3e, - 0x4c, 0x1b, 0xae, 0xed, 0x44, 0x71, 0x59, 0x4f, 0xa4, 0x41, 0x26, 0x64, 0x64, 0xe5, 0xcf, 0x05, - 0x38, 0x1f, 0x35, 0x4b, 0xbc, 0x86, 0xbe, 0x05, 0x53, 0xb1, 0x55, 0x63, 0xa5, 0x6b, 0x28, 0xa5, - 0x1a, 0xc1, 0x8c, 0xd5, 0x98, 0xf9, 0x78, 0x8d, 0x99, 0x5e, 0x9d, 0x17, 0x7e, 0x90, 0xea, 0x7c, - 0xfc, 0x7b, 0x55, 0xe7, 0x13, 0xa7, 0xab, 0xce, 0xdf, 0xa3, 0x3d, 0x2f, 0x41, 0x45, 0x4b, 0xaa, - 0x22, 0xeb, 0xcb, 0x04, 0x38, 0x96, 0xe8, 0x8d, 0xc5, 0xaa, 0xf8, 0xc9, 0xb3, 0x54, 0xf1, 0xa5, - 0xcc, 0x2a, 0x9e, 0x78, 0x85, 0xe3, 0xe8, 0xee, 0xc0, 0x76, 0x35, 0xc7, 0xb5, 0x0f, 0xcd, 0x3e, - 0x6e, 0x96, 0xa9, 0x08, 0x75, 0x01, 0xdf, 0x63, 0x60, 0xe5, 0x67, 0x39, 0x98, 0x8d, 0x1a, 0x9a, - 0x17, 0x67, 0x9f, 0x40, 0xd9, 0x15, 0x27, 0x91, 0x1b, 0x77, 0x35, 0x96, 0xfa, 0x24, 0x8f, 0xac, - 0x1a, 0xd2, 0x20, 0x35, 0xb3, 0xd6, 0xbf, 0x94, 0xc5, 0xe7, 0x75, 0xd5, 0xbe, 0xd2, 0x86, 0xe9, - 0x00, 0x79, 0x64, 0xa1, 0x2d, 0x15, 0xce, 0xf9, 0x68, 0xe1, 0x6c, 0x41, 0x71, 0x0b, 0x1f, 0x9b, - 0x5d, 0xfc, 0x83, 0xb4, 0xcf, 0x56, 0xa0, 0xe2, 0x60, 0x77, 0x60, 0x7a, 0x5e, 0xe0, 0xa5, 0x65, - 0x55, 0x06, 0x29, 0xdf, 0x4d, 0x40, 0x3d, 0xae, 0xdb, 0x9b, 0x89, 0x3a, 0x7d, 0x49, 0x3a, 0x37, - 0xf1, 0x0d, 0x4a, 0x17, 0xe3, 0x15, 0x11, 0x77, 0xf3, 0xf1, 0x3c, 0x3d, 0x88, 0xcd, 0x3c, 0x18, - 0x13, 0x0d, 0x74, 0xed, 0xc1, 0x40, 0xb7, 0x0c, 0xd1, 0xdd, 0xe4, 0x43, 0xa2, 0x2f, 0xdd, 0xed, - 0x91, 0xc3, 0x40, 0xc0, 0xf4, 0x1b, 0x5d, 0x80, 0x0a, 0x49, 0x76, 0x4d, 0x8b, 0xd6, 0xf9, 0xd4, - 0xd3, 0xcb, 0x2a, 0x70, 0xd0, 0x96, 0x49, 0x9c, 0x7a, 0x1c, 0x5b, 0xc7, 0xe2, 0x06, 0x94, 0xda, - 0x9f, 0x22, 0xe2, 0xab, 0x74, 0x1e, 0x5d, 0x82, 0xe2, 0xc0, 0x1e, 0x5a, 0xbe, 0x48, 0x7b, 0xeb, - 0x21, 0x26, 0x6d, 0x5a, 0xaa, 0x7c, 0x1a, 0xad, 0xc1, 0xa4, 0x41, 0xed, 0x20, 0x72, 0xdb, 0x86, - 0xd4, 0x2d, 0xa0, 0x13, 0xaa, 0x40, 0x40, 0x77, 0x82, 0xfb, 0xbb, 0x1c, 0xbf, 0x80, 0x63, 0xaa, - 0x4d, 0xbd, 0xc4, 0x1f, 0x47, 0x2f, 0x71, 0xa0, 0x3c, 0xd6, 0xb2, 0x79, 0x8c, 0x2e, 0xf5, 0x17, - 0xa1, 0xd4, 0xb7, 0x7b, 0xcc, 0x1d, 0x2a, 0xac, 0x21, 0xde, 0xb7, 0x7b, 0xd4, 0x1b, 0x66, 0x49, - 0xde, 0x62, 0x98, 0x56, 0x73, 0x8a, 0x9e, 0x63, 0x36, 0x20, 0x57, 0x11, 0xfd, 0xd0, 0x6c, 0xab, - 0x8b, 0x9b, 0x55, 0x3a, 0x55, 0xa6, 0x90, 0xa7, 0x56, 0x97, 0xde, 0x94, 0xbe, 0x7f, 0xd2, 0xac, - 0x51, 0x38, 0xf9, 0x24, 0x29, 0x27, 0xab, 0x38, 0xea, 0xf1, 0x94, 0x33, 0xed, 0xa4, 0xbe, 0x05, - 0xbd, 0x84, 0x5f, 0xe4, 0x60, 0x7e, 0x93, 0x66, 0x5b, 0x52, 0x48, 0x38, 0x43, 0x29, 0x8c, 0xae, - 0x05, 0x4d, 0x87, 0x44, 0x45, 0x1b, 0xdf, 0x2d, 0x47, 0x44, 0x6d, 0xa8, 0x09, 0xa6, 0x9c, 0xb4, - 0xf0, 0xda, 0x7e, 0x45, 0xd5, 0x93, 0x87, 0xca, 0xc7, 0xb0, 0x90, 0x90, 0x9a, 0x67, 0x46, 0xab, - 0x30, 0x15, 0xc6, 0x86, 0x40, 0xe8, 0x4a, 0x00, 0xdb, 0x31, 0x94, 0xdb, 0x30, 0xd7, 0xf1, 0x75, - 0xd7, 0x4f, 0x6c, 0xf9, 0x14, 0xb4, 0xb4, 0x65, 0x11, 0xa5, 0xe5, 0x5d, 0x85, 0x0e, 0xcc, 0x76, - 0x7c, 0xdb, 0x79, 0x03, 0xa6, 0xe4, 0xc4, 0xfb, 0xe6, 0x00, 0xdb, 0x43, 0x9f, 0x67, 0x43, 0x62, - 0xa8, 0x2c, 0xb0, 0x06, 0x4b, 0x72, 0xb5, 0x8f, 0x60, 0x9e, 0xf5, 0x37, 0xde, 0x64, 0x13, 0x8b, - 0xa2, 0xbb, 0x92, 0xe4, 0xbb, 0x0d, 0x33, 0x61, 0x50, 0x0f, 0x2b, 0xb4, 0xf5, 0x68, 0x85, 0xd6, - 0x4c, 0xb1, 0x72, 0xa4, 0x40, 0xfb, 0xdf, 0xbc, 0x14, 0x3b, 0x33, 0xea, 0xb3, 0xeb, 0xd1, 0xfa, - 0xec, 0x7c, 0x16, 0xcf, 0x48, 0x79, 0x96, 0xf4, 0xca, 0x42, 0x8a, 0x57, 0x76, 0x12, 0x45, 0xdc, - 0x78, 0xbc, 0xc5, 0x1c, 0x93, 0xee, 0x6f, 0x52, 0xc3, 0x7d, 0xca, 0x6a, 0xb8, 0x60, 0xe9, 0xa0, - 0xed, 0x74, 0x2d, 0x56, 0xc3, 0x2d, 0x66, 0xca, 0x19, 0x94, 0x70, 0xff, 0x3d, 0x0e, 0xe5, 0x60, - 0x2e, 0xa1, 0xdb, 0xa4, 0x9a, 0xf2, 0x29, 0x6a, 0x92, 0x6f, 0xb3, 0xc2, 0x1b, 0xdd, 0x66, 0xe3, - 0xaf, 0xbd, 0xcd, 0x96, 0xa0, 0x4c, 0x3f, 0x34, 0x17, 0x1f, 0xf2, 0xdb, 0xa9, 0x44, 0x01, 0x2a, - 0x3e, 0x0c, 0xdd, 0xaa, 0x78, 0x2a, 0xb7, 0x8a, 0x55, 0x8b, 0x93, 0xf1, 0x6a, 0xf1, 0x66, 0x70, - 0xdb, 0xb0, 0x8b, 0xe9, 0x42, 0x0a, 0xbf, 0xd4, 0x7b, 0xe6, 0x41, 0xf4, 0x9e, 0x61, 0x77, 0xd5, - 0xbb, 0x69, 0xd4, 0x6f, 0x6d, 0xad, 0xf8, 0x84, 0xd5, 0x8a, 0xb2, 0x6f, 0xf1, 0x88, 0x78, 0x1d, - 0x20, 0x38, 0xfc, 0xa2, 0x60, 0x9c, 0x49, 0xd9, 0x9b, 0x2a, 0xa1, 0x91, 0xf8, 0x12, 0x31, 0x41, - 0xd8, 0x22, 0x3d, 0x45, 0x7c, 0xf9, 0xb5, 0x9c, 0x39, 0x65, 0xf4, 0x18, 0x6f, 0x26, 0x7a, 0x0c, - 0xa7, 0xf4, 0xbd, 0xf5, 0x68, 0x8b, 0xe1, 0x8c, 0x3e, 0x93, 0xe8, 0x30, 0xd0, 0x3b, 0x5e, 0x77, - 0xf9, 0x34, 0xab, 0x0c, 0xcb, 0x1c, 0xd2, 0xf6, 0x49, 0x7a, 0x75, 0x68, 0x5a, 0xa6, 0x77, 0xc4, - 0xe6, 0x8b, 0x74, 0x1e, 0x04, 0xa8, 0x4d, 0x7f, 0x0a, 0xc6, 0x2f, 0x4d, 0x5f, 0xeb, 0xda, 0x06, - 0xa6, 0x1e, 0x39, 0xa1, 0x96, 0x08, 0x60, 0xd3, 0x36, 0x70, 0x78, 0x4e, 0x4a, 0x67, 0x3b, 0x27, - 0xe5, 0xd8, 0x39, 0x99, 0x87, 0xa2, 0x8b, 0x75, 0xcf, 0xb6, 0x9a, 0xc0, 0x7e, 0x51, 0x66, 0x23, - 0x72, 0x71, 0x0c, 0xb0, 0xe7, 0x91, 0x15, 0x78, 0x42, 0xc3, 0x87, 0x52, 0xe2, 0x35, 0x95, 0x99, - 0x78, 0x8d, 0xe8, 0x61, 0xc6, 0x12, 0xaf, 0x6a, 0x66, 0xe2, 0x75, 0x9a, 0x16, 0xa6, 0x94, 0x5a, - 0xd6, 0x46, 0xa7, 0x96, 0x72, 0x86, 0x56, 0x8f, 0x64, 0x68, 0x3f, 0xe6, 0xd1, 0x7a, 0x0c, 0x0b, - 0x89, 0xb3, 0xc0, 0xcf, 0xd6, 0xb5, 0x58, 0x17, 0x74, 0x31, 0x53, 0x45, 0x41, 0x13, 0xf4, 0xdf, - 0xa1, 0xbe, 0xfd, 0x12, 0x77, 0x3b, 0x27, 0x56, 0xf7, 0x0c, 0x29, 0x42, 0x03, 0x0a, 0xdd, 0x81, - 0xc1, 0xab, 0x7e, 0xf2, 0x29, 0x27, 0x0d, 0x85, 0x68, 0xd2, 0xa0, 0x41, 0x23, 0x5c, 0x81, 0x0b, - 0x3a, 0x4f, 0x04, 0x35, 0x08, 0x32, 0x61, 0x3e, 0xa5, 0xf2, 0x11, 0x87, 0x63, 0xd7, 0xa5, 0xdb, - 0x66, 0x70, 0xec, 0xba, 0x51, 0xb7, 0x2e, 0x44, 0xdd, 0x5a, 0x79, 0x0e, 0x15, 0xb2, 0xc0, 0xf7, - 0x12, 0x9f, 0x27, 0xcf, 0x85, 0x30, 0x79, 0x0e, 0x72, 0xf0, 0x71, 0x29, 0x07, 0x57, 0x56, 0x60, - 0x8a, 0xad, 0xc5, 0x37, 0xd2, 0x80, 0xc2, 0xd0, 0xed, 0x0b, 0xc3, 0x0d, 0xdd, 0xbe, 0xf2, 0xaf, - 0x50, 0x6d, 0xfb, 0xbe, 0xde, 0x3d, 0x3a, 0x83, 0x3c, 0xc1, 0x5a, 0x79, 0x39, 0xdf, 0x4f, 0xc8, - 0xa4, 0x28, 0x50, 0x13, 0xbc, 0x33, 0xd7, 0xdf, 0x05, 0xb4, 0x67, 0xbb, 0xfe, 0x03, 0xdb, 0xfd, - 0x4a, 0x77, 0x8d, 0xb3, 0xa5, 0xcf, 0x08, 0xc6, 0xf9, 0x2b, 0x93, 0xc2, 0xe5, 0x09, 0x95, 0x7e, - 0x2b, 0x97, 0x60, 0x26, 0xc2, 0x2f, 0x73, 0xe1, 0x5b, 0x50, 0xa1, 0x61, 0x84, 0xe7, 0x57, 0x57, - 0xe4, 0xd6, 0xde, 0xc8, 0x60, 0xa3, 0xdc, 0x87, 0x69, 0x72, 0x59, 0x50, 0x78, 0x10, 0xd8, 0x3f, - 0x88, 0x25, 0x21, 0x73, 0x31, 0x06, 0xb1, 0x04, 0xe4, 0xe7, 0x39, 0x98, 0xa0, 0xf0, 0x44, 0x68, - 0x5f, 0x82, 0xb2, 0x8b, 0x1d, 0x5b, 0xf3, 0xf5, 0x5e, 0xf0, 0x76, 0x87, 0x00, 0x9e, 0xe9, 0x3d, - 0x8f, 0x3e, 0x3d, 0x22, 0x93, 0x86, 0xd9, 0xc3, 0x9e, 0x2f, 0x1e, 0xf0, 0x54, 0x08, 0x6c, 0x8b, - 0x81, 0x88, 0x52, 0x3c, 0xf3, 0x3f, 0x58, 0x72, 0x31, 0xae, 0xd2, 0x6f, 0xf4, 0x1e, 0xfb, 0xfd, - 0x7d, 0x54, 0x23, 0x87, 0xfe, 0x2a, 0xdf, 0x82, 0x52, 0xac, 0x77, 0x13, 0x8c, 0x95, 0x3b, 0x80, - 0xe4, 0x5d, 0x73, 0xbd, 0x5e, 0x82, 0x22, 0x55, 0x8a, 0xb8, 0x1a, 0xeb, 0xb1, 0x6d, 0xab, 0x7c, - 0x5a, 0xf9, 0x04, 0x10, 0x53, 0x64, 0xe4, 0x3a, 0x3c, 0x83, 0xd6, 0x3f, 0x86, 0x99, 0x08, 0x03, - 0x2e, 0xc0, 0xc5, 0x28, 0x87, 0xc4, 0xfa, 0x9c, 0xfa, 0x37, 0x39, 0x80, 0xf6, 0xd0, 0x3f, 0xe2, - 0x9d, 0x08, 0x79, 0xa3, 0xb9, 0xe8, 0x46, 0xc9, 0x9c, 0xa3, 0x7b, 0xde, 0x57, 0xb6, 0x2b, 0xf2, - 0xbe, 0x60, 0x4c, 0x7b, 0x08, 0x43, 0xff, 0x48, 0xf4, 0x2b, 0xc9, 0x37, 0xba, 0x08, 0x35, 0xf6, - 0xec, 0x4a, 0xd3, 0x0d, 0xc3, 0xc5, 0x9e, 0xc7, 0x1b, 0x97, 0x55, 0x06, 0x6d, 0x33, 0x20, 0x41, - 0x33, 0x0d, 0x6c, 0xf9, 0xa6, 0x7f, 0xa2, 0xf9, 0xf6, 0x0b, 0x6c, 0xf1, 0x7c, 0xae, 0x2a, 0xa0, - 0xcf, 0x08, 0x90, 0xa0, 0xb9, 0xb8, 0x67, 0x7a, 0xbe, 0x2b, 0xd0, 0x44, 0x13, 0x8d, 0x43, 0x29, - 0x9a, 0xf2, 0x4d, 0x0e, 0x1a, 0x7b, 0xc3, 0x7e, 0x9f, 0x6d, 0xf2, 0xcc, 0xda, 0x44, 0x97, 0xf9, - 0x46, 0xf2, 0x71, 0x97, 0x08, 0x95, 0xc4, 0xb7, 0xf7, 0x03, 0x14, 0x9c, 0x7f, 0x0f, 0xd3, 0x92, - 0xac, 0xdc, 0x70, 0x91, 0x2b, 0x3b, 0x17, 0xbd, 0xb2, 0x89, 0xb7, 0xb0, 0x1a, 0xeb, 0x0d, 0xf7, - 0xa7, 0xcc, 0xc1, 0x4c, 0x84, 0x01, 0x2f, 0xd0, 0xd6, 0xa0, 0xca, 0x7f, 0xee, 0xe4, 0x8e, 0xb0, - 0x08, 0x25, 0x12, 0x68, 0xba, 0xa6, 0x21, 0x9a, 0xd5, 0x93, 0x8e, 0x6d, 0x6c, 0x9a, 0x86, 0xab, - 0x3c, 0x85, 0xaa, 0xca, 0xde, 0xdf, 0x71, 0xdc, 0xbb, 0x50, 0xe3, 0x3f, 0x8e, 0x6a, 0x91, 0xa7, - 0x02, 0x52, 0x5f, 0x35, 0xc2, 0x5c, 0xad, 0x5a, 0xf2, 0x50, 0xf9, 0x37, 0x68, 0xed, 0x3b, 0x06, - 0x49, 0xae, 0x64, 0xb6, 0x62, 0x73, 0x77, 0x41, 0xbc, 0x0d, 0xcc, 0xe4, 0x1e, 0xa5, 0xab, 0xba, - 0xf2, 0x50, 0x39, 0x0f, 0x4b, 0xa9, 0xdc, 0xf9, 0xce, 0x1d, 0x68, 0x84, 0x13, 0x86, 0x29, 0xba, - 0xf4, 0xb4, 0xfb, 0x9e, 0x93, 0xba, 0xef, 0xf3, 0xc1, 0x9d, 0xcc, 0x82, 0x3b, 0x1f, 0x49, 0x49, - 0x54, 0x21, 0x2b, 0x89, 0x1a, 0x8f, 0x24, 0x51, 0xca, 0xa3, 0x40, 0x7f, 0x3c, 0x89, 0xbd, 0x4d, - 0x53, 0x69, 0xb6, 0xb6, 0x88, 0x17, 0xad, 0xb4, 0xdd, 0x31, 0x14, 0x55, 0xc2, 0x56, 0xea, 0x50, - 0x8d, 0x44, 0x0e, 0xa5, 0x0d, 0xb5, 0x58, 0x24, 0xb8, 0x1a, 0xcb, 0x26, 0x92, 0x8a, 0x8b, 0xe5, - 0x12, 0xb3, 0x3c, 0x24, 0x3d, 0xf0, 0x76, 0xac, 0x43, 0x5b, 0x30, 0x7e, 0x07, 0x2a, 0xfb, 0x59, - 0x2f, 0xed, 0xc6, 0xc5, 0xcf, 0x37, 0xff, 0x5f, 0x80, 0x22, 0x23, 0x23, 0x8a, 0x61, 0xfd, 0x3a, - 0xae, 0x46, 0x3e, 0xa2, 0x97, 0x53, 0xd8, 0x3a, 0xa5, 0xdf, 0xe8, 0x63, 0xa8, 0x75, 0x75, 0x47, - 0xef, 0x92, 0x18, 0xc0, 0x7e, 0x77, 0x29, 0xc4, 0x2f, 0x0b, 0x69, 0x6d, 0xb5, 0x2a, 0x90, 0xd9, - 0x2f, 0x31, 0x77, 0xa1, 0xae, 0x1f, 0xeb, 0x66, 0x5f, 0x3f, 0xe8, 0x63, 0xe9, 0x67, 0x9b, 0x4c, - 0xf2, 0x5a, 0x80, 0xcd, 0xe8, 0x6f, 0x00, 0x0c, 0x3d, 0x6c, 0x70, 0xd2, 0x89, 0x51, 0xa4, 0x65, - 0x82, 0x18, 0xac, 0x6a, 0x5a, 0xb6, 0x81, 0x3d, 0x4d, 0x48, 0xc3, 0x5f, 0x04, 0x64, 0xad, 0xca, - 0xb0, 0x37, 0x39, 0x32, 0xba, 0x07, 0x0d, 0x4e, 0x1f, 0x88, 0x43, 0x33, 0xfd, 0x4c, 0x06, 0x7c, - 0xb9, 0xb6, 0xc0, 0x46, 0x1f, 0x42, 0x85, 0x73, 0x20, 0x52, 0xf1, 0x6a, 0x20, 0x83, 0x18, 0x18, - 0xe6, 0xbe, 0x87, 0x0d, 0xe5, 0x1e, 0xbf, 0x31, 0x84, 0x7d, 0xb9, 0x9f, 0x5c, 0x81, 0xc9, 0x43, - 0x4f, 0x33, 0xad, 0x43, 0x9b, 0x3b, 0x8a, 0xd4, 0x81, 0xe5, 0xa8, 0xc5, 0x43, 0xfa, 0x77, 0xed, - 0x1c, 0x94, 0xc4, 0x33, 0x57, 0x34, 0x09, 0x85, 0x67, 0x9b, 0x7b, 0x8d, 0x31, 0xf2, 0xb1, 0xbf, - 0xb5, 0xd7, 0xc8, 0xad, 0xdd, 0x86, 0x7a, 0xec, 0x77, 0x59, 0x34, 0x0d, 0xd5, 0x4e, 0x7b, 0x77, - 0xeb, 0xfe, 0xd3, 0xcf, 0x35, 0x75, 0xbb, 0xbd, 0xf5, 0x2f, 0x8d, 0x31, 0x34, 0x0b, 0x0d, 0x01, - 0xda, 0x7d, 0xfa, 0x8c, 0x41, 0x73, 0x6b, 0x2f, 0xa0, 0x16, 0x2d, 0xb8, 0xd0, 0x1c, 0x4c, 0x6f, - 0x3e, 0xdd, 0x7d, 0xd6, 0xde, 0xd9, 0xdd, 0x56, 0xb5, 0x4d, 0x75, 0xbb, 0xfd, 0x6c, 0x7b, 0xab, - 0x31, 0x16, 0x05, 0xab, 0xfb, 0xbb, 0xbb, 0x3b, 0xbb, 0x0f, 0x1b, 0x39, 0xc2, 0x35, 0x04, 0x6f, - 0x7f, 0xbe, 0x43, 0x90, 0xf3, 0x51, 0xe4, 0xfd, 0xdd, 0x47, 0xbb, 0x4f, 0xff, 0x79, 0xb7, 0x51, - 0xd8, 0xf8, 0x6d, 0x05, 0x6a, 0xe2, 0x08, 0x60, 0x97, 0x7a, 0xe7, 0x3d, 0x98, 0x14, 0x4f, 0x90, - 0xa5, 0x1a, 0x30, 0xfa, 0x60, 0xba, 0xb5, 0x98, 0x32, 0xc3, 0xc3, 0xc9, 0x18, 0x52, 0xe9, 0xf1, - 0x96, 0x7e, 0x07, 0x5f, 0x8e, 0x9c, 0xb7, 0xc4, 0x4f, 0xed, 0xad, 0x0b, 0x99, 0xf3, 0x01, 0xcf, - 0x7d, 0x72, 0xa8, 0xe5, 0x27, 0x4d, 0x48, 0x22, 0x4a, 0x7d, 0x2b, 0xd5, 0x5a, 0xc9, 0x46, 0x08, - 0xd8, 0x7e, 0x01, 0x8d, 0xf8, 0x73, 0x26, 0x24, 0xfd, 0xa8, 0x93, 0xf1, 0x56, 0xaa, 0xa5, 0x8c, - 0x42, 0x91, 0x99, 0x27, 0x9e, 0x04, 0xad, 0x8e, 0x78, 0xce, 0x91, 0x64, 0x9e, 0xf5, 0x4a, 0x84, - 0x29, 0x24, 0xfa, 0x1b, 0x36, 0x8a, 0xbc, 0xc3, 0x49, 0x79, 0xd1, 0x20, 0x2b, 0x24, 0xfd, 0xe7, - 0x6f, 0x65, 0x0c, 0x7d, 0x0e, 0xf5, 0x58, 0x07, 0x18, 0x49, 0x64, 0xe9, 0x2d, 0xed, 0xd6, 0xea, - 0x08, 0x8c, 0xa8, 0x05, 0xe5, 0x0e, 0x6f, 0xd4, 0x82, 0x29, 0x7d, 0xe3, 0xa8, 0x05, 0x53, 0x9b, - 0xc3, 0xd4, 0xd9, 0x22, 0x9d, 0x5c, 0xd9, 0xd9, 0xd2, 0xfa, 0xc6, 0xad, 0x0b, 0x99, 0xf3, 0xb2, - 0x12, 0x62, 0x7d, 0x5c, 0x59, 0x09, 0xe9, 0xfd, 0xe1, 0xd6, 0xea, 0x08, 0x8c, 0xb8, 0xd5, 0xc2, - 0x6e, 0x52, 0xdc, 0x6a, 0x89, 0x1e, 0x66, 0xdc, 0x6a, 0xc9, 0x46, 0x14, 0xb7, 0x5a, 0xac, 0x2f, - 0xb4, 0x92, 0x5d, 0x31, 0xa7, 0x58, 0x2d, 0xbd, 0x0c, 0x57, 0xc6, 0xd0, 0x26, 0x94, 0x44, 0xcd, - 0x8b, 0xa4, 0x43, 0x1f, 0xab, 0xb4, 0x5b, 0xad, 0xb4, 0xa9, 0x80, 0xc9, 0x4d, 0x18, 0x27, 0x50, - 0x34, 0x17, 0xc5, 0x12, 0xc4, 0xf3, 0x71, 0x70, 0x40, 0x78, 0x07, 0x8a, 0xac, 0x4c, 0x44, 0xd2, - 0x95, 0x1d, 0x29, 0x4a, 0x5b, 0xcd, 0xe4, 0x44, 0x40, 0xfe, 0x98, 0xfd, 0xd3, 0x02, 0xaf, 0xf8, - 0xd0, 0xb9, 0xe8, 0x33, 0xda, 0x68, 0x61, 0xd9, 0x3a, 0x9f, 0x31, 0x1b, 0x70, 0x33, 0x60, 0x26, - 0x25, 0x8d, 0x42, 0x52, 0x3b, 0x33, 0x3b, 0x87, 0x6b, 0x5d, 0x7c, 0x0d, 0x96, 0xbc, 0x65, 0x6e, - 0xc1, 0x85, 0x88, 0xf7, 0x4b, 0x86, 0x6b, 0x26, 0x27, 0x04, 0xf9, 0xc6, 0x7f, 0x15, 0x60, 0x8a, - 0xa5, 0xbc, 0x3c, 0x9c, 0xef, 0x00, 0x84, 0xc5, 0x19, 0x5a, 0x8a, 0x3a, 0x53, 0xa4, 0x50, 0x6d, - 0x9d, 0x4b, 0x9f, 0x94, 0xd5, 0x29, 0xd5, 0x59, 0xb2, 0x3a, 0x93, 0xf5, 0x9b, 0xac, 0xce, 0x94, - 0xe2, 0x4c, 0x19, 0x43, 0x0f, 0xa0, 0x1c, 0xa4, 0xfe, 0x48, 0x2e, 0x19, 0x62, 0xb5, 0x4b, 0x6b, - 0x29, 0x75, 0x4e, 0x96, 0x4a, 0xca, 0xe7, 0x65, 0xa9, 0x92, 0x75, 0x82, 0x2c, 0x55, 0x5a, 0x11, - 0x10, 0xee, 0x91, 0xa7, 0x70, 0xf1, 0x3d, 0x46, 0x12, 0xc2, 0xc4, 0x1e, 0xa3, 0xe9, 0x84, 0x32, - 0x76, 0xff, 0xdc, 0xb7, 0xdf, 0x2d, 0xe7, 0xfe, 0xf0, 0xdd, 0xf2, 0xd8, 0x7f, 0xbe, 0x5a, 0xce, - 0x7d, 0xfb, 0x6a, 0x39, 0xf7, 0xbb, 0x57, 0xcb, 0xb9, 0x3f, 0xbe, 0x5a, 0xce, 0x7d, 0xfd, 0xa7, - 0xe5, 0xb1, 0x83, 0x22, 0xfd, 0xf7, 0x98, 0xeb, 0x7f, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x28, - 0x3f, 0xad, 0xd4, 0x34, 0x00, 0x00, + // 4063 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3b, 0x4d, 0x6f, 0x1c, 0x47, + 0x76, 0x9c, 0x19, 0x7e, 0xcc, 0xbc, 0xe1, 0x7c, 0xb0, 0x48, 0x8a, 0xc3, 0x91, 0x44, 0x49, 0x6d, + 0xcb, 0xb2, 0xb4, 0x31, 0x15, 0x51, 0x8e, 0xad, 0x68, 0x57, 0xb6, 0xc6, 0x24, 0xe5, 0x70, 0x4d, + 0x51, 0x4c, 0x8f, 0xb8, 0x71, 0xb2, 0x09, 0x3a, 0xcd, 0xe9, 0xe2, 0xb0, 0xed, 0x99, 0xee, 0xde, + 0xee, 0x6a, 0x5a, 0x93, 0x53, 0x8e, 0x01, 0x82, 0x00, 0x8b, 0xe4, 0x96, 0x73, 0x80, 0x00, 0x9b, + 0x43, 0x2e, 0x39, 0xe7, 0xbc, 0x40, 0x12, 0x20, 0xb7, 0x24, 0xb7, 0xd8, 0x01, 0x16, 0x39, 0x05, + 0xf9, 0x09, 0x8b, 0xfa, 0xea, 0xae, 0xfe, 0x1a, 0x92, 0x5a, 0x61, 0x57, 0xb7, 0xae, 0x57, 0xef, + 0xbd, 0x7a, 0x55, 0xef, 0xd5, 0xab, 0xf7, 0x5e, 0x55, 0x43, 0xcd, 0xf4, 0xec, 0x4d, 0xcf, 0x77, + 0x89, 0x8b, 0xaa, 0x67, 0x0f, 0xcc, 0x91, 0x77, 0x6a, 0x3e, 0xe8, 0x7e, 0x30, 0xb4, 0xc9, 0x69, + 0x78, 0xbc, 0x39, 0x70, 0xc7, 0xf7, 0x87, 0xee, 0xd0, 0xbd, 0xcf, 0x10, 0x8e, 0xc3, 0x13, 0xd6, + 0x62, 0x0d, 0xf6, 0xc5, 0x09, 0xb5, 0x7b, 0xd0, 0xfc, 0x11, 0xf6, 0x03, 0xdb, 0x75, 0x74, 0xfc, + 0x93, 0x10, 0x07, 0x04, 0x75, 0x60, 0xe1, 0x8c, 0x43, 0x3a, 0xa5, 0x9b, 0xa5, 0xf7, 0x6b, 0xba, + 0x6c, 0x6a, 0x7f, 0x5f, 0x82, 0x56, 0x84, 0x1c, 0x78, 0xae, 0x13, 0xe0, 0x62, 0x6c, 0x74, 0x0b, + 0x16, 0xfd, 0xd0, 0x21, 0xf6, 0x18, 0x1b, 0x8e, 0x39, 0xc6, 0x9d, 0x32, 0xeb, 0xae, 0x0b, 0xd8, + 0x81, 0x39, 0xc6, 0xe8, 0x0e, 0xb4, 0x24, 0x8a, 0x64, 0x52, 0x61, 0x58, 0x4d, 0x01, 0x16, 0xa3, + 0xa1, 0x4d, 0x58, 0x96, 0x88, 0xa6, 0x67, 0x47, 0xc8, 0xb3, 0x0c, 0x79, 0x49, 0x74, 0xf5, 0x3c, + 0x5b, 0xe0, 0x6b, 0x3f, 0x86, 0xda, 0xce, 0x41, 0x7f, 0xdb, 0x75, 0x4e, 0xec, 0x21, 0x15, 0x31, + 0xc0, 0x3e, 0xa5, 0xe9, 0x94, 0x6e, 0x56, 0xa8, 0x88, 0xa2, 0x89, 0xba, 0x50, 0x0d, 0xb0, 0xe9, + 0x0f, 0x4e, 0x71, 0xd0, 0x29, 0xb3, 0xae, 0xa8, 0x4d, 0xa9, 0x5c, 0x8f, 0xd8, 0xae, 0x13, 0x74, + 0x2a, 0x9c, 0x4a, 0x34, 0xb5, 0xbf, 0x2d, 0x41, 0xfd, 0xd0, 0xf5, 0xc9, 0x73, 0xd3, 0xf3, 0x6c, + 0x67, 0x88, 0x36, 0xa1, 0xca, 0xd6, 0x72, 0xe0, 0x8e, 0xd8, 0x1a, 0x34, 0xb7, 0xd0, 0xa6, 0x54, + 0xc7, 0xe6, 0xa1, 0xe8, 0xd1, 0x23, 0x1c, 0x74, 0x1b, 0x9a, 0x03, 0xd7, 0x21, 0xa6, 0xed, 0x60, + 0xdf, 0xf0, 0x5c, 0x9f, 0xb0, 0xa5, 0x99, 0xd3, 0x1b, 0x11, 0x94, 0x72, 0x47, 0x57, 0xa1, 0x76, + 0xea, 0x06, 0x84, 0x63, 0x54, 0x18, 0x46, 0x95, 0x02, 0x58, 0xe7, 0x1a, 0x2c, 0xb0, 0x4e, 0xdb, + 0x13, 0x8b, 0x30, 0x4f, 0x9b, 0x7b, 0x9e, 0xf6, 0xd3, 0x12, 0xcc, 0x3d, 0x77, 0x43, 0x87, 0xa4, + 0x86, 0x31, 0xc9, 0xa9, 0x50, 0x90, 0x32, 0x8c, 0x49, 0x4e, 0xe3, 0x61, 0x28, 0x06, 0xd7, 0x11, + 0x1f, 0x86, 0x76, 0x76, 0xa1, 0xea, 0x63, 0xd3, 0x72, 0x9d, 0xd1, 0x84, 0x89, 0x50, 0xd5, 0xa3, + 0x36, 0x55, 0x5e, 0x80, 0x47, 0xb6, 0x13, 0xbe, 0x32, 0x7c, 0x3c, 0x32, 0x8f, 0xf1, 0x88, 0x89, + 0x52, 0xd5, 0x9b, 0x02, 0xac, 0x73, 0xa8, 0xf6, 0x15, 0xb4, 0xa8, 0xb6, 0x03, 0xcf, 0x1c, 0xe0, + 0x17, 0x6c, 0x0d, 0xa9, 0x6d, 0xb0, 0x41, 0x1d, 0x4c, 0xbe, 0x71, 0xfd, 0xaf, 0x99, 0x64, 0x55, + 0xbd, 0x4e, 0x61, 0x07, 0x1c, 0x84, 0xd6, 0xa1, 0xca, 0xe5, 0xb2, 0x2d, 0x26, 0x56, 0x55, 0x67, + 0x33, 0x3e, 0xb4, 0xad, 0xa8, 0xcb, 0xf6, 0x06, 0x42, 0xaa, 0x05, 0x3e, 0xfb, 0x81, 0xa6, 0x01, + 0xec, 0x39, 0xe4, 0xa3, 0x0f, 0x7f, 0x64, 0x8e, 0x42, 0x8c, 0x56, 0x60, 0xee, 0x8c, 0x7e, 0x30, + 0xfe, 0x15, 0x9d, 0x37, 0xb4, 0xff, 0x28, 0xc3, 0xd5, 0x7d, 0x2a, 0x60, 0xdf, 0x74, 0xac, 0x63, + 0xf7, 0x55, 0x1f, 0x0f, 0x42, 0xdf, 0x26, 0x93, 0x6d, 0xd7, 0x21, 0xf8, 0x15, 0x41, 0xcf, 0x60, + 0xc9, 0x91, 0xf2, 0x1a, 0xd2, 0x06, 0x28, 0x87, 0xfa, 0xd6, 0x7a, 0xac, 0xd8, 0xd4, 0x94, 0xf4, + 0xb6, 0x93, 0x04, 0x04, 0xe8, 0x69, 0xbc, 0x40, 0x92, 0x4b, 0x99, 0x71, 0x59, 0x8b, 0xb9, 0xf4, + 0x77, 0x99, 0x24, 0x82, 0x87, 0x5c, 0x39, 0xc9, 0xe1, 0x43, 0xa0, 0xdb, 0xc5, 0x30, 0x03, 0x23, + 0x0c, 0xb0, 0xcf, 0xe6, 0x5a, 0xdf, 0x5a, 0x89, 0xa9, 0xe3, 0xa9, 0xea, 0x35, 0x3f, 0x74, 0x7a, + 0xc1, 0x51, 0x80, 0x7d, 0xb6, 0xab, 0x84, 0x92, 0x0c, 0xdf, 0x75, 0xc9, 0x49, 0x20, 0x15, 0x23, + 0xc1, 0x3a, 0x83, 0xa2, 0xfb, 0xb0, 0x1c, 0x84, 0x9e, 0x37, 0xc2, 0x63, 0xec, 0x10, 0x73, 0x64, + 0x0c, 0x7d, 0x37, 0xf4, 0x82, 0xce, 0xdc, 0xcd, 0xca, 0xfb, 0x15, 0x1d, 0xa9, 0x5d, 0x9f, 0xb3, + 0x1e, 0xb4, 0x01, 0xe0, 0xf9, 0xf6, 0x99, 0x3d, 0xc2, 0x43, 0x6c, 0x75, 0xe6, 0x19, 0x53, 0x05, + 0xa2, 0xfd, 0x75, 0x19, 0x56, 0xd9, 0x7c, 0x0e, 0x5d, 0x4b, 0x2c, 0xae, 0xd8, 0x83, 0xef, 0x40, + 0x63, 0xc0, 0xd8, 0x1b, 0x9e, 0xe9, 0x63, 0x87, 0x08, 0x5b, 0x5c, 0xe4, 0xc0, 0x43, 0x06, 0x43, + 0x87, 0xd0, 0x0e, 0x84, 0x2e, 0x8c, 0x01, 0x57, 0x86, 0x58, 0xb1, 0xdb, 0xf1, 0x9c, 0xa7, 0x68, + 0x4e, 0x6f, 0x05, 0x19, 0x55, 0x2e, 0x04, 0x93, 0x60, 0x40, 0x46, 0x7c, 0x13, 0xd7, 0xb7, 0x7e, + 0x2b, 0xc5, 0x28, 0x2d, 0xe8, 0x66, 0x9f, 0xa3, 0xef, 0x3a, 0xc4, 0x9f, 0xe8, 0x92, 0xb8, 0xfb, + 0x18, 0x16, 0xd5, 0x0e, 0xd4, 0x86, 0xca, 0xd7, 0x78, 0x22, 0x26, 0x41, 0x3f, 0x63, 0x53, 0xe3, + 0x5b, 0x88, 0x37, 0x1e, 0x97, 0x1f, 0x95, 0x34, 0x1f, 0x50, 0x3c, 0xca, 0x73, 0x4c, 0x4c, 0xcb, + 0x24, 0x26, 0x42, 0x30, 0xcb, 0xbc, 0x22, 0x67, 0xc1, 0xbe, 0x29, 0xd7, 0x50, 0x58, 0x7b, 0x4d, + 0xa7, 0x9f, 0xe8, 0x1a, 0xd4, 0x22, 0xb3, 0x12, 0xae, 0x31, 0x06, 0x50, 0x17, 0x65, 0x12, 0x82, + 0xc7, 0x1e, 0x61, 0x0a, 0x6e, 0xe8, 0xb2, 0xa9, 0xfd, 0xf3, 0x2c, 0xb4, 0x33, 0x3a, 0x78, 0x04, + 0xd5, 0xb1, 0x18, 0x5e, 0x98, 0xf3, 0x35, 0xc5, 0x4f, 0x65, 0x44, 0xd4, 0x23, 0x6c, 0xea, 0x06, + 0xe8, 0x06, 0x53, 0xdc, 0x78, 0xd4, 0xa6, 0x9a, 0x1d, 0xb9, 0x43, 0xc3, 0xb2, 0x7d, 0x3c, 0x20, + 0xae, 0x3f, 0x11, 0x62, 0x2e, 0x8e, 0xdc, 0xe1, 0x8e, 0x84, 0xa1, 0x2d, 0x00, 0xcb, 0x09, 0xa8, + 0x52, 0x4f, 0xec, 0x21, 0x13, 0xb6, 0xbe, 0xb5, 0x1c, 0x0f, 0x1e, 0xf9, 0x6a, 0xbd, 0x66, 0x39, + 0x81, 0x10, 0xf7, 0x31, 0x34, 0xa8, 0xeb, 0x33, 0xc6, 0xdc, 0xcd, 0x72, 0xbb, 0xac, 0x6f, 0xad, + 0xaa, 0x32, 0x47, 0x4e, 0x58, 0x5f, 0xf4, 0xe2, 0x46, 0x80, 0x3e, 0x81, 0x79, 0xe6, 0x7b, 0x82, + 0xce, 0x3c, 0x23, 0x7a, 0x2f, 0x6f, 0xa2, 0x42, 0xe3, 0xfb, 0x0c, 0x91, 0x2b, 0x5c, 0x50, 0xa1, + 0xe7, 0x50, 0x37, 0x1d, 0xc7, 0x25, 0x26, 0xdf, 0xb6, 0x0b, 0x8c, 0xc9, 0xf7, 0xa6, 0x30, 0xe9, + 0xc5, 0xd8, 0x9c, 0x93, 0x4a, 0x8f, 0x7e, 0x07, 0xe6, 0xd8, 0xbe, 0xee, 0x54, 0xd9, 0xcc, 0x6f, + 0x9c, 0x63, 0x84, 0x3a, 0xc7, 0xee, 0xfe, 0x2e, 0xd4, 0x15, 0xe1, 0x2e, 0x63, 0x74, 0xdd, 0x4f, + 0xa0, 0x9d, 0x16, 0xe9, 0x52, 0x46, 0xfb, 0x43, 0x58, 0xd1, 0x43, 0x27, 0x16, 0x4c, 0x06, 0x07, + 0x5b, 0x30, 0x2f, 0x94, 0xc8, 0x2d, 0xa8, 0x5b, 0xbc, 0x26, 0xba, 0xc0, 0xd4, 0x9e, 0xc0, 0x6a, + 0x8a, 0x97, 0x88, 0x1d, 0xde, 0x85, 0xa6, 0xe7, 0x5a, 0x46, 0xc0, 0xc1, 0x86, 0x6d, 0x49, 0xaf, + 0xe0, 0x45, 0xb8, 0x7b, 0x16, 0x25, 0xef, 0x13, 0xd7, 0xcb, 0xca, 0x72, 0x31, 0xf2, 0x0e, 0x5c, + 0x49, 0x93, 0xf3, 0xe1, 0xb5, 0x4f, 0x61, 0x4d, 0xc7, 0x63, 0xf7, 0x0c, 0xbf, 0x2e, 0xeb, 0x2e, + 0x74, 0xb2, 0x0c, 0x62, 0xe6, 0x31, 0xb4, 0x4f, 0x4c, 0x12, 0x06, 0x97, 0x63, 0x7e, 0x57, 0x65, + 0x20, 0x0e, 0x45, 0xce, 0x07, 0x35, 0xa1, 0x6c, 0x7b, 0x82, 0xa8, 0x6c, 0x7b, 0xda, 0x53, 0xa8, + 0x45, 0xa7, 0x11, 0x7a, 0x18, 0xc7, 0x2d, 0xe5, 0xf3, 0xce, 0xac, 0x28, 0xa4, 0xd9, 0xcf, 0xf8, + 0x6d, 0x31, 0xd4, 0x43, 0x80, 0xc8, 0xdf, 0xc8, 0x43, 0x70, 0x39, 0x87, 0xa1, 0xae, 0xa0, 0x69, + 0x3f, 0x4b, 0x78, 0x1f, 0x45, 0x68, 0x2b, 0x12, 0xda, 0x4a, 0x78, 0xa3, 0xf2, 0xa5, 0xbc, 0xd1, + 0x7d, 0x98, 0x0b, 0x88, 0x49, 0xb8, 0x43, 0x6c, 0xaa, 0xf3, 0x4b, 0x0e, 0x8a, 0x75, 0x8e, 0x87, + 0xae, 0x03, 0x0c, 0x7c, 0x6c, 0x12, 0x6c, 0x19, 0x26, 0x77, 0x95, 0x15, 0xbd, 0x26, 0x20, 0x3d, + 0x82, 0xbe, 0x0f, 0x0b, 0x32, 0x0e, 0x99, 0x63, 0x82, 0xdc, 0xca, 0xe3, 0x98, 0x50, 0x81, 0x2e, + 0x29, 0xe2, 0xad, 0x3d, 0x7f, 0xce, 0xd6, 0x16, 0x84, 0x1c, 0x5b, 0x71, 0x50, 0x0b, 0xc5, 0x0e, + 0x8a, 0x93, 0x5c, 0xc4, 0x41, 0x55, 0x8b, 0x1d, 0x94, 0x60, 0x32, 0xd5, 0x41, 0xfd, 0x26, 0x3d, + 0xcd, 0x01, 0x74, 0xb2, 0x1b, 0x45, 0x38, 0x88, 0x2d, 0x98, 0x0f, 0x18, 0x64, 0x9a, 0xb7, 0x11, + 0x34, 0x02, 0x53, 0xfb, 0x1c, 0x56, 0x52, 0x66, 0xc0, 0x63, 0xc1, 0xc8, 0x6a, 0x4a, 0x17, 0xb3, + 0x1a, 0xed, 0xff, 0x4b, 0xaa, 0x15, 0x3f, 0xb3, 0x47, 0x04, 0xfb, 0x19, 0x2b, 0xfe, 0x50, 0x72, + 0xe5, 0x26, 0xbc, 0x51, 0xc8, 0x95, 0x47, 0x69, 0xc2, 0x20, 0x5f, 0x42, 0x93, 0xe9, 0xd1, 0x08, + 0xf0, 0x88, 0x9d, 0x90, 0x22, 0x3a, 0xf9, 0x20, 0x8f, 0x9c, 0x8f, 0xcc, 0xad, 0xa0, 0x2f, 0xf0, + 0xb9, 0x0a, 0x1b, 0x23, 0x15, 0xd6, 0x7d, 0x0a, 0x28, 0x8b, 0x74, 0x29, 0x5d, 0x7c, 0x41, 0xdd, + 0x00, 0xcd, 0x30, 0x72, 0xdc, 0xfe, 0x09, 0x13, 0x63, 0x9a, 0x22, 0xb8, 0xa0, 0xba, 0xc0, 0xd4, + 0xfe, 0xae, 0x02, 0x10, 0x77, 0xbe, 0xc5, 0xfb, 0xff, 0x51, 0xb4, 0x17, 0x79, 0x84, 0x71, 0x33, + 0x8f, 0x61, 0xee, 0x2e, 0xfc, 0x3c, 0xb9, 0x0b, 0x79, 0xac, 0x71, 0x3b, 0x97, 0xfc, 0xad, 0xdd, + 0x7f, 0x3b, 0x70, 0x25, 0xad, 0x73, 0xb1, 0xfb, 0xee, 0xc1, 0x9c, 0x4d, 0xf0, 0x98, 0x67, 0xcd, + 0x89, 0xbc, 0x43, 0x41, 0xe6, 0x28, 0xda, 0x2d, 0xa8, 0xed, 0x8d, 0xcd, 0x21, 0xee, 0x7b, 0x78, + 0x40, 0x07, 0xb3, 0x69, 0x43, 0x08, 0xc0, 0x1b, 0xda, 0x16, 0x54, 0xbf, 0xc0, 0x13, 0xbe, 0x19, + 0x2f, 0x28, 0xa0, 0xf6, 0x2f, 0x25, 0x58, 0x63, 0x7e, 0x74, 0x5b, 0xe6, 0xac, 0x3a, 0x0e, 0xdc, + 0xd0, 0x1f, 0xe0, 0x80, 0x69, 0xd5, 0x0b, 0x0d, 0x0f, 0xfb, 0xb6, 0x6b, 0x89, 0x0c, 0xaf, 0x36, + 0xf0, 0xc2, 0x43, 0x06, 0xa0, 0x79, 0x2d, 0xed, 0xfe, 0x49, 0xe8, 0x0a, 0x03, 0xab, 0xe8, 0xd5, + 0x81, 0x17, 0xfe, 0x3e, 0x6d, 0x4b, 0xda, 0xe0, 0xd4, 0xf4, 0x71, 0xc0, 0xec, 0x88, 0xd3, 0xf6, + 0x19, 0x00, 0x3d, 0x80, 0xd5, 0x31, 0x1e, 0xbb, 0xfe, 0xc4, 0x18, 0xd9, 0x63, 0x9b, 0x18, 0xb6, + 0x63, 0x1c, 0x4f, 0x08, 0x0e, 0x84, 0xed, 0x20, 0xde, 0xb9, 0x4f, 0xfb, 0xf6, 0x9c, 0xcf, 0x68, + 0x0f, 0xd2, 0xa0, 0xe1, 0xba, 0x63, 0x23, 0x18, 0xb8, 0x3e, 0x36, 0x4c, 0xeb, 0x2b, 0x76, 0x94, + 0x54, 0xf4, 0xba, 0xeb, 0x8e, 0xfb, 0x14, 0xd6, 0xb3, 0xbe, 0xd2, 0x4c, 0x68, 0x24, 0xf2, 0x3d, + 0x9a, 0x04, 0xb0, 0xc4, 0x4e, 0x24, 0x01, 0xf4, 0x9b, 0xc2, 0x7c, 0x77, 0x24, 0xd7, 0x81, 0x7d, + 0x53, 0x18, 0x99, 0x78, 0x32, 0x03, 0x60, 0xdf, 0x74, 0xc1, 0x46, 0xf8, 0x4c, 0x24, 0xdd, 0x35, + 0x9d, 0x37, 0x34, 0x0b, 0x60, 0xdb, 0xf4, 0xcc, 0x63, 0x7b, 0x64, 0x93, 0x09, 0xba, 0x0b, 0x6d, + 0xd3, 0xb2, 0x8c, 0x81, 0x84, 0xd8, 0x58, 0x96, 0x40, 0x5a, 0xa6, 0x65, 0x6d, 0x2b, 0x60, 0xf4, + 0x3d, 0x58, 0xb2, 0x7c, 0xd7, 0x4b, 0xe2, 0xf2, 0x9a, 0x48, 0x9b, 0x76, 0xa8, 0xc8, 0xda, 0x2f, + 0x2a, 0x70, 0x3d, 0xa9, 0x96, 0x74, 0x0e, 0xfd, 0x08, 0x16, 0x53, 0xa3, 0xa6, 0x52, 0xd7, 0x58, + 0x4a, 0x3d, 0x81, 0x99, 0xca, 0x31, 0xcb, 0xe9, 0x1c, 0x33, 0x3f, 0x3b, 0xaf, 0xbc, 0x91, 0xec, + 0x7c, 0xf6, 0x57, 0xca, 0xce, 0xe7, 0x2e, 0x96, 0x9d, 0xbf, 0xc7, 0x6a, 0x5e, 0x92, 0x8a, 0xa5, + 0x54, 0xf3, 0xbc, 0x2e, 0x13, 0xe1, 0x38, 0xb2, 0x36, 0x96, 0xca, 0xe2, 0x17, 0x2e, 0x93, 0xc5, + 0x57, 0x0b, 0xb3, 0x78, 0x6a, 0x15, 0x9e, 0x67, 0xfa, 0x63, 0xd7, 0x37, 0x3c, 0xdf, 0x3d, 0xb1, + 0x47, 0xb8, 0x53, 0x63, 0x22, 0xb4, 0x24, 0xfc, 0x90, 0x83, 0xb5, 0x7f, 0x28, 0xc1, 0x4a, 0x52, + 0xd1, 0x22, 0x39, 0xfb, 0x14, 0x6a, 0xbe, 0xdc, 0x89, 0x42, 0xb9, 0xb7, 0x52, 0xa1, 0x4f, 0x76, + 0xcb, 0xea, 0x31, 0x0d, 0xd2, 0x0b, 0x73, 0xfd, 0x3b, 0x45, 0x7c, 0xce, 0xcb, 0xf6, 0xb5, 0x1e, + 0x2c, 0x45, 0xc8, 0x53, 0x13, 0x6d, 0x25, 0x71, 0x2e, 0x27, 0x13, 0x67, 0x07, 0xe6, 0x77, 0xf0, + 0x99, 0x3d, 0xc0, 0x6f, 0xa4, 0x7c, 0x76, 0x13, 0xea, 0x1e, 0xf6, 0xc7, 0x76, 0x10, 0x44, 0x56, + 0x5a, 0xd3, 0x55, 0x90, 0xf6, 0xed, 0x1c, 0xb4, 0xd2, 0x6b, 0xfb, 0x71, 0x26, 0x4f, 0xbf, 0xaa, + 0xec, 0x9b, 0xf4, 0x04, 0x95, 0x83, 0xf1, 0xae, 0xf4, 0xbb, 0xe5, 0x74, 0x9c, 0x1e, 0xf9, 0x66, + 0xe1, 0x8c, 0xe9, 0x0a, 0x0c, 0xdc, 0xf1, 0xd8, 0x74, 0x2c, 0x59, 0xdd, 0x14, 0x4d, 0xba, 0x5e, + 0xa6, 0x3f, 0xa4, 0x9b, 0x81, 0x82, 0xd9, 0x37, 0xba, 0x01, 0x75, 0x1a, 0xec, 0xda, 0x0e, 0xcb, + 0xf3, 0x99, 0xa5, 0xd7, 0x74, 0x10, 0xa0, 0x1d, 0x9b, 0x1a, 0xf5, 0x2c, 0x76, 0xce, 0xe4, 0x09, + 0xa8, 0x94, 0x3f, 0xa5, 0xc7, 0xd7, 0x59, 0x3f, 0xba, 0x03, 0xf3, 0x63, 0x37, 0x74, 0x88, 0x0c, + 0x7b, 0x5b, 0x31, 0x26, 0x2b, 0x5a, 0xea, 0xa2, 0x1b, 0xdd, 0x83, 0x05, 0x8b, 0xe9, 0x41, 0xc6, + 0xb6, 0x6d, 0xa5, 0x5a, 0xc0, 0x3a, 0x74, 0x89, 0x80, 0x9e, 0x44, 0xe7, 0x77, 0x2d, 0x7d, 0x00, + 0xa7, 0x96, 0x36, 0xf7, 0x10, 0xdf, 0x4f, 0x1e, 0xe2, 0xc0, 0x78, 0xdc, 0x2b, 0xe6, 0x31, 0x3d, + 0xd5, 0x5f, 0x87, 0xea, 0xc8, 0x1d, 0x72, 0x73, 0xa8, 0xf3, 0x82, 0xf8, 0xc8, 0x1d, 0x32, 0x6b, + 0x58, 0xa1, 0x71, 0x8b, 0x65, 0x3b, 0x9d, 0x45, 0xb6, 0x8f, 0x79, 0x83, 0x1e, 0x45, 0xec, 0xc3, + 0x70, 0x9d, 0x01, 0xee, 0x34, 0x58, 0x57, 0x8d, 0x41, 0x5e, 0x38, 0x03, 0x76, 0x52, 0x12, 0x32, + 0xe9, 0x34, 0x19, 0x9c, 0x7e, 0xd2, 0x90, 0x93, 0x67, 0x1c, 0xad, 0x74, 0xc8, 0x99, 0xb7, 0x53, + 0xdf, 0x82, 0x5a, 0xc2, 0x3f, 0x95, 0xe0, 0xca, 0x36, 0x8b, 0xb6, 0x14, 0x97, 0x70, 0x89, 0x54, + 0x18, 0x3d, 0x88, 0x8a, 0x0e, 0x99, 0x8c, 0x36, 0x3d, 0x5b, 0x81, 0x88, 0x7a, 0xd0, 0x94, 0x4c, + 0x05, 0x69, 0xe5, 0xdc, 0x7a, 0x45, 0x23, 0x50, 0x9b, 0xda, 0x0f, 0x60, 0x2d, 0x23, 0xb5, 0x88, + 0x8c, 0x6e, 0xc1, 0x62, 0xec, 0x1b, 0x22, 0xa1, 0xeb, 0x11, 0x6c, 0xcf, 0xd2, 0x1e, 0xc3, 0x6a, + 0x9f, 0x98, 0x3e, 0xc9, 0x4c, 0xf9, 0x02, 0xb4, 0xac, 0x64, 0x91, 0xa4, 0x15, 0x55, 0x85, 0x3e, + 0xac, 0xf4, 0x89, 0xeb, 0xbd, 0x06, 0x53, 0xba, 0xe3, 0x89, 0x3d, 0xc6, 0x6e, 0x48, 0x44, 0x34, + 0x24, 0x9b, 0xda, 0x1a, 0x2f, 0xb0, 0x64, 0x47, 0xfb, 0x3e, 0x5c, 0xe1, 0xf5, 0x8d, 0xd7, 0x99, + 0xc4, 0xba, 0xac, 0xae, 0x64, 0xf9, 0xee, 0xc2, 0x72, 0xec, 0xd4, 0xe3, 0x0c, 0x6d, 0x33, 0x99, + 0xa1, 0x75, 0x72, 0xb4, 0x9c, 0x48, 0xd0, 0xfe, 0xa6, 0xac, 0xf8, 0xce, 0x82, 0xfc, 0xec, 0x61, + 0x32, 0x3f, 0xbb, 0x5e, 0xc4, 0x33, 0x91, 0x9e, 0x65, 0xad, 0xb2, 0x92, 0x63, 0x95, 0xfd, 0x4c, + 0x12, 0x37, 0x9b, 0x2e, 0x31, 0xa7, 0xa4, 0xfb, 0xb5, 0xe4, 0x70, 0x3f, 0xe4, 0x39, 0x5c, 0x34, + 0x74, 0x54, 0x76, 0x7a, 0x90, 0xca, 0xe1, 0xd6, 0x0b, 0xe5, 0x8c, 0x52, 0xb8, 0xbf, 0x9a, 0x85, + 0x5a, 0xd4, 0x97, 0x59, 0xdb, 0xec, 0x32, 0x95, 0x73, 0x96, 0x49, 0x3d, 0xcd, 0x2a, 0xaf, 0x75, + 0x9a, 0xcd, 0x9e, 0x7b, 0x9a, 0x5d, 0x85, 0x1a, 0xfb, 0x30, 0x7c, 0x7c, 0x22, 0x4e, 0xa7, 0x2a, + 0x03, 0xe8, 0xf8, 0x24, 0x36, 0xab, 0xf9, 0x0b, 0x99, 0x55, 0x2a, 0x5b, 0x5c, 0x48, 0x67, 0x8b, + 0x1f, 0x47, 0xa7, 0x0d, 0x3f, 0x98, 0x6e, 0xe4, 0xf0, 0xcb, 0x3d, 0x67, 0x9e, 0x25, 0xcf, 0x19, + 0x7e, 0x56, 0xbd, 0x9b, 0x47, 0xfd, 0xd6, 0xe6, 0x8a, 0xcf, 0x79, 0xae, 0xa8, 0xda, 0x96, 0xf0, + 0x88, 0x0f, 0x01, 0xa2, 0xcd, 0x2f, 0x13, 0xc6, 0xe5, 0x9c, 0xb9, 0xe9, 0x0a, 0x1a, 0xf5, 0x2f, + 0x09, 0x15, 0xc4, 0x25, 0xd2, 0x0b, 0xf8, 0x97, 0x7f, 0x55, 0x23, 0xa7, 0x82, 0x1a, 0xe3, 0xc7, + 0x99, 0x1a, 0xc3, 0x05, 0x6d, 0x6f, 0x33, 0x59, 0x62, 0xb8, 0xa4, 0xcd, 0x64, 0x2a, 0x0c, 0xec, + 0x8c, 0x37, 0x7d, 0xd1, 0xcd, 0x33, 0xc3, 0x9a, 0x80, 0xf4, 0x08, 0x0d, 0xaf, 0x4e, 0x6c, 0xc7, + 0x0e, 0x4e, 0x79, 0xff, 0x3c, 0xeb, 0x07, 0x09, 0xea, 0xb1, 0xab, 0x60, 0xfc, 0xca, 0x26, 0xc6, + 0xc0, 0xb5, 0x30, 0xb3, 0xc8, 0x39, 0xbd, 0x4a, 0x01, 0xdb, 0xae, 0x85, 0xe3, 0x7d, 0x52, 0xbd, + 0xdc, 0x3e, 0xa9, 0xa5, 0xf6, 0xc9, 0x15, 0x98, 0xf7, 0xb1, 0x19, 0xb8, 0x4e, 0x07, 0xf8, 0x8d, + 0x32, 0x6f, 0xd1, 0x83, 0x63, 0x8c, 0x83, 0x80, 0x8e, 0x20, 0x02, 0x1a, 0xd1, 0x54, 0x02, 0xaf, + 0xc5, 0xc2, 0xc0, 0x6b, 0x4a, 0x0d, 0x33, 0x15, 0x78, 0x35, 0x0a, 0x03, 0xaf, 0x8b, 0x94, 0x30, + 0x95, 0xd0, 0xb2, 0x39, 0x3d, 0xb4, 0x54, 0x23, 0xb4, 0x56, 0x22, 0x42, 0xfb, 0x4d, 0x6e, 0xad, + 0x7d, 0x58, 0xcb, 0xec, 0x05, 0xb1, 0xb7, 0x1e, 0xa4, 0xaa, 0xa0, 0xeb, 0x85, 0x4b, 0x14, 0x15, + 0x41, 0xff, 0x14, 0x5a, 0xbb, 0xaf, 0xf0, 0xa0, 0x3f, 0x71, 0x06, 0x97, 0x08, 0x11, 0xda, 0x50, + 0x19, 0x8c, 0x2d, 0x91, 0xf5, 0xd3, 0x4f, 0x35, 0x68, 0xa8, 0x24, 0x83, 0x06, 0x03, 0xda, 0xf1, + 0x08, 0x42, 0xd0, 0x2b, 0x54, 0x50, 0x8b, 0x22, 0x53, 0xe6, 0x8b, 0xba, 0x68, 0x09, 0x38, 0xf6, + 0x7d, 0x36, 0x6d, 0x0e, 0xc7, 0xbe, 0x9f, 0x34, 0xeb, 0x4a, 0xd2, 0xac, 0xb5, 0xaf, 0xa0, 0x4e, + 0x07, 0xf8, 0x95, 0xc4, 0x17, 0xc1, 0x73, 0x25, 0x0e, 0x9e, 0xa3, 0x18, 0x7c, 0x56, 0x89, 0xc1, + 0xb5, 0x9b, 0xb0, 0xc8, 0xc7, 0x12, 0x13, 0x69, 0x43, 0x25, 0xf4, 0x47, 0x52, 0x71, 0xa1, 0x3f, + 0xd2, 0xfe, 0x08, 0x1a, 0x3d, 0x42, 0xcc, 0xc1, 0xe9, 0x25, 0xe4, 0x89, 0xc6, 0x2a, 0xab, 0xf1, + 0x7e, 0x46, 0x26, 0x4d, 0x83, 0xa6, 0xe4, 0x5d, 0x38, 0xfe, 0x01, 0xa0, 0x43, 0xd7, 0x27, 0xcf, + 0x5c, 0xff, 0x1b, 0xd3, 0xb7, 0x2e, 0x17, 0x3e, 0x23, 0x98, 0x15, 0xaf, 0x4c, 0x2a, 0xef, 0xcf, + 0xe9, 0xec, 0x5b, 0xbb, 0x03, 0xcb, 0x09, 0x7e, 0x85, 0x03, 0x3f, 0x82, 0x3a, 0x73, 0x23, 0x22, + 0xbe, 0xba, 0xab, 0x96, 0xf6, 0xa6, 0x3a, 0x1b, 0xed, 0x33, 0x58, 0xa2, 0x87, 0x05, 0x83, 0x47, + 0x8e, 0xfd, 0x83, 0x54, 0x10, 0xb2, 0x9a, 0x62, 0x90, 0x0a, 0x40, 0xfe, 0xb1, 0x04, 0x73, 0x0c, + 0x9e, 0x71, 0xed, 0x57, 0xa1, 0xe6, 0x63, 0xcf, 0x35, 0x88, 0x39, 0x8c, 0xde, 0xee, 0x50, 0xc0, + 0x4b, 0x73, 0x18, 0xb0, 0xa7, 0x47, 0xb4, 0xd3, 0xb2, 0x87, 0x38, 0x20, 0xf2, 0x01, 0x4f, 0x9d, + 0xc2, 0x76, 0x38, 0x88, 0x2e, 0x4a, 0x60, 0xff, 0x19, 0x0f, 0x2e, 0x66, 0x75, 0xf6, 0x8d, 0xde, + 0xe3, 0xf7, 0xef, 0xd3, 0x0a, 0x39, 0xec, 0x56, 0xbe, 0x0b, 0xd5, 0x54, 0xed, 0x26, 0x6a, 0x6b, + 0x4f, 0x00, 0xa9, 0xb3, 0x16, 0xeb, 0x7a, 0x07, 0xe6, 0xd9, 0xa2, 0xc8, 0xa3, 0xb1, 0x95, 0x9a, + 0xb6, 0x2e, 0xba, 0xb5, 0x4f, 0x01, 0xf1, 0x85, 0x4c, 0x1c, 0x87, 0x97, 0x58, 0xf5, 0x1f, 0xc0, + 0x72, 0x82, 0x81, 0x10, 0xe0, 0x76, 0x92, 0x43, 0x66, 0x7c, 0x41, 0xfd, 0x6f, 0x25, 0x80, 0x5e, + 0x48, 0x4e, 0x45, 0x25, 0x42, 0x9d, 0x68, 0x29, 0x39, 0x51, 0xda, 0xe7, 0x99, 0x41, 0xf0, 0x8d, + 0xeb, 0xcb, 0xb8, 0x2f, 0x6a, 0xb3, 0x1a, 0x42, 0x48, 0x4e, 0x65, 0xbd, 0x92, 0x7e, 0xa3, 0xdb, + 0xd0, 0xe4, 0xcf, 0xae, 0x0c, 0xd3, 0xb2, 0x7c, 0x1c, 0x04, 0xa2, 0x70, 0xd9, 0xe0, 0xd0, 0x1e, + 0x07, 0x52, 0x34, 0xdb, 0xc2, 0x0e, 0xb1, 0xc9, 0xc4, 0x20, 0xee, 0xd7, 0xd8, 0x11, 0xf1, 0x5c, + 0x43, 0x42, 0x5f, 0x52, 0x20, 0x45, 0xf3, 0xf1, 0xd0, 0x0e, 0x88, 0x2f, 0xd1, 0x64, 0x11, 0x4d, + 0x40, 0x19, 0x9a, 0xf6, 0xb3, 0x12, 0xb4, 0x0f, 0xc3, 0xd1, 0x88, 0x4f, 0xf2, 0xd2, 0xab, 0x89, + 0xde, 0x17, 0x13, 0x29, 0xa7, 0x4d, 0x22, 0x5e, 0x24, 0x31, 0xbd, 0x37, 0x90, 0x70, 0xfe, 0x36, + 0x2c, 0x29, 0xb2, 0x0a, 0xc5, 0x25, 0x8e, 0xec, 0x52, 0xf2, 0xc8, 0xa6, 0xd6, 0xc2, 0x73, 0xac, + 0xd7, 0x9c, 0x9f, 0xb6, 0x0a, 0xcb, 0x09, 0x06, 0x22, 0x41, 0xbb, 0x07, 0x0d, 0x71, 0xdd, 0x29, + 0x0c, 0x61, 0x1d, 0xaa, 0xd4, 0xd1, 0x0c, 0x6c, 0x4b, 0x16, 0xab, 0x17, 0x3c, 0xd7, 0xda, 0xb6, + 0x2d, 0x5f, 0x7b, 0x01, 0x0d, 0x9d, 0xbf, 0xbf, 0x13, 0xb8, 0x9f, 0x40, 0x53, 0x5c, 0x8e, 0x1a, + 0x89, 0xa7, 0x02, 0x4a, 0x5d, 0x35, 0xc1, 0x5c, 0x6f, 0x38, 0x6a, 0x53, 0xfb, 0x63, 0xe8, 0x1e, + 0x79, 0x16, 0x0d, 0xae, 0x54, 0xb6, 0x72, 0x72, 0x9f, 0x80, 0x7c, 0x1b, 0x58, 0xc8, 0x3d, 0x49, + 0xd7, 0xf0, 0xd5, 0xa6, 0x76, 0x1d, 0xae, 0xe6, 0x72, 0x17, 0x33, 0xf7, 0xa0, 0x1d, 0x77, 0x58, + 0xb6, 0xac, 0xd2, 0xb3, 0xea, 0x7b, 0x49, 0xa9, 0xbe, 0x5f, 0x89, 0xce, 0x64, 0xee, 0xdc, 0x45, + 0x4b, 0x09, 0xa2, 0x2a, 0x45, 0x41, 0xd4, 0x6c, 0x22, 0x88, 0xd2, 0xbe, 0x88, 0xd6, 0x4f, 0x04, + 0xb1, 0x8f, 0x59, 0x28, 0xcd, 0xc7, 0x96, 0xfe, 0xa2, 0x9b, 0x37, 0x3b, 0x8e, 0xa2, 0x2b, 0xd8, + 0x5a, 0x0b, 0x1a, 0x09, 0xcf, 0xa1, 0xf5, 0xa0, 0x99, 0xf2, 0x04, 0xf7, 0x53, 0xd1, 0x44, 0x76, + 0xe1, 0x52, 0xb1, 0xc4, 0x8a, 0x70, 0x49, 0xcf, 0x82, 0x3d, 0xe7, 0xc4, 0x95, 0x8c, 0xdf, 0x81, + 0xfa, 0x51, 0xd1, 0x4b, 0xbb, 0x59, 0x79, 0x7d, 0x73, 0x07, 0x96, 0xfa, 0xc4, 0xf5, 0xcd, 0x21, + 0xde, 0x63, 0xbb, 0xf7, 0xc4, 0xe6, 0x17, 0x1c, 0x61, 0x18, 0xf9, 0x72, 0xf6, 0xad, 0xfd, 0x57, + 0x09, 0x5a, 0xcf, 0xec, 0x11, 0x0e, 0x26, 0x01, 0xc1, 0xe3, 0x23, 0x16, 0x5d, 0x5e, 0x83, 0x1a, + 0x95, 0x26, 0x20, 0xe6, 0xd8, 0x93, 0xd7, 0x3b, 0x11, 0x80, 0xae, 0x52, 0xc0, 0x59, 0xcb, 0xc4, + 0x33, 0x11, 0xdc, 0x67, 0x86, 0xa5, 0xf1, 0xb6, 0x00, 0xa1, 0x0f, 0x01, 0xc2, 0x00, 0x5b, 0xe2, + 0x4e, 0xa7, 0x92, 0x3e, 0x88, 0x8e, 0xd4, 0xc2, 0x3d, 0x45, 0xe4, 0x37, 0x3c, 0x1f, 0x41, 0xdd, + 0x76, 0x5c, 0x0b, 0xb3, 0xc2, 0xbd, 0x25, 0xb2, 0xd2, 0x02, 0x32, 0xe0, 0x98, 0x47, 0x01, 0xb6, + 0xb4, 0x3f, 0x11, 0x1e, 0x59, 0xae, 0x9f, 0xd0, 0xc3, 0x33, 0x58, 0xe2, 0x1b, 0xfb, 0x24, 0x9a, + 0xb7, 0xd4, 0xb6, 0x12, 0xe0, 0xa5, 0x16, 0x45, 0x6f, 0xdb, 0xe2, 0x94, 0x94, 0x24, 0xda, 0x63, + 0x58, 0x4d, 0x44, 0x81, 0x97, 0xc9, 0xa1, 0x7e, 0x2f, 0x95, 0x80, 0xc5, 0x56, 0x22, 0x12, 0x20, + 0x69, 0x24, 0x45, 0x09, 0x50, 0xc0, 0x13, 0xa0, 0x40, 0xeb, 0xc3, 0x7a, 0x22, 0x33, 0x4c, 0x48, + 0xf2, 0x51, 0xea, 0xd0, 0xdf, 0x28, 0xe2, 0x96, 0x3a, 0xfd, 0xff, 0xb7, 0x04, 0x2b, 0x79, 0x08, + 0xaf, 0x59, 0x89, 0xf8, 0xb2, 0xe0, 0xd6, 0xfd, 0xc1, 0x74, 0x71, 0x7e, 0x2d, 0x55, 0x9b, 0x7d, + 0xe8, 0xe6, 0xad, 0x5f, 0x56, 0x1b, 0x95, 0x8b, 0x68, 0xe3, 0xff, 0xca, 0x4a, 0x85, 0xad, 0x47, + 0x88, 0x6f, 0x1f, 0x87, 0xd4, 0x84, 0xdf, 0x58, 0x7e, 0xdc, 0x8b, 0x32, 0x3f, 0xbe, 0x84, 0x77, + 0x73, 0xc8, 0xe2, 0x71, 0x73, 0xb3, 0xbf, 0xc3, 0x64, 0xf6, 0xc7, 0x6b, 0x67, 0x9b, 0xd3, 0xf9, + 0xbc, 0xb5, 0x85, 0x91, 0x5f, 0x94, 0xa0, 0x99, 0x54, 0x05, 0x7a, 0x02, 0x60, 0x46, 0x92, 0x0b, + 0xc3, 0xbf, 0x3e, 0x75, 0x7a, 0xba, 0x42, 0x80, 0xde, 0x85, 0xca, 0xc0, 0x0b, 0x85, 0x56, 0x94, + 0x0b, 0x95, 0x6d, 0x2f, 0xe4, 0x9e, 0x80, 0x76, 0xd3, 0x70, 0x9a, 0xdf, 0x45, 0x67, 0xbd, 0xd8, + 0x73, 0x06, 0xe7, 0xb8, 0x02, 0x09, 0x3d, 0x85, 0xe6, 0x37, 0xbe, 0x4d, 0xcc, 0xe3, 0x11, 0x36, + 0x46, 0xe6, 0x04, 0xfb, 0xc2, 0x8b, 0x4d, 0x71, 0x38, 0x0d, 0x49, 0xb0, 0x4f, 0xf1, 0xb5, 0x33, + 0xa8, 0x4a, 0x09, 0xce, 0x71, 0xd0, 0xfb, 0xb0, 0x16, 0x52, 0x34, 0x83, 0xdd, 0x88, 0x3b, 0xa6, + 0xe3, 0x1a, 0x01, 0xa6, 0x47, 0x95, 0x7c, 0x97, 0x56, 0xe0, 0x3a, 0x57, 0x18, 0xd5, 0xb6, 0xeb, + 0xe3, 0x03, 0xd3, 0x71, 0xfb, 0x9c, 0x44, 0x73, 0xa0, 0xae, 0x4c, 0xe8, 0x9c, 0xa1, 0x7b, 0xb0, + 0x24, 0xaf, 0xab, 0x02, 0x4c, 0x84, 0x9b, 0x9f, 0x3a, 0x68, 0x4b, 0xe0, 0xf7, 0x31, 0x61, 0xce, + 0xfe, 0xde, 0x35, 0xa8, 0xca, 0x97, 0xfb, 0x68, 0x01, 0x2a, 0x2f, 0xb7, 0x0f, 0xdb, 0x33, 0xf4, + 0xe3, 0x68, 0xe7, 0xb0, 0x5d, 0xba, 0xf7, 0x18, 0x5a, 0xa9, 0xa7, 0x26, 0x68, 0x09, 0x1a, 0xfd, + 0xde, 0xc1, 0xce, 0x67, 0x2f, 0xbe, 0x34, 0xf4, 0xdd, 0xde, 0xce, 0x1f, 0xb6, 0x67, 0xd0, 0x0a, + 0xb4, 0x25, 0xe8, 0xe0, 0xc5, 0x4b, 0x0e, 0x2d, 0xdd, 0xfb, 0x3a, 0x65, 0x29, 0x18, 0xad, 0xc2, + 0xd2, 0xf6, 0x8b, 0x83, 0x97, 0xbd, 0xbd, 0x83, 0x5d, 0xdd, 0xd8, 0xd6, 0x77, 0x7b, 0x2f, 0x77, + 0x77, 0xda, 0x33, 0x49, 0xb0, 0x7e, 0x74, 0x70, 0xb0, 0x77, 0xf0, 0x79, 0xbb, 0x44, 0xb9, 0xc6, + 0xe0, 0xdd, 0x2f, 0xf7, 0x28, 0x72, 0x39, 0x89, 0x7c, 0x74, 0xf0, 0xc5, 0xc1, 0x8b, 0x3f, 0x38, + 0x68, 0x57, 0xb6, 0xfe, 0xa2, 0x01, 0x4d, 0x79, 0xaa, 0x63, 0x9f, 0xdd, 0x6b, 0x3e, 0x85, 0x05, + 0xf9, 0x57, 0x85, 0xe2, 0x47, 0x92, 0xff, 0x80, 0x74, 0xd7, 0x73, 0x7a, 0x44, 0x84, 0x34, 0x83, + 0x74, 0x16, 0xb1, 0x28, 0x4f, 0x7b, 0x36, 0x12, 0x21, 0x44, 0xe6, 0xf5, 0x50, 0xf7, 0x46, 0x61, + 0x7f, 0xc4, 0xf3, 0x88, 0xc6, 0x29, 0xea, 0x2b, 0x4d, 0x74, 0x23, 0x71, 0x98, 0x67, 0x9f, 0x7f, + 0x76, 0x6f, 0x16, 0x23, 0x44, 0x6c, 0x7f, 0x0c, 0xed, 0xf4, 0x0b, 0x4d, 0xa4, 0xdc, 0x53, 0x17, + 0x3c, 0xff, 0xec, 0x6a, 0xd3, 0x50, 0x54, 0xe6, 0x99, 0x57, 0x8e, 0xb7, 0xa6, 0xbc, 0x50, 0xcb, + 0x32, 0x2f, 0x7a, 0xf8, 0xc6, 0x17, 0x24, 0xf9, 0x2c, 0x07, 0x25, 0x9e, 0x16, 0xe6, 0x3c, 0xd2, + 0x52, 0x17, 0x24, 0xff, 0x45, 0x8f, 0x36, 0x83, 0xbe, 0x84, 0x56, 0xea, 0x52, 0x0b, 0x29, 0x64, + 0xf9, 0xb7, 0x74, 0xdd, 0x5b, 0x53, 0x30, 0x92, 0x1a, 0x54, 0x2f, 0xad, 0x92, 0x1a, 0xcc, 0xb9, + 0x0a, 0x4b, 0x6a, 0x30, 0xf7, 0xbe, 0x8b, 0x19, 0x5b, 0xe2, 0x72, 0x4a, 0x35, 0xb6, 0xbc, 0xab, + 0xb0, 0xee, 0x8d, 0xc2, 0x7e, 0x75, 0x11, 0x52, 0x57, 0x53, 0xea, 0x22, 0xe4, 0x5f, 0x79, 0x75, + 0x6f, 0x4d, 0xc1, 0x48, 0x6b, 0x2d, 0x2e, 0x90, 0xa7, 0xb5, 0x96, 0xb9, 0x96, 0x49, 0x6b, 0x2d, + 0x5b, 0x5b, 0x17, 0x5a, 0x4b, 0x95, 0xba, 0x6f, 0x16, 0x17, 0x01, 0x73, 0xb4, 0x96, 0x5f, 0x59, + 0xd4, 0x66, 0xd0, 0x36, 0x54, 0x65, 0x19, 0x0f, 0x29, 0x9b, 0x3e, 0x55, 0x3c, 0xec, 0x76, 0xf3, + 0xba, 0x22, 0x26, 0x1f, 0xc3, 0x2c, 0x85, 0xa2, 0xd5, 0x24, 0x96, 0x24, 0xbe, 0x92, 0x06, 0x47, + 0x84, 0x4f, 0x60, 0x9e, 0x57, 0xbe, 0x90, 0x92, 0x85, 0x24, 0xea, 0x6c, 0xdd, 0x4e, 0xb6, 0x23, + 0x22, 0xdf, 0xe7, 0xff, 0x61, 0x89, 0x22, 0x16, 0xba, 0x96, 0xfc, 0x33, 0x20, 0x59, 0x2b, 0xeb, + 0x5e, 0x2f, 0xe8, 0x55, 0x75, 0x97, 0x3a, 0xc2, 0x6f, 0x14, 0xc6, 0x59, 0x59, 0xdd, 0xe5, 0x47, + 0x6e, 0xda, 0x0c, 0x32, 0x79, 0x41, 0x28, 0xc5, 0xfa, 0x9d, 0x02, 0xad, 0x27, 0xd8, 0xbf, 0x3b, + 0x1d, 0x29, 0x1a, 0xc2, 0x82, 0xe5, 0x9c, 0x9c, 0x16, 0x29, 0xe4, 0xc5, 0x09, 0x75, 0xf7, 0xf6, + 0x39, 0x58, 0xaa, 0xb2, 0x84, 0xed, 0xad, 0x25, 0xf6, 0xad, 0x62, 0x72, 0x9d, 0x6c, 0x87, 0x24, + 0xdf, 0xfa, 0xcb, 0x0a, 0x2c, 0xf2, 0xfa, 0x83, 0x38, 0x88, 0xf6, 0x00, 0xe2, 0x4a, 0x19, 0xba, + 0x9a, 0x9c, 0x6b, 0xa2, 0x6a, 0xd8, 0xbd, 0x96, 0xdf, 0xa9, 0x1a, 0x82, 0x52, 0xf4, 0x52, 0x0d, + 0x21, 0x5b, 0x4c, 0x53, 0x0d, 0x21, 0xa7, 0x52, 0xa6, 0xcd, 0xa0, 0x67, 0x50, 0x8b, 0xea, 0x30, + 0x48, 0xad, 0xdf, 0xa4, 0x0a, 0x49, 0xdd, 0xab, 0xb9, 0x7d, 0xaa, 0x54, 0x4a, 0x71, 0x45, 0x95, + 0x2a, 0x5b, 0xb4, 0x51, 0xa5, 0xca, 0xab, 0xc8, 0xc4, 0x73, 0xe4, 0x69, 0x64, 0x66, 0x8e, 0x89, + 0xec, 0x3c, 0x33, 0xc7, 0x64, 0xee, 0xa9, 0xcd, 0x7c, 0x76, 0xed, 0xe7, 0xdf, 0x6e, 0x94, 0xfe, + 0xf3, 0xdb, 0x8d, 0x99, 0x3f, 0xff, 0x6e, 0xa3, 0xf4, 0xf3, 0xef, 0x36, 0x4a, 0xff, 0xfe, 0xdd, + 0x46, 0xe9, 0xbf, 0xbf, 0xdb, 0x28, 0xfd, 0xf4, 0x7f, 0x36, 0x66, 0x8e, 0xe7, 0xd9, 0xbf, 0x8a, + 0x0f, 0x7f, 0x19, 0x00, 0x00, 0xff, 0xff, 0x2e, 0xab, 0x55, 0x76, 0x61, 0x3a, 0x00, 0x00, } diff --git a/pkg/kubelet/apis/cri/v1alpha1/api.proto b/pkg/kubelet/apis/cri/v1alpha1/api.proto index c663ef83409..cdd551d5121 100644 --- a/pkg/kubelet/apis/cri/v1alpha1/api.proto +++ b/pkg/kubelet/apis/cri/v1alpha1/api.proto @@ -71,6 +71,12 @@ service RuntimeService { // PortForward prepares a streaming endpoint to forward ports from a PodSandbox. rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} + // ContainerStats returns stats of the container. If the container does not + // exist, the call returns an error. + rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} + // ListContainerStats returns stats of all running containers. + rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsResponse) {} + // UpdateRuntimeConfig updates the runtime configuration based on the given request. rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfigResponse) {} @@ -971,33 +977,105 @@ message UInt64Value { uint64 value = 1; } -// FsInfo contains data about filesystem usage. -message FsInfo { - // The block device name associated with the filesystem. - string device = 1; - // The root directory for the images. - string path = 2; - // CapacityBytes represents the total capacity (bytes) of the filesystems - // underlying storage. - UInt64Value capacity_bytes = 3; - // AvailableBytes represents the storage space available (bytes) for the - // filesystem. - UInt64Value available_bytes = 4; +// StorageIdentifier uniquely identify the storage.. +message StorageIdentifier{ + // UUID of the device. + string uuid = 1; +} + +// FilesystemUsage provides the filesystem usage information. +message FilesystemUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // The underlying storage of the filesystem. + StorageIdentifier storage_id = 2; // UsedBytes represents the bytes used for images on the filesystem. // This may differ from the total bytes used on the filesystem and may not // equal CapacityBytes - AvailableBytes. - UInt64Value used_bytes = 5; - // InodesCapacity represents the total inodes in the filesystem. - UInt64Value inodes_capacity = 6; - // InodesAvailable represents the free inodes in the filesystem. - UInt64Value inodes_available = 7; + UInt64Value used_bytes = 3; // InodesUsed represents the inodes used by the images. // This may not equal InodesCapacity - InodesAvailable because the underlying // filesystem may also be used for purposes other than storing images. - UInt64Value inodes_used = 8; + UInt64Value inodes_used = 4; } message ImageFsInfoResponse { - // filesystem information of images. - FsInfo fs_info = 1; + // Information of image filesystem(s). + repeated FilesystemUsage image_filesystems = 1; +} + +message ContainerStatsRequest{ + // ID of the container for which to retrieve stats. + string container_id = 1; +} + +message ContainerStatsResponse { + // Stats of the container. + ContainerStats stats = 1; +} + +message ListContainerStatsRequest{ + // Filter for the list request. + ContainerStatsFilter filter = 1; +} + +// ContainerStatsFilter is used to filter containers. +// All those fields are combined with 'AND' +message ContainerStatsFilter { + // ID of the container. + string id = 1; + // ID of the PodSandbox. + string pod_sandbox_id = 2; + // LabelSelector to select matches. + // Only api.MatchLabels is supported for now and the requirements + // are ANDed. MatchExpressions is not supported yet. + map label_selector = 3; +} + +message ListContainerStatsResponse { + // Stats of the container. + repeated ContainerStats stats = 1; +} + +// ContainerAttributes provides basic information of the container. +message ContainerAttributes { + // ID of the container. + string id = 1; + // Metadata of the container. + ContainerMetadata metadata = 2; + // Key-value pairs that may be used to scope and select individual resources. + map labels = 3; + // Unstructured key-value map holding arbitrary metadata. + // Annotations MUST NOT be altered by the runtime; the value of this field + // MUST be identical to that of the corresponding ContainerConfig used to + // instantiate the Container this status represents. + map annotations = 4; +} + +// ContainerStats provides the resource usage statistics for a container. +message ContainerStats { + // Information of the container. + ContainerAttributes attributes = 1; + // CPU usage gathered from the container. + CpuUsage cpu = 2; + // Memory usage gathered from the container. + MemoryUsage memory = 3; + // Usage of the writeable layer. + FilesystemUsage writable_layer = 4; +} + +// CpuUsage provides the CPU usage information. +message CpuUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // Cumulative CPU usage (sum across all cores) since object creation. + UInt64Value usage_core_nano_seconds = 2; +} + +// MemoryUsage provides the memory usage information. +message MemoryUsage { + // Timestamp in nanoseconds at which the information were collected. Must be > 0. + int64 timestamp = 1; + // The amount of working set memory in bytes. + UInt64Value working_set_bytes = 2; } diff --git a/pkg/kubelet/dockershim/BUILD b/pkg/kubelet/dockershim/BUILD index fcc0f9ae3e2..05d6d3b986c 100644 --- a/pkg/kubelet/dockershim/BUILD +++ b/pkg/kubelet/dockershim/BUILD @@ -20,6 +20,7 @@ go_library( "docker_legacy.go", "docker_sandbox.go", "docker_service.go", + "docker_stats.go", "docker_streaming.go", "exec.go", "helpers.go", diff --git a/pkg/kubelet/dockershim/docker_image.go b/pkg/kubelet/dockershim/docker_image.go index 92cc2285bba..3169237dc3f 100644 --- a/pkg/kubelet/dockershim/docker_image.go +++ b/pkg/kubelet/dockershim/docker_image.go @@ -134,7 +134,7 @@ func getImageRef(client libdocker.Interface, image string) (string, error) { } // ImageFsInfo returns information of the filesystem that is used to store images. -func (ds *dockerService) ImageFsInfo() (*runtimeapi.FsInfo, error) { +func (ds *dockerService) ImageFsInfo(req *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) { return nil, fmt.Errorf("not implemented") } diff --git a/pkg/kubelet/dockershim/docker_stats.go b/pkg/kubelet/dockershim/docker_stats.go new file mode 100644 index 00000000000..997cc8f1673 --- /dev/null +++ b/pkg/kubelet/dockershim/docker_stats.go @@ -0,0 +1,32 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dockershim + +import ( + "fmt" + + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" +) + +// DockerService does not implement container stats. +func (ds *dockerService) ContainerStats(*runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) { + return nil, fmt.Errorf("Not implemented") +} + +func (ds *dockerService) ListContainerStats(*runtimeapi.ListContainerStatsRequest) (*runtimeapi.ListContainerStatsResponse, error) { + return nil, fmt.Errorf("Not implemented") +} diff --git a/pkg/kubelet/dockershim/remote/docker_service.go b/pkg/kubelet/dockershim/remote/docker_service.go index 1f83465427a..4fb0fee41c6 100644 --- a/pkg/kubelet/dockershim/remote/docker_service.go +++ b/pkg/kubelet/dockershim/remote/docker_service.go @@ -220,3 +220,11 @@ func (d *dockerService) RemoveImage(ctx context.Context, r *runtimeapi.RemoveIma func (d *dockerService) ImageFsInfo(ctx context.Context, r *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) { return nil, fmt.Errorf("not implemented") } + +func (d *dockerService) ContainerStats(ctx context.Context, r *runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) { + return nil, fmt.Errorf("not implemented") +} + +func (d *dockerService) ListContainerStats(ctx context.Context, r *runtimeapi.ListContainerStatsRequest) (*runtimeapi.ListContainerStatsResponse, error) { + return nil, fmt.Errorf("not implemented") +} diff --git a/pkg/kubelet/kuberuntime/instrumented_services.go b/pkg/kubelet/kuberuntime/instrumented_services.go index 6897ca7f7ff..6379576b34d 100644 --- a/pkg/kubelet/kuberuntime/instrumented_services.go +++ b/pkg/kubelet/kuberuntime/instrumented_services.go @@ -203,6 +203,24 @@ func (in instrumentedRuntimeService) ListPodSandbox(filter *runtimeapi.PodSandbo return out, err } +func (in instrumentedRuntimeService) ContainerStats(req *runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) { + const operation = "container_stats" + defer recordOperation(operation, time.Now()) + + out, err := in.service.ContainerStats(req) + recordError(operation, err) + return out, err +} + +func (in instrumentedRuntimeService) ListContainerStats(req *runtimeapi.ListContainerStatsRequest) (*runtimeapi.ListContainerStatsResponse, error) { + const operation = "list_container_stats" + defer recordOperation(operation, time.Now()) + + out, err := in.service.ListContainerStats(req) + recordError(operation, err) + return out, err +} + func (in instrumentedRuntimeService) PortForward(req *runtimeapi.PortForwardRequest) (*runtimeapi.PortForwardResponse, error) { const operation = "port_forward" defer recordOperation(operation, time.Now()) @@ -257,11 +275,11 @@ func (in instrumentedImageManagerService) RemoveImage(image *runtimeapi.ImageSpe return err } -func (in instrumentedImageManagerService) ImageFsInfo() (*runtimeapi.FsInfo, error) { +func (in instrumentedImageManagerService) ImageFsInfo(req *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) { const operation = "image_fs_info" defer recordOperation(operation, time.Now()) - fsInfo, err := in.service.ImageFsInfo() + fsInfo, err := in.service.ImageFsInfo(req) recordError(operation, err) return fsInfo, nil } diff --git a/pkg/kubelet/remote/remote_image.go b/pkg/kubelet/remote/remote_image.go index ef81d2b1e84..3ad26db52e4 100644 --- a/pkg/kubelet/remote/remote_image.go +++ b/pkg/kubelet/remote/remote_image.go @@ -135,6 +135,6 @@ func (r *RemoteImageService) RemoveImage(image *runtimeapi.ImageSpec) error { } // ImageFsInfo returns information of the filesystem that is used to store images. -func (r *RemoteImageService) ImageFsInfo() (*runtimeapi.FsInfo, error) { +func (r *RemoteImageService) ImageFsInfo(req *runtimeapi.ImageFsInfoRequest) (*runtimeapi.ImageFsInfoResponse, error) { return nil, fmt.Errorf("not implemented") } diff --git a/pkg/kubelet/remote/remote_runtime.go b/pkg/kubelet/remote/remote_runtime.go index 0777b469bdf..e7f57bca4e9 100644 --- a/pkg/kubelet/remote/remote_runtime.go +++ b/pkg/kubelet/remote/remote_runtime.go @@ -420,3 +420,11 @@ func (r *RemoteRuntimeService) Status() (*runtimeapi.RuntimeStatus, error) { return resp.Status, nil } + +func (r *RemoteRuntimeService) ContainerStats(req *runtimeapi.ContainerStatsRequest) (*runtimeapi.ContainerStatsResponse, error) { + return nil, fmt.Errorf("Not implemented") +} + +func (r *RemoteRuntimeService) ListContainerStats(req *runtimeapi.ListContainerStatsRequest) (*runtimeapi.ListContainerStatsResponse, error) { + return nil, fmt.Errorf("Not implemented") +}