diff --git a/pkg/kubelet/kuberuntime/helpers.go b/pkg/kubelet/kuberuntime/helpers.go index 127a187f228..172110e8882 100644 --- a/pkg/kubelet/kuberuntime/helpers.go +++ b/pkg/kubelet/kuberuntime/helpers.go @@ -28,6 +28,7 @@ import ( "k8s.io/apimachinery/pkg/types" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/security/apparmor" ) @@ -337,3 +338,86 @@ func getAppArmorProfile(pod *v1.Pod, container *v1.Container) (*runtimeapi.Secur return securityProfile, deprecatedProfile, nil } + +func mergeResourceConfig(source, update *cm.ResourceConfig) *cm.ResourceConfig { + if source == nil { + return update + } + if update == nil { + return source + } + + merged := *source + + if update.Memory != nil { + merged.Memory = update.Memory + } + if update.CPUSet.Size() > 0 { + merged.CPUSet = update.CPUSet + } + if update.CPUShares != nil { + merged.CPUShares = update.CPUShares + } + if update.CPUQuota != nil { + merged.CPUQuota = update.CPUQuota + } + if update.CPUPeriod != nil { + merged.CPUPeriod = update.CPUPeriod + } + if update.PidsLimit != nil { + merged.PidsLimit = update.PidsLimit + } + + if update.HugePageLimit != nil { + if merged.HugePageLimit == nil { + merged.HugePageLimit = make(map[int64]int64) + } + for k, v := range update.HugePageLimit { + merged.HugePageLimit[k] = v + } + } + + if update.Unified != nil { + if merged.Unified == nil { + merged.Unified = make(map[string]string) + } + for k, v := range update.Unified { + merged.Unified[k] = v + } + } + + return &merged +} + +func convertResourceConfigToLinuxContainerResources(rc *cm.ResourceConfig) *runtimeapi.LinuxContainerResources { + if rc == nil { + return nil + } + + lcr := &runtimeapi.LinuxContainerResources{} + + if rc.CPUPeriod != nil { + lcr.CpuPeriod = int64(*rc.CPUPeriod) + } + if rc.CPUQuota != nil { + lcr.CpuQuota = *rc.CPUQuota + } + if rc.CPUShares != nil { + lcr.CpuShares = int64(*rc.CPUShares) + } + if rc.Memory != nil { + lcr.MemoryLimitInBytes = *rc.Memory + } + if rc.CPUSet.Size() > 0 { + lcr.CpusetCpus = rc.CPUSet.String() + } + + if rc.Unified != nil { + lcr.Unified = make(map[string]string, len(rc.Unified)) + for k, v := range rc.Unified { + lcr.Unified[k] = v + } + } + + return lcr +} diff --git a/pkg/kubelet/kuberuntime/helpers_linux.go b/pkg/kubelet/kuberuntime/helpers_linux.go index ef77faec26c..ab3b3405625 100644 --- a/pkg/kubelet/kuberuntime/helpers_linux.go +++ b/pkg/kubelet/kuberuntime/helpers_linux.go @@ -20,8 +20,10 @@ limitations under the License. package kuberuntime import ( - "k8s.io/kubernetes/pkg/kubelet/cm" "math" + + v1 "k8s.io/api/core/v1" + "k8s.io/kubernetes/pkg/kubelet/cm" ) const ( @@ -77,3 +79,40 @@ func quotaToMilliCPU(quota int64, period int64) int64 { } return (quota * milliCPUToCPU) / period } + +func subtractOverheadFromResourceConfig(resCfg *cm.ResourceConfig, pod *v1.Pod) *cm.ResourceConfig { + if resCfg == nil { + return nil + } + + rc := *resCfg + + if pod.Spec.Overhead != nil { + if cpu, found := pod.Spec.Overhead[v1.ResourceCPU]; found { + if rc.CPUPeriod != nil { + cpuPeriod := int64(*rc.CPUPeriod) + cpuQuota := *rc.CPUQuota - cm.MilliCPUToQuota(cpu.MilliValue(), cpuPeriod) + rc.CPUQuota = &cpuQuota + } + + if rc.CPUShares != nil { + totalCPUMilli := sharesToMilliCPU(int64(*rc.CPUShares)) + cpuShares := cm.MilliCPUToShares(totalCPUMilli - cpu.MilliValue()) + rc.CPUShares = &cpuShares + } + } + + if memory, found := pod.Spec.Overhead[v1.ResourceMemory]; found { + if rc.Memory != nil { + currMemory := *rc.Memory + + if mem, ok := memory.AsInt64(); ok { + currMemory -= mem + } + + rc.Memory = &currMemory + } + } + } + return &rc +} diff --git a/pkg/kubelet/kuberuntime/helpers_linux_test.go b/pkg/kubelet/kuberuntime/helpers_linux_test.go index 33b6526c931..a5157244f2d 100644 --- a/pkg/kubelet/kuberuntime/helpers_linux_test.go +++ b/pkg/kubelet/kuberuntime/helpers_linux_test.go @@ -24,6 +24,7 @@ import ( "github.com/stretchr/testify/require" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" @@ -494,3 +495,230 @@ func TestQuotaToMilliCPU(t *testing.T) { }) } } + +func TestSubtractOverheadFromResourceConfig(t *testing.T) { + podCPUMilli := resource.MustParse("200m") + podMemory := resource.MustParse("256Mi") + podOverheadCPUMilli := resource.MustParse("100m") + podOverheadMemory := resource.MustParse("64Mi") + + resCfg := &cm.ResourceConfig{ + Memory: int64Ptr(335544320), + CPUShares: uint64Ptr(306), + CPUPeriod: uint64Ptr(100000), + CPUQuota: int64Ptr(30000), + } + + for _, tc := range []struct { + name string + cfgInput *cm.ResourceConfig + pod *v1.Pod + expected *cm.ResourceConfig + }{ + { + name: "withoutOverhead", + cfgInput: resCfg, + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + v1.ResourceMemory: podMemory, + }, + }, + }, + }, + }, + }, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(335544320), + CPUShares: uint64Ptr(306), + CPUPeriod: uint64Ptr(100000), + CPUQuota: int64Ptr(30000), + }, + }, + { + name: "withoutCPUOverhead", + cfgInput: resCfg, + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + v1.ResourceMemory: podMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(268435456), + CPUShares: uint64Ptr(306), + CPUPeriod: uint64Ptr(100000), + CPUQuota: int64Ptr(30000), + }, + }, + { + name: "withoutMemoryOverhead", + cfgInput: resCfg, + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + v1.ResourceMemory: podMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPUMilli, + }, + }, + }, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(335544320), + CPUShares: uint64Ptr(203), + CPUPeriod: uint64Ptr(100000), + CPUQuota: int64Ptr(20000), + }, + }, + { + name: "withoutCPUPeriod", + cfgInput: &cm.ResourceConfig{ + Memory: int64Ptr(335544320), + CPUShares: uint64Ptr(306), + }, + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + v1.ResourceMemory: podMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPUMilli, + }, + }, + }, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(335544320), + CPUShares: uint64Ptr(203), + }, + }, + { + name: "withoutCPUShares", + cfgInput: &cm.ResourceConfig{ + Memory: int64Ptr(335544320), + CPUPeriod: uint64Ptr(100000), + CPUQuota: int64Ptr(30000), + }, + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + v1.ResourceMemory: podMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPUMilli, + }, + }, + }, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(335544320), + CPUPeriod: uint64Ptr(100000), + CPUQuota: int64Ptr(20000), + }, + }, + { + name: "withOverhead", + cfgInput: resCfg, + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podCPUMilli, + v1.ResourceMemory: podMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPUMilli, + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(268435456), + CPUShares: uint64Ptr(203), + CPUPeriod: uint64Ptr(100000), + CPUQuota: int64Ptr(20000), + }, + }, + } { + t.Run(tc.name, func(t *testing.T) { + gotCfg := subtractOverheadFromResourceConfig(tc.cfgInput, tc.pod) + + if tc.expected.CPUPeriod != nil && *gotCfg.CPUPeriod != *tc.expected.CPUPeriod { + t.Errorf("Test %s: expected CPUPeriod %v, but got %v", tc.name, *tc.expected.CPUPeriod, *gotCfg.CPUPeriod) + } + if tc.expected.CPUQuota != nil && *gotCfg.CPUQuota != *tc.expected.CPUQuota { + t.Errorf("Test %s: expected CPUQuota %v, but got %v", tc.name, *tc.expected.CPUQuota, *gotCfg.CPUQuota) + } + if tc.expected.CPUShares != nil && *gotCfg.CPUShares != *tc.expected.CPUShares { + t.Errorf("Test %s: expected CPUShares %v, but got %v", tc.name, *tc.expected.CPUShares, *gotCfg.CPUShares) + } + if tc.expected.Memory != nil && *gotCfg.Memory != *tc.expected.Memory { + t.Errorf("Test %s: expected Memory %v, but got %v", tc.name, *tc.expected.Memory, *gotCfg.Memory) + } + }) + } +} diff --git a/pkg/kubelet/kuberuntime/helpers_test.go b/pkg/kubelet/kuberuntime/helpers_test.go index 8cc9c2956e4..d7213f08587 100644 --- a/pkg/kubelet/kuberuntime/helpers_test.go +++ b/pkg/kubelet/kuberuntime/helpers_test.go @@ -30,6 +30,7 @@ import ( runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" runtimetesting "k8s.io/cri-api/pkg/apis/testing" "k8s.io/kubernetes/pkg/features" + "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/utils/ptr" ) @@ -40,6 +41,14 @@ func (f podStatusProviderFunc) GetPodStatus(_ context.Context, uid types.UID, na return f(uid, name, namespace) } +func int64Ptr(i int64) *int64 { + return &i +} + +func uint64Ptr(i uint64) *uint64 { + return &i +} + func TestIsInitContainerFailed(t *testing.T) { tests := []struct { status *kubecontainer.Status @@ -441,3 +450,83 @@ func TestGetAppArmorProfile(t *testing.T) { }) } } + +func TestMergeResourceConfig(t *testing.T) { + tests := []struct { + name string + source *cm.ResourceConfig + update *cm.ResourceConfig + expected *cm.ResourceConfig + }{ + { + name: "merge all fields", + source: &cm.ResourceConfig{Memory: int64Ptr(1024), CPUShares: uint64Ptr(2)}, + update: &cm.ResourceConfig{Memory: int64Ptr(2048), CPUQuota: int64Ptr(5000)}, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(2048), + CPUShares: uint64Ptr(2), + CPUQuota: int64Ptr(5000), + }, + }, + { + name: "merge HugePageLimit and Unified", + source: &cm.ResourceConfig{HugePageLimit: map[int64]int64{2048: 1024}, Unified: map[string]string{"key1": "value1"}}, + update: &cm.ResourceConfig{HugePageLimit: map[int64]int64{4096: 2048}, Unified: map[string]string{"key1": "newValue1", "key2": "value2"}}, + expected: &cm.ResourceConfig{ + HugePageLimit: map[int64]int64{2048: 1024, 4096: 2048}, + Unified: map[string]string{"key1": "newValue1", "key2": "value2"}, + }, + }, + { + name: "update nil source", + source: nil, + update: &cm.ResourceConfig{Memory: int64Ptr(4096)}, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(4096), + }, + }, + { + name: "update nil update", + source: &cm.ResourceConfig{Memory: int64Ptr(1024)}, + update: nil, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(1024), + }, + }, + { + name: "update empty source", + source: &cm.ResourceConfig{}, + update: &cm.ResourceConfig{Memory: int64Ptr(8192)}, + expected: &cm.ResourceConfig{ + Memory: int64Ptr(8192), + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + merged := mergeResourceConfig(tt.source, tt.update) + + assert.Equal(t, tt.expected, merged) + }) + } +} + +func TestConvertResourceConfigToLinuxContainerResources(t *testing.T) { + resCfg := &cm.ResourceConfig{ + Memory: int64Ptr(2048), + CPUShares: uint64Ptr(2), + CPUPeriod: uint64Ptr(10000), + CPUQuota: int64Ptr(5000), + HugePageLimit: map[int64]int64{4096: 2048}, + Unified: map[string]string{"key1": "value1"}, + } + + lcr := convertResourceConfigToLinuxContainerResources(resCfg) + + assert.Equal(t, int64(*resCfg.CPUPeriod), lcr.CpuPeriod) + assert.Equal(t, *resCfg.CPUQuota, lcr.CpuQuota) + assert.Equal(t, int64(*resCfg.CPUShares), lcr.CpuShares) + assert.Equal(t, *resCfg.Memory, lcr.MemoryLimitInBytes) + assert.Equal(t, resCfg.Unified, lcr.Unified) +} diff --git a/pkg/kubelet/kuberuntime/instrumented_services.go b/pkg/kubelet/kuberuntime/instrumented_services.go index ba8794118bb..7d2d2ba4b72 100644 --- a/pkg/kubelet/kuberuntime/instrumented_services.go +++ b/pkg/kubelet/kuberuntime/instrumented_services.go @@ -272,6 +272,15 @@ func (in instrumentedRuntimeService) PortForward(ctx context.Context, req *runti return resp, err } +func (in instrumentedRuntimeService) UpdatePodSandboxResources(ctx context.Context, req *runtimeapi.UpdatePodSandboxResourcesRequest) (*runtimeapi.UpdatePodSandboxResourcesResponse, error) { + const operation = "update_podsandbox_resources" + defer recordOperation(operation, time.Now()) + + resp, err := in.service.UpdatePodSandboxResources(ctx, req) + recordError(operation, err) + return resp, err +} + func (in instrumentedRuntimeService) UpdateRuntimeConfig(ctx context.Context, runtimeConfig *runtimeapi.RuntimeConfig) error { const operation = "update_runtime_config" defer recordOperation(operation, time.Now()) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container.go b/pkg/kubelet/kuberuntime/kuberuntime_container.go index e9ed63921f3..b6406f776db 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container.go @@ -33,6 +33,7 @@ import ( "sync" "time" + codes "google.golang.org/grpc/codes" crierror "k8s.io/cri-api/pkg/errors" "github.com/opencontainers/selinux/go-selinux" @@ -52,6 +53,7 @@ import ( kubelettypes "k8s.io/kubelet/pkg/types" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/features" + "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" @@ -411,6 +413,25 @@ func (m *kubeGenericRuntimeManager) updateContainerResources(pod *v1.Pod, contai return err } +func (m *kubeGenericRuntimeManager) updatePodSandboxResources(sandboxID string, pod *v1.Pod, podResources *cm.ResourceConfig) error { + podResourcesRequest := m.generateUpdatePodSandboxResourcesRequest(sandboxID, pod, podResources) + if podResourcesRequest == nil { + return fmt.Errorf("sandboxID %q updatePodSandboxResources failed: cannot generate resources config", sandboxID) + } + + ctx := context.Background() + _, err := m.runtimeService.UpdatePodSandboxResources(ctx, podResourcesRequest) + if err != nil { + stat, _ := grpcstatus.FromError(err) + if stat.Code() == codes.Unimplemented { + klog.V(3).InfoS("updatePodSandboxResources failed: unimplemented; this call is best-effort: proceeding with resize", "sandboxID", sandboxID) + return nil + } + return fmt.Errorf("updatePodSandboxResources failed for sanboxID %q: %w", sandboxID, err) + } + return nil +} + // makeDevices generates container devices for kubelet runtime v1. func makeDevices(opts *kubecontainer.RunContainerOptions) []*runtimeapi.Device { devices := make([]*runtimeapi.Device, len(opts.Devices)) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go b/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go index 662bb8f98f3..d44432b7e61 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go @@ -248,6 +248,17 @@ func (m *kubeGenericRuntimeManager) generateContainerResources(pod *v1.Pod, cont } } +// generateUpdatePodSandboxResourcesRequest generates platform specific (linux) podsandox resources config for runtime +func (m *kubeGenericRuntimeManager) generateUpdatePodSandboxResourcesRequest(sandboxID string, pod *v1.Pod, podResources *cm.ResourceConfig) *runtimeapi.UpdatePodSandboxResourcesRequest { + + podResourcesWithoutOverhead := subtractOverheadFromResourceConfig(podResources, pod) + return &runtimeapi.UpdatePodSandboxResourcesRequest{ + PodSandboxId: sandboxID, + Overhead: m.convertOverheadToLinuxResources(pod), + Resources: convertResourceConfigToLinuxContainerResources(podResourcesWithoutOverhead), + } +} + // calculateLinuxResources will create the linuxContainerResources type based on the provided CPU and memory resource requests, limits func (m *kubeGenericRuntimeManager) calculateLinuxResources(cpuRequest, cpuLimit, memoryLimit *resource.Quantity, disableCPUQuota bool) *runtimeapi.LinuxContainerResources { resources := runtimeapi.LinuxContainerResources{} diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go b/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go index d4bd959ab6d..4d5e75c793a 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go @@ -27,6 +27,7 @@ import ( "reflect" "strconv" "testing" + "time" "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/types" @@ -34,6 +35,7 @@ import ( "github.com/google/go-cmp/cmp" libcontainercgroups "github.com/opencontainers/cgroups" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -1259,6 +1261,448 @@ func TestGenerateLinuxContainerResourcesWithSwap(t *testing.T) { } } +func TestGenerateUpdatePodSandboxResourcesRequest(t *testing.T) { + _, _, m, err := createTestRuntimeManager() + require.NoError(t, err) + + podRequestCPU := resource.MustParse("400m") + podLimitCPU := resource.MustParse("800m") + podRequestMemory := resource.MustParse("128Mi") + podLimitMemory := resource.MustParse("256Mi") + podOverheadCPU := resource.MustParse("100m") + podOverheadMemory := resource.MustParse("64Mi") + enforceCPULimits := true + m.cpuCFSQuota = true + + for _, tc := range []struct { + name string + qosClass v1.PodQOSClass + pod *v1.Pod + sandboxID string + enforceCPULimits bool + }{ + // Best effort pod (no resources defined) + { + name: "Best effort", + qosClass: v1.PodQOSBestEffort, + enforceCPULimits: enforceCPULimits, + sandboxID: "1", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{}, + Limits: v1.ResourceList{}, + }, + }, + }, + Overhead: v1.ResourceList{}, + }, + }, + }, + { + name: "Best effort with overhead", + qosClass: v1.PodQOSBestEffort, + enforceCPULimits: enforceCPULimits, + sandboxID: "2", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{}, + Limits: v1.ResourceList{}, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + }, + // Guaranteed pod + { + name: "Guaranteed", + qosClass: v1.PodQOSGuaranteed, + enforceCPULimits: enforceCPULimits, + sandboxID: "3", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + }, + }, + }, + { + name: "Guaranteed with overhead", + qosClass: v1.PodQOSGuaranteed, + enforceCPULimits: enforceCPULimits, + sandboxID: "4", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + }, + // Burstable pods that leave some resources unspecified (e.g. only CPU/Mem requests) + { + name: "Burstable only cpu", + qosClass: v1.PodQOSBurstable, + enforceCPULimits: enforceCPULimits, + sandboxID: "5", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podLimitCPU, + }, + }, + }, + }, + }, + }, + }, + { + name: "Burstable only cpu with overhead", + qosClass: v1.PodQOSBurstable, + enforceCPULimits: enforceCPULimits, + sandboxID: "6", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podLimitCPU, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + }, + }, + }, + }, + { + name: "Burstable only memory", + qosClass: v1.PodQOSBurstable, + enforceCPULimits: enforceCPULimits, + sandboxID: "7", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceMemory: podRequestMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + }, + }, + }, + { + name: "Burstable only memory with overhead", + qosClass: v1.PodQOSBurstable, + enforceCPULimits: enforceCPULimits, + sandboxID: "8", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceMemory: podRequestMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + }, + // With init container + { + name: "Pod with init container", + qosClass: v1.PodQOSGuaranteed, + enforceCPULimits: enforceCPULimits, + sandboxID: "9", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + InitContainers: []v1.Container{ + { + Name: "init", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + }, + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + }, + }, + }, + { + name: "Pod with init container and overhead", + qosClass: v1.PodQOSGuaranteed, + enforceCPULimits: enforceCPULimits, + sandboxID: "10", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + InitContainers: []v1.Container{ + { + Name: "init", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + }, + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + }, + // With a sidecar container + { + name: "Pod with sidecar container", + qosClass: v1.PodQOSBurstable, + enforceCPULimits: enforceCPULimits, + sandboxID: "11", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podRequestMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podLimitCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + { + Name: "bar", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podRequestMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podLimitCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + }, + }, + }, + { + name: "Pod with sidecar container and overhead", + qosClass: v1.PodQOSBurstable, + enforceCPULimits: enforceCPULimits, + sandboxID: "11", + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podRequestMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podLimitCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + { + Name: "bar", + Resources: v1.ResourceRequirements{ + Requests: v1.ResourceList{ + v1.ResourceCPU: podRequestCPU, + v1.ResourceMemory: podRequestMemory, + }, + Limits: v1.ResourceList{ + v1.ResourceCPU: podLimitCPU, + v1.ResourceMemory: podLimitMemory, + }, + }, + }, + }, + Overhead: v1.ResourceList{ + v1.ResourceCPU: podOverheadCPU, + v1.ResourceMemory: podOverheadMemory, + }, + }, + }, + }, + } { + t.Run(tc.name, func(t *testing.T) { + expectedLcr := m.calculateSandboxResources(tc.pod) + expectedLcrOverhead := m.convertOverheadToLinuxResources(tc.pod) + + podResourcesCfg := cm.ResourceConfigForPod(tc.pod, tc.enforceCPULimits, uint64((m.cpuCFSQuotaPeriod.Duration)/time.Microsecond), false) + assert.NotNil(t, podResourcesCfg, "podResourcesCfg is expected to be not nil") + + if podResourcesCfg.CPUPeriod == nil { + expectedLcr.CpuPeriod = 0 + } + + updatePodSandboxRequest := m.generateUpdatePodSandboxResourcesRequest("123", tc.pod, podResourcesCfg) + assert.NotNil(t, updatePodSandboxRequest, "updatePodSandboxRequest is expected to be not nil") + + assert.Equal(t, expectedLcr, updatePodSandboxRequest.Resources, "expectedLcr need to be equal then updatePodSandboxRequest.Resources") + assert.Equal(t, expectedLcrOverhead, updatePodSandboxRequest.Overhead, "expectedLcrOverhead need to be equal then updatePodSandboxRequest.Overhead") + }) + } +} + +func TestUpdatePodSandboxResources(t *testing.T) { + fakeRuntime, _, m, errCreate := createTestRuntimeManager() + require.NoError(t, errCreate) + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + UID: "12345678", + Name: "bar", + Namespace: "new", + }, + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Name: "foo", + Image: "busybox", + ImagePullPolicy: v1.PullIfNotPresent, + }, + }, + }, + } + + // Create fake sandbox and container + fakeSandbox, fakeContainers := makeAndSetFakePod(t, m, fakeRuntime, pod) + assert.Len(t, fakeContainers, 1) + + ctx := context.Background() + _, err := m.getPodContainerStatuses(ctx, pod.UID, pod.Name, pod.Namespace) + require.NoError(t, err) + + resourceConfig := &cm.ResourceConfig{} + + err = m.updatePodSandboxResources(fakeSandbox.Id, pod, resourceConfig) + require.NoError(t, err) + + // Verify sandbox is updated + assert.Contains(t, fakeRuntime.Called, "UpdatePodSandboxResources") +} + type CgroupVersion string const ( diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_unsupported.go b/pkg/kubelet/kuberuntime/kuberuntime_container_unsupported.go index 55465475847..8d3b483f7b0 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_unsupported.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_unsupported.go @@ -20,8 +20,9 @@ limitations under the License. package kuberuntime import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" ) @@ -35,6 +36,11 @@ func (m *kubeGenericRuntimeManager) generateContainerResources(pod *v1.Pod, cont return nil } +// generateUpdatePodSandboxResourcesRequest generates platform specific podsandox resources config for runtime +func (m *kubeGenericRuntimeManager) generateUpdatePodSandboxResourcesRequest(sandboxID string, pod *v1.Pod, podResources *cm.ResourceConfig) *runtimeapi.UpdatePodSandboxResourcesRequest { + return nil +} + func toKubeContainerResources(statusResources *runtimeapi.ContainerResources) *kubecontainer.ContainerResources { return nil } diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go b/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go index eb64c27db18..abf71f55b71 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/winstats" "k8s.io/kubernetes/pkg/securitycontext" @@ -47,6 +48,11 @@ func (m *kubeGenericRuntimeManager) generateContainerResources(pod *v1.Pod, cont } } +// generateUpdatePodSandboxResourcesRequest generates platform specific podsandox resources config for runtime +func (m *kubeGenericRuntimeManager) generateUpdatePodSandboxResourcesRequest(sandboxID string, pod *v1.Pod, podResources *cm.ResourceConfig) *runtimeapi.UpdatePodSandboxResourcesRequest { + return nil +} + // generateWindowsContainerResources generates windows container resources config for runtime func (m *kubeGenericRuntimeManager) generateWindowsContainerResources(pod *v1.Pod, container *v1.Container) *runtimeapi.WindowsContainerResources { wcr := m.calculateWindowsResources(container.Resources.Limits.Cpu(), container.Resources.Limits.Memory()) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index 7403eeb95d9..1b42c5acd1c 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -675,36 +675,56 @@ func (m *kubeGenericRuntimeManager) doPodResizeAction(pod *v1.Pod, podContainerC } podResources := cm.ResourceConfigForPod(pod, enforceCPULimits, uint64((m.cpuCFSQuotaPeriod.Duration)/time.Microsecond), false) if podResources == nil { - klog.ErrorS(nil, "Unable to get resource configuration", "pod", pod.Name) + klog.ErrorS(nil, "Unable to get resource configuration", "pod", klog.KObj(pod)) result.Fail(fmt.Errorf("unable to get resource configuration processing resize for pod %s", pod.Name)) return } + currentPodMemoryConfig, err := pcm.GetPodCgroupConfig(pod, v1.ResourceMemory) + if err != nil { + klog.ErrorS(nil, "Unable to get pod cgroup memory config", "pod", klog.KObj(pod)) + result.Fail(fmt.Errorf("unable to get pod cgroup memory config for pod %s", pod.Name)) + return + } + currentPodCPUConfig, err := pcm.GetPodCgroupConfig(pod, v1.ResourceCPU) + if err != nil { + klog.ErrorS(nil, "Unable to get pod cgroup cpu config", "pod", klog.KObj(pod)) + result.Fail(fmt.Errorf("unable to get pod cgroup cpu config for pod %s", pod.Name)) + return + } + + currentPodResources := podResources + currentPodResources = mergeResourceConfig(currentPodResources, currentPodMemoryConfig) + currentPodResources = mergeResourceConfig(currentPodResources, currentPodCPUConfig) + setPodCgroupConfig := func(rName v1.ResourceName, setLimitValue bool) error { var err error + resizedResources := &cm.ResourceConfig{} switch rName { case v1.ResourceCPU: - podCPUResources := &cm.ResourceConfig{} if setLimitValue { - podCPUResources.CPUPeriod = podResources.CPUPeriod - podCPUResources.CPUQuota = podResources.CPUQuota + resizedResources.CPUPeriod = podResources.CPUPeriod + resizedResources.CPUQuota = podResources.CPUQuota } else { - podCPUResources.CPUShares = podResources.CPUShares + resizedResources.CPUShares = podResources.CPUShares } - err = pcm.SetPodCgroupConfig(pod, podCPUResources) case v1.ResourceMemory: if !setLimitValue { // Memory requests aren't written to cgroups. return nil } - podMemoryResources := &cm.ResourceConfig{ - Memory: podResources.Memory, - } - err = pcm.SetPodCgroupConfig(pod, podMemoryResources) + resizedResources.Memory = podResources.Memory } + err = pcm.SetPodCgroupConfig(pod, resizedResources) if err != nil { - klog.ErrorS(err, "Failed to set cgroup config", "resource", rName, "pod", pod.Name) + klog.ErrorS(err, "Failed to set cgroup config", "resource", rName, "pod", klog.KObj(pod)) + return err } - return err + currentPodResources = mergeResourceConfig(currentPodResources, resizedResources) + if err = m.updatePodSandboxResources(podContainerChanges.SandboxID, pod, currentPodResources); err != nil { + klog.ErrorS(err, "Failed to notify runtime for UpdatePodSandboxResources", "resource", rName, "pod", klog.KObj(pod)) + // Don't propagate the error since the updatePodSandboxResources call is best-effort. + } + return nil } // Memory and CPU are updated separately because memory resizes may be ordered differently than CPU resizes. // If resize results in net pod resource increase, set pod cgroup config before resizing containers. @@ -748,12 +768,6 @@ func (m *kubeGenericRuntimeManager) doPodResizeAction(pod *v1.Pod, podContainerC defer m.runtimeHelper.SetPodWatchCondition(pod.UID, "doPodResizeAction", func(*kubecontainer.PodStatus) bool { return true }) if len(podContainerChanges.ContainersToUpdate[v1.ResourceMemory]) > 0 || podContainerChanges.UpdatePodResources { - currentPodMemoryConfig, err := pcm.GetPodCgroupConfig(pod, v1.ResourceMemory) - if err != nil { - klog.ErrorS(err, "GetPodCgroupConfig for memory failed", "pod", pod.Name) - result.Fail(err) - return - } if podResources.Memory != nil { currentPodMemoryUsage, err := pcm.GetPodCgroupMemoryUsage(pod) if err != nil { @@ -783,21 +797,15 @@ func (m *kubeGenericRuntimeManager) doPodResizeAction(pod *v1.Pod, podContainerC result.Fail(fmt.Errorf("podResources.CPUShares is nil for pod %s", pod.Name)) return } - currentPodCpuConfig, err := pcm.GetPodCgroupConfig(pod, v1.ResourceCPU) - if err != nil { - klog.ErrorS(err, "GetPodCgroupConfig for CPU failed", "pod", pod.Name) - result.Fail(err) - return - } // Default pod CPUQuota to the current CPUQuota if no limit is set to prevent the pod limit // from updating. // TODO(#128675): This does not support removing limits. if podResources.CPUQuota == nil { - podResources.CPUQuota = currentPodCpuConfig.CPUQuota + podResources.CPUQuota = currentPodCPUConfig.CPUQuota } - if errResize := resizeContainers(v1.ResourceCPU, *currentPodCpuConfig.CPUQuota, *podResources.CPUQuota, - int64(*currentPodCpuConfig.CPUShares), int64(*podResources.CPUShares)); errResize != nil { + if errResize := resizeContainers(v1.ResourceCPU, *currentPodCPUConfig.CPUQuota, *podResources.CPUQuota, + int64(*currentPodCPUConfig.CPUShares), int64(*podResources.CPUShares)); errResize != nil { result.Fail(errResize) return } diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go index 80e9cf0e115..c0284cca5b9 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go @@ -10335,6 +10335,107 @@ func (m *LinuxRuntimeConfiguration) GetCgroupDriver() CgroupDriver { return CgroupDriver_SYSTEMD } +type UpdatePodSandboxResourcesRequest struct { + // ID of the PodSandbox to update. + PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` + // Optional overhead represents the overheads associated with this sandbox + Overhead *LinuxContainerResources `protobuf:"bytes,2,opt,name=overhead,proto3" json:"overhead,omitempty"` + // Optional resources represents the sum of container resources for this sandbox + Resources *LinuxContainerResources `protobuf:"bytes,3,opt,name=resources,proto3" json:"resources,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdatePodSandboxResourcesRequest) Reset() { *m = UpdatePodSandboxResourcesRequest{} } +func (*UpdatePodSandboxResourcesRequest) ProtoMessage() {} +func (*UpdatePodSandboxResourcesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{153} +} +func (m *UpdatePodSandboxResourcesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UpdatePodSandboxResourcesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UpdatePodSandboxResourcesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *UpdatePodSandboxResourcesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdatePodSandboxResourcesRequest.Merge(m, src) +} +func (m *UpdatePodSandboxResourcesRequest) XXX_Size() int { + return m.Size() +} +func (m *UpdatePodSandboxResourcesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_UpdatePodSandboxResourcesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdatePodSandboxResourcesRequest proto.InternalMessageInfo + +func (m *UpdatePodSandboxResourcesRequest) GetPodSandboxId() string { + if m != nil { + return m.PodSandboxId + } + return "" +} + +func (m *UpdatePodSandboxResourcesRequest) GetOverhead() *LinuxContainerResources { + if m != nil { + return m.Overhead + } + return nil +} + +func (m *UpdatePodSandboxResourcesRequest) GetResources() *LinuxContainerResources { + if m != nil { + return m.Resources + } + return nil +} + +type UpdatePodSandboxResourcesResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UpdatePodSandboxResourcesResponse) Reset() { *m = UpdatePodSandboxResourcesResponse{} } +func (*UpdatePodSandboxResourcesResponse) ProtoMessage() {} +func (*UpdatePodSandboxResourcesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_00212fb1f9d3bf1c, []int{154} +} +func (m *UpdatePodSandboxResourcesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UpdatePodSandboxResourcesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UpdatePodSandboxResourcesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *UpdatePodSandboxResourcesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdatePodSandboxResourcesResponse.Merge(m, src) +} +func (m *UpdatePodSandboxResourcesResponse) XXX_Size() int { + return m.Size() +} +func (m *UpdatePodSandboxResourcesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_UpdatePodSandboxResourcesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdatePodSandboxResourcesResponse proto.InternalMessageInfo + func init() { proto.RegisterEnum("runtime.v1.Protocol", Protocol_name, Protocol_value) proto.RegisterEnum("runtime.v1.MountPropagation", MountPropagation_name, MountPropagation_value) @@ -10527,463 +10628,468 @@ func init() { proto.RegisterType((*RuntimeConfigRequest)(nil), "runtime.v1.RuntimeConfigRequest") proto.RegisterType((*RuntimeConfigResponse)(nil), "runtime.v1.RuntimeConfigResponse") proto.RegisterType((*LinuxRuntimeConfiguration)(nil), "runtime.v1.LinuxRuntimeConfiguration") + proto.RegisterType((*UpdatePodSandboxResourcesRequest)(nil), "runtime.v1.UpdatePodSandboxResourcesRequest") + proto.RegisterType((*UpdatePodSandboxResourcesResponse)(nil), "runtime.v1.UpdatePodSandboxResourcesResponse") } func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) } var fileDescriptor_00212fb1f9d3bf1c = []byte{ - // 7202 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x5d, 0x6c, 0x1c, 0xc9, - 0x75, 0x2e, 0x7b, 0x66, 0x48, 0xce, 0x1c, 0x72, 0xc8, 0x61, 0x89, 0x22, 0xa9, 0x91, 0x44, 0x49, - 0xbd, 0x7f, 0x92, 0x76, 0xf5, 0xb3, 0x5a, 0xed, 0xae, 0xa4, 0xd5, 0xee, 0x6a, 0x44, 0x52, 0xd2, - 0xac, 0x45, 0x72, 0xdc, 0x43, 0xae, 0xbd, 0xeb, 0x0b, 0xf7, 0x6d, 0x4d, 0x17, 0x87, 0xbd, 0x9a, - 0xe9, 0x6e, 0x77, 0xf7, 0x48, 0xa2, 0x1f, 0x2e, 0xee, 0xd3, 0xc5, 0x8d, 0x9f, 0x0c, 0x24, 0x46, - 0x10, 0x23, 0x48, 0xe0, 0x00, 0xf9, 0x79, 0x4b, 0x62, 0x20, 0x8e, 0x83, 0x04, 0x08, 0x10, 0xc4, - 0x86, 0x13, 0x20, 0x40, 0x1e, 0x12, 0xc0, 0x6f, 0xb1, 0x37, 0x01, 0x02, 0xe4, 0xd9, 0x0f, 0x79, - 0x8a, 0x83, 0xfa, 0xeb, 0xee, 0xea, 0x9f, 0x99, 0x21, 0x77, 0xb3, 0xbb, 0x7e, 0xe2, 0x74, 0xd5, - 0x39, 0xa7, 0xaa, 0x4e, 0x9d, 0x3a, 0x75, 0xaa, 0xea, 0xab, 0x22, 0x54, 0x0c, 0xd7, 0xba, 0xec, - 0x7a, 0x4e, 0xe0, 0x20, 0xf0, 0x06, 0x76, 0x60, 0xf5, 0xf1, 0xe5, 0x27, 0xaf, 0xd6, 0x2f, 0x75, - 0xad, 0x60, 0x7f, 0xf0, 0xe8, 0x72, 0xc7, 0xe9, 0x5f, 0xe9, 0x3a, 0x5d, 0xe7, 0x0a, 0x25, 0x79, - 0x34, 0xd8, 0xa3, 0x5f, 0xf4, 0x83, 0xfe, 0x62, 0xac, 0xea, 0x45, 0x98, 0x7b, 0x1f, 0x7b, 0xbe, - 0xe5, 0xd8, 0x1a, 0xfe, 0xc6, 0x00, 0xfb, 0x01, 0x5a, 0x81, 0xe9, 0x27, 0x2c, 0x65, 0x45, 0x39, - 0xab, 0x9c, 0xaf, 0x68, 0xe2, 0x53, 0xfd, 0x43, 0x05, 0xe6, 0x43, 0x62, 0xdf, 0x75, 0x6c, 0x1f, - 0xe7, 0x53, 0xa3, 0x73, 0x30, 0xcb, 0xab, 0xa5, 0xdb, 0x46, 0x1f, 0xaf, 0x14, 0x68, 0xf6, 0x0c, - 0x4f, 0xdb, 0x32, 0xfa, 0x18, 0xbd, 0x04, 0xf3, 0x82, 0x44, 0x08, 0x29, 0x52, 0xaa, 0x39, 0x9e, - 0xcc, 0x4b, 0x43, 0x97, 0xe1, 0x98, 0x20, 0x34, 0x5c, 0x2b, 0x24, 0x2e, 0x51, 0xe2, 0x05, 0x9e, - 0xd5, 0x70, 0x2d, 0x4e, 0xaf, 0x7e, 0x0d, 0x2a, 0xeb, 0x5b, 0xed, 0x35, 0xc7, 0xde, 0xb3, 0xba, - 0xa4, 0x8a, 0x3e, 0xf6, 0x08, 0xcf, 0x8a, 0x72, 0xb6, 0x48, 0xaa, 0xc8, 0x3f, 0x51, 0x1d, 0xca, - 0x3e, 0x36, 0xbc, 0xce, 0x3e, 0xf6, 0x57, 0x0a, 0x34, 0x2b, 0xfc, 0x26, 0x5c, 0x8e, 0x1b, 0x58, - 0x8e, 0xed, 0xaf, 0x14, 0x19, 0x17, 0xff, 0x54, 0x7f, 0x5b, 0x81, 0x99, 0x96, 0xe3, 0x05, 0x9b, - 0x86, 0xeb, 0x5a, 0x76, 0x17, 0x5d, 0x85, 0x32, 0xd5, 0x65, 0xc7, 0xe9, 0x51, 0x1d, 0xcc, 0x5d, - 0x5b, 0xbc, 0x1c, 0x75, 0xc8, 0xe5, 0x16, 0xcf, 0xd3, 0x42, 0x2a, 0xf4, 0x02, 0xcc, 0x75, 0x1c, - 0x3b, 0x30, 0x2c, 0x1b, 0x7b, 0xba, 0xeb, 0x78, 0x01, 0x55, 0xce, 0xa4, 0x56, 0x0d, 0x53, 0x89, - 0x7c, 0x74, 0x12, 0x2a, 0xfb, 0x8e, 0x1f, 0x30, 0x8a, 0x22, 0xa5, 0x28, 0x93, 0x04, 0x9a, 0xb9, - 0x0c, 0xd3, 0x34, 0xd3, 0x72, 0xb9, 0x1a, 0xa6, 0xc8, 0x67, 0xd3, 0x55, 0x7f, 0x54, 0x84, 0xc9, - 0x4d, 0x67, 0x60, 0x07, 0x89, 0x62, 0x8c, 0x60, 0x9f, 0x77, 0x51, 0xac, 0x18, 0x23, 0xd8, 0x8f, - 0x8a, 0x21, 0x14, 0xac, 0x97, 0x58, 0x31, 0x24, 0xb3, 0x0e, 0x65, 0x0f, 0x1b, 0xa6, 0x63, 0xf7, - 0x0e, 0x68, 0x15, 0xca, 0x5a, 0xf8, 0x4d, 0xba, 0xcf, 0xc7, 0x3d, 0xcb, 0x1e, 0x3c, 0xd3, 0x3d, - 0xdc, 0x33, 0x1e, 0xe1, 0x1e, 0xad, 0x4a, 0x59, 0x9b, 0xe3, 0xc9, 0x1a, 0x4b, 0x45, 0xef, 0xc0, - 0x8c, 0xeb, 0x39, 0xae, 0xd1, 0x35, 0x88, 0x06, 0x57, 0x26, 0xa9, 0x92, 0x4e, 0xc5, 0x95, 0x44, - 0x2b, 0xdc, 0x8a, 0x68, 0xb4, 0x38, 0x03, 0x7a, 0x13, 0x66, 0x06, 0x96, 0xc9, 0xf5, 0xed, 0xaf, - 0x4c, 0x9d, 0x2d, 0x9e, 0x9f, 0xb9, 0x76, 0x3c, 0xce, 0xdf, 0x5c, 0xe7, 0xb9, 0x5a, 0x9c, 0x92, - 0x30, 0x76, 0x63, 0x8c, 0xd3, 0x43, 0x19, 0x63, 0x94, 0xd4, 0xe0, 0x70, 0x67, 0xe0, 0xf9, 0xd6, - 0x13, 0xac, 0x93, 0x06, 0xeb, 0x54, 0x03, 0x65, 0xda, 0xbc, 0x85, 0x30, 0x4b, 0xc3, 0x86, 0xb9, - 0x4d, 0x54, 0xf1, 0x32, 0x4c, 0x5a, 0x7d, 0xa3, 0x8b, 0x57, 0x2a, 0x67, 0x95, 0x54, 0x11, 0x24, - 0xa3, 0xed, 0xe2, 0x8e, 0xc6, 0x68, 0xd0, 0xf3, 0x30, 0x47, 0x7f, 0xe8, 0xfe, 0xe0, 0x11, 0xd3, - 0x3a, 0x50, 0xad, 0xcf, 0xd2, 0xd4, 0xf6, 0xe0, 0x11, 0xd1, 0xbc, 0xaa, 0x43, 0x25, 0xac, 0x5c, - 0xd4, 0xdb, 0x26, 0xed, 0xc3, 0x2a, 0xef, 0x6d, 0x93, 0x8c, 0xb2, 0xa8, 0x8f, 0x2d, 0x93, 0xf6, - 0x5f, 0x55, 0x9b, 0x09, 0xd3, 0x9a, 0x26, 0x5a, 0x82, 0xa9, 0x1e, 0xb6, 0xbb, 0xc1, 0x3e, 0xed, - 0xc0, 0xaa, 0xc6, 0xbf, 0xd4, 0xdf, 0x50, 0xa0, 0xba, 0xeb, 0x63, 0x8f, 0x0c, 0x45, 0xdf, 0x35, - 0x3a, 0x18, 0x5d, 0x82, 0x52, 0xdf, 0x31, 0x31, 0xb7, 0xe2, 0x13, 0xf1, 0x46, 0x84, 0x44, 0x9b, - 0x8e, 0x89, 0x35, 0x4a, 0x86, 0x2e, 0x40, 0x69, 0x60, 0x99, 0x6c, 0xe8, 0xe4, 0xaa, 0x95, 0x92, - 0x10, 0xd2, 0x2e, 0x21, 0x2d, 0x0e, 0x25, 0x25, 0x24, 0xea, 0x2f, 0x15, 0x98, 0x0f, 0x4b, 0xdb, - 0xa6, 0x63, 0x0e, 0xbd, 0x06, 0xd3, 0x36, 0x0e, 0x9e, 0x3a, 0xde, 0xe3, 0xd1, 0x75, 0x13, 0x94, - 0xe8, 0x65, 0x28, 0xba, 0x5c, 0x23, 0x43, 0x19, 0x08, 0x15, 0x21, 0xb6, 0xdc, 0x0e, 0xd5, 0xd0, - 0x70, 0x62, 0xcb, 0xed, 0x90, 0x11, 0x13, 0x18, 0x5e, 0x17, 0xd3, 0xfe, 0x60, 0xa3, 0xaf, 0xcc, - 0x12, 0x9a, 0x26, 0xba, 0x03, 0x73, 0x03, 0x1f, 0x7b, 0xb6, 0xaf, 0x0b, 0xff, 0x31, 0x49, 0x6d, - 0x42, 0x12, 0x2a, 0xe9, 0x5d, 0xab, 0x32, 0x86, 0x6d, 0xee, 0x60, 0x54, 0x80, 0xa6, 0x1d, 0xbc, - 0x71, 0xfd, 0x7d, 0xa3, 0x37, 0xc0, 0x68, 0x11, 0x26, 0x9f, 0x90, 0x1f, 0xb4, 0xe5, 0x45, 0x8d, - 0x7d, 0xa8, 0xdf, 0x9b, 0x84, 0x93, 0x0f, 0xc9, 0x18, 0x6b, 0x1b, 0xb6, 0xf9, 0xc8, 0x79, 0xd6, - 0x26, 0x26, 0x69, 0x05, 0x07, 0x6b, 0x8e, 0x1d, 0xe0, 0x67, 0x01, 0x7a, 0x00, 0x0b, 0xb6, 0x90, - 0x1f, 0x56, 0x44, 0xa1, 0x15, 0x39, 0x99, 0xd9, 0x3a, 0x56, 0xb8, 0x56, 0xb3, 0xe5, 0x04, 0x1f, - 0xdd, 0x8d, 0x46, 0xb9, 0x90, 0x53, 0x48, 0x37, 0xa8, 0xbd, 0x41, 0x6b, 0xc3, 0xa5, 0x08, 0x07, - 0x20, 0x64, 0xbc, 0x01, 0xc4, 0xef, 0xeb, 0x86, 0xaf, 0x93, 0x96, 0x52, 0x2d, 0xcf, 0x5c, 0x5b, - 0x92, 0xac, 0x20, 0x6c, 0xb0, 0x56, 0xf1, 0x06, 0x76, 0xc3, 0x27, 0x1a, 0x42, 0x37, 0xe8, 0x1c, - 0x42, 0xf8, 0xba, 0x9e, 0x33, 0x70, 0xe9, 0xf8, 0xcb, 0x67, 0x04, 0xca, 0x78, 0x9f, 0x50, 0xd2, - 0xa9, 0x85, 0xfb, 0x29, 0xdd, 0x73, 0x9c, 0x60, 0xcf, 0x17, 0xbe, 0x49, 0x24, 0x6b, 0x34, 0x15, - 0x5d, 0x81, 0x63, 0xfe, 0xc0, 0x75, 0x7b, 0xb8, 0x8f, 0xed, 0xc0, 0xe8, 0xb1, 0x82, 0x48, 0x9f, - 0x15, 0xcf, 0x17, 0x35, 0x14, 0xcf, 0xa2, 0x82, 0x7d, 0xf4, 0x08, 0xea, 0x19, 0x0c, 0xba, 0xeb, - 0xf4, 0xac, 0xce, 0xc1, 0xca, 0x0c, 0x35, 0xa0, 0xe7, 0x25, 0xd5, 0xa4, 0x64, 0xb4, 0x28, 0xad, - 0xb6, 0xe2, 0xe7, 0xe4, 0xa0, 0x55, 0x00, 0xd7, 0xb3, 0x9e, 0x58, 0x3d, 0xdc, 0xc5, 0xe6, 0xca, - 0x14, 0xad, 0x78, 0x2c, 0x05, 0xbd, 0x4e, 0xa6, 0xb4, 0x4e, 0xc7, 0xe9, 0xbb, 0xdc, 0xe1, 0x48, - 0x7d, 0x2a, 0x6c, 0xa1, 0xe5, 0x39, 0x7b, 0x56, 0x0f, 0x6b, 0x82, 0x16, 0xbd, 0x09, 0x65, 0xc3, - 0x75, 0x0d, 0xaf, 0xef, 0x78, 0xd4, 0xe5, 0x8c, 0xe0, 0x0b, 0x89, 0xd1, 0x75, 0x58, 0xe4, 0x32, - 0x74, 0x97, 0x65, 0x32, 0xbf, 0x35, 0x4d, 0x6c, 0xff, 0x6e, 0x61, 0x45, 0xd1, 0x10, 0xcf, 0xe7, - 0xbc, 0xd4, 0x83, 0xfd, 0xad, 0x02, 0xf3, 0x09, 0x99, 0xe8, 0x3d, 0x98, 0x15, 0x12, 0x82, 0x03, - 0x57, 0xb8, 0x9a, 0x97, 0x86, 0x54, 0xe3, 0x32, 0xff, 0xbb, 0x73, 0xe0, 0x62, 0x3a, 0x2d, 0x88, - 0x0f, 0xf4, 0x1c, 0x54, 0x7b, 0x4e, 0xc7, 0xe8, 0x51, 0xcf, 0xe8, 0xe1, 0x3d, 0x3e, 0x79, 0xcd, - 0x86, 0x89, 0x1a, 0xde, 0x53, 0xef, 0xc0, 0x4c, 0x4c, 0x00, 0x42, 0x30, 0xa7, 0xb1, 0xa2, 0xd6, - 0xf1, 0x9e, 0x31, 0xe8, 0x05, 0xb5, 0x09, 0x34, 0x07, 0xb0, 0x6b, 0x77, 0x48, 0xb0, 0x60, 0x63, - 0xb3, 0xa6, 0xa0, 0x2a, 0x54, 0x1e, 0x0a, 0x11, 0xb5, 0x82, 0xfa, 0xdd, 0x22, 0x1c, 0xa7, 0xc6, - 0xdd, 0x72, 0x4c, 0x3e, 0xda, 0x78, 0x64, 0xf1, 0x1c, 0x54, 0x3b, 0xb4, 0xfb, 0x75, 0xd7, 0xf0, - 0xb0, 0x1d, 0xf0, 0xf9, 0x75, 0x96, 0x25, 0xb6, 0x68, 0x1a, 0xd2, 0xa0, 0xe6, 0xf3, 0x16, 0xe9, - 0x1d, 0x36, 0x3a, 0xf9, 0x00, 0x92, 0x5a, 0x3d, 0x64, 0x30, 0x6b, 0xf3, 0x7e, 0x6a, 0x74, 0x4f, - 0xfb, 0x07, 0x7e, 0x27, 0xe8, 0x09, 0x8f, 0x7a, 0x39, 0x25, 0x2a, 0x59, 0xd9, 0xcb, 0x6d, 0xc6, - 0xb0, 0x61, 0x07, 0xde, 0x81, 0x26, 0xd8, 0xd1, 0xbb, 0x50, 0x76, 0x9e, 0x60, 0x6f, 0x1f, 0x1b, - 0xcc, 0x93, 0xcd, 0x5c, 0x7b, 0x2e, 0x25, 0x6a, 0x4d, 0x4c, 0x26, 0x1a, 0xf6, 0x9d, 0x81, 0xd7, - 0xc1, 0xbe, 0x16, 0x32, 0xa1, 0x06, 0x54, 0x3c, 0x91, 0xcc, 0x3d, 0xdd, 0x58, 0x12, 0x22, 0xae, - 0xfa, 0x2d, 0x98, 0x8d, 0x57, 0x0e, 0xd5, 0xa0, 0xf8, 0x18, 0x1f, 0x70, 0x65, 0x92, 0x9f, 0x91, - 0x0f, 0x64, 0x3d, 0xcc, 0x3e, 0x6e, 0x15, 0x6e, 0x28, 0xaa, 0x07, 0x28, 0x6a, 0xe9, 0x26, 0x0e, - 0x0c, 0xd3, 0x08, 0x0c, 0x84, 0xa0, 0x44, 0x63, 0x4e, 0x26, 0x82, 0xfe, 0x26, 0x52, 0x07, 0x7c, - 0x3a, 0xa8, 0x68, 0xe4, 0x27, 0x3a, 0x05, 0x95, 0xd0, 0xdb, 0xf1, 0xc0, 0x33, 0x4a, 0x20, 0x01, - 0xa0, 0x11, 0x04, 0xb8, 0xef, 0x06, 0x54, 0x31, 0x55, 0x4d, 0x7c, 0xaa, 0xbf, 0x36, 0x09, 0xb5, - 0x94, 0x2d, 0xdc, 0x82, 0x72, 0x9f, 0x17, 0xcf, 0xfd, 0xec, 0xaa, 0x14, 0x05, 0xa6, 0x2a, 0xa9, - 0x85, 0xf4, 0x24, 0xc8, 0x22, 0xb6, 0x16, 0x0b, 0x93, 0xc3, 0x6f, 0x66, 0xe4, 0x5d, 0xdd, 0xb4, - 0x3c, 0xdc, 0x09, 0x1c, 0xef, 0x80, 0x57, 0x74, 0xb6, 0xe7, 0x74, 0xd7, 0x45, 0x1a, 0xba, 0x0e, - 0x60, 0xda, 0xbe, 0x4e, 0x6d, 0xb8, 0xcb, 0xfb, 0x51, 0x9a, 0x64, 0xc3, 0x68, 0x58, 0xab, 0x98, - 0xb6, 0xcf, 0xab, 0x7c, 0x1b, 0xaa, 0x24, 0xb4, 0xd4, 0xfb, 0x22, 0x3e, 0x9a, 0xa4, 0xb6, 0xb4, - 0x2c, 0xd7, 0x3b, 0x0c, 0x74, 0xb5, 0x59, 0x37, 0xfa, 0xf0, 0xd1, 0x1d, 0x98, 0xa2, 0xd1, 0x9d, - 0x88, 0xc7, 0xce, 0x67, 0x37, 0x97, 0x5b, 0xdf, 0x43, 0x4a, 0xca, 0x8c, 0x8f, 0xf3, 0xa1, 0x6d, - 0x98, 0x31, 0x6c, 0xdb, 0x09, 0x0c, 0x36, 0xab, 0xb0, 0xe8, 0xec, 0xd2, 0x50, 0x31, 0x8d, 0x88, - 0x9e, 0xc9, 0x8a, 0x4b, 0x40, 0x6f, 0xc2, 0x24, 0x9d, 0x76, 0xf8, 0x3c, 0x71, 0x6e, 0xe4, 0xa0, - 0xd0, 0x18, 0x3d, 0x7a, 0x1b, 0xa6, 0x9f, 0x5a, 0xb6, 0xe9, 0x3c, 0xf5, 0xb9, 0x3f, 0x95, 0x4c, - 0xf8, 0x2b, 0x2c, 0x2b, 0xc5, 0x2c, 0x78, 0xea, 0x37, 0x61, 0x26, 0xd6, 0xbe, 0xc3, 0xd8, 0x6f, - 0xfd, 0x1d, 0xa8, 0x25, 0xdb, 0x74, 0x28, 0xfb, 0x1f, 0xc0, 0xa2, 0x36, 0xb0, 0xa3, 0xaa, 0x89, - 0x55, 0xdc, 0x75, 0x98, 0xe2, 0xd6, 0xc0, 0x8c, 0xf1, 0xd4, 0x30, 0xb5, 0x6a, 0x9c, 0x36, 0xbe, - 0x20, 0xdb, 0x37, 0x6c, 0xb3, 0x87, 0x3d, 0x5e, 0xa2, 0x58, 0x90, 0x3d, 0x60, 0xa9, 0xea, 0xdb, - 0x70, 0x3c, 0x51, 0x2c, 0x5f, 0x0f, 0x3e, 0x0f, 0x73, 0xae, 0x63, 0xea, 0x3e, 0x4b, 0x16, 0xf1, - 0x6a, 0x85, 0xd8, 0x8e, 0xa0, 0x6d, 0x9a, 0x84, 0xbd, 0x1d, 0x38, 0x6e, 0xba, 0xda, 0xe3, 0xb1, - 0xaf, 0xc0, 0x52, 0x92, 0x9d, 0x15, 0xaf, 0xbe, 0x0b, 0xcb, 0x1a, 0xee, 0x3b, 0x4f, 0xf0, 0x51, - 0x45, 0xd7, 0x61, 0x25, 0x2d, 0x80, 0x0b, 0xff, 0x00, 0x96, 0xa3, 0xd4, 0x76, 0x60, 0x04, 0x03, - 0xff, 0x50, 0xc2, 0xf9, 0x62, 0xf9, 0x91, 0xe3, 0xb3, 0x8e, 0x2c, 0x6b, 0xe2, 0x53, 0x5d, 0x86, - 0xc9, 0x96, 0x63, 0x36, 0x5b, 0x68, 0x0e, 0x0a, 0x96, 0xcb, 0x99, 0x0b, 0x96, 0xab, 0x76, 0xe2, - 0x65, 0x6e, 0xb1, 0xc8, 0x96, 0x15, 0x9d, 0x24, 0x45, 0x37, 0x60, 0xce, 0x30, 0x4d, 0x8b, 0x18, - 0x92, 0xd1, 0xd3, 0x2d, 0x57, 0x04, 0xe6, 0x0b, 0x89, 0xae, 0x6f, 0xb6, 0xb4, 0x6a, 0x44, 0xd8, - 0x74, 0x7d, 0xf5, 0x2e, 0x54, 0xa2, 0x45, 0xc0, 0xeb, 0xd1, 0xc2, 0xb7, 0x30, 0x3a, 0x5e, 0x0c, - 0x57, 0xc5, 0x5b, 0xa9, 0x49, 0x92, 0x57, 0xf3, 0x75, 0x80, 0xd0, 0xa9, 0x8a, 0x10, 0xf4, 0x78, - 0xa6, 0x48, 0x2d, 0x46, 0xa8, 0xfe, 0x4b, 0x29, 0xee, 0x64, 0x63, 0x4d, 0x36, 0xc3, 0x26, 0x9b, - 0x92, 0xd3, 0x2d, 0x1c, 0xd2, 0xe9, 0xbe, 0x0a, 0x93, 0x7e, 0x60, 0x04, 0x98, 0xc7, 0xfc, 0x27, - 0xb3, 0x19, 0x49, 0xc1, 0x58, 0x63, 0x94, 0xe8, 0x34, 0x40, 0xc7, 0xc3, 0x46, 0x80, 0x4d, 0xdd, - 0x60, 0xb3, 0x42, 0x51, 0xab, 0xf0, 0x94, 0x46, 0x40, 0xbc, 0x88, 0x58, 0xa5, 0x64, 0x4c, 0x84, - 0x39, 0xdd, 0x18, 0xad, 0x57, 0x42, 0xef, 0x35, 0x35, 0xd2, 0x7b, 0x71, 0x56, 0xee, 0xbd, 0x22, - 0x4f, 0x3c, 0x3d, 0xcc, 0x13, 0x33, 0xa6, 0x71, 0x3c, 0x71, 0x79, 0x98, 0x27, 0xe6, 0x62, 0x86, - 0x7b, 0xe2, 0x0c, 0x47, 0x52, 0xc9, 0x72, 0x24, 0x9f, 0xa7, 0xeb, 0xfc, 0x8b, 0x02, 0xac, 0xa4, - 0xc7, 0x33, 0xf7, 0x63, 0xd7, 0x61, 0xca, 0xa7, 0x29, 0xc3, 0xfd, 0x27, 0xe7, 0xe2, 0xb4, 0xe8, - 0x2e, 0x94, 0x2c, 0x7b, 0xcf, 0xe1, 0x03, 0xef, 0xf2, 0x50, 0x1e, 0x5e, 0xd2, 0xe5, 0xa6, 0xbd, - 0xe7, 0x30, 0x0d, 0x52, 0x5e, 0xf4, 0x10, 0x8e, 0x85, 0xab, 0x77, 0x5f, 0x67, 0x82, 0xb1, 0x88, - 0xf3, 0x24, 0x2b, 0x0d, 0xa3, 0x2a, 0x2e, 0x11, 0x45, 0x7c, 0x6d, 0xce, 0x46, 0x62, 0x1c, 0x42, - 0xee, 0x07, 0x46, 0xdf, 0x15, 0x16, 0x1b, 0x26, 0xd4, 0xdf, 0x84, 0x4a, 0x58, 0xfc, 0xa1, 0x74, - 0xd7, 0x84, 0xc5, 0xc4, 0x18, 0x61, 0x8b, 0xd5, 0x70, 0x50, 0x29, 0xe3, 0x0e, 0x2a, 0xf5, 0x17, - 0x4a, 0x7c, 0xa0, 0xdf, 0xb3, 0x7a, 0x01, 0xf6, 0x52, 0x03, 0xfd, 0x0d, 0x21, 0x97, 0x8d, 0xf2, - 0xb3, 0x43, 0xe4, 0xb2, 0xb5, 0x20, 0x1f, 0xb1, 0xef, 0xc3, 0x1c, 0x35, 0x71, 0xdd, 0xc7, 0x3d, - 0x1a, 0x2b, 0x71, 0x3d, 0x5e, 0xc9, 0x16, 0xc0, 0x4a, 0x67, 0x43, 0xa4, 0xcd, 0x39, 0x58, 0xdf, - 0x54, 0x7b, 0xf1, 0xb4, 0xfa, 0x1d, 0x40, 0x69, 0xa2, 0x43, 0x69, 0x70, 0x93, 0xf8, 0x4b, 0x3f, - 0xc8, 0x9c, 0xb9, 0xf7, 0x68, 0x35, 0x86, 0x5b, 0x1e, 0xab, 0xaa, 0xc6, 0x69, 0xd5, 0x7f, 0x2e, - 0x02, 0x44, 0x99, 0x5f, 0x70, 0x47, 0x79, 0x2b, 0x74, 0x58, 0x2c, 0xe2, 0x54, 0xb3, 0x45, 0x66, - 0xba, 0xaa, 0xa6, 0xec, 0xaa, 0x58, 0xec, 0xf9, 0x52, 0x8e, 0x80, 0x43, 0x3b, 0xa9, 0xe9, 0x2f, - 0x9a, 0x93, 0xba, 0x07, 0x4b, 0x49, 0x33, 0xe1, 0x1e, 0xea, 0x15, 0x98, 0xb4, 0x02, 0xdc, 0x67, - 0x9b, 0xda, 0x89, 0x4d, 0x91, 0x18, 0x39, 0x23, 0x52, 0xdf, 0x81, 0x25, 0xb9, 0xaf, 0x0e, 0x17, - 0xba, 0xa8, 0x0f, 0x93, 0xb1, 0x4f, 0xe4, 0x2a, 0xb9, 0x7d, 0x64, 0x6e, 0x2f, 0x25, 0x79, 0x18, - 0xa5, 0xfa, 0x63, 0x05, 0x8e, 0x27, 0xb2, 0x72, 0x06, 0xfe, 0xd7, 0x52, 0x03, 0x98, 0xf9, 0xd6, - 0xeb, 0x43, 0x4a, 0xf9, 0x0c, 0x47, 0xf1, 0x57, 0xa0, 0x2e, 0x77, 0x8f, 0xa4, 0xda, 0x9b, 0x89, - 0xa1, 0x7c, 0x6e, 0x64, 0xa5, 0xc3, 0xf1, 0xdc, 0x82, 0x93, 0x99, 0x82, 0xd3, 0x3a, 0x2f, 0x8e, - 0xa9, 0xf3, 0xff, 0x2c, 0xc4, 0x7d, 0x76, 0x23, 0x08, 0x3c, 0xeb, 0xd1, 0x20, 0xc0, 0x9f, 0x6e, - 0x50, 0xb5, 0x1e, 0x8e, 0x6c, 0xe6, 0x67, 0x5f, 0xc9, 0xe6, 0x8c, 0x4a, 0xcf, 0x1c, 0xe3, 0x6d, - 0x79, 0x8c, 0x97, 0xa8, 0xa8, 0x57, 0x47, 0x8a, 0x1a, 0x3a, 0xda, 0x3f, 0xcf, 0x41, 0xfc, 0x77, - 0x0a, 0xcc, 0x27, 0x7a, 0x05, 0xdd, 0x01, 0x30, 0xc2, 0xaa, 0x73, 0xfb, 0x38, 0x3b, 0xaa, 0x89, - 0x5a, 0x8c, 0x87, 0xcc, 0x89, 0x2c, 0x5e, 0xcc, 0x98, 0x13, 0x33, 0xe2, 0xc5, 0x30, 0x5c, 0xbc, - 0x1d, 0x2d, 0x76, 0xd9, 0x46, 0xac, 0x3a, 0x74, 0xb1, 0xcb, 0x78, 0x05, 0x8b, 0xfa, 0xeb, 0x05, - 0x58, 0xcc, 0x92, 0x8e, 0x5e, 0x84, 0x62, 0xc7, 0x1d, 0xf0, 0x96, 0x48, 0x27, 0x60, 0x6b, 0xee, - 0x60, 0xd7, 0x37, 0xba, 0x58, 0x23, 0x04, 0xe8, 0x0a, 0x4c, 0xf5, 0x71, 0xdf, 0xf1, 0x0e, 0x78, - 0xbd, 0xa5, 0xed, 0x86, 0x4d, 0x9a, 0xc3, 0xa8, 0x39, 0x19, 0xba, 0x16, 0x85, 0xd5, 0xac, 0xbe, - 0x2b, 0xd2, 0xea, 0x81, 0x65, 0x31, 0x96, 0x30, 0x96, 0xbe, 0x06, 0xd3, 0xae, 0xe7, 0x74, 0xb0, - 0xef, 0xf3, 0xdd, 0x90, 0x95, 0xc4, 0x91, 0x1c, 0xc9, 0xe2, 0x3c, 0x9c, 0x10, 0xdd, 0x02, 0x88, - 0x02, 0x28, 0x3e, 0x33, 0xd5, 0x73, 0xe3, 0x2d, 0x5f, 0x8b, 0x51, 0xab, 0x3f, 0x2c, 0xc0, 0x52, - 0xb6, 0xe6, 0xd0, 0xa5, 0xb8, 0x5e, 0x4e, 0x66, 0xa8, 0x5a, 0x56, 0xcf, 0x1b, 0x09, 0xf5, 0xac, - 0x66, 0x70, 0x64, 0x69, 0xe9, 0x66, 0x52, 0x4b, 0x67, 0x32, 0x18, 0xb3, 0x95, 0x75, 0x33, 0xa9, - 0xac, 0x2c, 0xd6, 0x6c, 0x9d, 0x35, 0x32, 0x74, 0x76, 0x2e, 0xab, 0x8d, 0xf9, 0xaa, 0xfb, 0x6b, - 0x05, 0x66, 0xe3, 0xf5, 0x92, 0x43, 0x56, 0x25, 0x11, 0xb2, 0xa2, 0x2d, 0x58, 0x30, 0xd9, 0xce, - 0xad, 0x6e, 0xd9, 0x01, 0xf6, 0xf6, 0x8c, 0x8e, 0x88, 0x0a, 0xcf, 0x65, 0xd8, 0x45, 0x53, 0xd0, - 0xb0, 0x8a, 0xd7, 0x38, 0x6f, 0x98, 0x4c, 0x5a, 0x10, 0xca, 0x11, 0x5e, 0x6b, 0x0c, 0x41, 0x31, - 0x26, 0xf5, 0x9f, 0x14, 0x38, 0x96, 0xa1, 0xe0, 0x11, 0x0d, 0xd9, 0xcd, 0x6f, 0xc8, 0xf9, 0xfc, - 0xae, 0x1b, 0xd9, 0x9e, 0x07, 0x19, 0xed, 0x19, 0x5f, 0x5e, 0xbc, 0x59, 0xbf, 0x54, 0xe0, 0x78, - 0x26, 0x55, 0xe6, 0xf6, 0xea, 0x35, 0x28, 0x7b, 0xcf, 0xf4, 0x47, 0x07, 0x01, 0xf6, 0xb3, 0x06, - 0xf6, 0x6e, 0xec, 0x9c, 0x66, 0xda, 0x7b, 0x76, 0x97, 0xd0, 0xa1, 0xeb, 0x50, 0xf1, 0x9e, 0xe9, - 0xd8, 0xf3, 0x1c, 0x4f, 0xf8, 0xa2, 0x5c, 0xa6, 0xb2, 0xf7, 0x6c, 0x83, 0x12, 0x92, 0x92, 0x02, - 0x51, 0x52, 0x69, 0x44, 0x49, 0x41, 0x54, 0x52, 0x10, 0x96, 0x34, 0x39, 0xa2, 0xa4, 0x80, 0x97, - 0xa4, 0xfe, 0x51, 0x01, 0x4e, 0x0d, 0x53, 0xd7, 0xa7, 0xa6, 0x88, 0x0d, 0x40, 0xde, 0x33, 0xdd, - 0x35, 0x3a, 0x8f, 0x71, 0xe0, 0xeb, 0xa6, 0xe7, 0xb8, 0x2e, 0x36, 0x47, 0x69, 0xa4, 0xe6, 0x3d, - 0x6b, 0x31, 0x8e, 0x75, 0xc6, 0x70, 0x24, 0xcd, 0x6c, 0x00, 0x0a, 0xd2, 0x45, 0x8f, 0x50, 0x51, - 0x2d, 0x48, 0x14, 0xad, 0x7e, 0x04, 0xb3, 0x71, 0x0f, 0x31, 0xc2, 0xf6, 0x6f, 0x43, 0x95, 0x7b, - 0x10, 0xbd, 0xe3, 0x0c, 0xec, 0x60, 0x94, 0xa2, 0x66, 0x39, 0xf5, 0x1a, 0x21, 0x56, 0xbf, 0x11, - 0x0e, 0xb7, 0xcf, 0xac, 0xc8, 0xff, 0x57, 0x80, 0x4a, 0x78, 0x8e, 0x4f, 0x66, 0x7a, 0x76, 0xda, - 0xcf, 0xfa, 0x9d, 0x1f, 0xeb, 0x3f, 0x90, 0xa3, 0x16, 0x16, 0xa7, 0xbe, 0x98, 0x89, 0x04, 0x18, - 0xb1, 0x30, 0xb9, 0x0a, 0x8b, 0x03, 0x1f, 0x7b, 0xba, 0xef, 0xe2, 0x8e, 0xb5, 0x67, 0x61, 0x53, - 0x67, 0xc5, 0x21, 0x5a, 0x1c, 0x22, 0x79, 0x6d, 0x91, 0x45, 0x65, 0x66, 0x2d, 0x65, 0x8e, 0x65, - 0x2e, 0x65, 0x3e, 0x69, 0x28, 0x73, 0x0d, 0xca, 0x5f, 0xc2, 0x07, 0x6c, 0xb1, 0x3f, 0x26, 0x9f, - 0xfa, 0x9d, 0x12, 0x2c, 0xe7, 0x1c, 0x03, 0xd1, 0x95, 0xa2, 0x3b, 0xd0, 0x5d, 0xec, 0x59, 0x8e, - 0x29, 0x7a, 0xad, 0xe3, 0x0e, 0x5a, 0x34, 0x01, 0x9d, 0x04, 0xf2, 0xa1, 0x7f, 0x63, 0xe0, 0xf0, - 0x60, 0xb4, 0xa8, 0x95, 0x3b, 0xee, 0xe0, 0xcb, 0xe4, 0x5b, 0xf0, 0xfa, 0xfb, 0x86, 0x87, 0x99, - 0xff, 0x60, 0xbc, 0x6d, 0x9a, 0x80, 0x5e, 0x85, 0xe3, 0x6c, 0x6e, 0xd4, 0x7b, 0x56, 0xdf, 0x22, - 0x5e, 0x36, 0x36, 0x34, 0x8a, 0x1a, 0x62, 0x99, 0x0f, 0x49, 0x5e, 0xd3, 0x66, 0x83, 0x41, 0x85, - 0xaa, 0xe3, 0xf4, 0x75, 0xbf, 0xe3, 0x78, 0x58, 0x37, 0xcc, 0x8f, 0xe8, 0x38, 0x28, 0x6a, 0x33, - 0x8e, 0xd3, 0x6f, 0x93, 0xb4, 0x86, 0xf9, 0x11, 0x3a, 0x03, 0x33, 0x1d, 0x77, 0xe0, 0xe3, 0x40, - 0x27, 0x7f, 0xe8, 0x66, 0x5d, 0x45, 0x03, 0x96, 0xb4, 0xe6, 0x0e, 0xfc, 0x18, 0x41, 0x9f, 0x2c, - 0xcf, 0xa6, 0xe3, 0x04, 0x9b, 0xb8, 0x4f, 0x4f, 0xd4, 0xf7, 0x07, 0x5d, 0xec, 0x1a, 0x5d, 0xcc, - 0xaa, 0x26, 0x76, 0xdc, 0xa4, 0x13, 0xf5, 0x07, 0x9c, 0x84, 0x56, 0x50, 0x9b, 0xdb, 0x8f, 0x7f, - 0xfa, 0xe8, 0x3d, 0x98, 0x1e, 0xd8, 0xd4, 0x00, 0x56, 0x2a, 0x94, 0xf7, 0xea, 0x18, 0x87, 0x6e, - 0x97, 0x77, 0x19, 0x0b, 0x3f, 0x03, 0xe4, 0x02, 0xd0, 0x2d, 0xa8, 0x73, 0x45, 0xf9, 0x4f, 0x0d, - 0x37, 0xa9, 0x2d, 0xa0, 0x2a, 0x58, 0x62, 0x14, 0xed, 0xa7, 0x86, 0x1b, 0xd7, 0x58, 0xfd, 0x16, - 0xcc, 0xc6, 0x85, 0x1e, 0xca, 0x96, 0xee, 0x42, 0x55, 0x6a, 0x24, 0xe9, 0x6d, 0xaa, 0x14, 0xdf, - 0xfa, 0xa6, 0x18, 0x5b, 0x65, 0x92, 0xd0, 0xb6, 0xbe, 0x49, 0x71, 0x10, 0xb4, 0x66, 0x54, 0x4e, - 0x49, 0x63, 0x1f, 0xaa, 0x01, 0x55, 0x09, 0x7a, 0x40, 0x5c, 0x32, 0xc5, 0x18, 0x70, 0x97, 0x4c, - 0x7e, 0x93, 0x34, 0xcf, 0xe9, 0x89, 0x1a, 0xd0, 0xdf, 0x24, 0x8d, 0x1e, 0x40, 0xb3, 0xe3, 0x34, - 0xfa, 0x9b, 0x16, 0x81, 0x9f, 0x70, 0x18, 0x53, 0x45, 0x63, 0x1f, 0xea, 0xef, 0x28, 0x00, 0x6b, - 0x86, 0x6b, 0x3c, 0xb2, 0x7a, 0x56, 0x70, 0x80, 0x2e, 0x40, 0xcd, 0x30, 0x4d, 0xbd, 0x23, 0x52, - 0x2c, 0x2c, 0x70, 0x65, 0xf3, 0x86, 0x69, 0xae, 0xc5, 0x92, 0xd1, 0xcb, 0xb0, 0x40, 0x1c, 0xaa, - 0x4c, 0xcb, 0x80, 0x66, 0x35, 0x92, 0x21, 0x11, 0xdf, 0x80, 0x15, 0x22, 0xd7, 0xe8, 0x3f, 0xb2, - 0xb0, 0x1d, 0xc8, 0x3c, 0x0c, 0x81, 0xb6, 0x64, 0x98, 0x66, 0x83, 0x65, 0xc7, 0x39, 0xd5, 0xdf, - 0x9b, 0x86, 0xd3, 0x72, 0x8f, 0x27, 0xd1, 0x20, 0xb7, 0x60, 0x36, 0x51, 0xdf, 0x14, 0x8e, 0x22, - 0x6a, 0xa1, 0x26, 0xd1, 0x26, 0xb0, 0x08, 0x85, 0x14, 0x16, 0x21, 0x13, 0x69, 0x52, 0xfc, 0x94, - 0x90, 0x26, 0xa5, 0x4f, 0x88, 0x34, 0x99, 0x3c, 0x2a, 0xd2, 0x64, 0x76, 0x6c, 0xa4, 0xc9, 0x8b, - 0xd4, 0xf5, 0x8a, 0x12, 0x69, 0x38, 0xc0, 0x7c, 0x42, 0x35, 0x94, 0x6e, 0x0b, 0xb0, 0x63, 0x02, - 0x91, 0x32, 0x7d, 0x18, 0x44, 0x4a, 0xf9, 0x88, 0x88, 0x94, 0x85, 0x4f, 0x05, 0x91, 0x72, 0x16, - 0x66, 0x6d, 0x47, 0xb7, 0xf1, 0x53, 0x9d, 0x74, 0xbd, 0x4f, 0x71, 0x2e, 0x65, 0x0d, 0x6c, 0x67, - 0x0b, 0x3f, 0x6d, 0x91, 0x14, 0x74, 0x0e, 0x66, 0xfb, 0x86, 0xff, 0x18, 0x9b, 0x14, 0x1a, 0xe2, - 0xaf, 0x54, 0xa9, 0xcd, 0xce, 0xb0, 0xb4, 0x16, 0x49, 0x42, 0x2f, 0x40, 0xd8, 0x56, 0x4e, 0x34, - 0x47, 0x89, 0xaa, 0x22, 0x95, 0x91, 0xc5, 0xd0, 0x2d, 0xf3, 0x47, 0x44, 0xb7, 0xd4, 0x0e, 0x83, - 0x6e, 0xb9, 0x04, 0x35, 0xf1, 0x5b, 0xc0, 0x5b, 0xd8, 0x69, 0x05, 0x45, 0xb6, 0xcc, 0x8b, 0x3c, - 0x01, 0x61, 0xc9, 0x03, 0xc3, 0xc0, 0x50, 0x30, 0xcc, 0x1f, 0x2b, 0x7c, 0xdd, 0x1c, 0x0e, 0x52, - 0x7e, 0x0a, 0x2f, 0x01, 0x28, 0x94, 0xa3, 0x00, 0x28, 0xd0, 0x4e, 0x2e, 0xc4, 0xe4, 0x42, 0xbe, - 0xa4, 0x51, 0x20, 0x13, 0xd5, 0x02, 0x24, 0x73, 0xd0, 0x81, 0xc2, 0x61, 0x14, 0x6c, 0xa6, 0xa6, - 0x30, 0x8a, 0x1a, 0x14, 0xbb, 0x1c, 0x58, 0x51, 0xd4, 0xc8, 0xcf, 0x3c, 0x0b, 0x2e, 0xe6, 0x59, - 0xb0, 0xba, 0x19, 0xae, 0x9e, 0x3f, 0x0d, 0xe4, 0x9f, 0xfa, 0x6f, 0x0a, 0x9c, 0xe6, 0xf2, 0x72, - 0xe0, 0x71, 0x19, 0x83, 0x56, 0xc9, 0x19, 0xb4, 0x1d, 0x0f, 0x9b, 0xd8, 0x0e, 0x2c, 0xa3, 0x47, - 0xe3, 0x31, 0x71, 0x20, 0x1e, 0x25, 0xd3, 0x90, 0xf0, 0x1c, 0xcc, 0x32, 0x10, 0x2d, 0x5f, 0x48, - 0x33, 0xac, 0xec, 0x0c, 0xc5, 0xd1, 0xf2, 0xb5, 0xf2, 0x76, 0x96, 0xa3, 0x2c, 0xe5, 0xee, 0xc0, - 0x8c, 0xf4, 0x97, 0xaa, 0x03, 0xcb, 0x39, 0xd0, 0x84, 0x4c, 0x8b, 0x50, 0xd2, 0x16, 0x31, 0x54, - 0x49, 0x69, 0x8b, 0xf8, 0x8e, 0x02, 0x67, 0x52, 0x0b, 0xfa, 0xcf, 0x5f, 0xb3, 0xea, 0x9f, 0x29, - 0xa1, 0xfd, 0x24, 0x47, 0xd7, 0x5a, 0x7a, 0x74, 0xbd, 0x30, 0x6c, 0x7f, 0x22, 0x73, 0x7c, 0xbd, - 0x9f, 0x3b, 0xbe, 0x5e, 0x1e, 0xba, 0xd7, 0x31, 0x4a, 0x9f, 0x7f, 0x50, 0x80, 0x13, 0xb9, 0x15, - 0x48, 0x84, 0xb7, 0x4a, 0x32, 0xbc, 0xe5, 0xa1, 0x71, 0xb4, 0x98, 0x61, 0xa1, 0x31, 0x5d, 0xaf, - 0xf0, 0x18, 0x54, 0xef, 0x1b, 0xcf, 0xac, 0xfe, 0xa0, 0xcf, 0x63, 0x63, 0x22, 0x6e, 0x93, 0xa5, - 0x1c, 0x25, 0x38, 0xbe, 0x02, 0x8b, 0x6c, 0xde, 0xa2, 0xf1, 0x59, 0xc4, 0xc1, 0x62, 0xe4, 0x05, - 0x96, 0x47, 0x42, 0x35, 0xc1, 0xf0, 0x00, 0xaa, 0xc6, 0xde, 0x9e, 0x65, 0x53, 0xb5, 0xb1, 0x58, - 0xb9, 0x98, 0x83, 0xad, 0x59, 0x73, 0x07, 0xd4, 0x15, 0x34, 0x38, 0xbd, 0x36, 0x2b, 0x38, 0x49, - 0x48, 0xad, 0x7e, 0x39, 0xb4, 0xf4, 0x24, 0x21, 0x3a, 0x01, 0x65, 0xd6, 0x52, 0x9f, 0x79, 0x88, - 0x92, 0x36, 0x4d, 0x9b, 0xe9, 0x3f, 0x16, 0x1a, 0x62, 0x13, 0x3a, 0x03, 0x46, 0x13, 0x5a, 0xca, - 0xaf, 0x36, 0x60, 0x21, 0xd4, 0xf9, 0x50, 0xdc, 0x58, 0x0c, 0x07, 0x56, 0x90, 0x71, 0x60, 0x36, - 0x4c, 0xad, 0xe3, 0x27, 0x56, 0x07, 0x7f, 0x2a, 0x48, 0xfb, 0xb3, 0x30, 0xe3, 0x62, 0xaf, 0x6f, - 0xf9, 0x7e, 0x18, 0x41, 0x55, 0xb4, 0x78, 0x92, 0x7a, 0x06, 0x2a, 0x6b, 0xeb, 0x4d, 0x5e, 0x64, - 0x46, 0x55, 0xd5, 0x7f, 0x9f, 0x82, 0xf9, 0xe4, 0x00, 0xb8, 0x99, 0xc2, 0xa5, 0x9d, 0xce, 0xdc, - 0xd3, 0xcc, 0xd8, 0xcc, 0x0f, 0x41, 0xed, 0x85, 0x31, 0x40, 0xed, 0x2b, 0x30, 0xdd, 0x71, 0xfa, - 0x7d, 0xc3, 0x36, 0xc5, 0x7d, 0x09, 0xfe, 0x49, 0x6a, 0x6a, 0x78, 0x5d, 0xb6, 0x8d, 0x5f, 0xd1, - 0xe8, 0x6f, 0x62, 0x9f, 0xc4, 0x53, 0x5b, 0x36, 0x45, 0xb6, 0x51, 0x13, 0xaa, 0x68, 0xc0, 0x93, - 0xd6, 0x2d, 0x0f, 0x9d, 0x87, 0x12, 0xb6, 0x9f, 0x08, 0x93, 0x91, 0xb6, 0x93, 0xc5, 0xfa, 0x53, - 0xa3, 0x14, 0xe8, 0x02, 0x4c, 0xf5, 0x89, 0xcd, 0x0b, 0xf4, 0xc3, 0x42, 0xea, 0x5e, 0x81, 0xc6, - 0x09, 0xd0, 0x2b, 0x30, 0x6d, 0x52, 0xed, 0x89, 0x05, 0x17, 0x92, 0x30, 0x72, 0x34, 0x4b, 0x13, - 0x24, 0xe8, 0xdd, 0xf0, 0x2c, 0xa3, 0x92, 0x3e, 0x64, 0x4c, 0xa8, 0x39, 0xf3, 0x18, 0x63, 0x4b, - 0xde, 0x10, 0x80, 0xf4, 0x89, 0x48, 0x52, 0xca, 0xf0, 0x6d, 0x81, 0x13, 0x50, 0xee, 0x39, 0x5d, - 0x66, 0x3d, 0x33, 0xec, 0xb2, 0x4d, 0xcf, 0xe9, 0x52, 0xe3, 0x59, 0x84, 0x49, 0x3f, 0x30, 0x2d, - 0x9b, 0xc6, 0xad, 0x65, 0x8d, 0x7d, 0x10, 0x0f, 0x42, 0x7f, 0xe8, 0x8e, 0xdd, 0xc1, 0x2b, 0x55, - 0x9a, 0x55, 0xa1, 0x29, 0xdb, 0x76, 0x87, 0xae, 0xdf, 0x83, 0xe0, 0x60, 0x65, 0x8e, 0xa6, 0x93, - 0x9f, 0xd1, 0x91, 0xc2, 0x7c, 0xce, 0x91, 0x42, 0xa2, 0xc2, 0x19, 0x47, 0x0a, 0xb5, 0xdc, 0x09, - 0x2d, 0xc9, 0x2b, 0x58, 0x48, 0xcc, 0xbe, 0xb6, 0xde, 0xd4, 0x45, 0xd7, 0x2c, 0xa4, 0xef, 0x08, - 0x84, 0x66, 0xaf, 0x41, 0xf8, 0xf3, 0x73, 0x3d, 0xd1, 0xf9, 0xa1, 0x02, 0x4b, 0x6b, 0xf4, 0x3c, - 0x3b, 0xe6, 0xb8, 0x0f, 0x03, 0x05, 0x7b, 0x2d, 0xc4, 0xe7, 0x65, 0x80, 0xac, 0x92, 0x9a, 0x12, - 0xf0, 0xbc, 0x35, 0x98, 0x13, 0x62, 0x39, 0x73, 0x71, 0x0c, 0x70, 0x5f, 0xd5, 0x8f, 0x7f, 0xaa, - 0xb7, 0x61, 0x39, 0x55, 0x73, 0x7e, 0xaa, 0x98, 0xbc, 0x4c, 0xc2, 0x2a, 0x1e, 0xbf, 0x4c, 0xa2, - 0xde, 0x82, 0xe3, 0xed, 0xc0, 0xf0, 0x82, 0x54, 0xb3, 0xc7, 0xe0, 0xa5, 0xb0, 0x3d, 0x99, 0x97, - 0x23, 0xeb, 0xda, 0xb0, 0xd8, 0x0e, 0x1c, 0xf7, 0x08, 0x42, 0x89, 0xdf, 0x21, 0x2d, 0x77, 0x06, - 0x62, 0x12, 0x14, 0x9f, 0xea, 0x32, 0x03, 0x19, 0xa6, 0x4b, 0x7b, 0x0b, 0x96, 0x18, 0xc6, 0xef, - 0x28, 0x8d, 0x38, 0x21, 0x10, 0x86, 0x69, 0xb9, 0xf7, 0xe1, 0x98, 0x74, 0xce, 0xc1, 0x31, 0x31, - 0x57, 0x65, 0x4c, 0x4c, 0xfe, 0x91, 0x52, 0x08, 0x89, 0xf9, 0xcd, 0x42, 0xcc, 0x8f, 0xe7, 0x1c, - 0x8c, 0xbf, 0x2e, 0x23, 0x62, 0xce, 0xe4, 0x4b, 0x95, 0x00, 0x31, 0x69, 0xeb, 0x2c, 0x66, 0x58, - 0xe7, 0x6e, 0xea, 0xd4, 0xbd, 0x94, 0x46, 0x34, 0x25, 0x6a, 0xf8, 0x99, 0x9c, 0xb7, 0x3f, 0x64, - 0xa8, 0x99, 0xb0, 0xe8, 0xf0, 0xa8, 0xfd, 0xb5, 0xc4, 0x51, 0xfb, 0xc9, 0x21, 0x35, 0x0d, 0x0f, - 0xd9, 0xbf, 0x5f, 0x82, 0x4a, 0x98, 0x97, 0xd2, 0x70, 0x5a, 0x55, 0x85, 0x0c, 0x55, 0xc5, 0xe7, - 0xd7, 0xe2, 0x11, 0xe7, 0xd7, 0xd2, 0x18, 0xf3, 0xeb, 0x49, 0xa8, 0xb0, 0x4b, 0x63, 0x1e, 0xde, - 0xe3, 0xf3, 0x65, 0x99, 0x26, 0x68, 0x78, 0x2f, 0x32, 0xb1, 0xa9, 0x31, 0x4d, 0x2c, 0x81, 0xd0, - 0x99, 0x4e, 0x22, 0x74, 0x6e, 0x86, 0x73, 0x5f, 0x39, 0x7d, 0x22, 0x16, 0x4a, 0xcc, 0x9c, 0xf5, - 0x12, 0xdb, 0xe0, 0x95, 0xf4, 0x36, 0x78, 0xc4, 0x3f, 0x72, 0xbe, 0x63, 0x4d, 0xb6, 0x4c, 0x7e, - 0x43, 0x6e, 0x9a, 0x7e, 0x37, 0xcd, 0xcf, 0xd3, 0xf5, 0x6f, 0x33, 0x44, 0x4e, 0xdc, 0x04, 0xb9, - 0xfb, 0x7c, 0x5d, 0x3a, 0x0c, 0x55, 0x32, 0xa6, 0xb1, 0xd0, 0x65, 0xc4, 0x0f, 0x40, 0x77, 0x61, - 0x29, 0x89, 0xe4, 0x3b, 0x94, 0xfb, 0xcb, 0x81, 0x14, 0xff, 0x2c, 0x1e, 0x0c, 0xe6, 0xe0, 0x67, - 0x6f, 0xa6, 0xa0, 0x1e, 0x63, 0x1b, 0xef, 0x55, 0x19, 0x15, 0x76, 0x68, 0x93, 0x4b, 0x81, 0xc2, - 0x68, 0xb0, 0x62, 0x78, 0x3c, 0x9b, 0x2d, 0x2a, 0x2a, 0x3c, 0xa5, 0x41, 0x57, 0x34, 0x24, 0xe2, - 0xf7, 0xf7, 0x59, 0xfe, 0x14, 0x5b, 0xd1, 0x88, 0xa4, 0x06, 0xdd, 0x3c, 0xc6, 0xcf, 0xac, 0x40, - 0xef, 0x38, 0x26, 0xa6, 0x06, 0x3d, 0xa9, 0x95, 0x49, 0xc2, 0x9a, 0x63, 0xe2, 0x68, 0xa8, 0x95, - 0x0f, 0x3b, 0xd4, 0x2a, 0x89, 0xa1, 0xb6, 0x04, 0x53, 0x1e, 0x36, 0x7c, 0xc7, 0xe6, 0x26, 0xc9, - 0xbf, 0x48, 0x47, 0xf4, 0xb1, 0xef, 0x93, 0x32, 0x78, 0x6c, 0xc6, 0x3f, 0x63, 0x71, 0xe4, 0xec, - 0x90, 0x38, 0x72, 0x08, 0x3a, 0x37, 0x11, 0x47, 0x56, 0x87, 0xc4, 0x91, 0x63, 0x81, 0x73, 0xa3, - 0x88, 0x79, 0x6e, 0x54, 0xc4, 0x1c, 0x0f, 0x39, 0xe7, 0xe5, 0x90, 0xf3, 0x76, 0x7c, 0x65, 0x5d, - 0x4b, 0x63, 0x15, 0x86, 0x2f, 0xa9, 0xe3, 0x63, 0x7b, 0x41, 0x1a, 0xdb, 0xe8, 0x12, 0xdf, 0xc1, - 0x47, 0xe9, 0xbd, 0x5f, 0x69, 0x2b, 0x8a, 0x6d, 0xee, 0x7f, 0x9e, 0xae, 0xe0, 0xef, 0x15, 0x58, - 0x4e, 0x0d, 0x5d, 0xee, 0x0c, 0x5e, 0x4b, 0x00, 0x88, 0x87, 0x22, 0x77, 0x05, 0x7e, 0xb8, 0x21, - 0xe1, 0x87, 0x2f, 0x0d, 0x63, 0xc9, 0x81, 0x0f, 0x1f, 0x1d, 0xd2, 0xfb, 0x6d, 0x05, 0x50, 0xc6, - 0x2e, 0xc4, 0x4d, 0xb1, 0x24, 0x38, 0xc4, 0xd6, 0x24, 0x5f, 0x15, 0xbc, 0x1b, 0xad, 0x0a, 0x0a, - 0x87, 0xd9, 0x79, 0x09, 0xb1, 0x46, 0x1b, 0x50, 0x95, 0x37, 0x1f, 0xaf, 0xcb, 0x95, 0x59, 0xcd, - 0xaf, 0x0c, 0x35, 0x10, 0x46, 0xac, 0xfe, 0xac, 0x00, 0x67, 0x76, 0x5d, 0x33, 0x11, 0xf2, 0xf2, - 0xc2, 0xc6, 0x77, 0xb5, 0x37, 0x65, 0xbc, 0xd5, 0x11, 0x35, 0x51, 0x3c, 0x8a, 0x26, 0xd0, 0xd7, - 0xb3, 0x10, 0x71, 0xb7, 0xa5, 0xb3, 0xeb, 0xe1, 0x0d, 0x1c, 0x01, 0x8e, 0xfb, 0xa4, 0x23, 0x41, - 0x85, 0xb3, 0xf9, 0x15, 0xe0, 0xe1, 0xf1, 0xff, 0x86, 0xf9, 0x8d, 0x67, 0xb8, 0xd3, 0x3e, 0xb0, - 0x3b, 0x87, 0xd0, 0x7a, 0x0d, 0x8a, 0x9d, 0xbe, 0xc9, 0x4f, 0xcd, 0xc8, 0xcf, 0x78, 0xc4, 0x5f, - 0x94, 0x23, 0x7e, 0x1d, 0x6a, 0x51, 0x09, 0x7c, 0x1c, 0x2e, 0x91, 0x71, 0x68, 0x12, 0x62, 0x22, - 0x7c, 0x56, 0xe3, 0x5f, 0x3c, 0x1d, 0x7b, 0xec, 0x86, 0x13, 0x4b, 0xc7, 0x9e, 0x27, 0x4f, 0x23, - 0x45, 0x79, 0x1a, 0x51, 0xbf, 0xab, 0xc0, 0x0c, 0x29, 0xe1, 0x13, 0xd5, 0x9f, 0x2f, 0xbb, 0x8b, - 0xd1, 0xb2, 0x3b, 0x5c, 0xbd, 0x97, 0xe2, 0xab, 0xf7, 0xa8, 0xe6, 0x93, 0x34, 0x39, 0x5d, 0xf3, - 0xa9, 0x30, 0x1d, 0x7b, 0x9e, 0x7a, 0x16, 0x66, 0x59, 0xdd, 0x78, 0xcb, 0x6b, 0x50, 0x1c, 0x78, - 0x3d, 0xd1, 0x7f, 0x03, 0xaf, 0xa7, 0x7e, 0x4b, 0x81, 0x6a, 0x23, 0x08, 0x8c, 0xce, 0xfe, 0x21, - 0x1a, 0x10, 0x56, 0xae, 0x10, 0xaf, 0x5c, 0xba, 0x11, 0x51, 0x75, 0x4b, 0x39, 0xd5, 0x9d, 0x94, - 0xaa, 0xab, 0xc2, 0x9c, 0xa8, 0x4b, 0x6e, 0x85, 0xb7, 0x00, 0xb5, 0x1c, 0x2f, 0xb8, 0xe7, 0x78, - 0x4f, 0x0d, 0xcf, 0x3c, 0xdc, 0x0a, 0x1b, 0x41, 0x89, 0x3f, 0xad, 0x51, 0x3c, 0x3f, 0xa9, 0xd1, - 0xdf, 0xea, 0x4b, 0x70, 0x4c, 0x92, 0x97, 0x5b, 0xf0, 0x2d, 0x98, 0xa1, 0x61, 0x01, 0x5f, 0x7c, - 0xbd, 0x1c, 0x07, 0x7c, 0x8c, 0x08, 0x1f, 0xd4, 0x75, 0x58, 0x20, 0x01, 0x22, 0x4d, 0x0f, 0xfd, - 0xcb, 0x95, 0xc4, 0xfa, 0x64, 0x39, 0x25, 0x22, 0xb1, 0x36, 0xf9, 0x85, 0x02, 0x93, 0x0c, 0xdb, - 0x91, 0x0c, 0xda, 0x4e, 0x92, 0x89, 0xd7, 0x75, 0xf4, 0xc0, 0xe8, 0x86, 0xcf, 0x96, 0x90, 0x84, - 0x1d, 0xa3, 0x4b, 0x4f, 0xe1, 0x68, 0xa6, 0x69, 0x75, 0xb1, 0x1f, 0x88, 0x93, 0xe3, 0x19, 0x92, - 0xb6, 0xce, 0x92, 0x88, 0x62, 0xe8, 0x01, 0x7b, 0x89, 0xee, 0x96, 0xd2, 0xdf, 0xe8, 0x3c, 0x3b, - 0xd5, 0x19, 0x7e, 0x5c, 0x4a, 0x4f, 0x7b, 0xea, 0x50, 0x4e, 0x9c, 0x73, 0x86, 0xdf, 0xe8, 0x02, - 0x94, 0xe8, 0x46, 0xfe, 0xf4, 0x30, 0x2d, 0x51, 0x12, 0x62, 0x15, 0xae, 0x65, 0xdb, 0xd8, 0xe4, - 0x6f, 0x6a, 0xf0, 0x2f, 0xf5, 0x5d, 0x40, 0x71, 0xe5, 0xf1, 0x0e, 0xba, 0x00, 0x53, 0x54, 0xb7, - 0x22, 0xaa, 0x5e, 0x48, 0x89, 0xd6, 0x38, 0x81, 0xfa, 0x35, 0x40, 0xac, 0x2c, 0x29, 0x92, 0x3e, - 0x4c, 0x07, 0x0e, 0x89, 0xa9, 0x7f, 0xa0, 0xc0, 0x31, 0x49, 0x3a, 0xaf, 0xdf, 0x4b, 0xb2, 0xf8, - 0x8c, 0xea, 0x71, 0xd1, 0x6f, 0x4b, 0x13, 0xfc, 0x85, 0x74, 0x35, 0xfe, 0x87, 0x26, 0xf7, 0x7f, - 0x50, 0x00, 0x1a, 0x83, 0x60, 0x9f, 0x6f, 0x0a, 0xc7, 0x3b, 0x51, 0x49, 0x74, 0x62, 0x1d, 0xca, - 0xae, 0xe1, 0xfb, 0x4f, 0x1d, 0x4f, 0x2c, 0x78, 0xc3, 0x6f, 0xba, 0x95, 0x3b, 0xe0, 0x0f, 0x89, - 0x54, 0x34, 0xfa, 0x1b, 0xbd, 0x00, 0x73, 0xec, 0x3d, 0x1d, 0xdd, 0x30, 0x4d, 0x4f, 0x80, 0x48, - 0x2b, 0x5a, 0x95, 0xa5, 0x36, 0x58, 0x22, 0x21, 0xb3, 0xe8, 0xb1, 0x4e, 0x70, 0xa0, 0x07, 0xce, - 0x63, 0x6c, 0xf3, 0x45, 0x6c, 0x55, 0xa4, 0xee, 0x90, 0x44, 0x76, 0x44, 0xdc, 0xb5, 0xfc, 0xc0, - 0x13, 0x64, 0xe2, 0x30, 0x9d, 0xa7, 0x52, 0x32, 0xf5, 0x4f, 0x14, 0xa8, 0xb5, 0x06, 0xbd, 0x1e, - 0x53, 0xee, 0x51, 0x3a, 0xf9, 0x22, 0x6f, 0x4a, 0x21, 0x6d, 0xf2, 0x91, 0xa2, 0x78, 0x13, 0x3f, - 0x95, 0x7d, 0xb7, 0xab, 0xb0, 0x10, 0xab, 0x31, 0x37, 0x1c, 0x69, 0xa9, 0xa1, 0xc8, 0x4b, 0x0d, - 0xb5, 0x01, 0x88, 0x6d, 0x35, 0x1d, 0xb9, 0x95, 0xea, 0x71, 0x38, 0x26, 0x89, 0xe0, 0x53, 0xf1, - 0x45, 0xa8, 0x72, 0x40, 0x23, 0x37, 0x88, 0x13, 0x50, 0x26, 0x2e, 0xb5, 0x63, 0x99, 0x02, 0x39, - 0x33, 0xed, 0x3a, 0xe6, 0x9a, 0x65, 0x7a, 0xea, 0x97, 0xa1, 0xca, 0x5f, 0x4c, 0xe0, 0xb4, 0x77, - 0x60, 0x8e, 0x1f, 0xb4, 0xea, 0xd2, 0x15, 0xe3, 0x13, 0x19, 0xa8, 0x59, 0xa1, 0x0a, 0x3b, 0xfe, - 0xa9, 0x7e, 0x1d, 0xea, 0x2c, 0x5a, 0x90, 0x04, 0x8b, 0x06, 0xde, 0x01, 0x01, 0x5a, 0x1b, 0x22, - 0x5f, 0xe6, 0xac, 0x7a, 0xf1, 0x4f, 0xf5, 0x34, 0x9c, 0xcc, 0x94, 0xcf, 0x5b, 0xef, 0x42, 0x2d, - 0xca, 0x60, 0xf7, 0x60, 0x43, 0x38, 0x90, 0x12, 0x83, 0x03, 0x2d, 0x85, 0x21, 0x7c, 0x41, 0xcc, - 0x5c, 0x34, 0x4a, 0x8f, 0x96, 0x80, 0xc5, 0xbc, 0x25, 0x60, 0x49, 0x5a, 0x02, 0xaa, 0x9b, 0xa1, - 0x0e, 0xf9, 0x42, 0xfc, 0x36, 0xdd, 0x2a, 0x60, 0x65, 0x0b, 0xa7, 0x76, 0x2a, 0xbb, 0x7d, 0x8c, - 0x48, 0x8b, 0xd1, 0xab, 0x17, 0xa0, 0x2a, 0xbb, 0xb7, 0x98, 0xc7, 0x52, 0x64, 0x8f, 0xf5, 0x7f, - 0x60, 0x49, 0x93, 0x10, 0x80, 0xf7, 0xb0, 0x11, 0x0c, 0x3c, 0xec, 0xa3, 0xb7, 0xa0, 0x9e, 0xf1, - 0xc4, 0x91, 0xce, 0x57, 0x86, 0x4c, 0xcc, 0x72, 0xea, 0xa5, 0xa3, 0x4d, 0xb6, 0x2e, 0x7c, 0x09, - 0xe6, 0x29, 0x42, 0x31, 0x76, 0xb3, 0x97, 0xe9, 0x88, 0xbe, 0x7d, 0xb3, 0x15, 0x5d, 0xe3, 0x35, - 0xc3, 0xf7, 0x36, 0x78, 0xf9, 0x99, 0x67, 0x6c, 0xef, 0x40, 0x79, 0x8f, 0xd7, 0x8b, 0x0f, 0x48, - 0x35, 0x43, 0x19, 0x89, 0x16, 0x68, 0x21, 0x8f, 0xba, 0x0d, 0xf3, 0x9c, 0x26, 0x6c, 0xde, 0xed, - 0xa1, 0xa0, 0x18, 0xd6, 0xbc, 0x5c, 0xb8, 0x8b, 0xfa, 0x83, 0x02, 0xcc, 0x25, 0x7c, 0xfc, 0xab, - 0x89, 0x05, 0x5d, 0x96, 0x39, 0x26, 0x96, 0x73, 0x37, 0x24, 0x6f, 0x2f, 0x43, 0x70, 0x86, 0x5f, - 0x02, 0xdd, 0x80, 0x5a, 0x02, 0xcf, 0x29, 0xb0, 0xdc, 0xf5, 0x7c, 0xc5, 0x68, 0xf3, 0x32, 0xd8, - 0xd3, 0x47, 0x6f, 0xc6, 0xf4, 0x5a, 0x4a, 0x2f, 0x43, 0x13, 0x3a, 0x8b, 0x14, 0x7a, 0xf4, 0x89, - 0x66, 0x91, 0x4f, 0xbf, 0xf7, 0x7c, 0xc2, 0xcf, 0xed, 0x53, 0x7d, 0x0e, 0x66, 0x76, 0xf3, 0x9e, - 0x34, 0x2a, 0x09, 0x98, 0xe8, 0x1b, 0xb0, 0x78, 0xcf, 0xea, 0x61, 0xff, 0xc0, 0x0f, 0x70, 0xbf, - 0x49, 0x67, 0x85, 0x3d, 0x0b, 0x7b, 0x68, 0x15, 0x80, 0x1a, 0xa5, 0xeb, 0x58, 0xe1, 0x13, 0x2b, - 0xb1, 0x14, 0xf5, 0xa7, 0x0a, 0xcc, 0x47, 0x8c, 0xe3, 0x60, 0x81, 0x5f, 0x87, 0xc9, 0x3d, 0x5f, - 0x6c, 0xe8, 0x26, 0x8e, 0xb9, 0xb2, 0xaa, 0xa0, 0x95, 0xf6, 0xfc, 0xa6, 0x89, 0xde, 0x00, 0x18, - 0xf8, 0xd8, 0xe4, 0xc7, 0xde, 0x23, 0xd0, 0xd9, 0x15, 0x42, 0xca, 0xce, 0xc1, 0x6f, 0xc0, 0x8c, - 0x65, 0x3b, 0x26, 0xa6, 0x90, 0x08, 0x73, 0x14, 0x32, 0x1b, 0x18, 0xed, 0xae, 0x8f, 0x4d, 0xf5, - 0xf7, 0x23, 0x60, 0xc3, 0x17, 0xb9, 0x85, 0xea, 0x9f, 0x8a, 0xb8, 0x48, 0x74, 0x3b, 0x1f, 0x33, - 0x0f, 0x60, 0x81, 0x4d, 0x6f, 0x7b, 0x61, 0x99, 0x99, 0x57, 0xd6, 0x12, 0x8d, 0xd3, 0x6a, 0x16, - 0x8f, 0x88, 0x05, 0x13, 0x6a, 0xc1, 0xf1, 0x68, 0xa1, 0x12, 0x97, 0x56, 0x18, 0x2d, 0x6d, 0xb1, - 0x13, 0xdb, 0xff, 0x17, 0x8c, 0xea, 0x2d, 0x38, 0x9e, 0xb8, 0x95, 0x32, 0xfe, 0x21, 0xd0, 0x7b, - 0x89, 0x2d, 0xdb, 0xc8, 0x4b, 0x5c, 0x95, 0x2f, 0x43, 0x0e, 0xbb, 0x3f, 0xc4, 0xef, 0xe5, 0xed, - 0xc2, 0x09, 0x69, 0x3f, 0x59, 0xaa, 0xcb, 0x8d, 0xc4, 0xb2, 0xe1, 0x6c, 0xbe, 0xbc, 0xc4, 0xfa, - 0xe1, 0x3f, 0x14, 0x58, 0xcc, 0x22, 0x38, 0xe2, 0x31, 0xc7, 0x87, 0x39, 0x17, 0xa9, 0x5f, 0x1b, - 0x55, 0xa1, 0xcf, 0xe4, 0x58, 0x68, 0x8b, 0x5d, 0xc3, 0x1c, 0xdd, 0x27, 0xc5, 0xf1, 0xfa, 0xe4, - 0x17, 0x85, 0xd8, 0x51, 0xde, 0x90, 0xab, 0x92, 0x9f, 0x60, 0xff, 0x7c, 0x2d, 0x71, 0x53, 0xf2, - 0xe5, 0x4c, 0xc6, 0x11, 0x17, 0x25, 0xb5, 0xac, 0x6d, 0xa1, 0xab, 0xa3, 0x24, 0x7d, 0x61, 0xef, - 0x49, 0xfe, 0x56, 0x01, 0xe6, 0xe4, 0x0e, 0x41, 0xef, 0x66, 0x5c, 0x93, 0x3c, 0x33, 0xa2, 0x81, - 0xd2, 0x2d, 0x49, 0x7e, 0x2d, 0xb1, 0x30, 0xfe, 0xb5, 0xc4, 0xe2, 0x78, 0xd7, 0x12, 0xef, 0xc2, - 0xdc, 0x53, 0xcf, 0x0a, 0x8c, 0x47, 0x3d, 0xac, 0xf7, 0x8c, 0x03, 0xec, 0x65, 0xcd, 0xb0, 0x49, - 0x57, 0x54, 0x15, 0x2c, 0x0f, 0x09, 0x07, 0x5d, 0x30, 0x3f, 0x35, 0x5c, 0xbe, 0xee, 0x96, 0x42, - 0xf9, 0xf6, 0x53, 0xc3, 0x65, 0x3c, 0x94, 0x44, 0xfd, 0x56, 0x01, 0x8e, 0x67, 0x5e, 0xa6, 0xfb, - 0xe4, 0x2a, 0xba, 0x14, 0x57, 0xd1, 0x61, 0x6e, 0x28, 0x16, 0x0f, 0x75, 0x43, 0xb1, 0x99, 0xa3, - 0xb0, 0x2c, 0xac, 0xc8, 0x70, 0xbd, 0xa9, 0x7f, 0xa9, 0x40, 0x59, 0x54, 0x6a, 0xe4, 0x7d, 0xc1, - 0xe5, 0x01, 0x21, 0xd3, 0xe9, 0x9d, 0x0e, 0xdb, 0xb0, 0x1d, 0xdd, 0xc7, 0x24, 0x96, 0x1e, 0x79, - 0x3b, 0x6b, 0x91, 0xf2, 0xad, 0x39, 0x1e, 0xde, 0x32, 0x6c, 0xa7, 0xcd, 0x98, 0x50, 0x03, 0x6a, - 0x4c, 0x1e, 0x15, 0x45, 0x84, 0x8e, 0x9c, 0x28, 0xe7, 0x28, 0x03, 0x11, 0x42, 0x84, 0xf9, 0xea, - 0xdf, 0x28, 0x30, 0x9f, 0xd0, 0xec, 0xaf, 0x5e, 0x23, 0xbe, 0x57, 0x84, 0x99, 0x58, 0x2f, 0x8f, - 0x68, 0xc0, 0x1a, 0x2c, 0x08, 0xbc, 0x97, 0x8f, 0x83, 0xf1, 0x6e, 0xc7, 0xcd, 0x73, 0x8e, 0x36, - 0x0e, 0x58, 0x1c, 0x75, 0x07, 0xe6, 0x8d, 0x27, 0x86, 0xd5, 0xa3, 0x16, 0x34, 0x56, 0x88, 0x32, - 0x17, 0xd2, 0x87, 0x91, 0x18, 0x6b, 0xf7, 0x58, 0x77, 0xe4, 0x80, 0xd2, 0x46, 0x57, 0x15, 0x7d, - 0x3f, 0x86, 0x78, 0x1c, 0x7a, 0x55, 0xd1, 0xf7, 0xc3, 0xf2, 0xe8, 0x85, 0x16, 0x7a, 0x47, 0xd3, - 0xe7, 0x0f, 0xfb, 0xe4, 0x97, 0x47, 0x68, 0xef, 0x51, 0x52, 0xa2, 0xb0, 0xbe, 0xf1, 0x91, 0xe3, - 0xe9, 0x71, 0xfe, 0xe9, 0x11, 0x0a, 0xa3, 0x1c, 0xad, 0x50, 0x88, 0xfa, 0xe7, 0x0a, 0x54, 0x42, - 0x3f, 0x32, 0xa2, 0x87, 0x9a, 0xb0, 0x48, 0x6f, 0xff, 0x24, 0x35, 0x3c, 0xa2, 0x93, 0x10, 0x61, - 0x6a, 0xc8, 0x5a, 0x6e, 0x40, 0x8d, 0x8a, 0x8a, 0xab, 0x7a, 0x54, 0x47, 0xf9, 0xa2, 0x9a, 0x2c, - 0xa0, 0xfc, 0xab, 0x02, 0xa0, 0xb4, 0x2b, 0xf9, 0x95, 0x31, 0xb2, 0x78, 0xa7, 0x95, 0xc6, 0xef, - 0xf4, 0xfb, 0x70, 0xac, 0xe3, 0xf4, 0xfb, 0x16, 0xbd, 0x39, 0xe6, 0x78, 0x07, 0xe3, 0x99, 0xdb, - 0x02, 0xe3, 0x61, 0x7a, 0x62, 0xea, 0x7b, 0x07, 0x4e, 0x68, 0xd8, 0x71, 0xb1, 0x1d, 0xba, 0xfe, - 0x87, 0x4e, 0xf7, 0x10, 0xf1, 0xed, 0x29, 0xa8, 0x67, 0xf1, 0xf3, 0xfd, 0x93, 0x01, 0xd4, 0xd7, - 0xf6, 0x71, 0xe7, 0x31, 0x5d, 0x7e, 0x1d, 0x05, 0xb3, 0x55, 0x87, 0x72, 0xcf, 0xe9, 0xb0, 0xc7, - 0xa0, 0xf9, 0x16, 0xa3, 0xf8, 0x1e, 0x72, 0xba, 0x73, 0x1a, 0x4e, 0x66, 0x16, 0xcb, 0x6b, 0x85, - 0xa0, 0x76, 0x1f, 0x07, 0x1b, 0x4f, 0xb0, 0x1d, 0x86, 0xcf, 0xea, 0x8f, 0x0b, 0xb1, 0x40, 0x9d, - 0x66, 0x1d, 0x02, 0xeb, 0x86, 0x5a, 0x10, 0xad, 0x1c, 0x74, 0x4c, 0xb8, 0xd9, 0x9b, 0xa5, 0xec, - 0x45, 0xe1, 0xec, 0xc3, 0x6e, 0x5a, 0x08, 0x7d, 0xaa, 0x34, 0x7a, 0x8d, 0x29, 0x4c, 0x4b, 0x40, - 0x20, 0x8a, 0x49, 0x08, 0xc4, 0x7b, 0x80, 0xe2, 0xa1, 0x38, 0xdf, 0x6e, 0x28, 0x8d, 0xf1, 0x00, - 0x55, 0xcd, 0x4d, 0x3e, 0x95, 0x96, 0xf3, 0x8c, 0xd4, 0xe4, 0x91, 0x9e, 0x91, 0x52, 0x57, 0xe1, - 0x14, 0x09, 0xb0, 0x37, 0x71, 0xe0, 0x59, 0x9d, 0x75, 0xec, 0x77, 0x3c, 0xcb, 0x0d, 0x9c, 0x10, - 0x7e, 0xa5, 0xea, 0x70, 0x3a, 0x27, 0x9f, 0xab, 0xfb, 0x1d, 0x98, 0x31, 0xa3, 0xe4, 0xac, 0x1d, - 0xaf, 0x24, 0xaf, 0x16, 0x67, 0x50, 0x3f, 0x80, 0x5a, 0x92, 0x20, 0x73, 0x27, 0x09, 0x41, 0x69, - 0x1f, 0xf7, 0x5c, 0x71, 0xd5, 0x8f, 0xfc, 0x26, 0x5a, 0x67, 0x6b, 0x97, 0xc7, 0xf8, 0x40, 0x9c, - 0x88, 0x54, 0x68, 0xca, 0x97, 0xf0, 0x41, 0xd8, 0x36, 0xe9, 0x5d, 0x13, 0xcf, 0xea, 0x24, 0xdb, - 0x96, 0x91, 0x1f, 0xb5, 0x8d, 0x74, 0x5b, 0x9f, 0x25, 0xf3, 0xb6, 0x9d, 0xce, 0x7d, 0x33, 0x85, - 0xf2, 0x82, 0xeb, 0x98, 0xfc, 0xb7, 0xfa, 0x7d, 0x05, 0x16, 0x52, 0x14, 0x63, 0x9e, 0x72, 0xbd, - 0x02, 0xd3, 0xa2, 0xdc, 0x42, 0x1a, 0xd2, 0xcc, 0x64, 0x69, 0x82, 0x04, 0x35, 0x61, 0x21, 0xb2, - 0x68, 0xc1, 0x57, 0x4c, 0xf7, 0x45, 0x7c, 0xe1, 0x42, 0xab, 0x5b, 0xeb, 0x24, 0x52, 0xd4, 0x0e, - 0xd4, 0x92, 0x54, 0xe3, 0x8c, 0xa9, 0x43, 0xd5, 0x57, 0xfd, 0x91, 0x02, 0x53, 0x2c, 0x2d, 0xb3, - 0xb3, 0xa5, 0xe9, 0xa0, 0x90, 0x9c, 0x0e, 0xde, 0x84, 0x19, 0x26, 0x47, 0x0f, 0x2f, 0x7a, 0xce, - 0xc9, 0x1b, 0xfd, 0x4c, 0x34, 0x1d, 0xad, 0xd0, 0x0f, 0x7f, 0x93, 0x66, 0x30, 0x7b, 0xa1, 0x2b, - 0x13, 0x01, 0x5c, 0x9f, 0xa1, 0x69, 0xd4, 0xe5, 0x92, 0x90, 0x99, 0xaf, 0x61, 0x46, 0xf8, 0x66, - 0xbe, 0xb5, 0xb5, 0x44, 0x5f, 0xe9, 0x4c, 0x6d, 0x75, 0xab, 0x3b, 0xf4, 0x19, 0xcd, 0xf4, 0x16, - 0x35, 0x7a, 0x4b, 0x06, 0x3a, 0xbc, 0x90, 0xc2, 0x1a, 0x48, 0x6c, 0x03, 0x8f, 0x3d, 0x9a, 0xcf, - 0xf1, 0x0e, 0x1f, 0xc2, 0x89, 0x5c, 0x1a, 0xf4, 0x76, 0xf8, 0x66, 0xb1, 0xe9, 0x59, 0x4f, 0xf8, - 0xc6, 0xc2, 0x9c, 0xfc, 0x3e, 0xca, 0x1a, 0x25, 0x58, 0xa7, 0xf9, 0xe2, 0x35, 0x63, 0xf6, 0x75, - 0xf1, 0x45, 0x28, 0x8b, 0x7f, 0x68, 0x80, 0xa6, 0xa1, 0xb8, 0xb3, 0xd6, 0xaa, 0x4d, 0x90, 0x1f, - 0xbb, 0xeb, 0xad, 0x9a, 0x82, 0xca, 0x50, 0x6a, 0xaf, 0xed, 0xb4, 0x6a, 0x85, 0x8b, 0x7d, 0xa8, - 0x25, 0xdf, 0xf4, 0x47, 0xcb, 0x70, 0xac, 0xa5, 0x6d, 0xb7, 0x1a, 0xf7, 0x1b, 0x3b, 0xcd, 0xed, - 0x2d, 0xbd, 0xa5, 0x35, 0xdf, 0x6f, 0xec, 0x6c, 0xd4, 0x26, 0xd0, 0x39, 0x38, 0x1d, 0xcf, 0x78, - 0xb0, 0xdd, 0xde, 0xd1, 0x77, 0xb6, 0xf5, 0xb5, 0xed, 0xad, 0x9d, 0x46, 0x73, 0x6b, 0x43, 0xab, - 0x29, 0xe8, 0x34, 0x9c, 0x88, 0x93, 0xdc, 0x6d, 0xae, 0x37, 0xb5, 0x8d, 0x35, 0xf2, 0xbb, 0xf1, - 0xb0, 0x56, 0xb8, 0xf8, 0x36, 0x54, 0xa5, 0xbb, 0x60, 0xa4, 0x4a, 0xad, 0xed, 0xf5, 0xda, 0x04, - 0xaa, 0x42, 0x25, 0x2e, 0xa7, 0x0c, 0xa5, 0xad, 0xed, 0xf5, 0x8d, 0x5a, 0x01, 0x01, 0x4c, 0xed, - 0x34, 0xb4, 0xfb, 0x1b, 0x3b, 0xb5, 0xe2, 0xc5, 0x57, 0x61, 0x25, 0xef, 0x4e, 0x24, 0xaa, 0xc0, - 0xe4, 0x26, 0xf6, 0xba, 0xb8, 0x36, 0x41, 0x58, 0xda, 0xc4, 0x4a, 0x82, 0x9a, 0x72, 0xf1, 0x56, - 0xf2, 0x49, 0x1f, 0x8c, 0x16, 0xa0, 0xda, 0x6e, 0x6c, 0xad, 0xdf, 0xdd, 0xfe, 0xaa, 0xae, 0x6d, - 0x34, 0xd6, 0x3f, 0xa8, 0x4d, 0xa0, 0x45, 0xa8, 0x89, 0xa4, 0xad, 0xed, 0x1d, 0x96, 0xaa, 0x5c, - 0x7c, 0x9c, 0x58, 0xe6, 0x62, 0x74, 0x1c, 0x16, 0xc2, 0x5a, 0xea, 0x6b, 0xda, 0x46, 0x63, 0x67, - 0x83, 0x54, 0x5e, 0x4a, 0xd6, 0x76, 0xb7, 0xb6, 0x9a, 0x5b, 0xf7, 0x6b, 0x0a, 0x91, 0x1a, 0x25, - 0x6f, 0x7c, 0xb5, 0x49, 0x88, 0x0b, 0x32, 0xf1, 0xee, 0xd6, 0x97, 0xb6, 0xb6, 0xbf, 0xb2, 0x55, - 0x2b, 0x5e, 0xfc, 0xff, 0x71, 0x5c, 0x4f, 0x34, 0x15, 0x9d, 0x84, 0xe5, 0x54, 0x89, 0xfa, 0xc6, - 0xfb, 0x1b, 0x5b, 0x3b, 0xb5, 0x09, 0x39, 0xb3, 0xbd, 0xd3, 0xd0, 0xa2, 0x4c, 0x25, 0x99, 0xb9, - 0xdd, 0x6a, 0x85, 0x99, 0x05, 0x39, 0x73, 0x7d, 0xe3, 0xe1, 0x46, 0xc4, 0x59, 0xbc, 0xf8, 0x3c, - 0x40, 0x34, 0xe4, 0xd0, 0x0c, 0x4c, 0xaf, 0x6d, 0xef, 0x6e, 0xed, 0x6c, 0x68, 0xb5, 0x09, 0xa2, - 0xe5, 0xfb, 0x8d, 0xdd, 0xfb, 0x1b, 0x35, 0xe5, 0xe2, 0x05, 0x98, 0x8d, 0x1b, 0x20, 0xa1, 0x6b, - 0x7f, 0xd0, 0xde, 0xd9, 0xd8, 0x24, 0x1a, 0x99, 0x85, 0xf2, 0xda, 0x7d, 0x6d, 0x7b, 0xb7, 0x75, - 0xaf, 0x5d, 0x53, 0xae, 0xfd, 0xd7, 0x62, 0x78, 0xbc, 0xd0, 0xc6, 0x1e, 0xbd, 0x17, 0xb3, 0x0e, - 0xd3, 0xe2, 0xbf, 0x86, 0x48, 0x1b, 0x3d, 0xf2, 0x7f, 0x39, 0xa9, 0x9f, 0xcc, 0xcc, 0xe3, 0xa1, - 0xc4, 0x04, 0x7a, 0x9f, 0x1e, 0xd8, 0xc4, 0x1e, 0xd4, 0x3b, 0x9b, 0xd8, 0x37, 0x4f, 0xbd, 0xdb, - 0x57, 0x3f, 0x37, 0x84, 0x22, 0x94, 0xfb, 0x01, 0xcc, 0xc9, 0x2f, 0xd7, 0xa2, 0x73, 0xf2, 0xa9, - 0x40, 0xc6, 0xa3, 0xb8, 0x75, 0x75, 0x18, 0x49, 0x28, 0x5a, 0x87, 0x5a, 0xf2, 0xe5, 0x5a, 0x24, - 0x61, 0x94, 0x72, 0x1e, 0xc6, 0xad, 0x3f, 0x3f, 0x9c, 0x28, 0x5e, 0x40, 0xea, 0x41, 0xd6, 0xe7, - 0x86, 0x3f, 0x71, 0x99, 0x51, 0x40, 0xde, 0x3b, 0x98, 0x4c, 0x39, 0xf2, 0x44, 0x8b, 0x12, 0x6f, - 0xa0, 0x66, 0x3c, 0x97, 0x28, 0x2b, 0x27, 0xfb, 0xa9, 0x3c, 0x75, 0x02, 0xfd, 0x2f, 0x98, 0x4f, - 0x5c, 0x7a, 0x40, 0x12, 0x63, 0xf6, 0x5d, 0x8e, 0xfa, 0x73, 0x43, 0x69, 0xe4, 0x5e, 0x8d, 0x5f, - 0x6c, 0x48, 0xf6, 0x6a, 0xc6, 0x85, 0x89, 0x64, 0xaf, 0x66, 0xde, 0x8b, 0xa0, 0x86, 0x28, 0x5d, - 0x62, 0x90, 0x0d, 0x31, 0xeb, 0xd2, 0x44, 0xfd, 0xdc, 0x10, 0x8a, 0xb8, 0x42, 0x12, 0xd7, 0x18, - 0x64, 0x85, 0x64, 0x5f, 0x90, 0xa8, 0x3f, 0x37, 0x94, 0x26, 0xd9, 0x93, 0x11, 0x46, 0x3a, 0xdd, - 0x93, 0x29, 0x08, 0x7f, 0xba, 0x27, 0xd3, 0x10, 0x6b, 0xde, 0x93, 0x09, 0x54, 0xb3, 0x3a, 0x14, - 0x27, 0x99, 0xd5, 0x93, 0xd9, 0x58, 0x4a, 0x75, 0x02, 0x3d, 0x85, 0x95, 0x3c, 0x1c, 0x1b, 0x7a, - 0xf9, 0x10, 0x70, 0xbb, 0xfa, 0x2b, 0xe3, 0x11, 0x87, 0x05, 0x63, 0x40, 0xe9, 0x15, 0x17, 0x7a, - 0x41, 0x56, 0x77, 0xce, 0x8a, 0xae, 0xfe, 0xe2, 0x28, 0xb2, 0xb0, 0x98, 0xfb, 0x50, 0x16, 0x08, - 0x39, 0x24, 0xb9, 0xc0, 0x04, 0x32, 0xaf, 0x7e, 0x2a, 0x3b, 0x33, 0x14, 0xf4, 0x16, 0x94, 0x48, - 0x2a, 0x5a, 0x4e, 0xd2, 0x09, 0x01, 0x2b, 0xe9, 0x8c, 0x90, 0xb9, 0x01, 0x53, 0x0c, 0xfa, 0x85, - 0xa4, 0x43, 0x54, 0x09, 0x9a, 0x56, 0xaf, 0x67, 0x65, 0x85, 0x22, 0x5a, 0xec, 0x7f, 0x30, 0x71, - 0x24, 0x17, 0x5a, 0x4d, 0xbe, 0x59, 0x2f, 0x43, 0xc6, 0xea, 0x67, 0x72, 0xf3, 0xe3, 0x36, 0x9b, - 0xd8, 0x58, 0x3d, 0x37, 0xe4, 0xa0, 0x20, 0xcb, 0x66, 0xb3, 0x8f, 0x1f, 0x58, 0xe7, 0xa6, 0x8f, - 0x27, 0xd0, 0x0b, 0xb9, 0xf6, 0x2e, 0x15, 0xf1, 0xe2, 0x28, 0xb2, 0xf8, 0xd0, 0x48, 0x3e, 0x3e, - 0xa7, 0x0e, 0x7b, 0x18, 0x32, 0x6b, 0x68, 0xe4, 0x3c, 0x38, 0xa9, 0x4e, 0xa0, 0x7d, 0x38, 0x96, - 0xf1, 0x22, 0x25, 0x7a, 0x31, 0xdf, 0xff, 0x4a, 0xa5, 0xbc, 0x34, 0x92, 0x2e, 0x5e, 0x52, 0x06, - 0x7c, 0x43, 0x2e, 0x29, 0x1f, 0x3f, 0x22, 0x97, 0x34, 0x0c, 0x07, 0x42, 0x0d, 0x91, 0xfb, 0x90, - 0x13, 0x59, 0x87, 0xf3, 0x19, 0x86, 0x98, 0xf2, 0x18, 0xfb, 0x70, 0x2c, 0x63, 0x57, 0x42, 0xae, - 0x6c, 0xfe, 0x6e, 0x89, 0x5c, 0xd9, 0x61, 0xdb, 0x1b, 0x13, 0xe8, 0x43, 0x40, 0xf7, 0x71, 0x20, - 0x87, 0x72, 0x3e, 0x92, 0x06, 0x6a, 0x72, 0x03, 0x24, 0xc7, 0x3e, 0xa5, 0x9d, 0x10, 0x75, 0xe2, - 0xaa, 0x82, 0x6c, 0x76, 0xaf, 0x2a, 0xb5, 0x7e, 0x47, 0xe7, 0x93, 0xdd, 0x96, 0xb7, 0x05, 0x50, - 0xbf, 0x30, 0x06, 0x65, 0xd8, 0x16, 0x3b, 0xf9, 0xfa, 0xb1, 0x58, 0x42, 0x9e, 0xcf, 0x37, 0x13, - 0x79, 0x59, 0x9e, 0x2e, 0x2f, 0x77, 0x81, 0x1e, 0xc6, 0x73, 0x31, 0x63, 0x3a, 0x9b, 0x0f, 0x26, - 0xca, 0x89, 0xe7, 0xb2, 0x0c, 0xe8, 0xda, 0xef, 0x16, 0x61, 0x96, 0x81, 0xae, 0x78, 0xf8, 0xb9, - 0x09, 0x10, 0xe1, 0x17, 0xd1, 0xe9, 0x64, 0x1d, 0x25, 0x50, 0x68, 0x7d, 0x35, 0x2f, 0x3b, 0xee, - 0xe6, 0x62, 0xb8, 0x40, 0xd9, 0xcd, 0xa5, 0x61, 0x8e, 0xb2, 0x9b, 0xcb, 0x00, 0x14, 0xaa, 0x13, - 0xe8, 0x3d, 0xa8, 0x84, 0x30, 0x34, 0xd9, 0x78, 0x92, 0x78, 0xba, 0xfa, 0xe9, 0x9c, 0xdc, 0x78, - 0xed, 0x62, 0xe8, 0x32, 0xb9, 0x76, 0x69, 0xe4, 0x9a, 0x5c, 0xbb, 0x2c, 0x58, 0x5a, 0xd4, 0x5e, - 0x86, 0x23, 0xc8, 0x68, 0xaf, 0x84, 0x2b, 0xc9, 0x68, 0xaf, 0x0c, 0x40, 0x50, 0x27, 0xee, 0xde, - 0xf9, 0xc9, 0xcf, 0x57, 0x95, 0x9f, 0xfe, 0x7c, 0x75, 0xe2, 0xff, 0x7e, 0xbc, 0xaa, 0xfc, 0xe4, - 0xe3, 0x55, 0xe5, 0x1f, 0x3f, 0x5e, 0x55, 0x7e, 0xf6, 0xf1, 0xaa, 0xf2, 0xed, 0x7f, 0x5d, 0x9d, - 0xf8, 0x50, 0x7d, 0x7c, 0xc3, 0xbf, 0x6c, 0x39, 0x57, 0x3a, 0x9e, 0x75, 0xc9, 0x70, 0xad, 0x2b, - 0xee, 0xe3, 0xee, 0x15, 0xc3, 0xb5, 0xfc, 0x2b, 0x5c, 0xee, 0x95, 0x27, 0xaf, 0x3e, 0x9a, 0xa2, - 0xff, 0xb7, 0xef, 0xb5, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x26, 0x3f, 0x1c, 0xf6, 0x71, 0x71, - 0x00, 0x00, + // 7252 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5d, 0x4d, 0x6c, 0x1c, 0xc9, + 0x75, 0x66, 0xcf, 0x0c, 0xc9, 0x99, 0x47, 0x0e, 0x39, 0x2c, 0x51, 0x24, 0x35, 0xfa, 0x6f, 0xed, + 0x8f, 0xa4, 0x5d, 0xfd, 0xac, 0x56, 0xbb, 0x2b, 0x69, 0xb5, 0xbb, 0x1a, 0x91, 0x94, 0x34, 0x6b, + 0x91, 0x1c, 0xf7, 0x90, 0x6b, 0xef, 0x3a, 0x70, 0xa7, 0x35, 0x5d, 0x1c, 0xf6, 0x6a, 0xa6, 0xbb, + 0xdd, 0xdd, 0x23, 0x89, 0x3e, 0x04, 0x39, 0x05, 0x89, 0x4f, 0x06, 0x12, 0x23, 0x88, 0x11, 0x24, + 0x70, 0x80, 0xfc, 0xdc, 0x92, 0x18, 0x88, 0xe3, 0x20, 0x01, 0x02, 0x04, 0xb1, 0xe1, 0x04, 0x09, + 0x90, 0x43, 0x02, 0xf8, 0x16, 0x7b, 0x13, 0x20, 0x40, 0xce, 0x3e, 0x04, 0xb9, 0x38, 0xa8, 0xbf, + 0xee, 0xae, 0xfe, 0x99, 0x19, 0x72, 0x37, 0xbb, 0xeb, 0x13, 0xa7, 0xab, 0xde, 0x7b, 0x55, 0xf5, + 0xea, 0xd5, 0xab, 0x57, 0x55, 0x5f, 0x15, 0xa1, 0x62, 0xb8, 0xd6, 0x65, 0xd7, 0x73, 0x02, 0x07, + 0x81, 0x37, 0xb0, 0x03, 0xab, 0x8f, 0x2f, 0x3f, 0x79, 0xa5, 0x7e, 0xa9, 0x6b, 0x05, 0x7b, 0x83, + 0x47, 0x97, 0x3b, 0x4e, 0xff, 0x4a, 0xd7, 0xe9, 0x3a, 0x57, 0x28, 0xc9, 0xa3, 0xc1, 0x2e, 0xfd, + 0xa2, 0x1f, 0xf4, 0x17, 0x63, 0x55, 0x2f, 0xc2, 0xdc, 0x7b, 0xd8, 0xf3, 0x2d, 0xc7, 0xd6, 0xf0, + 0xd7, 0x06, 0xd8, 0x0f, 0xd0, 0x0a, 0x4c, 0x3f, 0x61, 0x29, 0x2b, 0xca, 0x19, 0xe5, 0x7c, 0x45, + 0x13, 0x9f, 0xea, 0x1f, 0x2b, 0x30, 0x1f, 0x12, 0xfb, 0xae, 0x63, 0xfb, 0x38, 0x9f, 0x1a, 0x9d, + 0x85, 0x59, 0x5e, 0x2d, 0xdd, 0x36, 0xfa, 0x78, 0xa5, 0x40, 0xb3, 0x67, 0x78, 0xda, 0xa6, 0xd1, + 0xc7, 0xe8, 0x45, 0x98, 0x17, 0x24, 0x42, 0x48, 0x91, 0x52, 0xcd, 0xf1, 0x64, 0x5e, 0x1a, 0xba, + 0x0c, 0x47, 0x04, 0xa1, 0xe1, 0x5a, 0x21, 0x71, 0x89, 0x12, 0x2f, 0xf0, 0xac, 0x86, 0x6b, 0x71, + 0x7a, 0xf5, 0x2b, 0x50, 0x59, 0xdb, 0x6c, 0xaf, 0x3a, 0xf6, 0xae, 0xd5, 0x25, 0x55, 0xf4, 0xb1, + 0x47, 0x78, 0x56, 0x94, 0x33, 0x45, 0x52, 0x45, 0xfe, 0x89, 0xea, 0x50, 0xf6, 0xb1, 0xe1, 0x75, + 0xf6, 0xb0, 0xbf, 0x52, 0xa0, 0x59, 0xe1, 0x37, 0xe1, 0x72, 0xdc, 0xc0, 0x72, 0x6c, 0x7f, 0xa5, + 0xc8, 0xb8, 0xf8, 0xa7, 0xfa, 0xbb, 0x0a, 0xcc, 0xb4, 0x1c, 0x2f, 0xd8, 0x30, 0x5c, 0xd7, 0xb2, + 0xbb, 0xe8, 0x2a, 0x94, 0xa9, 0x2e, 0x3b, 0x4e, 0x8f, 0xea, 0x60, 0xee, 0xda, 0xe2, 0xe5, 0xa8, + 0x43, 0x2e, 0xb7, 0x78, 0x9e, 0x16, 0x52, 0xa1, 0xe7, 0x61, 0xae, 0xe3, 0xd8, 0x81, 0x61, 0xd9, + 0xd8, 0xd3, 0x5d, 0xc7, 0x0b, 0xa8, 0x72, 0x26, 0xb5, 0x6a, 0x98, 0x4a, 0xe4, 0xa3, 0xe3, 0x50, + 0xd9, 0x73, 0xfc, 0x80, 0x51, 0x14, 0x29, 0x45, 0x99, 0x24, 0xd0, 0xcc, 0x65, 0x98, 0xa6, 0x99, + 0x96, 0xcb, 0xd5, 0x30, 0x45, 0x3e, 0x9b, 0xae, 0xfa, 0x83, 0x22, 0x4c, 0x6e, 0x38, 0x03, 0x3b, + 0x48, 0x14, 0x63, 0x04, 0x7b, 0xbc, 0x8b, 0x62, 0xc5, 0x18, 0xc1, 0x5e, 0x54, 0x0c, 0xa1, 0x60, + 0xbd, 0xc4, 0x8a, 0x21, 0x99, 0x75, 0x28, 0x7b, 0xd8, 0x30, 0x1d, 0xbb, 0xb7, 0x4f, 0xab, 0x50, + 0xd6, 0xc2, 0x6f, 0xd2, 0x7d, 0x3e, 0xee, 0x59, 0xf6, 0xe0, 0x99, 0xee, 0xe1, 0x9e, 0xf1, 0x08, + 0xf7, 0x68, 0x55, 0xca, 0xda, 0x1c, 0x4f, 0xd6, 0x58, 0x2a, 0x7a, 0x1b, 0x66, 0x5c, 0xcf, 0x71, + 0x8d, 0xae, 0x41, 0x34, 0xb8, 0x32, 0x49, 0x95, 0x74, 0x22, 0xae, 0x24, 0x5a, 0xe1, 0x56, 0x44, + 0xa3, 0xc5, 0x19, 0xd0, 0x1b, 0x30, 0x33, 0xb0, 0x4c, 0xae, 0x6f, 0x7f, 0x65, 0xea, 0x4c, 0xf1, + 0xfc, 0xcc, 0xb5, 0xa3, 0x71, 0xfe, 0xe6, 0x1a, 0xcf, 0xd5, 0xe2, 0x94, 0x84, 0xb1, 0x1b, 0x63, + 0x9c, 0x1e, 0xca, 0x18, 0xa3, 0xa4, 0x06, 0x87, 0x3b, 0x03, 0xcf, 0xb7, 0x9e, 0x60, 0x9d, 0x34, + 0x58, 0xa7, 0x1a, 0x28, 0xd3, 0xe6, 0x2d, 0x84, 0x59, 0x1a, 0x36, 0xcc, 0x2d, 0xa2, 0x8a, 0x97, + 0x60, 0xd2, 0xea, 0x1b, 0x5d, 0xbc, 0x52, 0x39, 0xa3, 0xa4, 0x8a, 0x20, 0x19, 0x6d, 0x17, 0x77, + 0x34, 0x46, 0x83, 0x9e, 0x83, 0x39, 0xfa, 0x43, 0xf7, 0x07, 0x8f, 0x98, 0xd6, 0x81, 0x6a, 0x7d, + 0x96, 0xa6, 0xb6, 0x07, 0x8f, 0x88, 0xe6, 0x55, 0x1d, 0x2a, 0x61, 0xe5, 0xa2, 0xde, 0x36, 0x69, + 0x1f, 0x56, 0x79, 0x6f, 0x9b, 0x64, 0x94, 0x45, 0x7d, 0x6c, 0x99, 0xb4, 0xff, 0xaa, 0xda, 0x4c, + 0x98, 0xd6, 0x34, 0xd1, 0x12, 0x4c, 0xf5, 0xb0, 0xdd, 0x0d, 0xf6, 0x68, 0x07, 0x56, 0x35, 0xfe, + 0xa5, 0xfe, 0x96, 0x02, 0xd5, 0x1d, 0x1f, 0x7b, 0x64, 0x28, 0xfa, 0xae, 0xd1, 0xc1, 0xe8, 0x12, + 0x94, 0xfa, 0x8e, 0x89, 0xb9, 0x15, 0x1f, 0x8b, 0x37, 0x22, 0x24, 0xda, 0x70, 0x4c, 0xac, 0x51, + 0x32, 0x74, 0x01, 0x4a, 0x03, 0xcb, 0x64, 0x43, 0x27, 0x57, 0xad, 0x94, 0x84, 0x90, 0x76, 0x09, + 0x69, 0x71, 0x28, 0x29, 0x21, 0x51, 0x7f, 0xae, 0xc0, 0x7c, 0x58, 0xda, 0x16, 0x1d, 0x73, 0xe8, + 0x55, 0x98, 0xb6, 0x71, 0xf0, 0xd4, 0xf1, 0x1e, 0x8f, 0xae, 0x9b, 0xa0, 0x44, 0x2f, 0x41, 0xd1, + 0xe5, 0x1a, 0x19, 0xca, 0x40, 0xa8, 0x08, 0xb1, 0xe5, 0x76, 0xa8, 0x86, 0x86, 0x13, 0x5b, 0x6e, + 0x87, 0x8c, 0x98, 0xc0, 0xf0, 0xba, 0x98, 0xf6, 0x07, 0x1b, 0x7d, 0x65, 0x96, 0xd0, 0x34, 0xd1, + 0x1d, 0x98, 0x1b, 0xf8, 0xd8, 0xb3, 0x7d, 0x5d, 0xf8, 0x8f, 0x49, 0x6a, 0x13, 0x92, 0x50, 0x49, + 0xef, 0x5a, 0x95, 0x31, 0x6c, 0x71, 0x07, 0xa3, 0x02, 0x34, 0xed, 0xe0, 0xf5, 0xeb, 0xef, 0x19, + 0xbd, 0x01, 0x46, 0x8b, 0x30, 0xf9, 0x84, 0xfc, 0xa0, 0x2d, 0x2f, 0x6a, 0xec, 0x43, 0xfd, 0xce, + 0x24, 0x1c, 0x7f, 0x48, 0xc6, 0x58, 0xdb, 0xb0, 0xcd, 0x47, 0xce, 0xb3, 0x36, 0x31, 0x49, 0x2b, + 0xd8, 0x5f, 0x75, 0xec, 0x00, 0x3f, 0x0b, 0xd0, 0x03, 0x58, 0xb0, 0x85, 0xfc, 0xb0, 0x22, 0x0a, + 0xad, 0xc8, 0xf1, 0xcc, 0xd6, 0xb1, 0xc2, 0xb5, 0x9a, 0x2d, 0x27, 0xf8, 0xe8, 0x6e, 0x34, 0xca, + 0x85, 0x9c, 0x42, 0xba, 0x41, 0xed, 0x75, 0x5a, 0x1b, 0x2e, 0x45, 0x38, 0x00, 0x21, 0xe3, 0x75, + 0x20, 0x7e, 0x5f, 0x37, 0x7c, 0x9d, 0xb4, 0x94, 0x6a, 0x79, 0xe6, 0xda, 0x92, 0x64, 0x05, 0x61, + 0x83, 0xb5, 0x8a, 0x37, 0xb0, 0x1b, 0x3e, 0xd1, 0x10, 0xba, 0x41, 0xe7, 0x10, 0xc2, 0xd7, 0xf5, + 0x9c, 0x81, 0x4b, 0xc7, 0x5f, 0x3e, 0x23, 0x50, 0xc6, 0xfb, 0x84, 0x92, 0x4e, 0x2d, 0xdc, 0x4f, + 0xe9, 0x9e, 0xe3, 0x04, 0xbb, 0xbe, 0xf0, 0x4d, 0x22, 0x59, 0xa3, 0xa9, 0xe8, 0x0a, 0x1c, 0xf1, + 0x07, 0xae, 0xdb, 0xc3, 0x7d, 0x6c, 0x07, 0x46, 0x8f, 0x15, 0x44, 0xfa, 0xac, 0x78, 0xbe, 0xa8, + 0xa1, 0x78, 0x16, 0x15, 0xec, 0xa3, 0x47, 0x50, 0xcf, 0x60, 0xd0, 0x5d, 0xa7, 0x67, 0x75, 0xf6, + 0x57, 0x66, 0xa8, 0x01, 0x3d, 0x27, 0xa9, 0x26, 0x25, 0xa3, 0x45, 0x69, 0xb5, 0x15, 0x3f, 0x27, + 0x07, 0x9d, 0x02, 0x70, 0x3d, 0xeb, 0x89, 0xd5, 0xc3, 0x5d, 0x6c, 0xae, 0x4c, 0xd1, 0x8a, 0xc7, + 0x52, 0xd0, 0x6b, 0x64, 0x4a, 0xeb, 0x74, 0x9c, 0xbe, 0xcb, 0x1d, 0x8e, 0xd4, 0xa7, 0xc2, 0x16, + 0x5a, 0x9e, 0xb3, 0x6b, 0xf5, 0xb0, 0x26, 0x68, 0xd1, 0x1b, 0x50, 0x36, 0x5c, 0xd7, 0xf0, 0xfa, + 0x8e, 0x47, 0x5d, 0xce, 0x08, 0xbe, 0x90, 0x18, 0x5d, 0x87, 0x45, 0x2e, 0x43, 0x77, 0x59, 0x26, + 0xf3, 0x5b, 0xd3, 0xc4, 0xf6, 0xef, 0x16, 0x56, 0x14, 0x0d, 0xf1, 0x7c, 0xce, 0x4b, 0x3d, 0xd8, + 0xdf, 0x2b, 0x30, 0x9f, 0x90, 0x89, 0xde, 0x85, 0x59, 0x21, 0x21, 0xd8, 0x77, 0x85, 0xab, 0x79, + 0x71, 0x48, 0x35, 0x2e, 0xf3, 0xbf, 0xdb, 0xfb, 0x2e, 0xa6, 0xd3, 0x82, 0xf8, 0x40, 0xe7, 0xa0, + 0xda, 0x73, 0x3a, 0x46, 0x8f, 0x7a, 0x46, 0x0f, 0xef, 0xf2, 0xc9, 0x6b, 0x36, 0x4c, 0xd4, 0xf0, + 0xae, 0x7a, 0x07, 0x66, 0x62, 0x02, 0x10, 0x82, 0x39, 0x8d, 0x15, 0xb5, 0x86, 0x77, 0x8d, 0x41, + 0x2f, 0xa8, 0x4d, 0xa0, 0x39, 0x80, 0x1d, 0xbb, 0x43, 0x82, 0x05, 0x1b, 0x9b, 0x35, 0x05, 0x55, + 0xa1, 0xf2, 0x50, 0x88, 0xa8, 0x15, 0xd4, 0x6f, 0x17, 0xe1, 0x28, 0x35, 0xee, 0x96, 0x63, 0xf2, + 0xd1, 0xc6, 0x23, 0x8b, 0x73, 0x50, 0xed, 0xd0, 0xee, 0xd7, 0x5d, 0xc3, 0xc3, 0x76, 0xc0, 0xe7, + 0xd7, 0x59, 0x96, 0xd8, 0xa2, 0x69, 0x48, 0x83, 0x9a, 0xcf, 0x5b, 0xa4, 0x77, 0xd8, 0xe8, 0xe4, + 0x03, 0x48, 0x6a, 0xf5, 0x90, 0xc1, 0xac, 0xcd, 0xfb, 0xa9, 0xd1, 0x3d, 0xed, 0xef, 0xfb, 0x9d, + 0xa0, 0x27, 0x3c, 0xea, 0xe5, 0x94, 0xa8, 0x64, 0x65, 0x2f, 0xb7, 0x19, 0xc3, 0xba, 0x1d, 0x78, + 0xfb, 0x9a, 0x60, 0x47, 0xef, 0x40, 0xd9, 0x79, 0x82, 0xbd, 0x3d, 0x6c, 0x30, 0x4f, 0x36, 0x73, + 0xed, 0x5c, 0x4a, 0xd4, 0xaa, 0x98, 0x4c, 0x34, 0xec, 0x3b, 0x03, 0xaf, 0x83, 0x7d, 0x2d, 0x64, + 0x42, 0x0d, 0xa8, 0x78, 0x22, 0x99, 0x7b, 0xba, 0xb1, 0x24, 0x44, 0x5c, 0xf5, 0x5b, 0x30, 0x1b, + 0xaf, 0x1c, 0xaa, 0x41, 0xf1, 0x31, 0xde, 0xe7, 0xca, 0x24, 0x3f, 0x23, 0x1f, 0xc8, 0x7a, 0x98, + 0x7d, 0xdc, 0x2a, 0xdc, 0x50, 0x54, 0x0f, 0x50, 0xd4, 0xd2, 0x0d, 0x1c, 0x18, 0xa6, 0x11, 0x18, + 0x08, 0x41, 0x89, 0xc6, 0x9c, 0x4c, 0x04, 0xfd, 0x4d, 0xa4, 0x0e, 0xf8, 0x74, 0x50, 0xd1, 0xc8, + 0x4f, 0x74, 0x02, 0x2a, 0xa1, 0xb7, 0xe3, 0x81, 0x67, 0x94, 0x40, 0x02, 0x40, 0x23, 0x08, 0x70, + 0xdf, 0x0d, 0xa8, 0x62, 0xaa, 0x9a, 0xf8, 0x54, 0x7f, 0x63, 0x12, 0x6a, 0x29, 0x5b, 0xb8, 0x05, + 0xe5, 0x3e, 0x2f, 0x9e, 0xfb, 0xd9, 0x53, 0x52, 0x14, 0x98, 0xaa, 0xa4, 0x16, 0xd2, 0x93, 0x20, + 0x8b, 0xd8, 0x5a, 0x2c, 0x4c, 0x0e, 0xbf, 0x99, 0x91, 0x77, 0x75, 0xd3, 0xf2, 0x70, 0x27, 0x70, + 0xbc, 0x7d, 0x5e, 0xd1, 0xd9, 0x9e, 0xd3, 0x5d, 0x13, 0x69, 0xe8, 0x3a, 0x80, 0x69, 0xfb, 0x3a, + 0xb5, 0xe1, 0x2e, 0xef, 0x47, 0x69, 0x92, 0x0d, 0xa3, 0x61, 0xad, 0x62, 0xda, 0x3e, 0xaf, 0xf2, + 0x6d, 0xa8, 0x92, 0xd0, 0x52, 0xef, 0x8b, 0xf8, 0x68, 0x92, 0xda, 0xd2, 0xb2, 0x5c, 0xef, 0x30, + 0xd0, 0xd5, 0x66, 0xdd, 0xe8, 0xc3, 0x47, 0x77, 0x60, 0x8a, 0x46, 0x77, 0x22, 0x1e, 0x3b, 0x9f, + 0xdd, 0x5c, 0x6e, 0x7d, 0x0f, 0x29, 0x29, 0x33, 0x3e, 0xce, 0x87, 0xb6, 0x60, 0xc6, 0xb0, 0x6d, + 0x27, 0x30, 0xd8, 0xac, 0xc2, 0xa2, 0xb3, 0x4b, 0x43, 0xc5, 0x34, 0x22, 0x7a, 0x26, 0x2b, 0x2e, + 0x01, 0xbd, 0x01, 0x93, 0x74, 0xda, 0xe1, 0xf3, 0xc4, 0xd9, 0x91, 0x83, 0x42, 0x63, 0xf4, 0xe8, + 0x2d, 0x98, 0x7e, 0x6a, 0xd9, 0xa6, 0xf3, 0xd4, 0xe7, 0xfe, 0x54, 0x32, 0xe1, 0x2f, 0xb1, 0xac, + 0x14, 0xb3, 0xe0, 0xa9, 0xdf, 0x84, 0x99, 0x58, 0xfb, 0x0e, 0x62, 0xbf, 0xf5, 0xb7, 0xa1, 0x96, + 0x6c, 0xd3, 0x81, 0xec, 0x7f, 0x00, 0x8b, 0xda, 0xc0, 0x8e, 0xaa, 0x26, 0x56, 0x71, 0xd7, 0x61, + 0x8a, 0x5b, 0x03, 0x33, 0xc6, 0x13, 0xc3, 0xd4, 0xaa, 0x71, 0xda, 0xf8, 0x82, 0x6c, 0xcf, 0xb0, + 0xcd, 0x1e, 0xf6, 0x78, 0x89, 0x62, 0x41, 0xf6, 0x80, 0xa5, 0xaa, 0x6f, 0xc1, 0xd1, 0x44, 0xb1, + 0x7c, 0x3d, 0xf8, 0x1c, 0xcc, 0xb9, 0x8e, 0xa9, 0xfb, 0x2c, 0x59, 0xc4, 0xab, 0x15, 0x62, 0x3b, + 0x82, 0xb6, 0x69, 0x12, 0xf6, 0x76, 0xe0, 0xb8, 0xe9, 0x6a, 0x8f, 0xc7, 0xbe, 0x02, 0x4b, 0x49, + 0x76, 0x56, 0xbc, 0xfa, 0x0e, 0x2c, 0x6b, 0xb8, 0xef, 0x3c, 0xc1, 0x87, 0x15, 0x5d, 0x87, 0x95, + 0xb4, 0x00, 0x2e, 0xfc, 0x7d, 0x58, 0x8e, 0x52, 0xdb, 0x81, 0x11, 0x0c, 0xfc, 0x03, 0x09, 0xe7, + 0x8b, 0xe5, 0x47, 0x8e, 0xcf, 0x3a, 0xb2, 0xac, 0x89, 0x4f, 0x75, 0x19, 0x26, 0x5b, 0x8e, 0xd9, + 0x6c, 0xa1, 0x39, 0x28, 0x58, 0x2e, 0x67, 0x2e, 0x58, 0xae, 0xda, 0x89, 0x97, 0xb9, 0xc9, 0x22, + 0x5b, 0x56, 0x74, 0x92, 0x14, 0xdd, 0x80, 0x39, 0xc3, 0x34, 0x2d, 0x62, 0x48, 0x46, 0x4f, 0xb7, + 0x5c, 0x11, 0x98, 0x2f, 0x24, 0xba, 0xbe, 0xd9, 0xd2, 0xaa, 0x11, 0x61, 0xd3, 0xf5, 0xd5, 0xbb, + 0x50, 0x89, 0x16, 0x01, 0xaf, 0x45, 0x0b, 0xdf, 0xc2, 0xe8, 0x78, 0x31, 0x5c, 0x15, 0x6f, 0xa6, + 0x26, 0x49, 0x5e, 0xcd, 0xd7, 0x00, 0x42, 0xa7, 0x2a, 0x42, 0xd0, 0xa3, 0x99, 0x22, 0xb5, 0x18, + 0xa1, 0xfa, 0xef, 0xa5, 0xb8, 0x93, 0x8d, 0x35, 0xd9, 0x0c, 0x9b, 0x6c, 0x4a, 0x4e, 0xb7, 0x70, + 0x40, 0xa7, 0xfb, 0x0a, 0x4c, 0xfa, 0x81, 0x11, 0x60, 0x1e, 0xf3, 0x1f, 0xcf, 0x66, 0x24, 0x05, + 0x63, 0x8d, 0x51, 0xa2, 0x93, 0x00, 0x1d, 0x0f, 0x1b, 0x01, 0x36, 0x75, 0x83, 0xcd, 0x0a, 0x45, + 0xad, 0xc2, 0x53, 0x1a, 0x01, 0xf1, 0x22, 0x62, 0x95, 0x92, 0x31, 0x11, 0xe6, 0x74, 0x63, 0xb4, + 0x5e, 0x09, 0xbd, 0xd7, 0xd4, 0x48, 0xef, 0xc5, 0x59, 0xb9, 0xf7, 0x8a, 0x3c, 0xf1, 0xf4, 0x30, + 0x4f, 0xcc, 0x98, 0xc6, 0xf1, 0xc4, 0xe5, 0x61, 0x9e, 0x98, 0x8b, 0x19, 0xee, 0x89, 0x33, 0x1c, + 0x49, 0x25, 0xcb, 0x91, 0x7c, 0x96, 0xae, 0xf3, 0xaf, 0x0a, 0xb0, 0x92, 0x1e, 0xcf, 0xdc, 0x8f, + 0x5d, 0x87, 0x29, 0x9f, 0xa6, 0x0c, 0xf7, 0x9f, 0x9c, 0x8b, 0xd3, 0xa2, 0xbb, 0x50, 0xb2, 0xec, + 0x5d, 0x87, 0x0f, 0xbc, 0xcb, 0x43, 0x79, 0x78, 0x49, 0x97, 0x9b, 0xf6, 0xae, 0xc3, 0x34, 0x48, + 0x79, 0xd1, 0x43, 0x38, 0x12, 0xae, 0xde, 0x7d, 0x9d, 0x09, 0xc6, 0x22, 0xce, 0x93, 0xac, 0x34, + 0x8c, 0xaa, 0xb8, 0x44, 0x14, 0xf1, 0xb5, 0x39, 0x1b, 0x89, 0x71, 0x08, 0xb9, 0x1f, 0x18, 0x7d, + 0x57, 0x58, 0x6c, 0x98, 0x50, 0x7f, 0x03, 0x2a, 0x61, 0xf1, 0x07, 0xd2, 0x5d, 0x13, 0x16, 0x13, + 0x63, 0x84, 0x2d, 0x56, 0xc3, 0x41, 0xa5, 0x8c, 0x3b, 0xa8, 0xd4, 0x9f, 0x29, 0xf1, 0x81, 0x7e, + 0xcf, 0xea, 0x05, 0xd8, 0x4b, 0x0d, 0xf4, 0xd7, 0x85, 0x5c, 0x36, 0xca, 0xcf, 0x0c, 0x91, 0xcb, + 0xd6, 0x82, 0x7c, 0xc4, 0xbe, 0x07, 0x73, 0xd4, 0xc4, 0x75, 0x1f, 0xf7, 0x68, 0xac, 0xc4, 0xf5, + 0x78, 0x25, 0x5b, 0x00, 0x2b, 0x9d, 0x0d, 0x91, 0x36, 0xe7, 0x60, 0x7d, 0x53, 0xed, 0xc5, 0xd3, + 0xea, 0x77, 0x00, 0xa5, 0x89, 0x0e, 0xa4, 0xc1, 0x0d, 0xe2, 0x2f, 0xfd, 0x20, 0x73, 0xe6, 0xde, + 0xa5, 0xd5, 0x18, 0x6e, 0x79, 0xac, 0xaa, 0x1a, 0xa7, 0x55, 0xff, 0xad, 0x08, 0x10, 0x65, 0x7e, + 0xce, 0x1d, 0xe5, 0xad, 0xd0, 0x61, 0xb1, 0x88, 0x53, 0xcd, 0x16, 0x99, 0xe9, 0xaa, 0x9a, 0xb2, + 0xab, 0x62, 0xb1, 0xe7, 0x8b, 0x39, 0x02, 0x0e, 0xec, 0xa4, 0xa6, 0x3f, 0x6f, 0x4e, 0xea, 0x1e, + 0x2c, 0x25, 0xcd, 0x84, 0x7b, 0xa8, 0x97, 0x61, 0xd2, 0x0a, 0x70, 0x9f, 0x6d, 0x6a, 0x27, 0x36, + 0x45, 0x62, 0xe4, 0x8c, 0x48, 0x7d, 0x1b, 0x96, 0xe4, 0xbe, 0x3a, 0x58, 0xe8, 0xa2, 0x3e, 0x4c, + 0xc6, 0x3e, 0x91, 0xab, 0xe4, 0xf6, 0x91, 0xb9, 0xbd, 0x94, 0xe4, 0x61, 0x94, 0xea, 0x0f, 0x15, + 0x38, 0x9a, 0xc8, 0xca, 0x19, 0xf8, 0x5f, 0x49, 0x0d, 0x60, 0xe6, 0x5b, 0xaf, 0x0f, 0x29, 0xe5, + 0x53, 0x1c, 0xc5, 0x5f, 0x82, 0xba, 0xdc, 0x3d, 0x92, 0x6a, 0x6f, 0x26, 0x86, 0xf2, 0xd9, 0x91, + 0x95, 0x0e, 0xc7, 0x73, 0x0b, 0x8e, 0x67, 0x0a, 0x4e, 0xeb, 0xbc, 0x38, 0xa6, 0xce, 0xff, 0xa7, + 0x10, 0xf7, 0xd9, 0x8d, 0x20, 0xf0, 0xac, 0x47, 0x83, 0x00, 0x7f, 0xb2, 0x41, 0xd5, 0x5a, 0x38, + 0xb2, 0x99, 0x9f, 0x7d, 0x39, 0x9b, 0x33, 0x2a, 0x3d, 0x73, 0x8c, 0xb7, 0xe5, 0x31, 0x5e, 0xa2, + 0xa2, 0x5e, 0x19, 0x29, 0x6a, 0xe8, 0x68, 0xff, 0x2c, 0x07, 0xf1, 0x3f, 0x28, 0x30, 0x9f, 0xe8, + 0x15, 0x74, 0x07, 0xc0, 0x08, 0xab, 0xce, 0xed, 0xe3, 0xcc, 0xa8, 0x26, 0x6a, 0x31, 0x1e, 0x32, + 0x27, 0xb2, 0x78, 0x31, 0x63, 0x4e, 0xcc, 0x88, 0x17, 0xc3, 0x70, 0xf1, 0x76, 0xb4, 0xd8, 0x65, + 0x1b, 0xb1, 0xea, 0xd0, 0xc5, 0x2e, 0xe3, 0x15, 0x2c, 0xea, 0x6f, 0x16, 0x60, 0x31, 0x4b, 0x3a, + 0x7a, 0x01, 0x8a, 0x1d, 0x77, 0xc0, 0x5b, 0x22, 0x9d, 0x80, 0xad, 0xba, 0x83, 0x1d, 0xdf, 0xe8, + 0x62, 0x8d, 0x10, 0xa0, 0x2b, 0x30, 0xd5, 0xc7, 0x7d, 0xc7, 0xdb, 0xe7, 0xf5, 0x96, 0xb6, 0x1b, + 0x36, 0x68, 0x0e, 0xa3, 0xe6, 0x64, 0xe8, 0x5a, 0x14, 0x56, 0xb3, 0xfa, 0xae, 0x48, 0xab, 0x07, + 0x96, 0xc5, 0x58, 0xc2, 0x58, 0xfa, 0x1a, 0x4c, 0xbb, 0x9e, 0xd3, 0xc1, 0xbe, 0xcf, 0x77, 0x43, + 0x56, 0x12, 0x47, 0x72, 0x24, 0x8b, 0xf3, 0x70, 0x42, 0x74, 0x0b, 0x20, 0x0a, 0xa0, 0xf8, 0xcc, + 0x54, 0xcf, 0x8d, 0xb7, 0x7c, 0x2d, 0x46, 0xad, 0x7e, 0xbf, 0x00, 0x4b, 0xd9, 0x9a, 0x43, 0x97, + 0xe2, 0x7a, 0x39, 0x9e, 0xa1, 0x6a, 0x59, 0x3d, 0xaf, 0x27, 0xd4, 0x73, 0x2a, 0x83, 0x23, 0x4b, + 0x4b, 0x37, 0x93, 0x5a, 0x3a, 0x9d, 0xc1, 0x98, 0xad, 0xac, 0x9b, 0x49, 0x65, 0x65, 0xb1, 0x66, + 0xeb, 0xac, 0x91, 0xa1, 0xb3, 0xb3, 0x59, 0x6d, 0xcc, 0x57, 0xdd, 0xdf, 0x2a, 0x30, 0x1b, 0xaf, + 0x97, 0x1c, 0xb2, 0x2a, 0x89, 0x90, 0x15, 0x6d, 0xc2, 0x82, 0xc9, 0x76, 0x6e, 0x75, 0xcb, 0x0e, + 0xb0, 0xb7, 0x6b, 0x74, 0x44, 0x54, 0x78, 0x36, 0xc3, 0x2e, 0x9a, 0x82, 0x86, 0x55, 0xbc, 0xc6, + 0x79, 0xc3, 0x64, 0xd2, 0x82, 0x50, 0x8e, 0xf0, 0x5a, 0x63, 0x08, 0x8a, 0x31, 0xa9, 0xff, 0xaa, + 0xc0, 0x91, 0x0c, 0x05, 0x8f, 0x68, 0xc8, 0x4e, 0x7e, 0x43, 0xce, 0xe7, 0x77, 0xdd, 0xc8, 0xf6, + 0x3c, 0xc8, 0x68, 0xcf, 0xf8, 0xf2, 0xe2, 0xcd, 0xfa, 0xb9, 0x02, 0x47, 0x33, 0xa9, 0x32, 0xb7, + 0x57, 0xaf, 0x41, 0xd9, 0x7b, 0xa6, 0x3f, 0xda, 0x0f, 0xb0, 0x9f, 0x35, 0xb0, 0x77, 0x62, 0xe7, + 0x34, 0xd3, 0xde, 0xb3, 0xbb, 0x84, 0x0e, 0x5d, 0x87, 0x8a, 0xf7, 0x4c, 0xc7, 0x9e, 0xe7, 0x78, + 0xc2, 0x17, 0xe5, 0x32, 0x95, 0xbd, 0x67, 0xeb, 0x94, 0x90, 0x94, 0x14, 0x88, 0x92, 0x4a, 0x23, + 0x4a, 0x0a, 0xa2, 0x92, 0x82, 0xb0, 0xa4, 0xc9, 0x11, 0x25, 0x05, 0xbc, 0x24, 0xf5, 0x4f, 0x0a, + 0x70, 0x62, 0x98, 0xba, 0x3e, 0x31, 0x45, 0xac, 0x03, 0xf2, 0x9e, 0xe9, 0xae, 0xd1, 0x79, 0x8c, + 0x03, 0x5f, 0x37, 0x3d, 0xc7, 0x75, 0xb1, 0x39, 0x4a, 0x23, 0x35, 0xef, 0x59, 0x8b, 0x71, 0xac, + 0x31, 0x86, 0x43, 0x69, 0x66, 0x1d, 0x50, 0x90, 0x2e, 0x7a, 0x84, 0x8a, 0x6a, 0x41, 0xa2, 0x68, + 0xf5, 0x43, 0x98, 0x8d, 0x7b, 0x88, 0x11, 0xb6, 0x7f, 0x1b, 0xaa, 0xdc, 0x83, 0xe8, 0x1d, 0x67, + 0x60, 0x07, 0xa3, 0x14, 0x35, 0xcb, 0xa9, 0x57, 0x09, 0xb1, 0xfa, 0xb5, 0x70, 0xb8, 0x7d, 0x6a, + 0x45, 0xfe, 0x5a, 0x01, 0x2a, 0xe1, 0x39, 0x3e, 0x99, 0xe9, 0xd9, 0x69, 0x3f, 0xeb, 0x77, 0x7e, + 0xac, 0xff, 0x40, 0x8e, 0x5a, 0x58, 0x9c, 0xfa, 0x42, 0x26, 0x12, 0x60, 0xc4, 0xc2, 0xe4, 0x2a, + 0x2c, 0x0e, 0x7c, 0xec, 0xe9, 0xbe, 0x8b, 0x3b, 0xd6, 0xae, 0x85, 0x4d, 0x9d, 0x15, 0x87, 0x68, + 0x71, 0x88, 0xe4, 0xb5, 0x45, 0x16, 0x95, 0x99, 0xb5, 0x94, 0x39, 0x92, 0xb9, 0x94, 0xf9, 0xb8, + 0xa1, 0xcc, 0x35, 0x28, 0x7f, 0x01, 0xef, 0xb3, 0xc5, 0xfe, 0x98, 0x7c, 0xea, 0xb7, 0x4a, 0xb0, + 0x9c, 0x73, 0x0c, 0x44, 0x57, 0x8a, 0xee, 0x40, 0x77, 0xb1, 0x67, 0x39, 0xa6, 0xe8, 0xb5, 0x8e, + 0x3b, 0x68, 0xd1, 0x04, 0x74, 0x1c, 0xc8, 0x87, 0xfe, 0xb5, 0x81, 0xc3, 0x83, 0xd1, 0xa2, 0x56, + 0xee, 0xb8, 0x83, 0x2f, 0x92, 0x6f, 0xc1, 0xeb, 0xef, 0x19, 0x1e, 0x66, 0xfe, 0x83, 0xf1, 0xb6, + 0x69, 0x02, 0x7a, 0x05, 0x8e, 0xb2, 0xb9, 0x51, 0xef, 0x59, 0x7d, 0x8b, 0x78, 0xd9, 0xd8, 0xd0, + 0x28, 0x6a, 0x88, 0x65, 0x3e, 0x24, 0x79, 0x4d, 0x9b, 0x0d, 0x06, 0x15, 0xaa, 0x8e, 0xd3, 0xd7, + 0xfd, 0x8e, 0xe3, 0x61, 0xdd, 0x30, 0x3f, 0xa4, 0xe3, 0xa0, 0xa8, 0xcd, 0x38, 0x4e, 0xbf, 0x4d, + 0xd2, 0x1a, 0xe6, 0x87, 0xe8, 0x34, 0xcc, 0x74, 0xdc, 0x81, 0x8f, 0x03, 0x9d, 0xfc, 0xa1, 0x9b, + 0x75, 0x15, 0x0d, 0x58, 0xd2, 0xaa, 0x3b, 0xf0, 0x63, 0x04, 0x7d, 0xb2, 0x3c, 0x9b, 0x8e, 0x13, + 0x6c, 0xe0, 0x3e, 0x3d, 0x51, 0xdf, 0x1b, 0x74, 0xb1, 0x6b, 0x74, 0x31, 0xab, 0x9a, 0xd8, 0x71, + 0x93, 0x4e, 0xd4, 0x1f, 0x70, 0x12, 0x5a, 0x41, 0x6d, 0x6e, 0x2f, 0xfe, 0xe9, 0xa3, 0x77, 0x61, + 0x7a, 0x60, 0x53, 0x03, 0x58, 0xa9, 0x50, 0xde, 0xab, 0x63, 0x1c, 0xba, 0x5d, 0xde, 0x61, 0x2c, + 0xfc, 0x0c, 0x90, 0x0b, 0x40, 0xb7, 0xa0, 0xce, 0x15, 0xe5, 0x3f, 0x35, 0xdc, 0xa4, 0xb6, 0x80, + 0xaa, 0x60, 0x89, 0x51, 0xb4, 0x9f, 0x1a, 0x6e, 0x5c, 0x63, 0xf5, 0x5b, 0x30, 0x1b, 0x17, 0x7a, + 0x20, 0x5b, 0xba, 0x0b, 0x55, 0xa9, 0x91, 0xa4, 0xb7, 0xa9, 0x52, 0x7c, 0xeb, 0xeb, 0x62, 0x6c, + 0x95, 0x49, 0x42, 0xdb, 0xfa, 0x3a, 0xc5, 0x41, 0xd0, 0x9a, 0x51, 0x39, 0x25, 0x8d, 0x7d, 0xa8, + 0x06, 0x54, 0x25, 0xe8, 0x01, 0x71, 0xc9, 0x14, 0x63, 0xc0, 0x5d, 0x32, 0xf9, 0x4d, 0xd2, 0x3c, + 0xa7, 0x27, 0x6a, 0x40, 0x7f, 0x93, 0x34, 0x7a, 0x00, 0xcd, 0x8e, 0xd3, 0xe8, 0x6f, 0x5a, 0x04, + 0x7e, 0xc2, 0x61, 0x4c, 0x15, 0x8d, 0x7d, 0xa8, 0xbf, 0xa7, 0x00, 0xac, 0x1a, 0xae, 0xf1, 0xc8, + 0xea, 0x59, 0xc1, 0x3e, 0xba, 0x00, 0x35, 0xc3, 0x34, 0xf5, 0x8e, 0x48, 0xb1, 0xb0, 0xc0, 0x95, + 0xcd, 0x1b, 0xa6, 0xb9, 0x1a, 0x4b, 0x46, 0x2f, 0xc1, 0x02, 0x71, 0xa8, 0x32, 0x2d, 0x03, 0x9a, + 0xd5, 0x48, 0x86, 0x44, 0x7c, 0x03, 0x56, 0x88, 0x5c, 0xa3, 0xff, 0xc8, 0xc2, 0x76, 0x20, 0xf3, + 0x30, 0x04, 0xda, 0x92, 0x61, 0x9a, 0x0d, 0x96, 0x1d, 0xe7, 0x54, 0xff, 0x60, 0x1a, 0x4e, 0xca, + 0x3d, 0x9e, 0x44, 0x83, 0xdc, 0x82, 0xd9, 0x44, 0x7d, 0x53, 0x38, 0x8a, 0xa8, 0x85, 0x9a, 0x44, + 0x9b, 0xc0, 0x22, 0x14, 0x52, 0x58, 0x84, 0x4c, 0xa4, 0x49, 0xf1, 0x13, 0x42, 0x9a, 0x94, 0x3e, + 0x26, 0xd2, 0x64, 0xf2, 0xb0, 0x48, 0x93, 0xd9, 0xb1, 0x91, 0x26, 0x2f, 0x50, 0xd7, 0x2b, 0x4a, + 0xa4, 0xe1, 0x00, 0xf3, 0x09, 0xd5, 0x50, 0xba, 0x2d, 0xc0, 0x8e, 0x09, 0x44, 0xca, 0xf4, 0x41, + 0x10, 0x29, 0xe5, 0x43, 0x22, 0x52, 0x16, 0x3e, 0x11, 0x44, 0xca, 0x19, 0x98, 0xb5, 0x1d, 0xdd, + 0xc6, 0x4f, 0x75, 0xd2, 0xf5, 0x3e, 0xc5, 0xb9, 0x94, 0x35, 0xb0, 0x9d, 0x4d, 0xfc, 0xb4, 0x45, + 0x52, 0xd0, 0x59, 0x98, 0xed, 0x1b, 0xfe, 0x63, 0x6c, 0x52, 0x68, 0x88, 0xbf, 0x52, 0xa5, 0x36, + 0x3b, 0xc3, 0xd2, 0x5a, 0x24, 0x09, 0x3d, 0x0f, 0x61, 0x5b, 0x39, 0xd1, 0x1c, 0x25, 0xaa, 0x8a, + 0x54, 0x46, 0x16, 0x43, 0xb7, 0xcc, 0x1f, 0x12, 0xdd, 0x52, 0x3b, 0x08, 0xba, 0xe5, 0x12, 0xd4, + 0xc4, 0x6f, 0x01, 0x6f, 0x61, 0xa7, 0x15, 0x14, 0xd9, 0x32, 0x2f, 0xf2, 0x04, 0x84, 0x25, 0x0f, + 0x0c, 0x03, 0x43, 0xc1, 0x30, 0x7f, 0xaa, 0xf0, 0x75, 0x73, 0x38, 0x48, 0xf9, 0x29, 0xbc, 0x04, + 0xa0, 0x50, 0x0e, 0x03, 0xa0, 0x40, 0xdb, 0xb9, 0x10, 0x93, 0x0b, 0xf9, 0x92, 0x46, 0x81, 0x4c, + 0x54, 0x0b, 0x90, 0xcc, 0x41, 0x07, 0x0a, 0x87, 0x51, 0xb0, 0x99, 0x9a, 0xc2, 0x28, 0x6a, 0x50, + 0xec, 0x72, 0x60, 0x45, 0x51, 0x23, 0x3f, 0xf3, 0x2c, 0xb8, 0x98, 0x67, 0xc1, 0xea, 0x46, 0xb8, + 0x7a, 0xfe, 0x24, 0x90, 0x7f, 0xea, 0x7f, 0x2a, 0x70, 0x92, 0xcb, 0xcb, 0x81, 0xc7, 0x65, 0x0c, + 0x5a, 0x25, 0x67, 0xd0, 0x76, 0x3c, 0x6c, 0x62, 0x3b, 0xb0, 0x8c, 0x1e, 0x8d, 0xc7, 0xc4, 0x81, + 0x78, 0x94, 0x4c, 0x43, 0xc2, 0xb3, 0x30, 0xcb, 0x40, 0xb4, 0x7c, 0x21, 0xcd, 0xb0, 0xb2, 0x33, + 0x14, 0x47, 0xcb, 0xd7, 0xca, 0x5b, 0x59, 0x8e, 0xb2, 0x94, 0xbb, 0x03, 0x33, 0xd2, 0x5f, 0xaa, + 0x0e, 0x2c, 0xe7, 0x40, 0x13, 0x32, 0x2d, 0x42, 0x49, 0x5b, 0xc4, 0x50, 0x25, 0xa5, 0x2d, 0xe2, + 0x5b, 0x0a, 0x9c, 0x4e, 0x2d, 0xe8, 0x3f, 0x7b, 0xcd, 0xaa, 0x7f, 0xa1, 0x84, 0xf6, 0x93, 0x1c, + 0x5d, 0xab, 0xe9, 0xd1, 0xf5, 0xfc, 0xb0, 0xfd, 0x89, 0xcc, 0xf1, 0xf5, 0x5e, 0xee, 0xf8, 0x7a, + 0x69, 0xe8, 0x5e, 0xc7, 0x28, 0x7d, 0xfe, 0x51, 0x01, 0x8e, 0xe5, 0x56, 0x20, 0x11, 0xde, 0x2a, + 0xc9, 0xf0, 0x96, 0x87, 0xc6, 0xd1, 0x62, 0x86, 0x85, 0xc6, 0x74, 0xbd, 0xc2, 0x63, 0x50, 0xbd, + 0x6f, 0x3c, 0xb3, 0xfa, 0x83, 0x3e, 0x8f, 0x8d, 0x89, 0xb8, 0x0d, 0x96, 0x72, 0x98, 0xe0, 0xf8, + 0x0a, 0x2c, 0xb2, 0x79, 0x8b, 0xc6, 0x67, 0x11, 0x07, 0x8b, 0x91, 0x17, 0x58, 0x1e, 0x09, 0xd5, + 0x04, 0xc3, 0x03, 0xa8, 0x1a, 0xbb, 0xbb, 0x96, 0x4d, 0xd5, 0xc6, 0x62, 0xe5, 0x62, 0x0e, 0xb6, + 0x66, 0xd5, 0x1d, 0x50, 0x57, 0xd0, 0xe0, 0xf4, 0xda, 0xac, 0xe0, 0x24, 0x21, 0xb5, 0xfa, 0xc5, + 0xd0, 0xd2, 0x93, 0x84, 0xe8, 0x18, 0x94, 0x59, 0x4b, 0x7d, 0xe6, 0x21, 0x4a, 0xda, 0x34, 0x6d, + 0xa6, 0xff, 0x58, 0x68, 0x88, 0x4d, 0xe8, 0x0c, 0x18, 0x4d, 0x68, 0x29, 0xbf, 0xda, 0x80, 0x85, + 0x50, 0xe7, 0x43, 0x71, 0x63, 0x31, 0x1c, 0x58, 0x41, 0xc6, 0x81, 0xd9, 0x30, 0xb5, 0x86, 0x9f, + 0x58, 0x1d, 0xfc, 0x89, 0x20, 0xed, 0xcf, 0xc0, 0x8c, 0x8b, 0xbd, 0xbe, 0xe5, 0xfb, 0x61, 0x04, + 0x55, 0xd1, 0xe2, 0x49, 0xea, 0x69, 0xa8, 0xac, 0xae, 0x35, 0x79, 0x91, 0x19, 0x55, 0x55, 0xff, + 0x6b, 0x0a, 0xe6, 0x93, 0x03, 0xe0, 0x66, 0x0a, 0x97, 0x76, 0x32, 0x73, 0x4f, 0x33, 0x63, 0x33, + 0x3f, 0x04, 0xb5, 0x17, 0xc6, 0x00, 0xb5, 0xaf, 0xc0, 0x74, 0xc7, 0xe9, 0xf7, 0x0d, 0xdb, 0x14, + 0xf7, 0x25, 0xf8, 0x27, 0xa9, 0xa9, 0xe1, 0x75, 0xd9, 0x36, 0x7e, 0x45, 0xa3, 0xbf, 0x89, 0x7d, + 0x12, 0x4f, 0x6d, 0xd9, 0x14, 0xd9, 0x46, 0x4d, 0xa8, 0xa2, 0x01, 0x4f, 0x5a, 0xb3, 0x3c, 0x74, + 0x1e, 0x4a, 0xd8, 0x7e, 0x22, 0x4c, 0x46, 0xda, 0x4e, 0x16, 0xeb, 0x4f, 0x8d, 0x52, 0xa0, 0x0b, + 0x30, 0xd5, 0x27, 0x36, 0x2f, 0xd0, 0x0f, 0x0b, 0xa9, 0x7b, 0x05, 0x1a, 0x27, 0x40, 0x2f, 0xc3, + 0xb4, 0x49, 0xb5, 0x27, 0x16, 0x5c, 0x48, 0xc2, 0xc8, 0xd1, 0x2c, 0x4d, 0x90, 0xa0, 0x77, 0xc2, + 0xb3, 0x8c, 0x4a, 0xfa, 0x90, 0x31, 0xa1, 0xe6, 0xcc, 0x63, 0x8c, 0x4d, 0x79, 0x43, 0x00, 0xd2, + 0x27, 0x22, 0x49, 0x29, 0xc3, 0xb7, 0x05, 0x8e, 0x41, 0xb9, 0xe7, 0x74, 0x99, 0xf5, 0xcc, 0xb0, + 0xcb, 0x36, 0x3d, 0xa7, 0x4b, 0x8d, 0x67, 0x11, 0x26, 0xfd, 0xc0, 0xb4, 0x6c, 0x1a, 0xb7, 0x96, + 0x35, 0xf6, 0x41, 0x3c, 0x08, 0xfd, 0xa1, 0x3b, 0x76, 0x07, 0xaf, 0x54, 0x69, 0x56, 0x85, 0xa6, + 0x6c, 0xd9, 0x1d, 0xba, 0x7e, 0x0f, 0x82, 0xfd, 0x95, 0x39, 0x9a, 0x4e, 0x7e, 0x46, 0x47, 0x0a, + 0xf3, 0x39, 0x47, 0x0a, 0x89, 0x0a, 0x67, 0x1c, 0x29, 0xd4, 0x72, 0x27, 0xb4, 0x24, 0xaf, 0x60, + 0x21, 0x31, 0xfb, 0xea, 0x5a, 0x53, 0x17, 0x5d, 0xb3, 0x90, 0xbe, 0x23, 0x10, 0x9a, 0xbd, 0x06, + 0xe1, 0xcf, 0xcf, 0xf4, 0x44, 0xe7, 0xfb, 0x0a, 0x2c, 0xad, 0xd2, 0xf3, 0xec, 0x98, 0xe3, 0x3e, + 0x08, 0x14, 0xec, 0xd5, 0x10, 0x9f, 0x97, 0x01, 0xb2, 0x4a, 0x6a, 0x4a, 0xc0, 0xf3, 0x56, 0x61, + 0x4e, 0x88, 0xe5, 0xcc, 0xc5, 0x31, 0xc0, 0x7d, 0x55, 0x3f, 0xfe, 0xa9, 0xde, 0x86, 0xe5, 0x54, + 0xcd, 0xf9, 0xa9, 0x62, 0xf2, 0x32, 0x09, 0xab, 0x78, 0xfc, 0x32, 0x89, 0x7a, 0x0b, 0x8e, 0xb6, + 0x03, 0xc3, 0x0b, 0x52, 0xcd, 0x1e, 0x83, 0x97, 0xc2, 0xf6, 0x64, 0x5e, 0x8e, 0xac, 0x6b, 0xc3, + 0x62, 0x3b, 0x70, 0xdc, 0x43, 0x08, 0x25, 0x7e, 0x87, 0xb4, 0xdc, 0x19, 0x88, 0x49, 0x50, 0x7c, + 0xaa, 0xcb, 0x0c, 0x64, 0x98, 0x2e, 0xed, 0x4d, 0x58, 0x62, 0x18, 0xbf, 0xc3, 0x34, 0xe2, 0x98, + 0x40, 0x18, 0xa6, 0xe5, 0xde, 0x87, 0x23, 0xd2, 0x39, 0x07, 0xc7, 0xc4, 0x5c, 0x95, 0x31, 0x31, + 0xf9, 0x47, 0x4a, 0x21, 0x24, 0xe6, 0xb7, 0x0b, 0x31, 0x3f, 0x9e, 0x73, 0x30, 0xfe, 0x9a, 0x8c, + 0x88, 0x39, 0x9d, 0x2f, 0x55, 0x02, 0xc4, 0xa4, 0xad, 0xb3, 0x98, 0x61, 0x9d, 0x3b, 0xa9, 0x53, + 0xf7, 0x52, 0x1a, 0xd1, 0x94, 0xa8, 0xe1, 0xa7, 0x72, 0xde, 0xfe, 0x90, 0xa1, 0x66, 0xc2, 0xa2, + 0xc3, 0xa3, 0xf6, 0x57, 0x13, 0x47, 0xed, 0xc7, 0x87, 0xd4, 0x34, 0x3c, 0x64, 0xff, 0x6e, 0x09, + 0x2a, 0x61, 0x5e, 0x4a, 0xc3, 0x69, 0x55, 0x15, 0x32, 0x54, 0x15, 0x9f, 0x5f, 0x8b, 0x87, 0x9c, + 0x5f, 0x4b, 0x63, 0xcc, 0xaf, 0xc7, 0xa1, 0xc2, 0x2e, 0x8d, 0x79, 0x78, 0x97, 0xcf, 0x97, 0x65, + 0x9a, 0xa0, 0xe1, 0xdd, 0xc8, 0xc4, 0xa6, 0xc6, 0x34, 0xb1, 0x04, 0x42, 0x67, 0x3a, 0x89, 0xd0, + 0xb9, 0x19, 0xce, 0x7d, 0xe5, 0xf4, 0x89, 0x58, 0x28, 0x31, 0x73, 0xd6, 0x4b, 0x6c, 0x83, 0x57, + 0xd2, 0xdb, 0xe0, 0x11, 0xff, 0xc8, 0xf9, 0x8e, 0x35, 0xd9, 0x32, 0xf9, 0x0d, 0xb9, 0x69, 0xfa, + 0xdd, 0x34, 0x3f, 0x4b, 0xd7, 0xbf, 0xc5, 0x10, 0x39, 0x71, 0x13, 0xe4, 0xee, 0xf3, 0x35, 0xe9, + 0x30, 0x54, 0xc9, 0x98, 0xc6, 0x42, 0x97, 0x11, 0x3f, 0x00, 0xdd, 0x81, 0xa5, 0x24, 0x92, 0xef, + 0x40, 0xee, 0x2f, 0x07, 0x52, 0xfc, 0x93, 0x78, 0x30, 0x98, 0x83, 0x9f, 0xbd, 0x99, 0x82, 0x7a, + 0x8c, 0x6d, 0xbc, 0x57, 0x65, 0x54, 0xd8, 0x81, 0x4d, 0x2e, 0x05, 0x0a, 0xa3, 0xc1, 0x8a, 0xe1, + 0xf1, 0x6c, 0xb6, 0xa8, 0xa8, 0xf0, 0x94, 0x06, 0x5d, 0xd1, 0x90, 0x88, 0xdf, 0xdf, 0x63, 0xf9, + 0x53, 0x6c, 0x45, 0x23, 0x92, 0x1a, 0x74, 0xf3, 0x18, 0x3f, 0xb3, 0x02, 0xbd, 0xe3, 0x98, 0x98, + 0x1a, 0xf4, 0xa4, 0x56, 0x26, 0x09, 0xab, 0x8e, 0x89, 0xa3, 0xa1, 0x56, 0x3e, 0xe8, 0x50, 0xab, + 0x24, 0x86, 0xda, 0x12, 0x4c, 0x79, 0xd8, 0xf0, 0x1d, 0x9b, 0x9b, 0x24, 0xff, 0x22, 0x1d, 0xd1, + 0xc7, 0xbe, 0x4f, 0xca, 0xe0, 0xb1, 0x19, 0xff, 0x8c, 0xc5, 0x91, 0xb3, 0x43, 0xe2, 0xc8, 0x21, + 0xe8, 0xdc, 0x44, 0x1c, 0x59, 0x1d, 0x12, 0x47, 0x8e, 0x05, 0xce, 0x8d, 0x22, 0xe6, 0xb9, 0x51, + 0x11, 0x73, 0x3c, 0xe4, 0x9c, 0x97, 0x43, 0xce, 0xdb, 0xf1, 0x95, 0x75, 0x2d, 0x8d, 0x55, 0x18, + 0xbe, 0xa4, 0x8e, 0x8f, 0xed, 0x05, 0x69, 0x6c, 0xa3, 0x4b, 0x7c, 0x07, 0x1f, 0xa5, 0xf7, 0x7e, + 0xa5, 0xad, 0x28, 0xb6, 0xb9, 0xff, 0x59, 0xba, 0x82, 0x7f, 0x54, 0x60, 0x39, 0x35, 0x74, 0xb9, + 0x33, 0x78, 0x35, 0x01, 0x20, 0x1e, 0x8a, 0xdc, 0x15, 0xf8, 0xe1, 0x86, 0x84, 0x1f, 0xbe, 0x34, + 0x8c, 0x25, 0x07, 0x3e, 0x7c, 0x78, 0x48, 0xef, 0x37, 0x15, 0x40, 0x19, 0xbb, 0x10, 0x37, 0xc5, + 0x92, 0xe0, 0x00, 0x5b, 0x93, 0x7c, 0x55, 0xf0, 0x4e, 0xb4, 0x2a, 0x28, 0x1c, 0x64, 0xe7, 0x25, + 0xc4, 0x1a, 0xad, 0x43, 0x55, 0xde, 0x7c, 0xbc, 0x2e, 0x57, 0xe6, 0x54, 0x7e, 0x65, 0xa8, 0x81, + 0x30, 0x62, 0xf5, 0x27, 0x05, 0x38, 0xbd, 0xe3, 0x9a, 0x89, 0x90, 0x97, 0x17, 0x36, 0xbe, 0xab, + 0xbd, 0x29, 0xe3, 0xad, 0x0e, 0xa9, 0x89, 0xe2, 0x61, 0x34, 0x81, 0xbe, 0x9a, 0x85, 0x88, 0xbb, + 0x2d, 0x9d, 0x5d, 0x0f, 0x6f, 0xe0, 0x08, 0x70, 0xdc, 0xc7, 0x1d, 0x09, 0x2a, 0x9c, 0xc9, 0xaf, + 0x00, 0x0f, 0x8f, 0x7f, 0x19, 0xe6, 0xd7, 0x9f, 0xe1, 0x4e, 0x7b, 0xdf, 0xee, 0x1c, 0x40, 0xeb, + 0x35, 0x28, 0x76, 0xfa, 0x26, 0x3f, 0x35, 0x23, 0x3f, 0xe3, 0x11, 0x7f, 0x51, 0x8e, 0xf8, 0x75, + 0xa8, 0x45, 0x25, 0xf0, 0x71, 0xb8, 0x44, 0xc6, 0xa1, 0x49, 0x88, 0x89, 0xf0, 0x59, 0x8d, 0x7f, + 0xf1, 0x74, 0xec, 0xb1, 0x1b, 0x4e, 0x2c, 0x1d, 0x7b, 0x9e, 0x3c, 0x8d, 0x14, 0xe5, 0x69, 0x44, + 0xfd, 0xb6, 0x02, 0x33, 0xa4, 0x84, 0x8f, 0x55, 0x7f, 0xbe, 0xec, 0x2e, 0x46, 0xcb, 0xee, 0x70, + 0xf5, 0x5e, 0x8a, 0xaf, 0xde, 0xa3, 0x9a, 0x4f, 0xd2, 0xe4, 0x74, 0xcd, 0xa7, 0xc2, 0x74, 0xec, + 0x79, 0xea, 0x19, 0x98, 0x65, 0x75, 0xe3, 0x2d, 0xaf, 0x41, 0x71, 0xe0, 0xf5, 0x44, 0xff, 0x0d, + 0xbc, 0x9e, 0xfa, 0x0d, 0x05, 0xaa, 0x8d, 0x20, 0x30, 0x3a, 0x7b, 0x07, 0x68, 0x40, 0x58, 0xb9, + 0x42, 0xbc, 0x72, 0xe9, 0x46, 0x44, 0xd5, 0x2d, 0xe5, 0x54, 0x77, 0x52, 0xaa, 0xae, 0x0a, 0x73, + 0xa2, 0x2e, 0xb9, 0x15, 0xde, 0x04, 0xd4, 0x72, 0xbc, 0xe0, 0x9e, 0xe3, 0x3d, 0x35, 0x3c, 0xf3, + 0x60, 0x2b, 0x6c, 0x04, 0x25, 0xfe, 0xb4, 0x46, 0xf1, 0xfc, 0xa4, 0x46, 0x7f, 0xab, 0x2f, 0xc2, + 0x11, 0x49, 0x5e, 0x6e, 0xc1, 0xb7, 0x60, 0x86, 0x86, 0x05, 0x7c, 0xf1, 0xf5, 0x52, 0x1c, 0xf0, + 0x31, 0x22, 0x7c, 0x50, 0xd7, 0x60, 0x81, 0x04, 0x88, 0x34, 0x3d, 0xf4, 0x2f, 0x57, 0x12, 0xeb, + 0x93, 0xe5, 0x94, 0x88, 0xc4, 0xda, 0xe4, 0x67, 0x0a, 0x4c, 0x32, 0x6c, 0x47, 0x32, 0x68, 0x3b, + 0x4e, 0x26, 0x5e, 0xd7, 0xd1, 0x03, 0xa3, 0x1b, 0x3e, 0x5b, 0x42, 0x12, 0xb6, 0x8d, 0x2e, 0x3d, + 0x85, 0xa3, 0x99, 0xa6, 0xd5, 0xc5, 0x7e, 0x20, 0x4e, 0x8e, 0x67, 0x48, 0xda, 0x1a, 0x4b, 0x22, + 0x8a, 0xa1, 0x07, 0xec, 0x25, 0xba, 0x5b, 0x4a, 0x7f, 0xa3, 0xf3, 0xec, 0x54, 0x67, 0xf8, 0x71, + 0x29, 0x3d, 0xed, 0xa9, 0x43, 0x39, 0x71, 0xce, 0x19, 0x7e, 0xa3, 0x0b, 0x50, 0xa2, 0x1b, 0xf9, + 0xd3, 0xc3, 0xb4, 0x44, 0x49, 0x88, 0x55, 0xb8, 0x96, 0x6d, 0x63, 0x93, 0xbf, 0xa9, 0xc1, 0xbf, + 0xd4, 0x77, 0x00, 0xc5, 0x95, 0xc7, 0x3b, 0xe8, 0x02, 0x4c, 0x51, 0xdd, 0x8a, 0xa8, 0x7a, 0x21, + 0x25, 0x5a, 0xe3, 0x04, 0xea, 0x57, 0x00, 0xb1, 0xb2, 0xa4, 0x48, 0xfa, 0x20, 0x1d, 0x38, 0x24, + 0xa6, 0xfe, 0x9e, 0x02, 0x47, 0x24, 0xe9, 0xbc, 0x7e, 0x2f, 0xca, 0xe2, 0x33, 0xaa, 0xc7, 0x45, + 0xbf, 0x25, 0x4d, 0xf0, 0x17, 0xd2, 0xd5, 0xf8, 0x7f, 0x9a, 0xdc, 0xff, 0x59, 0x01, 0x68, 0x0c, + 0x82, 0x3d, 0xbe, 0x29, 0x1c, 0xef, 0x44, 0x25, 0xd1, 0x89, 0x75, 0x28, 0xbb, 0x86, 0xef, 0x3f, + 0x75, 0x3c, 0xb1, 0xe0, 0x0d, 0xbf, 0xe9, 0x56, 0xee, 0x80, 0x3f, 0x24, 0x52, 0xd1, 0xe8, 0x6f, + 0xf4, 0x3c, 0xcc, 0xb1, 0xf7, 0x74, 0x74, 0xc3, 0x34, 0x3d, 0x01, 0x22, 0xad, 0x68, 0x55, 0x96, + 0xda, 0x60, 0x89, 0x84, 0xcc, 0xa2, 0xc7, 0x3a, 0xc1, 0xbe, 0x1e, 0x38, 0x8f, 0xb1, 0xcd, 0x17, + 0xb1, 0x55, 0x91, 0xba, 0x4d, 0x12, 0xd9, 0x11, 0x71, 0xd7, 0xf2, 0x03, 0x4f, 0x90, 0x89, 0xc3, + 0x74, 0x9e, 0x4a, 0xc9, 0xd4, 0x3f, 0x53, 0xa0, 0xd6, 0x1a, 0xf4, 0x7a, 0x4c, 0xb9, 0x87, 0xe9, + 0xe4, 0x8b, 0xbc, 0x29, 0x85, 0xb4, 0xc9, 0x47, 0x8a, 0xe2, 0x4d, 0xfc, 0x44, 0xf6, 0xdd, 0xae, + 0xc2, 0x42, 0xac, 0xc6, 0xdc, 0x70, 0xa4, 0xa5, 0x86, 0x22, 0x2f, 0x35, 0xd4, 0x06, 0x20, 0xb6, + 0xd5, 0x74, 0xe8, 0x56, 0xaa, 0x47, 0xe1, 0x88, 0x24, 0x82, 0x4f, 0xc5, 0x17, 0xa1, 0xca, 0x01, + 0x8d, 0xdc, 0x20, 0x8e, 0x41, 0x99, 0xb8, 0xd4, 0x8e, 0x65, 0x0a, 0xe4, 0xcc, 0xb4, 0xeb, 0x98, + 0xab, 0x96, 0xe9, 0xa9, 0x5f, 0x84, 0x2a, 0x7f, 0x31, 0x81, 0xd3, 0xde, 0x81, 0x39, 0x7e, 0xd0, + 0xaa, 0x4b, 0x57, 0x8c, 0x8f, 0x65, 0xa0, 0x66, 0x85, 0x2a, 0xec, 0xf8, 0xa7, 0xfa, 0x55, 0xa8, + 0xb3, 0x68, 0x41, 0x12, 0x2c, 0x1a, 0x78, 0x07, 0x04, 0x68, 0x6d, 0x88, 0x7c, 0x99, 0xb3, 0xea, + 0xc5, 0x3f, 0xd5, 0x93, 0x70, 0x3c, 0x53, 0x3e, 0x6f, 0xbd, 0x0b, 0xb5, 0x28, 0x83, 0xdd, 0x83, + 0x0d, 0xe1, 0x40, 0x4a, 0x0c, 0x0e, 0xb4, 0x14, 0x86, 0xf0, 0x05, 0x31, 0x73, 0xd1, 0x28, 0x3d, + 0x5a, 0x02, 0x16, 0xf3, 0x96, 0x80, 0x25, 0x69, 0x09, 0xa8, 0x6e, 0x84, 0x3a, 0xe4, 0x0b, 0xf1, + 0xdb, 0x74, 0xab, 0x80, 0x95, 0x2d, 0x9c, 0xda, 0x89, 0xec, 0xf6, 0x31, 0x22, 0x2d, 0x46, 0xaf, + 0x5e, 0x80, 0xaa, 0xec, 0xde, 0x62, 0x1e, 0x4b, 0x91, 0x3d, 0xd6, 0xaf, 0xc0, 0x92, 0x26, 0x21, + 0x00, 0xef, 0x61, 0x23, 0x18, 0x78, 0xd8, 0x47, 0x6f, 0x42, 0x3d, 0xe3, 0x89, 0x23, 0x9d, 0xaf, + 0x0c, 0x99, 0x98, 0xe5, 0xd4, 0x4b, 0x47, 0x1b, 0x6c, 0x5d, 0xf8, 0x22, 0xcc, 0x53, 0x84, 0x62, + 0xec, 0x66, 0x2f, 0xd3, 0x11, 0x7d, 0xfb, 0x66, 0x33, 0xba, 0xc6, 0x6b, 0x86, 0xef, 0x6d, 0xf0, + 0xf2, 0x33, 0xcf, 0xd8, 0xde, 0x86, 0xf2, 0x2e, 0xaf, 0x17, 0x1f, 0x90, 0x6a, 0x86, 0x32, 0x12, + 0x2d, 0xd0, 0x42, 0x1e, 0x75, 0x0b, 0xe6, 0x39, 0x4d, 0xd8, 0xbc, 0xdb, 0x43, 0x41, 0x31, 0xac, + 0x79, 0xb9, 0x70, 0x17, 0xf5, 0x7b, 0x05, 0x98, 0x4b, 0xf8, 0xf8, 0x57, 0x12, 0x0b, 0xba, 0x2c, + 0x73, 0x4c, 0x2c, 0xe7, 0x6e, 0x48, 0xde, 0x5e, 0x86, 0xe0, 0x0c, 0xbf, 0x04, 0xba, 0x0e, 0xb5, + 0x04, 0x9e, 0x53, 0x60, 0xb9, 0xeb, 0xf9, 0x8a, 0xd1, 0xe6, 0x65, 0xb0, 0xa7, 0x8f, 0xde, 0x88, + 0xe9, 0xb5, 0x94, 0x5e, 0x86, 0x26, 0x74, 0x16, 0x29, 0xf4, 0xf0, 0x13, 0xcd, 0x22, 0x9f, 0x7e, + 0xef, 0xf9, 0x84, 0x9f, 0xdb, 0xa7, 0x7a, 0x0e, 0x66, 0x76, 0xf2, 0x9e, 0x34, 0x2a, 0x09, 0x98, + 0xe8, 0xeb, 0xb0, 0x78, 0xcf, 0xea, 0x61, 0x7f, 0xdf, 0x0f, 0x70, 0xbf, 0x49, 0x67, 0x85, 0x5d, + 0x0b, 0x7b, 0xe8, 0x14, 0x00, 0x35, 0x4a, 0xd7, 0xb1, 0xc2, 0x27, 0x56, 0x62, 0x29, 0xea, 0x8f, + 0x15, 0x98, 0x8f, 0x18, 0xc7, 0xc1, 0x02, 0xbf, 0x06, 0x93, 0xbb, 0xbe, 0xd8, 0xd0, 0x4d, 0x1c, + 0x73, 0x65, 0x55, 0x41, 0x2b, 0xed, 0xfa, 0x4d, 0x13, 0xbd, 0x0e, 0x30, 0xf0, 0xb1, 0xc9, 0x8f, + 0xbd, 0x47, 0xa0, 0xb3, 0x2b, 0x84, 0x94, 0x9d, 0x83, 0xdf, 0x80, 0x19, 0xcb, 0x76, 0x4c, 0x4c, + 0x21, 0x11, 0xe6, 0x28, 0x64, 0x36, 0x30, 0xda, 0x1d, 0x1f, 0x9b, 0xea, 0x1f, 0x46, 0xc0, 0x86, + 0xcf, 0x73, 0x0b, 0xd5, 0x3f, 0x17, 0x71, 0x91, 0xe8, 0x76, 0x3e, 0x66, 0x1e, 0xc0, 0x02, 0x9b, + 0xde, 0x76, 0xc3, 0x32, 0x33, 0xaf, 0xac, 0x25, 0x1a, 0xa7, 0xd5, 0x2c, 0x1e, 0x11, 0x0b, 0x26, + 0xd4, 0x82, 0xa3, 0xd1, 0x42, 0x25, 0x2e, 0xad, 0x30, 0x5a, 0xda, 0x62, 0x27, 0xb6, 0xff, 0x2f, + 0x18, 0xd5, 0x5b, 0x70, 0x34, 0x71, 0x2b, 0x65, 0xfc, 0x43, 0xa0, 0x77, 0x13, 0x5b, 0xb6, 0x91, + 0x97, 0xb8, 0x2a, 0x5f, 0x86, 0x1c, 0x76, 0x7f, 0x88, 0xdf, 0xcb, 0xdb, 0x81, 0x63, 0xd2, 0x7e, + 0xb2, 0x54, 0x97, 0x1b, 0x89, 0x65, 0xc3, 0x99, 0x7c, 0x79, 0x89, 0xf5, 0xc3, 0x7f, 0x2b, 0xb0, + 0x98, 0x45, 0x70, 0xc8, 0x63, 0x8e, 0x0f, 0x72, 0x2e, 0x52, 0xbf, 0x3a, 0xaa, 0x42, 0x9f, 0xca, + 0xb1, 0xd0, 0x26, 0xbb, 0x86, 0x39, 0xba, 0x4f, 0x8a, 0xe3, 0xf5, 0xc9, 0xcf, 0x0a, 0xb1, 0xa3, + 0xbc, 0x21, 0x57, 0x25, 0x3f, 0xc6, 0xfe, 0xf9, 0x6a, 0xe2, 0xa6, 0xe4, 0x4b, 0x99, 0x8c, 0x23, + 0x2e, 0x4a, 0x6a, 0x59, 0xdb, 0x42, 0x57, 0x47, 0x49, 0xfa, 0xdc, 0xde, 0x93, 0xfc, 0x9d, 0x02, + 0xcc, 0xc9, 0x1d, 0x82, 0xde, 0xc9, 0xb8, 0x26, 0x79, 0x7a, 0x44, 0x03, 0xa5, 0x5b, 0x92, 0xfc, + 0x5a, 0x62, 0x61, 0xfc, 0x6b, 0x89, 0xc5, 0xf1, 0xae, 0x25, 0xde, 0x85, 0xb9, 0xa7, 0x9e, 0x15, + 0x18, 0x8f, 0x7a, 0x58, 0xef, 0x19, 0xfb, 0xd8, 0xcb, 0x9a, 0x61, 0x93, 0xae, 0xa8, 0x2a, 0x58, + 0x1e, 0x12, 0x0e, 0xba, 0x60, 0x7e, 0x6a, 0xb8, 0x7c, 0xdd, 0x2d, 0x85, 0xf2, 0xed, 0xa7, 0x86, + 0xcb, 0x78, 0x28, 0x89, 0xfa, 0x8d, 0x02, 0x1c, 0xcd, 0xbc, 0x4c, 0xf7, 0xf1, 0x55, 0x74, 0x29, + 0xae, 0xa2, 0x83, 0xdc, 0x50, 0x2c, 0x1e, 0xe8, 0x86, 0x62, 0x33, 0x47, 0x61, 0x59, 0x58, 0x91, + 0xe1, 0x7a, 0x53, 0xff, 0x5a, 0x81, 0xb2, 0xa8, 0xd4, 0xc8, 0xfb, 0x82, 0xcb, 0x03, 0x42, 0xa6, + 0xd3, 0x3b, 0x1d, 0xb6, 0x61, 0x3b, 0xba, 0x8f, 0x49, 0x2c, 0x3d, 0xf2, 0x76, 0xd6, 0x22, 0xe5, + 0x5b, 0x75, 0x3c, 0xbc, 0x69, 0xd8, 0x4e, 0x9b, 0x31, 0xa1, 0x06, 0xd4, 0x98, 0x3c, 0x2a, 0x8a, + 0x08, 0x1d, 0x39, 0x51, 0xce, 0x51, 0x06, 0x22, 0x84, 0x08, 0xf3, 0xd5, 0xbf, 0x53, 0x60, 0x3e, + 0xa1, 0xd9, 0x5f, 0xbc, 0x46, 0x7c, 0xa7, 0x08, 0x33, 0xb1, 0x5e, 0x1e, 0xd1, 0x80, 0x55, 0x58, + 0x10, 0x78, 0x2f, 0x1f, 0x07, 0xe3, 0xdd, 0x8e, 0x9b, 0xe7, 0x1c, 0x6d, 0x1c, 0xb0, 0x38, 0xea, + 0x0e, 0xcc, 0x1b, 0x4f, 0x0c, 0xab, 0x47, 0x2d, 0x68, 0xac, 0x10, 0x65, 0x2e, 0xa4, 0x0f, 0x23, + 0x31, 0xd6, 0xee, 0xb1, 0xee, 0xc8, 0x01, 0xa5, 0x8d, 0xae, 0x2a, 0xfa, 0x7e, 0x0c, 0xf1, 0x38, + 0xf4, 0xaa, 0xa2, 0xef, 0x87, 0xe5, 0xd1, 0x0b, 0x2d, 0xf4, 0x8e, 0xa6, 0xcf, 0x1f, 0xf6, 0xc9, + 0x2f, 0x8f, 0xd0, 0xde, 0xa3, 0xa4, 0x44, 0x61, 0x7d, 0xe3, 0x43, 0xc7, 0xd3, 0xe3, 0xfc, 0xd3, + 0x23, 0x14, 0x46, 0x39, 0x5a, 0xa1, 0x10, 0xf5, 0x2f, 0x15, 0xa8, 0x84, 0x7e, 0x64, 0x44, 0x0f, + 0x35, 0x61, 0x91, 0xde, 0xfe, 0x49, 0x6a, 0x78, 0x44, 0x27, 0x21, 0xc2, 0xd4, 0x90, 0xb5, 0xdc, + 0x80, 0x1a, 0x15, 0x15, 0x57, 0xf5, 0xa8, 0x8e, 0xf2, 0x45, 0x35, 0x59, 0x40, 0xf9, 0x37, 0x05, + 0x40, 0x69, 0x57, 0xf2, 0x0b, 0x63, 0x64, 0xf1, 0x4e, 0x2b, 0x8d, 0xdf, 0xe9, 0xf7, 0xe1, 0x48, + 0xc7, 0xe9, 0xf7, 0x2d, 0x7a, 0x73, 0xcc, 0xf1, 0xf6, 0xc7, 0x33, 0xb7, 0x05, 0xc6, 0xc3, 0xf4, + 0xc4, 0xd4, 0xf7, 0x36, 0x1c, 0xd3, 0xb0, 0xe3, 0x62, 0x3b, 0x74, 0xfd, 0x0f, 0x9d, 0xee, 0x01, + 0xe2, 0xdb, 0x13, 0x50, 0xcf, 0xe2, 0xe7, 0xfb, 0x27, 0x03, 0xa8, 0xaf, 0xee, 0xe1, 0xce, 0x63, + 0xba, 0xfc, 0x3a, 0x0c, 0x66, 0xab, 0x0e, 0xe5, 0x9e, 0xd3, 0x61, 0x8f, 0x41, 0xf3, 0x2d, 0x46, + 0xf1, 0x3d, 0xe4, 0x74, 0xe7, 0x24, 0x1c, 0xcf, 0x2c, 0x96, 0xd7, 0x0a, 0x41, 0xed, 0x3e, 0x0e, + 0xd6, 0x9f, 0x60, 0x3b, 0x0c, 0x9f, 0xd5, 0x1f, 0x16, 0x62, 0x81, 0x3a, 0xcd, 0x3a, 0x00, 0xd6, + 0x0d, 0xb5, 0x20, 0x5a, 0x39, 0xe8, 0x98, 0x70, 0xb3, 0x37, 0x4b, 0xd9, 0x8b, 0xc2, 0xd9, 0x87, + 0xdd, 0xb4, 0x10, 0xfa, 0x54, 0x69, 0xf4, 0x1a, 0x53, 0x98, 0x96, 0x80, 0x40, 0x14, 0x93, 0x10, + 0x88, 0x77, 0x01, 0xc5, 0x43, 0x71, 0xbe, 0xdd, 0x50, 0x1a, 0xe3, 0x01, 0xaa, 0x9a, 0x9b, 0x7c, + 0x2a, 0x2d, 0xe7, 0x19, 0xa9, 0xc9, 0x43, 0x3d, 0x23, 0xa5, 0x9e, 0x82, 0x13, 0x24, 0xc0, 0xde, + 0xc0, 0x81, 0x67, 0x75, 0xd6, 0xb0, 0xdf, 0xf1, 0x2c, 0x37, 0x70, 0x42, 0xf8, 0x95, 0xaa, 0xc3, + 0xc9, 0x9c, 0x7c, 0xae, 0xee, 0xb7, 0x61, 0xc6, 0x8c, 0x92, 0xb3, 0x76, 0xbc, 0x92, 0xbc, 0x5a, + 0x9c, 0x41, 0x7d, 0x1f, 0x6a, 0x49, 0x82, 0xcc, 0x9d, 0x24, 0x04, 0xa5, 0x3d, 0xdc, 0x73, 0xc5, + 0x55, 0x3f, 0xf2, 0x9b, 0x68, 0x9d, 0xad, 0x5d, 0x1e, 0xe3, 0x7d, 0x71, 0x22, 0x52, 0xa1, 0x29, + 0x5f, 0xc0, 0xfb, 0x61, 0xdb, 0xa4, 0x77, 0x4d, 0x3c, 0xab, 0x93, 0x6c, 0x5b, 0x46, 0x7e, 0xd4, + 0x36, 0xd2, 0x6d, 0x7d, 0x96, 0xcc, 0xdb, 0x76, 0x32, 0xf7, 0xcd, 0x14, 0xca, 0x0b, 0xae, 0x63, + 0xf2, 0xdf, 0xea, 0x77, 0x15, 0x58, 0x48, 0x51, 0x8c, 0x79, 0xca, 0xf5, 0x32, 0x4c, 0x8b, 0x72, + 0x0b, 0x69, 0x48, 0x33, 0x93, 0xa5, 0x09, 0x12, 0xd4, 0x84, 0x85, 0xc8, 0xa2, 0x05, 0x5f, 0x31, + 0xdd, 0x17, 0xf1, 0x85, 0x0b, 0xad, 0x6e, 0xad, 0x93, 0x48, 0x51, 0x3b, 0x50, 0x4b, 0x52, 0x8d, + 0x33, 0xa6, 0x0e, 0x54, 0x5f, 0xf5, 0x07, 0x0a, 0x4c, 0xb1, 0xb4, 0xcc, 0xce, 0x96, 0xa6, 0x83, + 0x42, 0x72, 0x3a, 0x78, 0x03, 0x66, 0x98, 0x1c, 0x3d, 0xbc, 0xe8, 0x39, 0x27, 0x6f, 0xf4, 0x33, + 0xd1, 0x74, 0xb4, 0x42, 0x3f, 0xfc, 0x4d, 0x9a, 0xc1, 0xec, 0x85, 0xae, 0x4c, 0x04, 0x70, 0x7d, + 0x86, 0xa6, 0x51, 0x97, 0x4b, 0x42, 0x66, 0xbe, 0x86, 0x19, 0xe1, 0x9b, 0xf9, 0xd6, 0xd6, 0x12, + 0x7d, 0xa5, 0x33, 0xb5, 0xd5, 0xad, 0x6e, 0xd3, 0x67, 0x34, 0xd3, 0x5b, 0xd4, 0xe8, 0x4d, 0x19, + 0xe8, 0xf0, 0x7c, 0x0a, 0x6b, 0x20, 0xb1, 0x0d, 0x3c, 0xf6, 0x68, 0x3e, 0xc7, 0x3b, 0x7c, 0x00, + 0xc7, 0x72, 0x69, 0xd0, 0x5b, 0xe1, 0x9b, 0xc5, 0xa6, 0x67, 0x3d, 0xe1, 0x1b, 0x0b, 0x73, 0xf2, + 0xfb, 0x28, 0xab, 0x94, 0x60, 0x8d, 0xe6, 0x8b, 0xd7, 0x8c, 0xd9, 0x97, 0xfa, 0x4f, 0x8a, 0x38, + 0xe9, 0x97, 0x9e, 0xa4, 0x92, 0xc1, 0x14, 0xe3, 0x99, 0x6e, 0xfc, 0xe9, 0xe1, 0xc2, 0xc7, 0x7e, + 0x7a, 0xb8, 0x78, 0x98, 0x9b, 0x73, 0xea, 0x39, 0x38, 0x3b, 0xa4, 0x35, 0xac, 0x33, 0x2e, 0xbe, + 0x00, 0x65, 0xf1, 0x4f, 0x1c, 0xd0, 0x34, 0x14, 0xb7, 0x57, 0x5b, 0xb5, 0x09, 0xf2, 0x63, 0x67, + 0xad, 0x55, 0x53, 0x50, 0x19, 0x4a, 0xed, 0xd5, 0xed, 0x56, 0xad, 0x70, 0xb1, 0x0f, 0xb5, 0xe4, + 0xff, 0x31, 0x40, 0xcb, 0x70, 0xa4, 0xa5, 0x6d, 0xb5, 0x1a, 0xf7, 0x1b, 0xdb, 0xcd, 0xad, 0x4d, + 0xbd, 0xa5, 0x35, 0xdf, 0x6b, 0x6c, 0xaf, 0xd7, 0x26, 0xd0, 0x59, 0x38, 0x19, 0xcf, 0x78, 0xb0, + 0xd5, 0xde, 0xd6, 0xb7, 0xb7, 0xf4, 0xd5, 0xad, 0xcd, 0xed, 0x46, 0x73, 0x73, 0x5d, 0xab, 0x29, + 0xe8, 0x24, 0x1c, 0x8b, 0x93, 0xdc, 0x6d, 0xae, 0x35, 0xb5, 0xf5, 0x55, 0xf2, 0xbb, 0xf1, 0xb0, + 0x56, 0xb8, 0xf8, 0x16, 0x54, 0xa5, 0xfb, 0x6f, 0xa4, 0x4a, 0xad, 0xad, 0xb5, 0xda, 0x04, 0xaa, + 0x42, 0x25, 0x2e, 0xa7, 0x0c, 0xa5, 0xcd, 0xad, 0xb5, 0xf5, 0x5a, 0x01, 0x01, 0x4c, 0x6d, 0x37, + 0xb4, 0xfb, 0xeb, 0xdb, 0xb5, 0xe2, 0xc5, 0x57, 0x60, 0x25, 0xef, 0x1e, 0x28, 0xaa, 0xc0, 0xe4, + 0x06, 0xf6, 0xba, 0xb8, 0x36, 0x41, 0x58, 0xda, 0x64, 0x64, 0x04, 0x35, 0xe5, 0xe2, 0xad, 0xe4, + 0x33, 0x46, 0x18, 0x2d, 0x40, 0xb5, 0xdd, 0xd8, 0x5c, 0xbb, 0xbb, 0xf5, 0x65, 0x5d, 0x5b, 0x6f, + 0xac, 0xbd, 0x5f, 0x9b, 0x40, 0x8b, 0x50, 0x13, 0x49, 0x9b, 0x5b, 0xdb, 0x2c, 0x55, 0xb9, 0xf8, + 0x38, 0xb1, 0xb4, 0xc7, 0xe8, 0x28, 0x2c, 0x84, 0xb5, 0xd4, 0x57, 0xb5, 0xf5, 0xc6, 0xf6, 0x3a, + 0xa9, 0xbc, 0x94, 0xac, 0xed, 0x6c, 0x6e, 0x36, 0x37, 0xef, 0xd7, 0x14, 0x22, 0x35, 0x4a, 0x5e, + 0xff, 0x72, 0x93, 0x10, 0x17, 0x64, 0xe2, 0x9d, 0xcd, 0x2f, 0x6c, 0x6e, 0x7d, 0x69, 0xb3, 0x56, + 0xbc, 0xf8, 0xeb, 0x71, 0x2c, 0x53, 0x34, 0xfd, 0x1e, 0x87, 0xe5, 0x54, 0x89, 0xfa, 0xfa, 0x7b, + 0xeb, 0x9b, 0xdb, 0xb5, 0x09, 0x39, 0xb3, 0xbd, 0xdd, 0xd0, 0xa2, 0x4c, 0x25, 0x99, 0xb9, 0xd5, + 0x6a, 0x85, 0x99, 0x05, 0x39, 0x73, 0x6d, 0xfd, 0xe1, 0x7a, 0xc4, 0x59, 0xbc, 0xf8, 0x1c, 0x40, + 0xe4, 0x66, 0xd0, 0x0c, 0x4c, 0xaf, 0x6e, 0xed, 0x6c, 0x6e, 0xaf, 0x6b, 0xb5, 0x09, 0xa2, 0xe5, + 0xfb, 0x8d, 0x9d, 0xfb, 0xeb, 0x35, 0xe5, 0xe2, 0x05, 0x98, 0x8d, 0x0f, 0x3a, 0x42, 0xd7, 0x7e, + 0xbf, 0xbd, 0xbd, 0xbe, 0x41, 0x34, 0x32, 0x0b, 0xe5, 0xd5, 0xfb, 0xda, 0xd6, 0x4e, 0xeb, 0x5e, + 0xbb, 0xa6, 0x5c, 0xfb, 0xdf, 0xa3, 0xe1, 0x91, 0x4a, 0x1b, 0x7b, 0xf4, 0x2e, 0xd0, 0x1a, 0x4c, + 0x8b, 0xff, 0x94, 0x22, 0x6d, 0x6e, 0xc9, 0xff, 0xd9, 0xa5, 0x7e, 0x3c, 0x33, 0x8f, 0x87, 0x4f, + 0x13, 0xe8, 0x3d, 0x7a, 0x48, 0x15, 0x7b, 0x44, 0xf0, 0x4c, 0xe2, 0xac, 0x20, 0xf5, 0x56, 0x61, + 0xfd, 0xec, 0x10, 0x8a, 0x50, 0xee, 0xfb, 0x30, 0x27, 0xbf, 0xd6, 0x8b, 0xce, 0xca, 0x27, 0x21, + 0x19, 0x0f, 0x01, 0xd7, 0xd5, 0x61, 0x24, 0xa1, 0x68, 0x1d, 0x6a, 0xc9, 0xd7, 0x7a, 0x91, 0xe4, + 0x02, 0x72, 0x1e, 0x03, 0xae, 0x3f, 0x37, 0x9c, 0x28, 0x5e, 0x40, 0xea, 0x11, 0xda, 0x73, 0xc3, + 0x9f, 0xf5, 0xcc, 0x28, 0x20, 0xef, 0xed, 0x4f, 0xa6, 0x1c, 0x39, 0xb8, 0x40, 0x89, 0x77, 0x5f, + 0x33, 0x9e, 0x88, 0x94, 0x95, 0x93, 0xfd, 0x3c, 0xa0, 0x3a, 0x81, 0x7e, 0x09, 0xe6, 0x13, 0x17, + 0x3d, 0x90, 0xc4, 0x98, 0x7d, 0x7f, 0xa5, 0x7e, 0x6e, 0x28, 0x8d, 0xdc, 0xab, 0xf1, 0xcb, 0x1c, + 0xc9, 0x5e, 0xcd, 0xb8, 0x24, 0x92, 0xec, 0xd5, 0xcc, 0xbb, 0x20, 0xd4, 0x10, 0xa5, 0x8b, 0x1b, + 0xb2, 0x21, 0x66, 0x5d, 0x14, 0xa9, 0x9f, 0x1d, 0x42, 0x11, 0x57, 0x48, 0xe2, 0xea, 0x86, 0xac, + 0x90, 0xec, 0x4b, 0x21, 0xf5, 0x73, 0x43, 0x69, 0x92, 0x3d, 0x19, 0xe1, 0xc2, 0xd3, 0x3d, 0x99, + 0xba, 0xb6, 0x90, 0xee, 0xc9, 0x34, 0xac, 0x9c, 0xf7, 0x64, 0x02, 0xc9, 0xad, 0x0e, 0xc5, 0x86, + 0x66, 0xf5, 0x64, 0x36, 0x7e, 0x54, 0x9d, 0x40, 0x4f, 0x61, 0x25, 0x0f, 0xbb, 0x87, 0x5e, 0x3a, + 0x00, 0xc4, 0xb0, 0xfe, 0xf2, 0x78, 0xc4, 0x61, 0xc1, 0x18, 0x50, 0x7a, 0x95, 0x89, 0x9e, 0x97, + 0xd5, 0x9d, 0xb3, 0x8a, 0xad, 0xbf, 0x30, 0x8a, 0x2c, 0x2c, 0xe6, 0x3e, 0x94, 0x05, 0x2a, 0x10, + 0x49, 0x2e, 0x30, 0x81, 0x46, 0xac, 0x9f, 0xc8, 0xce, 0x0c, 0x05, 0xbd, 0x09, 0x25, 0x92, 0x8a, + 0x96, 0x93, 0x74, 0x42, 0xc0, 0x4a, 0x3a, 0x23, 0x64, 0x6e, 0xc0, 0x14, 0x83, 0xbb, 0x21, 0xe9, + 0xe0, 0x58, 0x82, 0xe3, 0xd5, 0xeb, 0x59, 0x59, 0xa1, 0x88, 0x16, 0xfb, 0xbf, 0x53, 0x1c, 0xbd, + 0x86, 0x4e, 0x25, 0xdf, 0xe9, 0x97, 0x61, 0x72, 0xf5, 0xd3, 0xb9, 0xf9, 0x71, 0x9b, 0x4d, 0x6c, + 0x26, 0x9f, 0x1d, 0x72, 0x38, 0x92, 0x65, 0xb3, 0xd9, 0x47, 0x2e, 0xac, 0x73, 0xd3, 0x47, 0x32, + 0xe8, 0xf9, 0x5c, 0x7b, 0x97, 0x8a, 0x78, 0x61, 0x14, 0x59, 0x7c, 0x68, 0x24, 0x1f, 0xdc, 0x53, + 0x87, 0x3d, 0x86, 0x99, 0x35, 0x34, 0x72, 0x1e, 0xd9, 0x54, 0x27, 0xd0, 0x1e, 0x1c, 0xc9, 0x78, + 0x85, 0x13, 0xbd, 0x90, 0xef, 0x7f, 0xa5, 0x52, 0x5e, 0x1c, 0x49, 0x17, 0x2f, 0x29, 0x03, 0xb2, + 0x22, 0x97, 0x94, 0x8f, 0x99, 0x91, 0x4b, 0x1a, 0x86, 0x7d, 0xa1, 0x86, 0xc8, 0x7d, 0xc8, 0xb1, + 0x2c, 0x40, 0x42, 0x86, 0x21, 0xa6, 0x3c, 0xc6, 0x1e, 0x1c, 0xc9, 0xd8, 0x89, 0x91, 0x2b, 0x9b, + 0xbf, 0x43, 0x24, 0x57, 0x76, 0xd8, 0x96, 0xce, 0x04, 0xfa, 0x00, 0xd0, 0x7d, 0x1c, 0xc8, 0xa1, + 0x9c, 0x8f, 0xa4, 0x81, 0x9a, 0xdc, 0xf4, 0xc9, 0xb1, 0x4f, 0x69, 0xf7, 0x47, 0x9d, 0xb8, 0xaa, + 0x20, 0x9b, 0xdd, 0x25, 0x4b, 0xed, 0x59, 0xa0, 0xf3, 0xc9, 0x6e, 0xcb, 0xdb, 0xf6, 0xa8, 0x5f, + 0x18, 0x83, 0x32, 0x6c, 0x8b, 0x9d, 0x7c, 0xf1, 0x59, 0x2c, 0x9b, 0xcf, 0xe7, 0x9b, 0x89, 0xbc, + 0x15, 0x91, 0x2e, 0x2f, 0x77, 0x53, 0x22, 0x8c, 0xe7, 0x62, 0xc6, 0x74, 0x26, 0x1f, 0x40, 0x95, + 0x13, 0xcf, 0x65, 0x1a, 0xd0, 0xd7, 0xe1, 0x58, 0xee, 0x9a, 0x09, 0x65, 0xcc, 0x01, 0xf9, 0x0b, + 0xc5, 0xfa, 0xa5, 0x31, 0xa9, 0x45, 0xd9, 0xd7, 0x7e, 0xbf, 0x08, 0xb3, 0x0c, 0xe4, 0xc6, 0x43, + 0xdf, 0x0d, 0x80, 0x08, 0x2f, 0x8a, 0x4e, 0x26, 0xf5, 0x23, 0x81, 0x70, 0xeb, 0xa7, 0xf2, 0xb2, + 0xe3, 0x2e, 0x36, 0x86, 0xc3, 0x94, 0x5d, 0x6c, 0x1a, 0x56, 0x2a, 0xbb, 0xd8, 0x0c, 0x00, 0xa7, + 0x3a, 0x81, 0xde, 0x85, 0x4a, 0x08, 0xfb, 0x93, 0x0d, 0x37, 0x89, 0x5f, 0xac, 0x9f, 0xcc, 0xc9, + 0x8d, 0xd7, 0x2e, 0x86, 0xe6, 0x93, 0x6b, 0x97, 0x46, 0x0a, 0xca, 0xb5, 0xcb, 0x82, 0x01, 0x46, + 0xed, 0x65, 0xb8, 0x8d, 0x8c, 0xf6, 0x4a, 0x38, 0x9e, 0x8c, 0xf6, 0xca, 0x80, 0x0f, 0x75, 0xe2, + 0xee, 0x9d, 0x1f, 0xfd, 0xf4, 0x94, 0xf2, 0xe3, 0x9f, 0x9e, 0x9a, 0xf8, 0xd5, 0x8f, 0x4e, 0x29, + 0x3f, 0xfa, 0xe8, 0x94, 0xf2, 0x2f, 0x1f, 0x9d, 0x52, 0x7e, 0xf2, 0xd1, 0x29, 0xe5, 0x9b, 0xff, + 0x71, 0x6a, 0xe2, 0x03, 0xf5, 0xf1, 0x0d, 0xff, 0xb2, 0xe5, 0x5c, 0xe9, 0x78, 0xd6, 0x25, 0xc3, + 0xb5, 0xae, 0xb8, 0x8f, 0xbb, 0x57, 0x0c, 0xd7, 0xf2, 0xaf, 0x70, 0xb9, 0x57, 0x9e, 0xbc, 0xf2, + 0x68, 0x8a, 0xfe, 0x9f, 0xc4, 0x57, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x4c, 0xbb, 0xd2, 0x3f, + 0xe1, 0x72, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -11094,6 +11200,12 @@ type RuntimeServiceClient interface { // The Kubelet will not re-request the RuntimeConfiguration after startup, and CRI implementations should // avoid updating them without a full node reboot. RuntimeConfig(ctx context.Context, in *RuntimeConfigRequest, opts ...grpc.CallOption) (*RuntimeConfigResponse, error) + // UpdatePodSandboxResources synchronously updates the PodSandboxConfig with + // the pod-level resource configuration. This method is called _after_ the + // Kubelet reconfigures the pod-level cgroups. + // This request is treated as best effort, and failure will not block the + // Kubelet with proceeding with a resize. + UpdatePodSandboxResources(ctx context.Context, in *UpdatePodSandboxResourcesRequest, opts ...grpc.CallOption) (*UpdatePodSandboxResourcesResponse, error) } type runtimeServiceClient struct { @@ -11388,6 +11500,15 @@ func (c *runtimeServiceClient) RuntimeConfig(ctx context.Context, in *RuntimeCon return out, nil } +func (c *runtimeServiceClient) UpdatePodSandboxResources(ctx context.Context, in *UpdatePodSandboxResourcesRequest, opts ...grpc.CallOption) (*UpdatePodSandboxResourcesResponse, error) { + out := new(UpdatePodSandboxResourcesResponse) + err := c.cc.Invoke(ctx, "/runtime.v1.RuntimeService/UpdatePodSandboxResources", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // RuntimeServiceServer is the server API for RuntimeService service. type RuntimeServiceServer interface { // Version returns the runtime name, runtime version, and runtime API version. @@ -11486,6 +11607,12 @@ type RuntimeServiceServer interface { // The Kubelet will not re-request the RuntimeConfiguration after startup, and CRI implementations should // avoid updating them without a full node reboot. RuntimeConfig(context.Context, *RuntimeConfigRequest) (*RuntimeConfigResponse, error) + // UpdatePodSandboxResources synchronously updates the PodSandboxConfig with + // the pod-level resource configuration. This method is called _after_ the + // Kubelet reconfigures the pod-level cgroups. + // This request is treated as best effort, and failure will not block the + // Kubelet with proceeding with a resize. + UpdatePodSandboxResources(context.Context, *UpdatePodSandboxResourcesRequest) (*UpdatePodSandboxResourcesResponse, error) } // UnimplementedRuntimeServiceServer can be embedded to have forward compatible implementations. @@ -11579,6 +11706,9 @@ func (*UnimplementedRuntimeServiceServer) ListPodSandboxMetrics(ctx context.Cont func (*UnimplementedRuntimeServiceServer) RuntimeConfig(ctx context.Context, req *RuntimeConfigRequest) (*RuntimeConfigResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RuntimeConfig not implemented") } +func (*UnimplementedRuntimeServiceServer) UpdatePodSandboxResources(ctx context.Context, req *UpdatePodSandboxResourcesRequest) (*UpdatePodSandboxResourcesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePodSandboxResources not implemented") +} func RegisterRuntimeServiceServer(s *grpc.Server, srv RuntimeServiceServer) { s.RegisterService(&_RuntimeService_serviceDesc, srv) @@ -12109,6 +12239,24 @@ func _RuntimeService_RuntimeConfig_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _RuntimeService_UpdatePodSandboxResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdatePodSandboxResourcesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RuntimeServiceServer).UpdatePodSandboxResources(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/runtime.v1.RuntimeService/UpdatePodSandboxResources", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RuntimeServiceServer).UpdatePodSandboxResources(ctx, req.(*UpdatePodSandboxResourcesRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _RuntimeService_serviceDesc = grpc.ServiceDesc{ ServiceName: "runtime.v1.RuntimeService", HandlerType: (*RuntimeServiceServer)(nil), @@ -12225,6 +12373,10 @@ var _RuntimeService_serviceDesc = grpc.ServiceDesc{ MethodName: "RuntimeConfig", Handler: _RuntimeService_RuntimeConfig_Handler, }, + { + MethodName: "UpdatePodSandboxResources", + Handler: _RuntimeService_UpdatePodSandboxResources_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -20310,6 +20462,83 @@ func (m *LinuxRuntimeConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } +func (m *UpdatePodSandboxResourcesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdatePodSandboxResourcesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UpdatePodSandboxResourcesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Resources != nil { + { + size, err := m.Resources.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Overhead != nil { + { + size, err := m.Overhead.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.PodSandboxId) > 0 { + i -= len(m.PodSandboxId) + copy(dAtA[i:], m.PodSandboxId) + i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdatePodSandboxResourcesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdatePodSandboxResourcesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UpdatePodSandboxResourcesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintApi(dAtA []byte, offset int, v uint64) int { offset -= sovApi(v) base := offset @@ -23552,6 +23781,36 @@ func (m *LinuxRuntimeConfiguration) Size() (n int) { return n } +func (m *UpdatePodSandboxResourcesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.PodSandboxId) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } + if m.Overhead != nil { + l = m.Overhead.Size() + n += 1 + l + sovApi(uint64(l)) + } + if m.Resources != nil { + l = m.Resources.Size() + n += 1 + l + sovApi(uint64(l)) + } + return n +} + +func (m *UpdatePodSandboxResourcesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovApi(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -25813,6 +26072,27 @@ func (this *LinuxRuntimeConfiguration) String() string { }, "") return s } +func (this *UpdatePodSandboxResourcesRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&UpdatePodSandboxResourcesRequest{`, + `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, + `Overhead:` + strings.Replace(this.Overhead.String(), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, + `Resources:` + strings.Replace(this.Resources.String(), "LinuxContainerResources", "LinuxContainerResources", 1) + `,`, + `}`, + }, "") + return s +} +func (this *UpdatePodSandboxResourcesResponse) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&UpdatePodSandboxResourcesResponse{`, + `}`, + }, "") + return s +} func valueToStringApi(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -49503,6 +49783,210 @@ func (m *LinuxRuntimeConfiguration) Unmarshal(dAtA []byte) error { } return nil } +func (m *UpdatePodSandboxResourcesRequest) 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: UpdatePodSandboxResourcesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdatePodSandboxResourcesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PodSandboxId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Overhead", 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 < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Overhead == nil { + m.Overhead = &LinuxContainerResources{} + } + if err := m.Overhead.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", 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 < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Resources == nil { + m.Resources = &LinuxContainerResources{} + } + if err := m.Resources.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) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdatePodSandboxResourcesResponse) 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: UpdatePodSandboxResourcesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdatePodSandboxResourcesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipApi(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto index 210bd5a7843..fec760e6a63 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto +++ b/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto @@ -140,6 +140,13 @@ service RuntimeService { // The Kubelet will not re-request the RuntimeConfiguration after startup, and CRI implementations should // avoid updating them without a full node reboot. rpc RuntimeConfig(RuntimeConfigRequest) returns (RuntimeConfigResponse) {} + + // UpdatePodSandboxResources synchronously updates the PodSandboxConfig with + // the pod-level resource configuration. This method is called _after_ the + // Kubelet reconfigures the pod-level cgroups. + // This request is treated as best effort, and failure will not block the + // Kubelet with proceeding with a resize. + rpc UpdatePodSandboxResources(UpdatePodSandboxResourcesRequest) returns (UpdatePodSandboxResourcesResponse) {} } // ImageService defines the public APIs for managing images. @@ -1997,3 +2004,14 @@ enum CgroupDriver { CGROUPFS = 1; } +message UpdatePodSandboxResourcesRequest { + // ID of the PodSandbox to update. + string pod_sandbox_id = 1; + + // Optional overhead represents the overheads associated with this sandbox + LinuxContainerResources overhead = 2; + // Optional resources represents the sum of container resources for this sandbox + LinuxContainerResources resources = 3; +} + +message UpdatePodSandboxResourcesResponse {} diff --git a/staging/src/k8s.io/cri-api/pkg/apis/services.go b/staging/src/k8s.io/cri-api/pkg/apis/services.go index 03a068c4224..58cee8c14c8 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/services.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/services.go @@ -82,6 +82,12 @@ type PodSandboxManager interface { ListPodSandbox(ctx context.Context, filter *runtimeapi.PodSandboxFilter) ([]*runtimeapi.PodSandbox, error) // PortForward prepares a streaming endpoint to forward ports from a PodSandbox, and returns the address. PortForward(ctx context.Context, request *runtimeapi.PortForwardRequest) (*runtimeapi.PortForwardResponse, error) + // UpdatePodSandboxResources synchronously updates the PodSandboxConfig with + // the pod-level resource configuration. This method is called _after_ the + // Kubelet reconfigures the pod-level cgroups. + // This request is treated as best effort, and failure will not block the + // Kubelet with proceeding with a resize. + UpdatePodSandboxResources(ctx context.Context, request *runtimeapi.UpdatePodSandboxResourcesRequest) (*runtimeapi.UpdatePodSandboxResourcesResponse, error) } // ContainerStatsManager contains methods for retrieving the container diff --git a/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go b/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go index 56effd29802..245fba577a0 100644 --- a/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go +++ b/staging/src/k8s.io/cri-api/pkg/apis/testing/fake_runtime_service.go @@ -794,3 +794,16 @@ func (r *FakeRuntimeService) RuntimeConfig(_ context.Context) (*runtimeapi.Runti return &runtimeapi.RuntimeConfigResponse{Linux: r.FakeLinuxConfiguration}, nil } + +// UpdatePodSandboxResources returns the container resource in the FakeRuntimeService. +func (r *FakeRuntimeService) UpdatePodSandboxResources(context.Context, *runtimeapi.UpdatePodSandboxResourcesRequest) (*runtimeapi.UpdatePodSandboxResourcesResponse, error) { + r.Lock() + defer r.Unlock() + + r.Called = append(r.Called, "UpdatePodSandboxResources") + if err := r.popError("UpdatePodSandboxResources"); err != nil { + return nil, err + } + + return &runtimeapi.UpdatePodSandboxResourcesResponse{}, nil +} diff --git a/staging/src/k8s.io/cri-client/pkg/fake/fake_runtime.go b/staging/src/k8s.io/cri-client/pkg/fake/fake_runtime.go index 3c1c391cae4..fd9e778067f 100644 --- a/staging/src/k8s.io/cri-client/pkg/fake/fake_runtime.go +++ b/staging/src/k8s.io/cri-client/pkg/fake/fake_runtime.go @@ -366,3 +366,8 @@ func (f *RemoteRuntime) RuntimeConfig(ctx context.Context, req *kubeapi.RuntimeC return resp, nil } + +// UpdatePodSandboxResources synchronously updates the PodSandboxConfig. +func (f *RemoteRuntime) UpdatePodSandboxResources(ctx context.Context, req *kubeapi.UpdatePodSandboxResourcesRequest) (*kubeapi.UpdatePodSandboxResourcesResponse, error) { + return f.RuntimeService.UpdatePodSandboxResources(ctx, req) +} diff --git a/staging/src/k8s.io/cri-client/pkg/remote_runtime.go b/staging/src/k8s.io/cri-client/pkg/remote_runtime.go index aa1518e0acc..f5f3970beff 100644 --- a/staging/src/k8s.io/cri-client/pkg/remote_runtime.go +++ b/staging/src/k8s.io/cri-client/pkg/remote_runtime.go @@ -610,6 +610,23 @@ func (r *remoteRuntimeService) portForwardV1(ctx context.Context, req *runtimeap return resp, nil } +// UpdatePodSandboxResources synchronously updates the PodSandboxConfig with +// the pod-level resource configuration. +func (r *remoteRuntimeService) UpdatePodSandboxResources(ctx context.Context, req *runtimeapi.UpdatePodSandboxResourcesRequest) (*runtimeapi.UpdatePodSandboxResourcesResponse, error) { + r.log(10, "[RemoteRuntimeService] UpdatePodSandboxResources", "PodSandboxId", req.PodSandboxId, "timeout", r.timeout) + ctx, cancel := context.WithTimeout(ctx, r.timeout) + defer cancel() + + resp, err := r.runtimeClient.UpdatePodSandboxResources(ctx, req) + if err != nil { + r.logErr(err, "UpdatePodSandboxResources from runtime service failed", "podSandboxID", req.PodSandboxId) + return nil, err + } + r.log(10, "[RemoteRuntimeService] UpdatePodSandboxResources Response", "podSandboxID", req.PodSandboxId) + + return resp, nil +} + // UpdateRuntimeConfig updates the config of a runtime service. The only // update payload currently supported is the pod CIDR assigned to a node, // and the runtime service just proxies it down to the network plugin. diff --git a/test/e2e_node/criproxy/proxy_runtime_service.go b/test/e2e_node/criproxy/proxy_runtime_service.go index cc17e970c6b..f2febf293fb 100644 --- a/test/e2e_node/criproxy/proxy_runtime_service.go +++ b/test/e2e_node/criproxy/proxy_runtime_service.go @@ -34,35 +34,36 @@ import ( ) const ( - Version = "Version" - RunPodSandbox = "RunPodSandbox" - StopPodSandbox = "StopPodSandbox" - RemovePodSandbox = "RemovePodSandbox" - PodSandboxStatus = "PodSandboxStatus" - ListPodSandbox = "ListPodSandbox" - CreateContainer = "CreateContainer" - StartContainer = "StartContainer" - StopContainer = "StopContainer" - RemoveContainer = "RemoveContainer" - ListContainers = "ListContainers" - ContainerStatus = "ContainerStatus" - UpdateContainerResources = "UpdateContainerResources" - ReopenContainerLog = "ReopenContainerLog" - ExecSync = "ExecSync" - Exec = "Exec" - Attach = "Attach" - PortForward = "PortForward" - ContainerStats = "ContainerStats" - ListContainerStats = "ListContainerStats" - PodSandboxStats = "PodSandboxStats" - ListPodSandboxStats = "ListPodSandboxStats" - UpdateRuntimeConfig = "UpdateRuntimeConfig" - Status = "Status" - CheckpointContainer = "CheckpointContainer" - GetContainerEvents = "GetContainerEvents" - ListMetricDescriptors = "ListMetricDescriptors" - ListPodSandboxMetrics = "ListPodSandboxMetrics" - RuntimeConfig = "RuntimeConfig" + Version = "Version" + RunPodSandbox = "RunPodSandbox" + StopPodSandbox = "StopPodSandbox" + RemovePodSandbox = "RemovePodSandbox" + PodSandboxStatus = "PodSandboxStatus" + ListPodSandbox = "ListPodSandbox" + CreateContainer = "CreateContainer" + StartContainer = "StartContainer" + StopContainer = "StopContainer" + RemoveContainer = "RemoveContainer" + ListContainers = "ListContainers" + ContainerStatus = "ContainerStatus" + UpdateContainerResources = "UpdateContainerResources" + ReopenContainerLog = "ReopenContainerLog" + ExecSync = "ExecSync" + Exec = "Exec" + Attach = "Attach" + PortForward = "PortForward" + ContainerStats = "ContainerStats" + ListContainerStats = "ListContainerStats" + PodSandboxStats = "PodSandboxStats" + ListPodSandboxStats = "ListPodSandboxStats" + UpdateRuntimeConfig = "UpdateRuntimeConfig" + Status = "Status" + CheckpointContainer = "CheckpointContainer" + GetContainerEvents = "GetContainerEvents" + ListMetricDescriptors = "ListMetricDescriptors" + ListPodSandboxMetrics = "ListPodSandboxMetrics" + RuntimeConfig = "RuntimeConfig" + UpdatePodSandboxResources = "UpdatePodSandboxResources" ) // AddInjector inject the error or delay to the next call to the RuntimeService. @@ -407,6 +408,15 @@ func (p *RemoteRuntime) UpdateRuntimeConfig(ctx context.Context, req *runtimeapi return &runtimeapi.UpdateRuntimeConfigResponse{}, nil } +// UpdatePodSandboxResources synchronously updates the PodSandboxConfig. +func (p *RemoteRuntime) UpdatePodSandboxResources(ctx context.Context, req *runtimeapi.UpdatePodSandboxResourcesRequest) (*runtimeapi.UpdatePodSandboxResourcesResponse, error) { + if err := p.runInjectors(UpdatePodSandboxResources); err != nil { + return nil, err + } + + return p.runtimeService.UpdatePodSandboxResources(ctx, req) +} + // Status returns the status of the runtime. func (p *RemoteRuntime) Status(ctx context.Context, req *runtimeapi.StatusRequest) (*runtimeapi.StatusResponse, error) { if err := p.runInjectors(Status); err != nil {