From 4e466040d9c9f556b19a1d5859ee55a96fc944f3 Mon Sep 17 00:00:00 2001 From: Michael Fraenkel Date: Mon, 16 Jan 2017 16:30:22 -0800 Subject: [PATCH 1/2] Allow Optional ConfigMap and Secrets - ConfigMaps and Secrets for Env or Volumes are allowed to be optional --- pkg/api/testing/fuzzer.go | 12 ++ pkg/api/types.go | 26 +++- pkg/api/v1/types.go | 26 +++- pkg/kubectl/describe.go | 23 +++- pkg/kubectl/describe_test.go | 20 ++- pkg/kubelet/kubelet_pods.go | 49 ++++++- pkg/kubelet/kubelet_pods_test.go | 137 +++++++++++++++++- pkg/kubelet/kubelet_test.go | 10 +- pkg/volume/configmap/configmap.go | 21 ++- pkg/volume/configmap/configmap_test.go | 159 ++++++++++++++++++++- pkg/volume/secret/secret.go | 22 ++- pkg/volume/secret/secret_test.go | 170 ++++++++++++++++++++++- test/e2e/common/configmap.go | 184 +++++++++++++++++++++++++ test/e2e/common/secrets.go | 180 ++++++++++++++++++++++++ 14 files changed, 1000 insertions(+), 39 deletions(-) diff --git a/pkg/api/testing/fuzzer.go b/pkg/api/testing/fuzzer.go index c9af9a2ac96..d73506f6c60 100644 --- a/pkg/api/testing/fuzzer.go +++ b/pkg/api/testing/fuzzer.go @@ -286,6 +286,10 @@ func FuzzerFor(t *testing.T, version schema.GroupVersion, src rand.Source) *fuzz func(s *api.SecretVolumeSource, c fuzz.Continue) { c.FuzzNoCustom(s) // fuzz self without calling this function again + if c.RandBool() { + opt := c.RandBool() + s.Optional = &opt + } // DefaultMode should always be set, it has a default // value and it is expected to be between 0 and 0777 var mode int32 @@ -296,6 +300,10 @@ func FuzzerFor(t *testing.T, version schema.GroupVersion, src rand.Source) *fuzz func(cm *api.ConfigMapVolumeSource, c fuzz.Continue) { c.FuzzNoCustom(cm) // fuzz self without calling this function again + if c.RandBool() { + opt := c.RandBool() + cm.Optional = &opt + } // DefaultMode should always be set, it has a default // value and it is expected to be between 0 and 0777 var mode int32 @@ -401,6 +409,10 @@ func FuzzerFor(t *testing.T, version schema.GroupVersion, src rand.Source) *fuzz }, func(cm *api.ConfigMapEnvSource, c fuzz.Continue) { c.FuzzNoCustom(cm) // fuzz self without calling this function again + if c.RandBool() { + opt := c.RandBool() + cm.Optional = &opt + } }, func(s *api.SecretEnvSource, c fuzz.Continue) { c.FuzzNoCustom(s) // fuzz self without calling this function again diff --git a/pkg/api/types.go b/pkg/api/types.go index bb7074b9326..f70088262aa 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -729,8 +729,8 @@ type SecretVolumeSource struct { // key and content is the value. If specified, the listed keys will be // projected into the specified paths, and unlisted keys will not be // present. If a key is specified which is not present in the Secret, - // the volume setup will error. Paths must be relative and may not contain - // the '..' path or start with '..'. + // the volume setup will error unless it is marked optional. Paths must be + // relative and may not contain the '..' path or start with '..'. // +optional Items []KeyToPath // Mode bits to use on created files by default. Must be a value between @@ -740,6 +740,9 @@ type SecretVolumeSource struct { // mode, like fsGroup, and the result can be other mode bits set. // +optional DefaultMode *int32 + // Specify whether the Secret or it's key must be defined + // +optional + Optional *bool } // Represents an NFS mount that lasts the lifetime of a pod. @@ -992,8 +995,8 @@ type ConfigMapVolumeSource struct { // key and content is the value. If specified, the listed keys will be // projected into the specified paths, and unlisted keys will not be // present. If a key is specified which is not present in the ConfigMap, - // the volume setup will error. Paths must be relative and may not contain - // the '..' path or start with '..'. + // the volume setup will error unless it is marked optional. Paths must be + // relative and may not contain the '..' path or start with '..'. // +optional Items []KeyToPath // Mode bits to use on created files by default. Must be a value between @@ -1003,6 +1006,9 @@ type ConfigMapVolumeSource struct { // mode, like fsGroup, and the result can be other mode bits set. // +optional DefaultMode *int32 + // Specify whether the ConfigMap or it's keys must be defined + // +optional + Optional *bool } // Maps a string key to a path within a volume. @@ -1124,6 +1130,9 @@ type ConfigMapKeySelector struct { LocalObjectReference // The key to select. Key string + // Specify whether the ConfigMap or it's key must be defined + // +optional + Optional *bool } // SecretKeySelector selects a key of a Secret. @@ -1132,6 +1141,9 @@ type SecretKeySelector struct { LocalObjectReference // The key of the secret to select from. Must be a valid secret key. Key string + // Specify whether the Secret or it's key must be defined + // +optional + Optional *bool } // EnvFromSource represents the source of a set of ConfigMaps @@ -1155,6 +1167,9 @@ type EnvFromSource struct { type ConfigMapEnvSource struct { // The ConfigMap to select from. LocalObjectReference + // Specify whether the ConfigMap must be defined + // +optional + Optional *bool } // SecretEnvSource selects a Secret to populate the environment @@ -1165,6 +1180,9 @@ type ConfigMapEnvSource struct { type SecretEnvSource struct { // The Secret to select from. LocalObjectReference + // Specify whether the Secret must be defined + // +optional + Optional *bool } // HTTPHeader describes a custom header to be used in HTTP probes diff --git a/pkg/api/v1/types.go b/pkg/api/v1/types.go index b38a55c6f0c..0d20931dfc1 100644 --- a/pkg/api/v1/types.go +++ b/pkg/api/v1/types.go @@ -924,8 +924,8 @@ type SecretVolumeSource struct { // key and content is the value. If specified, the listed keys will be // projected into the specified paths, and unlisted keys will not be // present. If a key is specified which is not present in the Secret, - // the volume setup will error. Paths must be relative and may not contain - // the '..' path or start with '..'. + // the volume setup will error unless it is marked optional. Paths must be + // relative and may not contain the '..' path or start with '..'. // +optional Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` // Optional: mode bits to use on created files by default. Must be a @@ -935,6 +935,9 @@ type SecretVolumeSource struct { // mode, like fsGroup, and the result can be other mode bits set. // +optional DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"bytes,3,opt,name=defaultMode"` + // Specify whether the Secret or it's keys must be defined + // +optional + Optional *bool `json:"optional,omitempty" protobuf:"varint,4,opt,name=optional"` } const ( @@ -1081,8 +1084,8 @@ type ConfigMapVolumeSource struct { // key and content is the value. If specified, the listed keys will be // projected into the specified paths, and unlisted keys will not be // present. If a key is specified which is not present in the ConfigMap, - // the volume setup will error. Paths must be relative and may not contain - // the '..' path or start with '..'. + // the volume setup will error unless it is marked optional. Paths must be + // relative and may not contain the '..' path or start with '..'. // +optional Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` // Optional: mode bits to use on created files by default. Must be a @@ -1092,6 +1095,9 @@ type ConfigMapVolumeSource struct { // mode, like fsGroup, and the result can be other mode bits set. // +optional DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"varint,3,opt,name=defaultMode"` + // Specify whether the ConfigMap or it's keys must be defined + // +optional + Optional *bool `json:"optional,omitempty" protobuf:"varint,4,opt,name=optional"` } const ( @@ -1225,6 +1231,9 @@ type ConfigMapKeySelector struct { LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` // The key to select. Key string `json:"key" protobuf:"bytes,2,opt,name=key"` + // Specify whether the ConfigMap or it's key must be defined + // +optional + Optional *bool `json:"optional,omitempty" protobuf:"varint,3,opt,name=optional"` } // SecretKeySelector selects a key of a Secret. @@ -1233,6 +1242,9 @@ type SecretKeySelector struct { LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` // The key of the secret to select from. Must be a valid secret key. Key string `json:"key" protobuf:"bytes,2,opt,name=key"` + // Specify whether the Secret or it's key must be defined + // +optional + Optional *bool `json:"optional,omitempty" protobuf:"varint,3,opt,name=optional"` } // EnvFromSource represents the source of a set of ConfigMaps @@ -1256,6 +1268,9 @@ type EnvFromSource struct { type ConfigMapEnvSource struct { // The ConfigMap to select from. LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` + // Specify whether the ConfigMap must be defined + // +optional + Optional *bool `json:"optional,omitempty" protobuf:"varint,2,opt,name=optional"` } // SecretEnvSource selects a Secret to populate the environment @@ -1266,6 +1281,9 @@ type ConfigMapEnvSource struct { type SecretEnvSource struct { // The Secret to select from. LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` + // Specify whether the Secret must be defined + // +optional + Optional *bool `json:"optional,omitempty" protobuf:"varint,2,opt,name=optional"` } // HTTPHeader describes a custom header to be used in HTTP probes diff --git a/pkg/kubectl/describe.go b/pkg/kubectl/describe.go index 88141f09762..c3eaac38d8f 100644 --- a/pkg/kubectl/describe.go +++ b/pkg/kubectl/describe.go @@ -650,13 +650,19 @@ func printGitRepoVolumeSource(git *api.GitRepoVolumeSource, w *PrefixWriter) { } func printSecretVolumeSource(secret *api.SecretVolumeSource, w *PrefixWriter) { + optional := secret.Optional != nil && *secret.Optional w.Write(LEVEL_2, "Type:\tSecret (a volume populated by a Secret)\n"+ - " SecretName:\t%v\n", secret.SecretName) + " SecretName:\t%v\n", + " Optional:\t%v\n", + secret.SecretName, optional) } func printConfigMapVolumeSource(configMap *api.ConfigMapVolumeSource, w *PrefixWriter) { + optional := configMap.Optional != nil && *configMap.Optional w.Write(LEVEL_2, "Type:\tConfigMap (a volume populated by a ConfigMap)\n"+ - " Name:\t%v\n", configMap.Name) + " Name:\t%v\n"+ + " Optional:\t%v\n", + configMap.Name, optional) } func printNFSVolumeSource(nfs *api.NFSVolumeSource, w *PrefixWriter) { @@ -1037,9 +1043,11 @@ func describeContainerEnvVars(container api.Container, resolverFn EnvVarResolver } w.Write(LEVEL_3, "%s:\t%s (%s)\n", e.Name, valueFrom, resource) case e.ValueFrom.SecretKeyRef != nil: - w.Write(LEVEL_3, "%s:\t\n", e.Name, e.ValueFrom.SecretKeyRef.Key, e.ValueFrom.SecretKeyRef.Name) + optional := e.ValueFrom.SecretKeyRef.Optional != nil && *e.ValueFrom.SecretKeyRef.Optional + w.Write(LEVEL_3, "%s:\t\tOptional: %t\n", e.Name, e.ValueFrom.SecretKeyRef.Key, e.ValueFrom.SecretKeyRef.Name, optional) case e.ValueFrom.ConfigMapKeyRef != nil: - w.Write(LEVEL_3, "%s:\t\n", e.Name, e.ValueFrom.ConfigMapKeyRef.Key, e.ValueFrom.ConfigMapKeyRef.Name) + optional := e.ValueFrom.ConfigMapKeyRef.Optional != nil && *e.ValueFrom.ConfigMapKeyRef.Optional + w.Write(LEVEL_3, "%s:\t\tOptional: %t\n", e.Name, e.ValueFrom.ConfigMapKeyRef.Key, e.ValueFrom.ConfigMapKeyRef.Name, optional) } } } @@ -1054,17 +1062,20 @@ func describeContainerEnvFrom(container api.Container, resolverFn EnvVarResolver for _, e := range container.EnvFrom { from := "" name := "" + optional := false if e.ConfigMapRef != nil { from = "ConfigMap" name = e.ConfigMapRef.Name + optional = e.ConfigMapRef.Optional != nil && *e.ConfigMapRef.Optional } else if e.SecretRef != nil { from = "Secret" name = e.SecretRef.Name + optional = e.SecretRef.Optional != nil && *e.SecretRef.Optional } if len(e.Prefix) == 0 { - w.Write(LEVEL_3, "%s\t%s\n", name, from) + w.Write(LEVEL_3, "%s\t%s\tOptional: %t\n", name, from, optional) } else { - w.Write(LEVEL_3, "%s\t%s with prefix '%s'\n", name, from, e.Prefix) + w.Write(LEVEL_3, "%s\t%s with prefix '%s'\tOptional: %t\n", name, from, e.Prefix, optional) } } } diff --git a/pkg/kubectl/describe_test.go b/pkg/kubectl/describe_test.go index a10fb5b77b4..d1573551983 100644 --- a/pkg/kubectl/describe_test.go +++ b/pkg/kubectl/describe_test.go @@ -201,6 +201,7 @@ func VerifyDatesInOrder( } func TestDescribeContainers(t *testing.T) { + trueVal := true testCases := []struct { container api.Container status api.ContainerStatus @@ -295,7 +296,7 @@ func TestDescribeContainers(t *testing.T) { Ready: true, RestartCount: 7, }, - expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tConfigMap"}, + expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tConfigMap\tOptional: false"}, }, { container: api.Container{Name: "test", Image: "image", Env: []api.EnvVar{{Name: "envname", Value: "xyz"}}, EnvFrom: []api.EnvFromSource{{Prefix: "p_", ConfigMapRef: &api.ConfigMapEnvSource{LocalObjectReference: api.LocalObjectReference{Name: "a123"}}}}}, @@ -304,16 +305,25 @@ func TestDescribeContainers(t *testing.T) { Ready: true, RestartCount: 7, }, - expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tConfigMap with prefix 'p_'"}, + expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tConfigMap with prefix 'p_'\tOptional: false"}, }, { - container: api.Container{Name: "test", Image: "image", Env: []api.EnvVar{{Name: "envname", Value: "xyz"}}, EnvFrom: []api.EnvFromSource{{SecretRef: &api.SecretEnvSource{LocalObjectReference: api.LocalObjectReference{Name: "a123"}}}}}, + container: api.Container{Name: "test", Image: "image", Env: []api.EnvVar{{Name: "envname", Value: "xyz"}}, EnvFrom: []api.EnvFromSource{{ConfigMapRef: &api.ConfigMapEnvSource{Optional: &trueVal, LocalObjectReference: api.LocalObjectReference{Name: "a123"}}}}}, status: api.ContainerStatus{ Name: "test", Ready: true, RestartCount: 7, }, - expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tSecret"}, + expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tConfigMap\tOptional: true"}, + }, + { + container: api.Container{Name: "test", Image: "image", Env: []api.EnvVar{{Name: "envname", Value: "xyz"}}, EnvFrom: []api.EnvFromSource{{SecretRef: &api.SecretEnvSource{LocalObjectReference: api.LocalObjectReference{Name: "a123"}, Optional: &trueVal}}}}, + status: api.ContainerStatus{ + Name: "test", + Ready: true, + RestartCount: 7, + }, + expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tSecret\tOptional: true"}, }, { container: api.Container{Name: "test", Image: "image", Env: []api.EnvVar{{Name: "envname", Value: "xyz"}}, EnvFrom: []api.EnvFromSource{{Prefix: "p_", SecretRef: &api.SecretEnvSource{LocalObjectReference: api.LocalObjectReference{Name: "a123"}}}}}, @@ -322,7 +332,7 @@ func TestDescribeContainers(t *testing.T) { Ready: true, RestartCount: 7, }, - expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tSecret with prefix 'p_'"}, + expectedElements: []string{"test", "State", "Waiting", "Ready", "True", "Restart Count", "7", "Image", "image", "envname", "xyz", "a123\tSecret with prefix 'p_'\tOptional: false"}, }, // Command { diff --git a/pkg/kubelet/kubelet_pods.go b/pkg/kubelet/kubelet_pods.go index cdbb631d87a..6303e5db756 100644 --- a/pkg/kubelet/kubelet_pods.go +++ b/pkg/kubelet/kubelet_pods.go @@ -33,6 +33,7 @@ import ( "time" "github.com/golang/glog" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" @@ -427,14 +428,20 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container for _, envFrom := range container.EnvFrom { switch { case envFrom.ConfigMapRef != nil: - name := envFrom.ConfigMapRef.Name + cm := envFrom.ConfigMapRef + name := cm.Name configMap, ok := configMaps[name] if !ok { if kl.kubeClient == nil { return result, fmt.Errorf("Couldn't get configMap %v/%v, no kubeClient defined", pod.Namespace, name) } + optional := cm.Optional != nil && *cm.Optional configMap, err = kl.kubeClient.Core().ConfigMaps(pod.Namespace).Get(name, metav1.GetOptions{}) if err != nil { + if errors.IsNotFound(err) && optional { + // ignore error when marked optional + continue + } return result, err } configMaps[name] = configMap @@ -450,14 +457,20 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container tmpEnv[k] = v } case envFrom.SecretRef != nil: - name := envFrom.SecretRef.Name + s := envFrom.SecretRef + name := s.Name secret, ok := secrets[name] if !ok { if kl.kubeClient == nil { return result, fmt.Errorf("Couldn't get secret %v/%v, no kubeClient defined", pod.Namespace, name) } + optional := s.Optional != nil && *s.Optional secret, err = kl.kubeClient.Core().Secrets(pod.Namespace).Get(name, metav1.GetOptions{}) if err != nil { + if errors.IsNotFound(err) && optional { + // ignore error when marked optional + continue + } return result, err } secrets[name] = secret @@ -510,8 +523,10 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container return result, err } case envVar.ValueFrom.ConfigMapKeyRef != nil: - name := envVar.ValueFrom.ConfigMapKeyRef.Name - key := envVar.ValueFrom.ConfigMapKeyRef.Key + cm := envVar.ValueFrom.ConfigMapKeyRef + name := cm.Name + key := cm.Key + optional := cm.Optional != nil && *cm.Optional configMap, ok := configMaps[name] if !ok { if kl.kubeClient == nil { @@ -519,17 +534,26 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container } configMap, err = kl.kubeClient.Core().ConfigMaps(pod.Namespace).Get(name, metav1.GetOptions{}) if err != nil { + if errors.IsNotFound(err) && optional { + // ignore error when marked optional + continue + } return result, err } configMaps[name] = configMap } runtimeVal, ok = configMap.Data[key] if !ok { + if optional { + continue + } return result, fmt.Errorf("Couldn't find key %v in ConfigMap %v/%v", key, pod.Namespace, name) } case envVar.ValueFrom.SecretKeyRef != nil: - name := envVar.ValueFrom.SecretKeyRef.Name - key := envVar.ValueFrom.SecretKeyRef.Key + s := envVar.ValueFrom.SecretKeyRef + name := s.Name + key := s.Key + optional := s.Optional != nil && *s.Optional secret, ok := secrets[name] if !ok { if kl.kubeClient == nil { @@ -537,17 +561,30 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *v1.Pod, container *v1.Container } secret, err = kl.secretManager.GetSecret(pod.Namespace, name) if err != nil { + if errors.IsNotFound(err) && optional { + // ignore error when marked optional + continue + } return result, err } secrets[name] = secret } runtimeValBytes, ok := secret.Data[key] if !ok { + if optional { + continue + } return result, fmt.Errorf("Couldn't find key %v in Secret %v/%v", key, pod.Namespace, name) } runtimeVal = string(runtimeValBytes) } } + // Accesses apiserver+Pods. + // So, the master may set service env vars, or kubelet may. In case both are doing + // it, we delete the key from the kubelet-generated ones so we don't have duplicate + // env vars. + // TODO: remove this next line once all platforms use apiserver+Pods. + delete(serviceEnv, envVar.Name) tmpEnv[envVar.Name] = runtimeVal } diff --git a/pkg/kubelet/kubelet_pods_test.go b/pkg/kubelet/kubelet_pods_test.go index ea73e8125aa..6d6e7bd5cf4 100644 --- a/pkg/kubelet/kubelet_pods_test.go +++ b/pkg/kubelet/kubelet_pods_test.go @@ -26,6 +26,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" @@ -257,6 +258,7 @@ func buildService(name, namespace, clusterIP, protocol string, port int) *v1.Ser } func TestMakeEnvironmentVariables(t *testing.T) { + trueVal := true services := []*v1.Service{ buildService("kubernetes", v1.NamespaceDefault, "1.2.3.1", "TCP", 8081), buildService("test", "test1", "1.2.3.3", "TCP", 8083), @@ -616,6 +618,106 @@ func TestMakeEnvironmentVariables(t *testing.T) { }, }, }, + { + name: "configmapkeyref_missing_optional", + ns: "test", + container: &v1.Container{ + Env: []v1.EnvVar{ + { + Name: "POD_NAME", + ValueFrom: &v1.EnvVarSource{ + ConfigMapKeyRef: &v1.ConfigMapKeySelector{ + LocalObjectReference: v1.LocalObjectReference{Name: "missing-config-map"}, + Key: "key", + Optional: &trueVal, + }, + }, + }, + }, + }, + masterServiceNs: "nothing", + expectedEnvs: nil, + }, + { + name: "configmapkeyref_missing_key_optional", + ns: "test", + container: &v1.Container{ + Env: []v1.EnvVar{ + { + Name: "POD_NAME", + ValueFrom: &v1.EnvVarSource{ + ConfigMapKeyRef: &v1.ConfigMapKeySelector{ + LocalObjectReference: v1.LocalObjectReference{Name: "test-config-map"}, + Key: "key", + Optional: &trueVal, + }, + }, + }, + }, + }, + masterServiceNs: "nothing", + nilLister: true, + configMap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "test1", + Name: "test-configmap", + }, + Data: map[string]string{ + "a": "b", + }, + }, + expectedEnvs: nil, + }, + { + name: "secretkeyref_missing_optional", + ns: "test", + container: &v1.Container{ + Env: []v1.EnvVar{ + { + Name: "POD_NAME", + ValueFrom: &v1.EnvVarSource{ + SecretKeyRef: &v1.SecretKeySelector{ + LocalObjectReference: v1.LocalObjectReference{Name: "missing-secret"}, + Key: "key", + Optional: &trueVal, + }, + }, + }, + }, + }, + masterServiceNs: "nothing", + expectedEnvs: nil, + }, + { + name: "secretkeyref_missing_key_optional", + ns: "test", + container: &v1.Container{ + Env: []v1.EnvVar{ + { + Name: "POD_NAME", + ValueFrom: &v1.EnvVarSource{ + SecretKeyRef: &v1.SecretKeySelector{ + LocalObjectReference: v1.LocalObjectReference{Name: "test-secret"}, + Key: "key", + Optional: &trueVal, + }, + }, + }, + }, + }, + masterServiceNs: "nothing", + nilLister: true, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "test1", + Name: "test-secret", + }, + Data: map[string][]byte{ + "a": []byte("b"), + }, + }, + expectedEnvs: nil, + }, { name: "configmap", ns: "test1", @@ -722,6 +824,19 @@ func TestMakeEnvironmentVariables(t *testing.T) { masterServiceNs: "nothing", expectedError: true, }, + { + name: "configmap_missing_optional", + ns: "test", + container: &v1.Container{ + EnvFrom: []v1.EnvFromSource{ + {ConfigMapRef: &v1.ConfigMapEnvSource{ + Optional: &trueVal, + LocalObjectReference: v1.LocalObjectReference{Name: "missing-config-map"}}}, + }, + }, + masterServiceNs: "nothing", + expectedEnvs: nil, + }, { name: "configmap_invalid_keys", ns: "test1", @@ -876,6 +991,19 @@ func TestMakeEnvironmentVariables(t *testing.T) { masterServiceNs: "nothing", expectedError: true, }, + { + name: "secret_missing_optional", + ns: "test", + container: &v1.Container{ + EnvFrom: []v1.EnvFromSource{ + {SecretRef: &v1.SecretEnvSource{ + LocalObjectReference: v1.LocalObjectReference{Name: "missing-secret"}, + Optional: &trueVal}}, + }, + }, + masterServiceNs: "nothing", + expectedEnvs: nil, + }, { name: "secret_invalid_keys", ns: "test1", @@ -940,10 +1068,17 @@ func TestMakeEnvironmentVariables(t *testing.T) { testKubelet.fakeKubeClient.AddReactor("get", "configmaps", func(action core.Action) (bool, runtime.Object, error) { var err error if tc.configMap == nil { - err = errors.New("no configmap defined") + err = apierrors.NewNotFound(action.GetResource().GroupResource(), "configmap-name") } return true, tc.configMap, err }) + testKubelet.fakeKubeClient.AddReactor("get", "secrets", func(action core.Action) (bool, runtime.Object, error) { + var err error + if tc.secret == nil { + err = apierrors.NewNotFound(action.GetResource().GroupResource(), "secret-name") + } + return true, tc.secret, err + }) testKubelet.fakeKubeClient.AddReactor("get", "secrets", func(action core.Action) (bool, runtime.Object, error) { var err error diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 0ffcd416d6d..7ad533fbeb1 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -173,8 +173,12 @@ func newTestKubeletWithImageList( kubelet.cadvisor = mockCadvisor fakeMirrorClient := podtest.NewFakeMirrorClient() - fakeSecretManager := secret.NewFakeManager() - kubelet.podManager = kubepod.NewBasicPodManager(fakeMirrorClient, fakeSecretManager) + secretManager, err := secret.NewSimpleSecretManager(kubelet.kubeClient) + if err != nil { + t.Fatalf("can't create a secret manager: %v", err) + } + kubelet.secretManager = secretManager + kubelet.podManager = kubepod.NewBasicPodManager(fakeMirrorClient, kubelet.secretManager) kubelet.statusManager = status.NewManager(fakeKubeClient, kubelet.podManager) kubelet.containerRefManager = kubecontainer.NewRefManager() diskSpaceManager, err := newDiskSpaceManager(mockCadvisor, DiskSpacePolicy{}) @@ -249,7 +253,7 @@ func newTestKubeletWithImageList( plug := &volumetest.FakeVolumePlugin{PluginName: "fake", Host: nil} kubelet.volumePluginMgr, err = - NewInitializedVolumePluginMgr(kubelet, fakeSecretManager, []volume.VolumePlugin{plug}) + NewInitializedVolumePluginMgr(kubelet, kubelet.secretManager, []volume.VolumePlugin{plug}) require.NoError(t, err, "Failed to initialize VolumePluginMgr") kubelet.mounter = &mount.FakeMounter{} diff --git a/pkg/volume/configmap/configmap.go b/pkg/volume/configmap/configmap.go index 48a389c9f07..b6b231a2e32 100644 --- a/pkg/volume/configmap/configmap.go +++ b/pkg/volume/configmap/configmap.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/golang/glog" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" @@ -170,10 +171,19 @@ func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { return fmt.Errorf("Cannot setup configMap volume %v because kube client is not configured", b.volName) } + optional := b.source.Optional != nil && *b.source.Optional configMap, err := kubeClient.Core().ConfigMaps(b.pod.Namespace).Get(b.source.Name, metav1.GetOptions{}) if err != nil { - glog.Errorf("Couldn't get configMap %v/%v: %v", b.pod.Namespace, b.source.Name, err) - return err + if !(errors.IsNotFound(err) && optional) { + glog.Errorf("Couldn't get configMap %v/%v: %v", b.pod.Namespace, b.source.Name, err) + return err + } + configMap = &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: b.pod.Namespace, + Name: b.source.Name, + }, + } } totalBytes := totalBytes(configMap) @@ -183,7 +193,7 @@ func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { len(configMap.Data), totalBytes) - payload, err := makePayload(b.source.Items, configMap, b.source.DefaultMode) + payload, err := makePayload(b.source.Items, configMap, b.source.DefaultMode, optional) if err != nil { return err } @@ -210,7 +220,7 @@ func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { return nil } -func makePayload(mappings []v1.KeyToPath, configMap *v1.ConfigMap, defaultMode *int32) (map[string]volumeutil.FileProjection, error) { +func makePayload(mappings []v1.KeyToPath, configMap *v1.ConfigMap, defaultMode *int32, optional bool) (map[string]volumeutil.FileProjection, error) { if defaultMode == nil { return nil, fmt.Errorf("No defaultMode used, not even the default value for it") } @@ -228,6 +238,9 @@ func makePayload(mappings []v1.KeyToPath, configMap *v1.ConfigMap, defaultMode * for _, ktp := range mappings { content, ok := configMap.Data[ktp.Key] if !ok { + if optional { + continue + } err_msg := "references non-existent config key" glog.Errorf(err_msg) return nil, fmt.Errorf(err_msg) diff --git a/pkg/volume/configmap/configmap_test.go b/pkg/volume/configmap/configmap_test.go index b1e122a6080..80fa9b1109e 100644 --- a/pkg/volume/configmap/configmap_test.go +++ b/pkg/volume/configmap/configmap_test.go @@ -43,6 +43,7 @@ func TestMakePayload(t *testing.T) { mappings []v1.KeyToPath configMap *v1.ConfigMap mode int32 + optional bool payload map[string]util.FileProjection success bool }{ @@ -215,10 +216,29 @@ func TestMakePayload(t *testing.T) { }, success: true, }, + { + name: "optional non existent key", + mappings: []v1.KeyToPath{ + { + Key: "zab", + Path: "path/to/foo.txt", + }, + }, + configMap: &v1.ConfigMap{ + Data: map[string]string{ + "foo": "foo", + "bar": "bar", + }, + }, + mode: 0644, + optional: true, + payload: map[string]util.FileProjection{}, + success: true, + }, } for _, tc := range cases { - actualPayload, err := makePayload(tc.mappings, tc.configMap, &tc.mode) + actualPayload, err := makePayload(tc.mappings, tc.configMap, &tc.mode, tc.optional) if err != nil && tc.success { t.Errorf("%v: unexpected failure making payload: %v", tc.name, err) continue @@ -388,6 +408,143 @@ func TestPluginReboot(t *testing.T) { doTestCleanAndTeardown(plugin, testPodUID, testVolumeName, volumePath, t) } +func TestPluginOptional(t *testing.T) { + var ( + testPodUID = types.UID("test_pod_uid") + testVolumeName = "test_volume_name" + testNamespace = "test_configmap_namespace" + testName = "test_configmap_name" + trueVal = true + + volumeSpec = volumeSpec(testVolumeName, testName, 0644) + client = fake.NewSimpleClientset() + pluginMgr = volume.VolumePluginMgr{} + tempDir, host = newTestHost(t, client) + ) + volumeSpec.VolumeSource.ConfigMap.Optional = &trueVal + + defer os.RemoveAll(tempDir) + pluginMgr.InitPlugins(ProbeVolumePlugins(), host) + + plugin, err := pluginMgr.FindPluginByName(configMapPluginName) + if err != nil { + t.Errorf("Can't find the plugin by name") + } + + pod := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: testNamespace, UID: testPodUID}} + mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) + if err != nil { + t.Errorf("Failed to make a new Mounter: %v", err) + } + if mounter == nil { + t.Errorf("Got a nil Mounter") + } + + vName, err := plugin.GetVolumeName(volume.NewSpecFromVolume(volumeSpec)) + if err != nil { + t.Errorf("Failed to GetVolumeName: %v", err) + } + if vName != "test_volume_name/test_configmap_name" { + t.Errorf("Got unexpect VolumeName %v", vName) + } + + volumePath := mounter.GetPath() + if !strings.HasSuffix(volumePath, fmt.Sprintf("pods/test_pod_uid/volumes/kubernetes.io~configmap/test_volume_name")) { + t.Errorf("Got unexpected path: %s", volumePath) + } + + fsGroup := int64(1001) + err = mounter.SetUp(&fsGroup) + if err != nil { + t.Errorf("Failed to setup volume: %v", err) + } + if _, err := os.Stat(volumePath); err != nil { + if os.IsNotExist(err) { + t.Errorf("SetUp() failed, volume path not created: %s", volumePath) + } else { + t.Errorf("SetUp() failed: %v", err) + } + } + + infos, err := ioutil.ReadDir(volumePath) + if err != nil { + t.Fatalf("couldn't find volume path, %s", volumePath) + } + if len(infos) != 0 { + t.Errorf("empty directory, %s, not found", volumePath) + } + doTestCleanAndTeardown(plugin, testPodUID, testVolumeName, volumePath, t) +} + +func TestPluginKeysOptional(t *testing.T) { + var ( + testPodUID = types.UID("test_pod_uid") + testVolumeName = "test_volume_name" + testNamespace = "test_configmap_namespace" + testName = "test_configmap_name" + trueVal = true + + volumeSpec = volumeSpec(testVolumeName, testName, 0644) + configMap = configMap(testNamespace, testName) + client = fake.NewSimpleClientset(&configMap) + pluginMgr = volume.VolumePluginMgr{} + tempDir, host = newTestHost(t, client) + ) + volumeSpec.VolumeSource.ConfigMap.Items = []v1.KeyToPath{ + {Key: "data-1", Path: "data-1"}, + {Key: "data-2", Path: "data-2"}, + {Key: "data-3", Path: "data-3"}, + {Key: "missing", Path: "missing"}, + } + volumeSpec.VolumeSource.ConfigMap.Optional = &trueVal + + defer os.RemoveAll(tempDir) + pluginMgr.InitPlugins(ProbeVolumePlugins(), host) + + plugin, err := pluginMgr.FindPluginByName(configMapPluginName) + if err != nil { + t.Errorf("Can't find the plugin by name") + } + + pod := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: testNamespace, UID: testPodUID}} + mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) + if err != nil { + t.Errorf("Failed to make a new Mounter: %v", err) + } + if mounter == nil { + t.Errorf("Got a nil Mounter") + } + + vName, err := plugin.GetVolumeName(volume.NewSpecFromVolume(volumeSpec)) + if err != nil { + t.Errorf("Failed to GetVolumeName: %v", err) + } + if vName != "test_volume_name/test_configmap_name" { + t.Errorf("Got unexpect VolumeName %v", vName) + } + + volumePath := mounter.GetPath() + if !strings.HasSuffix(volumePath, fmt.Sprintf("pods/test_pod_uid/volumes/kubernetes.io~configmap/test_volume_name")) { + t.Errorf("Got unexpected path: %s", volumePath) + } + + fsGroup := int64(1001) + err = mounter.SetUp(&fsGroup) + if err != nil { + t.Errorf("Failed to setup volume: %v", err) + } + if _, err := os.Stat(volumePath); err != nil { + if os.IsNotExist(err) { + t.Errorf("SetUp() failed, volume path not created: %s", volumePath) + } else { + t.Errorf("SetUp() failed: %v", err) + } + } + + doTestConfigMapDataInVolume(volumePath, configMap, t) + doTestCleanAndTeardown(plugin, testPodUID, testVolumeName, volumePath, t) +} + func volumeSpec(volumeName, configMapName string, defaultMode int32) *v1.Volume { return &v1.Volume{ Name: volumeName, diff --git a/pkg/volume/secret/secret.go b/pkg/volume/secret/secret.go index 9d35e8918f7..f3af74dba46 100644 --- a/pkg/volume/secret/secret.go +++ b/pkg/volume/secret/secret.go @@ -22,6 +22,8 @@ import ( "runtime" "github.com/golang/glog" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" ioutil "k8s.io/kubernetes/pkg/util/io" @@ -191,10 +193,19 @@ func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { return err } + optional := b.source.Optional != nil && *b.source.Optional secret, err := b.getSecret(b.pod.Namespace, b.source.SecretName) if err != nil { - glog.Errorf("Couldn't get secret %v/%v", b.pod.Namespace, b.source.SecretName) - return err + if !(errors.IsNotFound(err) && optional) { + glog.Errorf("Couldn't get secret %v/%v", b.pod.Namespace, b.source.SecretName) + return err + } + secret = &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: b.pod.Namespace, + Name: b.source.SecretName, + }, + } } totalBytes := totalSecretBytes(secret) @@ -204,7 +215,7 @@ func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { len(secret.Data), totalBytes) - payload, err := makePayload(b.source.Items, secret, b.source.DefaultMode) + payload, err := makePayload(b.source.Items, secret, b.source.DefaultMode, optional) if err != nil { return err } @@ -231,7 +242,7 @@ func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { return nil } -func makePayload(mappings []v1.KeyToPath, secret *v1.Secret, defaultMode *int32) (map[string]volumeutil.FileProjection, error) { +func makePayload(mappings []v1.KeyToPath, secret *v1.Secret, defaultMode *int32, optional bool) (map[string]volumeutil.FileProjection, error) { if defaultMode == nil { return nil, fmt.Errorf("No defaultMode used, not even the default value for it") } @@ -249,6 +260,9 @@ func makePayload(mappings []v1.KeyToPath, secret *v1.Secret, defaultMode *int32) for _, ktp := range mappings { content, ok := secret.Data[ktp.Key] if !ok { + if optional { + continue + } err_msg := "references non-existent secret key" glog.Errorf(err_msg) return nil, fmt.Errorf(err_msg) diff --git a/pkg/volume/secret/secret_test.go b/pkg/volume/secret/secret_test.go index 368df2ff220..ee7e83fd75e 100644 --- a/pkg/volume/secret/secret_test.go +++ b/pkg/volume/secret/secret_test.go @@ -46,6 +46,7 @@ func TestMakePayload(t *testing.T) { mappings []v1.KeyToPath secret *v1.Secret mode int32 + optional bool payload map[string]util.FileProjection success bool }{ @@ -218,10 +219,29 @@ func TestMakePayload(t *testing.T) { }, success: true, }, + { + name: "optional non existent key", + mappings: []v1.KeyToPath{ + { + Key: "zab", + Path: "path/to/foo.txt", + }, + }, + secret: &v1.Secret{ + Data: map[string][]byte{ + "foo": []byte("foo"), + "bar": []byte("bar"), + }, + }, + mode: 0644, + optional: true, + payload: map[string]util.FileProjection{}, + success: true, + }, } for _, tc := range cases { - actualPayload, err := makePayload(tc.mappings, tc.secret, &tc.mode) + actualPayload, err := makePayload(tc.mappings, tc.secret, &tc.mode, tc.optional) if err != nil && tc.success { t.Errorf("%v: unexpected failure making payload: %v", tc.name, err) continue @@ -398,6 +418,154 @@ func TestPluginReboot(t *testing.T) { doTestCleanAndTeardown(plugin, testPodUID, testVolumeName, volumePath, t) } +func TestPluginOptional(t *testing.T) { + var ( + testPodUID = types.UID("test_pod_uid") + testVolumeName = "test_volume_name" + testNamespace = "test_secret_namespace" + testName = "test_secret_name" + trueVal = true + + volumeSpec = volumeSpec(testVolumeName, testName, 0644) + client = fake.NewSimpleClientset() + pluginMgr = volume.VolumePluginMgr{} + rootDir, host = newTestHost(t, client) + ) + volumeSpec.Secret.Optional = &trueVal + defer os.RemoveAll(rootDir) + pluginMgr.InitPlugins(ProbeVolumePlugins(), host) + + plugin, err := pluginMgr.FindPluginByName(secretPluginName) + if err != nil { + t.Errorf("Can't find the plugin by name") + } + + pod := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: testNamespace, UID: testPodUID}} + mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) + if err != nil { + t.Errorf("Failed to make a new Mounter: %v", err) + } + if mounter == nil { + t.Errorf("Got a nil Mounter") + } + + volumePath := mounter.GetPath() + if !strings.HasSuffix(volumePath, fmt.Sprintf("pods/test_pod_uid/volumes/kubernetes.io~secret/test_volume_name")) { + t.Errorf("Got unexpected path: %s", volumePath) + } + + err = mounter.SetUp(nil) + if err != nil { + t.Errorf("Failed to setup volume: %v", err) + } + if _, err := os.Stat(volumePath); err != nil { + if os.IsNotExist(err) { + t.Errorf("SetUp() failed, volume path not created: %s", volumePath) + } else { + t.Errorf("SetUp() failed: %v", err) + } + } + + // secret volume should create its own empty wrapper path + podWrapperMetadataDir := fmt.Sprintf("%v/pods/test_pod_uid/plugins/kubernetes.io~empty-dir/wrapped_test_volume_name", rootDir) + + if _, err := os.Stat(podWrapperMetadataDir); err != nil { + if os.IsNotExist(err) { + t.Errorf("SetUp() failed, empty-dir wrapper path is not created: %s", podWrapperMetadataDir) + } else { + t.Errorf("SetUp() failed: %v", err) + } + } + + infos, err := ioutil.ReadDir(volumePath) + if err != nil { + t.Fatalf("couldn't find volume path, %s", volumePath) + } + if len(infos) != 0 { + t.Errorf("empty directory, %s, not found", volumePath) + } + + defer doTestCleanAndTeardown(plugin, testPodUID, testVolumeName, volumePath, t) +} + +func TestPluginOptionalKeys(t *testing.T) { + var ( + testPodUID = types.UID("test_pod_uid") + testVolumeName = "test_volume_name" + testNamespace = "test_secret_namespace" + testName = "test_secret_name" + trueVal = true + + volumeSpec = volumeSpec(testVolumeName, testName, 0644) + secret = secret(testNamespace, testName) + client = fake.NewSimpleClientset(&secret) + pluginMgr = volume.VolumePluginMgr{} + rootDir, host = newTestHost(t, client) + ) + volumeSpec.VolumeSource.Secret.Items = []v1.KeyToPath{ + {Key: "data-1", Path: "data-1"}, + {Key: "data-2", Path: "data-2"}, + {Key: "data-3", Path: "data-3"}, + {Key: "missing", Path: "missing"}, + } + volumeSpec.Secret.Optional = &trueVal + defer os.RemoveAll(rootDir) + pluginMgr.InitPlugins(ProbeVolumePlugins(), host) + + plugin, err := pluginMgr.FindPluginByName(secretPluginName) + if err != nil { + t.Errorf("Can't find the plugin by name") + } + + pod := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: testNamespace, UID: testPodUID}} + mounter, err := plugin.NewMounter(volume.NewSpecFromVolume(volumeSpec), pod, volume.VolumeOptions{}) + if err != nil { + t.Errorf("Failed to make a new Mounter: %v", err) + } + if mounter == nil { + t.Errorf("Got a nil Mounter") + } + + volumePath := mounter.GetPath() + if !strings.HasSuffix(volumePath, fmt.Sprintf("pods/test_pod_uid/volumes/kubernetes.io~secret/test_volume_name")) { + t.Errorf("Got unexpected path: %s", volumePath) + } + + err = mounter.SetUp(nil) + if err != nil { + t.Errorf("Failed to setup volume: %v", err) + } + if _, err := os.Stat(volumePath); err != nil { + if os.IsNotExist(err) { + t.Errorf("SetUp() failed, volume path not created: %s", volumePath) + } else { + t.Errorf("SetUp() failed: %v", err) + } + } + + // secret volume should create its own empty wrapper path + podWrapperMetadataDir := fmt.Sprintf("%v/pods/test_pod_uid/plugins/kubernetes.io~empty-dir/wrapped_test_volume_name", rootDir) + + if _, err := os.Stat(podWrapperMetadataDir); err != nil { + if os.IsNotExist(err) { + t.Errorf("SetUp() failed, empty-dir wrapper path is not created: %s", podWrapperMetadataDir) + } else { + t.Errorf("SetUp() failed: %v", err) + } + } + doTestSecretDataInVolume(volumePath, secret, t) + defer doTestCleanAndTeardown(plugin, testPodUID, testVolumeName, volumePath, t) + + // Metrics only supported on linux + metrics, err := mounter.GetMetrics() + if runtime.GOOS == "linux" { + assert.NotEmpty(t, metrics) + assert.NoError(t, err) + } else { + t.Skipf("Volume metrics not supported on %s", runtime.GOOS) + } +} + func volumeSpec(volumeName, secretName string, defaultMode int32) *v1.Volume { return &v1.Volume{ Name: volumeName, diff --git a/test/e2e/common/configmap.go b/test/e2e/common/configmap.go index 02bb3be510e..8217bdd0038 100644 --- a/test/e2e/common/configmap.go +++ b/test/e2e/common/configmap.go @@ -19,6 +19,7 @@ package common import ( "fmt" "os" + "path" "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -154,6 +155,189 @@ var _ = framework.KubeDescribe("ConfigMap", func() { Eventually(pollLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("value-2")) }) + It("optional updates should be reflected in volume [Conformance] [Volume]", func() { + + // We may have to wait or a full sync period to elapse before the + // Kubelet projects the update into the volume and the container picks + // it up. This timeout is based on the default Kubelet sync period (1 + // minute) plus additional time for fudge factor. + const podLogTimeout = 300 * time.Second + trueVal := true + + volumeMountPath := "/etc/configmap-volumes" + + deleteName := "cm-test-opt-del-" + string(uuid.NewUUID()) + deleteContainerName := "delcm-volume-test" + deleteVolumeName := "deletecm-volume" + deleteConfigMap := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: f.Namespace.Name, + Name: deleteName, + }, + Data: map[string]string{ + "data-1": "value-1", + }, + } + + updateName := "cm-test-opt-upd-" + string(uuid.NewUUID()) + updateContainerName := "updcm-volume-test" + updateVolumeName := "updatecm-volume" + updateConfigMap := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: f.Namespace.Name, + Name: updateName, + }, + Data: map[string]string{ + "data-1": "value-1", + }, + } + + createName := "cm-test-opt-create-" + string(uuid.NewUUID()) + createContainerName := "createcm-volume-test" + createVolumeName := "createcm-volume" + createConfigMap := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: f.Namespace.Name, + Name: createName, + }, + Data: map[string]string{ + "data-1": "value-1", + }, + } + + By(fmt.Sprintf("Creating configMap with name %s", deleteConfigMap.Name)) + var err error + if deleteConfigMap, err = f.ClientSet.Core().ConfigMaps(f.Namespace.Name).Create(deleteConfigMap); err != nil { + framework.Failf("unable to create test configMap %s: %v", deleteConfigMap.Name, err) + } + + By(fmt.Sprintf("Creating configMap with name %s", updateConfigMap.Name)) + if updateConfigMap, err = f.ClientSet.Core().ConfigMaps(f.Namespace.Name).Create(updateConfigMap); err != nil { + framework.Failf("unable to create test configMap %s: %v", updateConfigMap.Name, err) + } + + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod-configmaps-" + string(uuid.NewUUID()), + }, + Spec: v1.PodSpec{ + Volumes: []v1.Volume{ + { + Name: deleteVolumeName, + VolumeSource: v1.VolumeSource{ + ConfigMap: &v1.ConfigMapVolumeSource{ + LocalObjectReference: v1.LocalObjectReference{ + Name: deleteName, + }, + Optional: &trueVal, + }, + }, + }, + { + Name: updateVolumeName, + VolumeSource: v1.VolumeSource{ + ConfigMap: &v1.ConfigMapVolumeSource{ + LocalObjectReference: v1.LocalObjectReference{ + Name: updateName, + }, + Optional: &trueVal, + }, + }, + }, + { + Name: createVolumeName, + VolumeSource: v1.VolumeSource{ + ConfigMap: &v1.ConfigMapVolumeSource{ + LocalObjectReference: v1.LocalObjectReference{ + Name: createName, + }, + Optional: &trueVal, + }, + }, + }, + }, + Containers: []v1.Container{ + { + Name: deleteContainerName, + Image: "gcr.io/google_containers/mounttest:0.7", + Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/configmap-volumes/delete/data-1"}, + VolumeMounts: []v1.VolumeMount{ + { + Name: deleteVolumeName, + MountPath: path.Join(volumeMountPath, "delete"), + ReadOnly: true, + }, + }, + }, + { + Name: updateContainerName, + Image: "gcr.io/google_containers/mounttest:0.7", + Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/configmap-volumes/update/data-3"}, + VolumeMounts: []v1.VolumeMount{ + { + Name: updateVolumeName, + MountPath: path.Join(volumeMountPath, "update"), + ReadOnly: true, + }, + }, + }, + { + Name: createContainerName, + Image: "gcr.io/google_containers/mounttest:0.7", + Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/configmap-volumes/create/data-1"}, + VolumeMounts: []v1.VolumeMount{ + { + Name: createVolumeName, + MountPath: path.Join(volumeMountPath, "create"), + ReadOnly: true, + }, + }, + }, + }, + RestartPolicy: v1.RestartPolicyNever, + }, + } + By("Creating the pod") + f.PodClient().CreateSync(pod) + + pollCreateLogs := func() (string, error) { + return framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, createContainerName) + } + Eventually(pollCreateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("Error reading file /etc/configmap-volumes/create/data-1")) + + pollUpdateLogs := func() (string, error) { + return framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, updateContainerName) + } + Eventually(pollUpdateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("Error reading file /etc/configmap-volumes/update/data-3")) + + pollDeleteLogs := func() (string, error) { + return framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, deleteContainerName) + } + Eventually(pollDeleteLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("value-1")) + + By(fmt.Sprintf("Deleting configmap %v", deleteConfigMap.Name)) + err = f.ClientSet.Core().ConfigMaps(f.Namespace.Name).Delete(deleteConfigMap.Name, &v1.DeleteOptions{}) + Expect(err).NotTo(HaveOccurred(), "Failed to delete configmap %q in namespace %q", deleteConfigMap.Name, f.Namespace.Name) + + By(fmt.Sprintf("Updating configmap %v", updateConfigMap.Name)) + updateConfigMap.ResourceVersion = "" // to force update + delete(updateConfigMap.Data, "data-1") + updateConfigMap.Data["data-3"] = "value-3" + _, err = f.ClientSet.Core().ConfigMaps(f.Namespace.Name).Update(updateConfigMap) + Expect(err).NotTo(HaveOccurred(), "Failed to update configmap %q in namespace %q", updateConfigMap.Name, f.Namespace.Name) + + By(fmt.Sprintf("Creating configMap with name %s", createConfigMap.Name)) + if createConfigMap, err = f.ClientSet.Core().ConfigMaps(f.Namespace.Name).Create(createConfigMap); err != nil { + framework.Failf("unable to create test configMap %s: %v", createConfigMap.Name, err) + } + + By("waiting to observe update in volume") + + Eventually(pollCreateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("value-1")) + Eventually(pollUpdateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("value-3")) + Eventually(pollDeleteLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("Error reading file /etc/configmap-volumes/delete/data-1")) + }) + It("should be consumable via environment variable [Conformance]", func() { name := "configmap-test-" + string(uuid.NewUUID()) configMap := newConfigMap(f, name) diff --git a/test/e2e/common/secrets.go b/test/e2e/common/secrets.go index f947cb5e5e4..676e6e10c91 100644 --- a/test/e2e/common/secrets.go +++ b/test/e2e/common/secrets.go @@ -19,6 +19,8 @@ package common import ( "fmt" "os" + "path" + "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/api/v1" @@ -26,6 +28,7 @@ import ( "k8s.io/kubernetes/test/e2e/framework" . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" ) var _ = framework.KubeDescribe("Secrets", func() { @@ -150,6 +153,183 @@ var _ = framework.KubeDescribe("Secrets", func() { }) }) + It("optional updates should be reflected in volume [Conformance] [Volume]", func() { + + // We may have to wait or a full sync period to elapse before the + // Kubelet projects the update into the volume and the container picks + // it up. This timeout is based on the default Kubelet sync period (1 + // minute) plus additional time for fudge factor. + const podLogTimeout = 300 * time.Second + trueVal := true + + volumeMountPath := "/etc/secret-volumes" + + deleteName := "s-test-opt-del-" + string(uuid.NewUUID()) + deleteContainerName := "dels-volume-test" + deleteVolumeName := "deletes-volume" + deleteSecret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: f.Namespace.Name, + Name: deleteName, + }, + Data: map[string][]byte{ + "data-1": []byte("value-1"), + }, + } + + updateName := "s-test-opt-upd-" + string(uuid.NewUUID()) + updateContainerName := "upds-volume-test" + updateVolumeName := "updates-volume" + updateSecret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: f.Namespace.Name, + Name: updateName, + }, + Data: map[string][]byte{ + "data-1": []byte("value-1"), + }, + } + + createName := "s-test-opt-create-" + string(uuid.NewUUID()) + createContainerName := "creates-volume-test" + createVolumeName := "creates-volume" + createSecret := &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: f.Namespace.Name, + Name: createName, + }, + Data: map[string][]byte{ + "data-1": []byte("value-1"), + }, + } + + By(fmt.Sprintf("Creating secret with name %s", deleteSecret.Name)) + var err error + if deleteSecret, err = f.ClientSet.Core().Secrets(f.Namespace.Name).Create(deleteSecret); err != nil { + framework.Failf("unable to create test secret %s: %v", deleteSecret.Name, err) + } + + By(fmt.Sprintf("Creating secret with name %s", updateSecret.Name)) + if updateSecret, err = f.ClientSet.Core().Secrets(f.Namespace.Name).Create(updateSecret); err != nil { + framework.Failf("unable to create test secret %s: %v", updateSecret.Name, err) + } + + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "pod-secrets-" + string(uuid.NewUUID()), + }, + Spec: v1.PodSpec{ + Volumes: []v1.Volume{ + { + Name: deleteVolumeName, + VolumeSource: v1.VolumeSource{ + Secret: &v1.SecretVolumeSource{ + SecretName: deleteName, + Optional: &trueVal, + }, + }, + }, + { + Name: updateVolumeName, + VolumeSource: v1.VolumeSource{ + Secret: &v1.SecretVolumeSource{ + SecretName: updateName, + Optional: &trueVal, + }, + }, + }, + { + Name: createVolumeName, + VolumeSource: v1.VolumeSource{ + Secret: &v1.SecretVolumeSource{ + SecretName: createName, + Optional: &trueVal, + }, + }, + }, + }, + Containers: []v1.Container{ + { + Name: deleteContainerName, + Image: "gcr.io/google_containers/mounttest:0.7", + Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/secret-volumes/delete/data-1"}, + VolumeMounts: []v1.VolumeMount{ + { + Name: deleteVolumeName, + MountPath: path.Join(volumeMountPath, "delete"), + ReadOnly: true, + }, + }, + }, + { + Name: updateContainerName, + Image: "gcr.io/google_containers/mounttest:0.7", + Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/secret-volumes/update/data-3"}, + VolumeMounts: []v1.VolumeMount{ + { + Name: updateVolumeName, + MountPath: path.Join(volumeMountPath, "update"), + ReadOnly: true, + }, + }, + }, + { + Name: createContainerName, + Image: "gcr.io/google_containers/mounttest:0.7", + Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/secret-volumes/create/data-1"}, + VolumeMounts: []v1.VolumeMount{ + { + Name: createVolumeName, + MountPath: path.Join(volumeMountPath, "create"), + ReadOnly: true, + }, + }, + }, + }, + RestartPolicy: v1.RestartPolicyNever, + }, + } + By("Creating the pod") + f.PodClient().CreateSync(pod) + + pollCreateLogs := func() (string, error) { + return framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, createContainerName) + } + Eventually(pollCreateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("Error reading file /etc/secret-volumes/create/data-1")) + + pollUpdateLogs := func() (string, error) { + return framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, updateContainerName) + } + Eventually(pollUpdateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("Error reading file /etc/secret-volumes/update/data-3")) + + pollDeleteLogs := func() (string, error) { + return framework.GetPodLogs(f.ClientSet, f.Namespace.Name, pod.Name, deleteContainerName) + } + Eventually(pollDeleteLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("value-1")) + + By(fmt.Sprintf("Deleting secret %v", deleteSecret.Name)) + err = f.ClientSet.Core().Secrets(f.Namespace.Name).Delete(deleteSecret.Name, &v1.DeleteOptions{}) + Expect(err).NotTo(HaveOccurred(), "Failed to delete secret %q in namespace %q", deleteSecret.Name, f.Namespace.Name) + + By(fmt.Sprintf("Updating secret %v", updateSecret.Name)) + updateSecret.ResourceVersion = "" // to force update + delete(updateSecret.Data, "data-1") + updateSecret.Data["data-3"] = []byte("value-3") + _, err = f.ClientSet.Core().Secrets(f.Namespace.Name).Update(updateSecret) + Expect(err).NotTo(HaveOccurred(), "Failed to update secret %q in namespace %q", updateSecret.Name, f.Namespace.Name) + + By(fmt.Sprintf("Creating secret with name %s", createSecret.Name)) + if createSecret, err = f.ClientSet.Core().Secrets(f.Namespace.Name).Create(createSecret); err != nil { + framework.Failf("unable to create test secret %s: %v", createSecret.Name, err) + } + + By("waiting to observe update in volume") + + Eventually(pollCreateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("value-1")) + Eventually(pollUpdateLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("value-3")) + Eventually(pollDeleteLogs, podLogTimeout, framework.Poll).Should(ContainSubstring("Error reading file /etc/secret-volumes/delete/data-1")) + }) + It("should be consumable from pods in env vars [Conformance]", func() { name := "secret-test-" + string(uuid.NewUUID()) secret := secretForTest(f.Namespace.Name, name) From ca207be4a3d6f2aaf6b012a3eae0e306f4117566 Mon Sep 17 00:00:00 2001 From: Michael Fraenkel Date: Mon, 23 Jan 2017 18:24:37 -0700 Subject: [PATCH 2/2] Generated code --- api/openapi-spec/swagger.json | 28 +- api/swagger-spec/apps_v1beta1.json | 28 +- api/swagger-spec/batch_v1.json | 28 +- api/swagger-spec/extensions_v1beta1.json | 28 +- api/swagger-spec/v1.json | 28 +- .../apps/v1beta1/definitions.html | 48 +- docs/api-reference/batch/v1/definitions.html | 48 +- .../extensions/v1beta1/definitions.html | 48 +- docs/api-reference/v1/definitions.html | 48 +- federation/apis/openapi-spec/swagger.json | 28 +- hack/verify-flags/exceptions.txt | 6 + pkg/api/v1/generated.pb.go | 1408 ++++++++++------- pkg/api/v1/generated.proto | 32 +- pkg/api/v1/types.generated.go | 860 +++++++--- pkg/api/v1/types_swagger_doc_generated.go | 22 +- pkg/api/v1/zz_generated.conversion.go | 12 + pkg/api/v1/zz_generated.deepcopy.go | 46 +- pkg/api/zz_generated.deepcopy.go | 46 +- pkg/generated/openapi/zz_generated.openapi.go | 46 +- pkg/volume/configmap/BUILD | 1 + pkg/volume/secret/BUILD | 2 + 21 files changed, 2002 insertions(+), 839 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index da949fcd63e..0f59b202789 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -34912,6 +34912,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap must be defined", + "type": "boolean" } } }, @@ -34928,6 +34932,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's key must be defined", + "type": "boolean" } } }, @@ -34967,7 +34975,7 @@ "format": "int32" }, "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "type": "array", "items": { "$ref": "#/definitions/v1.KeyToPath" @@ -34976,6 +34984,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" } } }, @@ -38217,6 +38229,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the Secret must be defined", + "type": "boolean" } } }, @@ -38233,6 +38249,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the Secret or it's key must be defined", + "type": "boolean" } } }, @@ -38272,12 +38292,16 @@ "format": "int32" }, "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "type": "array", "items": { "$ref": "#/definitions/v1.KeyToPath" } }, + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, "secretName": { "description": "Name of the secret in the pod's namespace to use. More info: http://kubernetes.io/docs/user-guide/volumes#secrets", "type": "string" diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json index 19c728ef563..319efc48548 100644 --- a/api/swagger-spec/apps_v1beta1.json +++ b/api/swagger-spec/apps_v1beta1.json @@ -1574,12 +1574,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's keys must be defined" } } }, @@ -2005,12 +2009,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's keys must be defined" } } }, @@ -2275,6 +2283,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap must be defined" } } }, @@ -2285,6 +2297,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret must be defined" } } }, @@ -2345,6 +2361,10 @@ "key": { "type": "string", "description": "The key to select." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's key must be defined" } } }, @@ -2362,6 +2382,10 @@ "key": { "type": "string", "description": "The key of the secret to select from. Must be a valid secret key." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's key must be defined" } } }, diff --git a/api/swagger-spec/batch_v1.json b/api/swagger-spec/batch_v1.json index 7b149beac21..306ff98a509 100644 --- a/api/swagger-spec/batch_v1.json +++ b/api/swagger-spec/batch_v1.json @@ -1579,12 +1579,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's keys must be defined" } } }, @@ -2010,12 +2014,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's keys must be defined" } } }, @@ -2280,6 +2288,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap must be defined" } } }, @@ -2290,6 +2302,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret must be defined" } } }, @@ -2350,6 +2366,10 @@ "key": { "type": "string", "description": "The key to select." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's key must be defined" } } }, @@ -2367,6 +2387,10 @@ "key": { "type": "string", "description": "The key of the secret to select from. Must be a valid secret key." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's key must be defined" } } }, diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json index d415a29c6cd..5d28b3fb948 100644 --- a/api/swagger-spec/extensions_v1beta1.json +++ b/api/swagger-spec/extensions_v1beta1.json @@ -7951,12 +7951,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's keys must be defined" } } }, @@ -8382,12 +8386,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's keys must be defined" } } }, @@ -8652,6 +8660,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap must be defined" } } }, @@ -8662,6 +8674,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret must be defined" } } }, @@ -8722,6 +8738,10 @@ "key": { "type": "string", "description": "The key to select." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's key must be defined" } } }, @@ -8739,6 +8759,10 @@ "key": { "type": "string", "description": "The key of the secret to select from. Must be a valid secret key." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's key must be defined" } } }, diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json index 6c7c6be407a..f07cf0d903c 100644 --- a/api/swagger-spec/v1.json +++ b/api/swagger-spec/v1.json @@ -18428,12 +18428,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's keys must be defined" } } }, @@ -18572,12 +18576,16 @@ "items": { "$ref": "v1.KeyToPath" }, - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'." + "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'." }, "defaultMode": { "type": "integer", "format": "int32", "description": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's keys must be defined" } } }, @@ -18744,6 +18752,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap must be defined" } } }, @@ -18754,6 +18766,10 @@ "name": { "type": "string", "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names" + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret must be defined" } } }, @@ -18814,6 +18830,10 @@ "key": { "type": "string", "description": "The key to select." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the ConfigMap or it's key must be defined" } } }, @@ -18831,6 +18851,10 @@ "key": { "type": "string", "description": "The key of the secret to select from. Must be a valid secret key." + }, + "optional": { + "type": "boolean", + "description": "Specify whether the Secret or it's key must be defined" } } }, diff --git a/docs/api-reference/apps/v1beta1/definitions.html b/docs/api-reference/apps/v1beta1/definitions.html index a83ceba29e7..2f41161f21f 100755 --- a/docs/api-reference/apps/v1beta1/definitions.html +++ b/docs/api-reference/apps/v1beta1/definitions.html @@ -1387,7 +1387,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

items

-

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -1399,6 +1399,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

integer (int32)

+ +

optional

+

Specify whether the ConfigMap or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -1546,6 +1553,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

string

+ +

optional

+

Specify whether the Secret must be defined

+

false

+

boolean

+

false

+ @@ -3194,7 +3208,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

items

-

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -3206,6 +3220,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

integer (int32)

+ +

optional

+

Specify whether the Secret or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -4055,6 +4076,13 @@ The StatefulSet guarantees that a given network identity will always map to the

string

+ +

optional

+

Specify whether the ConfigMap must be defined

+

false

+

boolean

+

false

+ @@ -4268,6 +4296,13 @@ The StatefulSet guarantees that a given network identity will always map to the

string

+ +

optional

+

Specify whether the Secret or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -4713,6 +4748,13 @@ The StatefulSet guarantees that a given network identity will always map to the

string

+ +

optional

+

Specify whether the ConfigMap or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -5018,7 +5060,7 @@ Examples:
diff --git a/docs/api-reference/batch/v1/definitions.html b/docs/api-reference/batch/v1/definitions.html index 6d8bb400c65..f7b3adc98f1 100755 --- a/docs/api-reference/batch/v1/definitions.html +++ b/docs/api-reference/batch/v1/definitions.html @@ -1291,7 +1291,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

items

-

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -1303,6 +1303,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

integer (int32)

+ +

optional

+

Specify whether the ConfigMap or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -1450,6 +1457,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

string

+ +

optional

+

Specify whether the Secret must be defined

+

false

+

boolean

+

false

+ @@ -3181,7 +3195,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

items

-

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -3193,6 +3207,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

integer (int32)

+ +

optional

+

Specify whether the Secret or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -4042,6 +4063,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

string

+ +

optional

+

Specify whether the ConfigMap must be defined

+

false

+

boolean

+

false

+ @@ -4255,6 +4283,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

string

+ +

optional

+

Specify whether the Secret or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -4700,6 +4735,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

string

+ +

optional

+

Specify whether the ConfigMap or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -4950,7 +4992,7 @@ Examples:
diff --git a/docs/api-reference/extensions/v1beta1/definitions.html b/docs/api-reference/extensions/v1beta1/definitions.html index 98455db29e2..2c6dbd08cb3 100755 --- a/docs/api-reference/extensions/v1beta1/definitions.html +++ b/docs/api-reference/extensions/v1beta1/definitions.html @@ -1600,7 +1600,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

items

-

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -1612,6 +1612,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

integer (int32)

+ +

optional

+

Specify whether the ConfigMap or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -1697,6 +1704,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

string

+ +

optional

+

Specify whether the Secret must be defined

+

false

+

boolean

+

false

+ @@ -2828,7 +2842,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

items

-

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -2840,6 +2854,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

integer (int32)

+ +

optional

+

Specify whether the Secret or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -3839,6 +3860,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

string

+ +

optional

+

Specify whether the Secret or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -7171,6 +7199,13 @@ Both these may change in the future. Incoming requests are matched against the h

string

+ +

optional

+

Specify whether the ConfigMap must be defined

+

false

+

boolean

+

false

+ @@ -7390,6 +7425,13 @@ Both these may change in the future. Incoming requests are matched against the h

string

+ +

optional

+

Specify whether the ConfigMap or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -7567,7 +7609,7 @@ Both these may change in the future. Incoming requests are matched against the h diff --git a/docs/api-reference/v1/definitions.html b/docs/api-reference/v1/definitions.html index 9152833a2c3..6420f133496 100755 --- a/docs/api-reference/v1/definitions.html +++ b/docs/api-reference/v1/definitions.html @@ -1524,7 +1524,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

items

-

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -1536,6 +1536,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

integer (int32)

+ +

optional

+

Specify whether the ConfigMap or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -1738,6 +1745,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

string

+ +

optional

+

Specify whether the Secret must be defined

+

false

+

boolean

+

false

+ @@ -3296,7 +3310,7 @@ The resulting set of endpoints can be viewed as:

items

-

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the .. path or start with ...

+

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

@@ -3308,6 +3322,13 @@ The resulting set of endpoints can be viewed as:

integer (int32)

+ +

optional

+

Specify whether the Secret or it’s keys must be defined

+

false

+

boolean

+

false

+ @@ -4387,6 +4408,13 @@ The resulting set of endpoints can be viewed as:

string

+ +

optional

+

Specify whether the Secret or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -8535,6 +8563,13 @@ Examples:

string

+ +

optional

+

Specify whether the ConfigMap must be defined

+

false

+

boolean

+

false

+ @@ -8775,6 +8810,13 @@ Examples:

string

+ +

optional

+

Specify whether the ConfigMap or it’s key must be defined

+

false

+

boolean

+

false

+ @@ -9194,7 +9236,7 @@ Examples:
diff --git a/federation/apis/openapi-spec/swagger.json b/federation/apis/openapi-spec/swagger.json index 1c0d8ca0f54..d84c809403a 100644 --- a/federation/apis/openapi-spec/swagger.json +++ b/federation/apis/openapi-spec/swagger.json @@ -10746,6 +10746,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap must be defined", + "type": "boolean" } } }, @@ -10762,6 +10766,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's key must be defined", + "type": "boolean" } } }, @@ -10801,7 +10809,7 @@ "format": "int32" }, "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "type": "array", "items": { "$ref": "#/definitions/v1.KeyToPath" @@ -10810,6 +10818,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" } } }, @@ -12677,6 +12689,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the Secret must be defined", + "type": "boolean" } } }, @@ -12693,6 +12709,10 @@ "name": { "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" + }, + "optional": { + "description": "Specify whether the Secret or it's key must be defined", + "type": "boolean" } } }, @@ -12732,12 +12752,16 @@ "format": "int32" }, "items": { - "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "type": "array", "items": { "$ref": "#/definitions/v1.KeyToPath" } }, + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, "secretName": { "description": "Name of the secret in the pod's namespace to use. More info: http://kubernetes.io/docs/user-guide/volumes#secrets", "type": "string" diff --git a/hack/verify-flags/exceptions.txt b/hack/verify-flags/exceptions.txt index 725d06f444e..4ca2b129a5d 100644 --- a/hack/verify-flags/exceptions.txt +++ b/hack/verify-flags/exceptions.txt @@ -123,11 +123,17 @@ pkg/util/oom/oom_linux.go: oomScoreAdjPath := path.Join("/proc", pidStr, "oom_sc pkg/util/oom/oom_linux.go:// Writes 'value' to /proc//oom_score_adj for all processes in cgroup cgroupName. pkg/util/oom/oom_linux.go:// Writes 'value' to /proc//oom_score_adj. PID = 0 means self test/e2e/common/configmap.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/configmap-volume/data-1"}, +test/e2e/common/configmap.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/configmap-volumes/create/data-1"}, +test/e2e/common/configmap.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/configmap-volumes/delete/data-1"}, +test/e2e/common/configmap.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/configmap-volumes/update/data-3"}, test/e2e/common/downwardapi_volume.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=" + filePath}, test/e2e/common/host_path.go: fmt.Sprintf("--file_content_in_loop=%v", filePath), test/e2e/common/host_path.go: fmt.Sprintf("--file_content_in_loop=%v", filePathInReader), test/e2e/common/host_path.go: fmt.Sprintf("--retry_time=%d", retryDuration), test/e2e/common/host_path.go: fmt.Sprintf("--retry_time=%d", retryDuration), +test/e2e/common/secrets.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/secret-volumes/create/data-1"}, +test/e2e/common/secrets.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/secret-volumes/delete/data-1"}, +test/e2e/common/secrets.go: Command: []string{"/mt", "--break_on_expected_content=false", "--retry_time=120", "--file_content_in_loop=/etc/secret-volumes/update/data-3"}, test/e2e_node/container_manager_test.go: return fmt.Errorf("expected pid %d's oom_score_adj to be %d; found %d", pid, expectedOOMScoreAdj, oomScore) test/e2e_node/container_manager_test.go: return fmt.Errorf("expected pid %d's oom_score_adj to be < %d; found %d", pid, expectedMaxOOMScoreAdj, oomScore) test/e2e_node/container_manager_test.go: return fmt.Errorf("expected pid %d's oom_score_adj to be >= %d; found %d", pid, expectedMinOOMScoreAdj, oomScore) diff --git a/pkg/api/v1/generated.pb.go b/pkg/api/v1/generated.pb.go index eb2219801ff..bd838dedb21 100644 --- a/pkg/api/v1/generated.pb.go +++ b/pkg/api/v1/generated.pb.go @@ -1628,6 +1628,16 @@ func (m *ConfigMapEnvSource) MarshalTo(data []byte) (int, error) { return 0, err } i += n10 + if m.Optional != nil { + data[i] = 0x10 + i++ + if *m.Optional { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } return i, nil } @@ -1658,6 +1668,16 @@ func (m *ConfigMapKeySelector) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(len(m.Key))) i += copy(data[i:], m.Key) + if m.Optional != nil { + data[i] = 0x18 + i++ + if *m.Optional { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } return i, nil } @@ -1739,6 +1759,16 @@ func (m *ConfigMapVolumeSource) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) } + if m.Optional != nil { + data[i] = 0x20 + i++ + if *m.Optional { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } return i, nil } @@ -7309,6 +7339,16 @@ func (m *SecretEnvSource) MarshalTo(data []byte) (int, error) { return 0, err } i += n155 + if m.Optional != nil { + data[i] = 0x10 + i++ + if *m.Optional { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } return i, nil } @@ -7339,6 +7379,16 @@ func (m *SecretKeySelector) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(len(m.Key))) i += copy(data[i:], m.Key) + if m.Optional != nil { + data[i] = 0x18 + i++ + if *m.Optional { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } return i, nil } @@ -7416,6 +7466,16 @@ func (m *SecretVolumeSource) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) } + if m.Optional != nil { + data[i] = 0x20 + i++ + if *m.Optional { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } return i, nil } @@ -8625,6 +8685,9 @@ func (m *ConfigMapEnvSource) Size() (n int) { _ = l l = m.LocalObjectReference.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 + } return n } @@ -8635,6 +8698,9 @@ func (m *ConfigMapKeySelector) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Key) n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 + } return n } @@ -8666,6 +8732,9 @@ func (m *ConfigMapVolumeSource) Size() (n int) { if m.DefaultMode != nil { n += 1 + sovGenerated(uint64(*m.DefaultMode)) } + if m.Optional != nil { + n += 2 + } return n } @@ -10733,6 +10802,9 @@ func (m *SecretEnvSource) Size() (n int) { _ = l l = m.LocalObjectReference.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 + } return n } @@ -10743,6 +10815,9 @@ func (m *SecretKeySelector) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Key) n += 1 + l + sovGenerated(uint64(l)) + if m.Optional != nil { + n += 2 + } return n } @@ -10774,6 +10849,9 @@ func (m *SecretVolumeSource) Size() (n int) { if m.DefaultMode != nil { n += 1 + sovGenerated(uint64(*m.DefaultMode)) } + if m.Optional != nil { + n += 2 + } return n } @@ -11329,6 +11407,7 @@ func (this *ConfigMapEnvSource) String() string { } s := strings.Join([]string{`&ConfigMapEnvSource{`, `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, `}`, }, "") return s @@ -11340,6 +11419,7 @@ func (this *ConfigMapKeySelector) String() string { s := strings.Join([]string{`&ConfigMapKeySelector{`, `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, `}`, }, "") return s @@ -11363,6 +11443,7 @@ func (this *ConfigMapVolumeSource) String() string { `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, `}`, }, "") return s @@ -13105,6 +13186,7 @@ func (this *SecretEnvSource) String() string { } s := strings.Join([]string{`&SecretEnvSource{`, `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, `}`, }, "") return s @@ -13116,6 +13198,7 @@ func (this *SecretKeySelector) String() string { s := strings.Join([]string{`&SecretKeySelector{`, `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, `}`, }, "") return s @@ -13139,6 +13222,7 @@ func (this *SecretVolumeSource) String() string { `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `Optional:` + valueToStringGenerated(this.Optional) + `,`, `}`, }, "") return s @@ -15414,6 +15498,27 @@ func (m *ConfigMapEnvSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -15523,6 +15628,27 @@ func (m *ConfigMapKeySelector) Unmarshal(data []byte) error { } m.Key = string(data[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -15765,6 +15891,27 @@ func (m *ConfigMapVolumeSource) Unmarshal(data []byte) error { } } m.DefaultMode = &v + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -36170,6 +36317,27 @@ func (m *SecretEnvSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -36279,6 +36447,27 @@ func (m *SecretKeySelector) Unmarshal(data []byte) error { } m.Key = string(data[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -36520,6 +36709,27 @@ func (m *SecretVolumeSource) Unmarshal(data []byte) error { } } m.DefaultMode = &v + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Optional", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Optional = &b default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -39962,16 +40172,16 @@ var ( ) var fileDescriptorGenerated = []byte{ - // 10271 bytes of a gzipped FileDescriptorProto + // 10327 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc7, 0x95, 0x98, 0x7b, 0x86, 0x5f, 0xf3, 0xf8, 0xb9, 0xb5, 0x1f, 0xa2, 0x68, 0x69, 0xb9, 0x6a, 0x59, 0xf2, 0x4a, 0x5a, 0x91, 0xde, 0x95, 0x64, 0xad, 0x2d, 0x47, 0x36, 0xc9, 0x21, 0x77, 0xe9, 0x25, - 0x77, 0x47, 0x35, 0xdc, 0x5d, 0xd9, 0x56, 0x2c, 0x35, 0xa7, 0x8b, 0x64, 0x6b, 0x9b, 0xdd, 0xa3, - 0xee, 0x1e, 0xee, 0x52, 0x8e, 0x81, 0x3b, 0x9f, 0x70, 0x87, 0x20, 0x4e, 0xe2, 0xe0, 0x60, 0xe0, - 0x90, 0x4b, 0xe0, 0x4b, 0x80, 0x04, 0x4e, 0x0e, 0xf9, 0x70, 0x9c, 0x3b, 0xfb, 0x70, 0x4e, 0x82, - 0x24, 0x77, 0x8e, 0x2f, 0x1f, 0x07, 0x07, 0x07, 0xe4, 0x2e, 0x67, 0x80, 0x39, 0xf1, 0x82, 0xfc, - 0xcc, 0x8f, 0xe4, 0x1f, 0x13, 0x24, 0x41, 0x7d, 0x76, 0x55, 0xcf, 0x0c, 0xbb, 0x87, 0x5a, 0xd2, - 0xf2, 0x21, 0xff, 0x66, 0xde, 0x7b, 0xf5, 0xea, 0xa3, 0x5f, 0x55, 0xbd, 0xf7, 0xea, 0xd5, 0x2b, + 0x77, 0x47, 0x35, 0xdc, 0x5d, 0xd9, 0x56, 0x2c, 0x35, 0xa7, 0x8b, 0x64, 0x7b, 0x9b, 0xdd, 0xa3, + 0xee, 0x1e, 0xee, 0x52, 0x8e, 0x81, 0x3b, 0x9f, 0x70, 0x87, 0x20, 0x4e, 0xe2, 0xe0, 0x60, 0x20, + 0xc8, 0x07, 0xee, 0x12, 0x20, 0x81, 0x93, 0x43, 0x3e, 0x1c, 0xe7, 0xce, 0x3e, 0x9c, 0x93, 0x20, + 0x97, 0xb3, 0xe3, 0xcb, 0xc7, 0xc1, 0xc1, 0x01, 0xb9, 0xcb, 0x19, 0x60, 0x4e, 0x74, 0x70, 0x3f, + 0xf3, 0x23, 0xf7, 0x8f, 0x09, 0x92, 0xa0, 0x3e, 0xbb, 0xaa, 0x67, 0x86, 0xdd, 0x43, 0x2d, 0x69, + 0xf9, 0x70, 0xff, 0x66, 0xde, 0x7b, 0xf5, 0xea, 0xa3, 0x5f, 0x55, 0xbd, 0xf7, 0xea, 0xd5, 0x2b, 0xb8, 0x74, 0xef, 0x6a, 0x3c, 0xe3, 0x85, 0xb3, 0xf7, 0x5a, 0xeb, 0x24, 0x0a, 0x48, 0x42, 0xe2, 0xd9, 0xe6, 0xbd, 0xcd, 0x59, 0xa7, 0xe9, 0xcd, 0xee, 0x5c, 0x9e, 0xdd, 0x24, 0x01, 0x89, 0x9c, 0x84, 0xb8, 0x33, 0xcd, 0x28, 0x4c, 0x42, 0xf4, 0x18, 0xa7, 0x9e, 0x49, 0xa9, 0x67, 0x9a, 0xf7, @@ -39979,630 +40189,634 @@ var fileDescriptorGenerated = []byte{ 0x34, 0xc2, 0xed, 0xd9, 0xcd, 0x70, 0x33, 0x9c, 0x65, 0x85, 0xd6, 0x5b, 0x1b, 0xec, 0x1f, 0xfb, 0xc3, 0x7e, 0x71, 0x66, 0x53, 0x2f, 0x8a, 0xaa, 0x9d, 0xa6, 0xb7, 0xed, 0x34, 0xb6, 0xbc, 0x80, 0x44, 0xbb, 0xb2, 0xf2, 0x78, 0x76, 0x9b, 0x24, 0x4e, 0x87, 0x26, 0x4c, 0xcd, 0x76, 0x2b, 0x15, - 0xb5, 0x82, 0xc4, 0xdb, 0x26, 0x6d, 0x05, 0x3e, 0x99, 0x57, 0x20, 0x6e, 0x6c, 0x91, 0x6d, 0xa7, + 0xb5, 0x82, 0xc4, 0xdb, 0x26, 0x6d, 0x05, 0x3e, 0x9e, 0x57, 0x20, 0x6e, 0x6c, 0x91, 0x6d, 0xa7, 0xad, 0xdc, 0x95, 0xee, 0x23, 0x13, 0x91, 0x38, 0x6c, 0x45, 0x8d, 0xf6, 0xba, 0x2e, 0x77, 0x2e, - 0xd3, 0x4a, 0x3c, 0x7f, 0xd6, 0x0b, 0x92, 0x38, 0x89, 0xb2, 0x45, 0xec, 0x3f, 0xb4, 0xe0, 0xc2, + 0xd3, 0x4a, 0x3c, 0x7f, 0xd6, 0x0b, 0x92, 0x38, 0x89, 0xb2, 0x45, 0xec, 0x3f, 0xb0, 0xe0, 0xc2, 0xdc, 0xdd, 0xfa, 0xa2, 0xef, 0xc4, 0x89, 0xd7, 0x98, 0xf7, 0xc3, 0xc6, 0xbd, 0x7a, 0x12, 0x46, 0xe4, 0x4e, 0xe8, 0xb7, 0xb6, 0x49, 0x9d, 0xd5, 0x83, 0x2e, 0xc1, 0xd0, 0x0e, 0xfb, 0xbf, 0x5c, - 0x9d, 0xb4, 0x2e, 0x58, 0x17, 0x2b, 0xf3, 0x13, 0x3f, 0xda, 0x9b, 0xfe, 0xc8, 0xfe, 0xde, 0xf4, + 0x9d, 0xb4, 0x2e, 0x58, 0x17, 0x2b, 0xf3, 0x13, 0x3f, 0xdc, 0x9b, 0xfe, 0xd0, 0xfe, 0xde, 0xf4, 0xd0, 0x1d, 0x01, 0xc7, 0x8a, 0x02, 0x3d, 0x0d, 0x03, 0x1b, 0xf1, 0xda, 0x6e, 0x93, 0x4c, 0x96, 0x18, 0xed, 0x98, 0xa0, 0x1d, 0x58, 0xaa, 0x53, 0x28, 0x16, 0x58, 0x34, 0x0b, 0x95, 0xa6, 0x13, 0x25, 0x5e, 0xe2, 0x85, 0xc1, 0x64, 0xf9, 0x82, 0x75, 0xb1, 0x7f, 0xfe, 0x94, 0x20, 0xad, 0xd4, 0x24, 0x02, 0xa7, 0x34, 0xb4, 0x19, 0x11, 0x71, 0xdc, 0x5b, 0x81, 0xbf, 0x3b, 0xd9, 0x77, 0xc1, - 0xba, 0x38, 0x94, 0x36, 0x03, 0x0b, 0x38, 0x56, 0x14, 0xf6, 0xf7, 0x4b, 0x30, 0x34, 0xb7, 0xb1, + 0xba, 0x38, 0x94, 0x36, 0x03, 0x0b, 0x38, 0x56, 0x14, 0xf6, 0x77, 0x4b, 0x30, 0x34, 0xb7, 0xb1, 0xe1, 0x05, 0x5e, 0xb2, 0x8b, 0xde, 0x82, 0x91, 0x20, 0x74, 0x89, 0xfc, 0xcf, 0x7a, 0x31, 0x7c, 0xe5, 0xd9, 0x99, 0xc3, 0x04, 0x6a, 0xe6, 0xa6, 0x56, 0x62, 0x7e, 0x62, 0x7f, 0x6f, 0x7a, 0x44, 0x87, 0x60, 0x83, 0x23, 0x7a, 0x03, 0x86, 0x9b, 0xa1, 0xab, 0x2a, 0x28, 0xb1, 0x0a, 0x9e, 0x39, 0xbc, 0x82, 0x5a, 0x5a, 0x60, 0x7e, 0x7c, 0x7f, 0x6f, 0x7a, 0x58, 0x03, 0x60, 0x9d, 0x1d, 0xf2, 0x61, 0x9c, 0xfe, 0x0d, 0x12, 0x4f, 0xd5, 0x50, 0x66, 0x35, 0x3c, 0x9f, 0x5f, 0x83, 0x56, 0x68, - 0xfe, 0xf4, 0xfe, 0xde, 0xf4, 0x78, 0x06, 0x88, 0xb3, 0xac, 0xed, 0x77, 0x61, 0x6c, 0x2e, 0x49, + 0xfe, 0xf4, 0xfe, 0xde, 0xf4, 0x78, 0x06, 0x88, 0xb3, 0xac, 0xed, 0x77, 0x60, 0x6c, 0x2e, 0x49, 0x9c, 0xc6, 0x16, 0x71, 0xf9, 0xf7, 0x45, 0x2f, 0x42, 0x5f, 0xe0, 0x6c, 0x13, 0xf1, 0xf5, 0x2f, - 0x88, 0x61, 0xef, 0xbb, 0xe9, 0x6c, 0x93, 0x83, 0xbd, 0xe9, 0x89, 0xdb, 0x81, 0xf7, 0x4e, 0x4b, + 0x88, 0x61, 0xef, 0xbb, 0xe9, 0x6c, 0x93, 0x83, 0xbd, 0xe9, 0x89, 0xdb, 0x81, 0xf7, 0x76, 0x4b, 0xc8, 0x0c, 0x85, 0x61, 0x46, 0x8d, 0xae, 0x00, 0xb8, 0x64, 0xc7, 0x6b, 0x90, 0x9a, 0x93, 0x6c, - 0x09, 0x69, 0x40, 0xa2, 0x2c, 0x54, 0x15, 0x06, 0x6b, 0x54, 0xf6, 0xd7, 0x2c, 0xa8, 0xcc, 0xed, + 0x09, 0x69, 0x40, 0xa2, 0x2c, 0x54, 0x15, 0x06, 0x6b, 0x54, 0xf6, 0x57, 0x2d, 0xa8, 0xcc, 0xed, 0x84, 0x9e, 0x5b, 0x0b, 0xdd, 0x18, 0xb5, 0x60, 0xbc, 0x19, 0x91, 0x0d, 0x12, 0x29, 0xd0, 0xa4, 0x75, 0xa1, 0x7c, 0x71, 0xf8, 0xca, 0x95, 0x9c, 0x7e, 0x9b, 0x85, 0x16, 0x83, 0x24, 0xda, 0x9d, - 0x7f, 0x44, 0x54, 0x3d, 0x9e, 0xc1, 0xe2, 0x6c, 0x1d, 0xf6, 0x5f, 0x2b, 0xc1, 0xd9, 0xb9, 0x77, - 0x5b, 0x11, 0xa9, 0x7a, 0xf1, 0xbd, 0xec, 0x54, 0x70, 0xbd, 0xf8, 0xde, 0xcd, 0x74, 0x30, 0x94, + 0x7f, 0x44, 0x54, 0x3d, 0x9e, 0xc1, 0xe2, 0x6c, 0x1d, 0xf6, 0xdf, 0x28, 0xc1, 0xd9, 0xb9, 0x77, + 0x5a, 0x11, 0xa9, 0x7a, 0xf1, 0xbd, 0xec, 0x54, 0x70, 0xbd, 0xf8, 0xde, 0xcd, 0x74, 0x30, 0x94, 0x0c, 0x56, 0x05, 0x1c, 0x2b, 0x0a, 0xf4, 0x3c, 0x0c, 0xd2, 0xdf, 0xb7, 0xf1, 0xb2, 0xe8, 0xfd, 0x69, 0x41, 0x3c, 0x5c, 0x75, 0x12, 0xa7, 0xca, 0x51, 0x58, 0xd2, 0xa0, 0x55, 0x18, 0x6e, 0xb0, 0x35, 0x62, 0x73, 0x35, 0x74, 0x09, 0xfb, 0xc2, 0x95, 0xf9, 0xe7, 0x28, 0xf9, 0x42, 0x0a, 0x3e, 0xd8, 0x9b, 0x9e, 0xe4, 0x6d, 0x13, 0x2c, 0x34, 0x1c, 0xd6, 0xcb, 0x23, 0x5b, 0x4d, 0xc4, 0x3e, 0xc6, 0x09, 0x3a, 0x4c, 0xc2, 0x8b, 0xda, 0x9c, 0xea, 0x67, 0x73, 0x6a, 0xa4, 0xcb, 0x7c, 0xfa, - 0xfb, 0x96, 0x18, 0x93, 0x25, 0xcf, 0x37, 0x97, 0x87, 0x2b, 0x00, 0x31, 0x69, 0x44, 0x24, 0xd1, + 0xc7, 0x96, 0x18, 0x93, 0x25, 0xcf, 0x37, 0x97, 0x87, 0x2b, 0x00, 0x31, 0x69, 0x44, 0x24, 0xd1, 0x46, 0x45, 0x7d, 0xe6, 0xba, 0xc2, 0x60, 0x8d, 0x8a, 0x4e, 0xfe, 0x78, 0xcb, 0x89, 0x98, 0xb4, 0x88, 0xb1, 0x51, 0x93, 0xbf, 0x2e, 0x11, 0x38, 0xa5, 0x31, 0x26, 0x7f, 0x39, 0x77, 0xf2, 0xff, - 0x2b, 0x0b, 0x06, 0xe7, 0xbd, 0xc0, 0xf5, 0x82, 0x4d, 0xf4, 0x16, 0x0c, 0xd1, 0xd5, 0xdc, 0x75, - 0x12, 0x47, 0xcc, 0xfb, 0x4f, 0x48, 0xe1, 0xd1, 0x17, 0x65, 0x29, 0x3e, 0xf1, 0x0c, 0xa5, 0xa6, - 0x42, 0x74, 0x6b, 0xfd, 0x6d, 0xd2, 0x48, 0x56, 0x49, 0xe2, 0xa4, 0xdd, 0x49, 0x61, 0x58, 0x71, + 0xb6, 0x05, 0x83, 0xf3, 0x5e, 0xe0, 0x7a, 0xc1, 0x26, 0x7a, 0x0b, 0x86, 0xe8, 0x6a, 0xee, 0x3a, + 0x89, 0x23, 0xe6, 0xfd, 0xc7, 0xa4, 0xf0, 0xe8, 0x8b, 0xb2, 0x14, 0x9f, 0x78, 0x86, 0x52, 0x53, + 0x21, 0xba, 0xb5, 0xfe, 0x25, 0xd2, 0x48, 0x56, 0x49, 0xe2, 0xa4, 0xdd, 0x49, 0x61, 0x58, 0x71, 0x45, 0xb7, 0x61, 0x20, 0x71, 0xa2, 0x4d, 0x92, 0x88, 0x69, 0x9f, 0x33, 0x29, 0x39, 0x0f, 0x4c, 0x45, 0x8e, 0x04, 0x0d, 0x92, 0x2e, 0x90, 0x6b, 0x8c, 0x09, 0x16, 0xcc, 0xec, 0x06, 0x8c, 0x2c, - 0x38, 0x4d, 0x67, 0xdd, 0xf3, 0xbd, 0xc4, 0x23, 0x31, 0xfa, 0x38, 0x94, 0x1d, 0xd7, 0x65, 0x13, + 0x38, 0x4d, 0x67, 0xdd, 0xf3, 0xbd, 0xc4, 0x23, 0x31, 0xfa, 0x28, 0x94, 0x1d, 0xd7, 0x65, 0x13, 0xa0, 0x32, 0x7f, 0x76, 0x7f, 0x6f, 0xba, 0x3c, 0xe7, 0xba, 0x07, 0x7b, 0xd3, 0xa0, 0xa8, 0x76, 0x31, 0xa5, 0x40, 0xcf, 0x42, 0x9f, 0x1b, 0x85, 0xcd, 0xc9, 0x12, 0xa3, 0x3c, 0x47, 0x67, 0x6a, - 0x35, 0x0a, 0x9b, 0x19, 0x52, 0x46, 0x63, 0xff, 0x6e, 0x09, 0xd0, 0x02, 0x69, 0x6e, 0x2d, 0xd5, - 0x8d, 0x6f, 0x7a, 0x11, 0x86, 0xb6, 0xc3, 0xc0, 0x4b, 0xc2, 0x28, 0x16, 0x15, 0x32, 0xb9, 0x58, - 0x15, 0x30, 0xac, 0xb0, 0xe8, 0x02, 0xf4, 0x35, 0xd3, 0xe9, 0x3d, 0x22, 0x97, 0x06, 0x36, 0xb1, - 0x19, 0x86, 0x52, 0xb4, 0x62, 0x12, 0x09, 0x79, 0x56, 0x14, 0xb7, 0x63, 0x12, 0x61, 0x86, 0x49, - 0x25, 0x88, 0xca, 0x96, 0x90, 0xd6, 0x8c, 0x04, 0x51, 0x0c, 0xd6, 0xa8, 0xd0, 0x9b, 0x50, 0xe1, - 0xff, 0x30, 0xd9, 0x60, 0xa2, 0x9b, 0xbb, 0x28, 0xac, 0x84, 0x0d, 0xc7, 0xcf, 0x0e, 0xfe, 0x28, - 0x93, 0x38, 0xc9, 0x08, 0xa7, 0x3c, 0x0d, 0x89, 0x1b, 0xc8, 0x95, 0xb8, 0x5f, 0xb1, 0x00, 0x2d, - 0x78, 0x81, 0x4b, 0xa2, 0x13, 0xd8, 0x3a, 0x7b, 0x9b, 0x0c, 0x3f, 0xa1, 0x4d, 0x0b, 0xb7, 0x9b, - 0x61, 0x40, 0x82, 0x64, 0x21, 0x0c, 0x5c, 0xbe, 0x9d, 0x7e, 0x1a, 0xfa, 0x12, 0x5a, 0x15, 0x6f, + 0x35, 0x0a, 0x9b, 0x19, 0x52, 0x46, 0x63, 0x7f, 0xbf, 0x04, 0x68, 0x81, 0x34, 0xb7, 0x96, 0xea, + 0xc6, 0x37, 0xbd, 0x08, 0x43, 0xdb, 0x61, 0xe0, 0x25, 0x61, 0x14, 0x8b, 0x0a, 0x99, 0x5c, 0xac, + 0x0a, 0x18, 0x56, 0x58, 0x74, 0x01, 0xfa, 0x9a, 0xe9, 0xf4, 0x1e, 0x91, 0x4b, 0x03, 0x9b, 0xd8, + 0x0c, 0x43, 0x29, 0x5a, 0x31, 0x89, 0x84, 0x3c, 0x2b, 0x8a, 0xdb, 0x31, 0x89, 0x30, 0xc3, 0xa4, + 0x12, 0x44, 0x65, 0x4b, 0x48, 0x6b, 0x46, 0x82, 0x28, 0x06, 0x6b, 0x54, 0xe8, 0x4d, 0xa8, 0xf0, + 0x7f, 0x98, 0x6c, 0x30, 0xd1, 0xcd, 0x5d, 0x14, 0x56, 0xc2, 0x86, 0xe3, 0x67, 0x07, 0x7f, 0x94, + 0x49, 0x9c, 0x64, 0x84, 0x53, 0x9e, 0x86, 0xc4, 0x0d, 0xe4, 0x4a, 0xdc, 0xdf, 0xb4, 0x00, 0x2d, + 0x78, 0x81, 0x4b, 0xa2, 0x13, 0xd8, 0x3a, 0x7b, 0x9b, 0x0c, 0x3f, 0xa6, 0x4d, 0x0b, 0xb7, 0x9b, + 0x61, 0x40, 0x82, 0x64, 0x21, 0x0c, 0x5c, 0xbe, 0x9d, 0x7e, 0x12, 0xfa, 0x12, 0x5a, 0x15, 0x6f, 0xd6, 0xd3, 0xf2, 0xb3, 0xd0, 0x0a, 0x0e, 0xf6, 0xa6, 0xcf, 0xb5, 0x97, 0x60, 0x4d, 0x60, 0x65, - 0xd0, 0xa7, 0x60, 0x20, 0x4e, 0x9c, 0xa4, 0x15, 0x8b, 0x86, 0x3e, 0x21, 0x1b, 0x5a, 0x67, 0xd0, + 0xd0, 0x27, 0x60, 0x20, 0x4e, 0x9c, 0xa4, 0x15, 0x8b, 0x86, 0x3e, 0x21, 0x1b, 0x5a, 0x67, 0xd0, 0x83, 0xbd, 0xe9, 0x71, 0x55, 0x8c, 0x83, 0xb0, 0x28, 0x80, 0x9e, 0x81, 0xc1, 0x6d, 0x12, 0xc7, 0xce, 0xa6, 0x5c, 0xe0, 0xc6, 0x45, 0xd9, 0xc1, 0x55, 0x0e, 0xc6, 0x12, 0x8f, 0x9e, 0x84, 0x7e, - 0x12, 0x45, 0x61, 0x24, 0x24, 0x62, 0x54, 0x10, 0xf6, 0x2f, 0x52, 0x20, 0xe6, 0x38, 0xfb, 0x3f, - 0x5b, 0x30, 0xae, 0xda, 0xca, 0xeb, 0x3a, 0x81, 0x29, 0xef, 0x02, 0x34, 0x64, 0x07, 0x63, 0x36, + 0x12, 0x45, 0x61, 0x24, 0x24, 0x62, 0x54, 0x10, 0xf6, 0x2f, 0x52, 0x20, 0xe6, 0x38, 0xfb, 0xbf, + 0x59, 0x30, 0xae, 0xda, 0xca, 0xeb, 0x3a, 0x81, 0x29, 0xef, 0x02, 0x34, 0x64, 0x07, 0x63, 0x36, 0xd1, 0xb4, 0x3a, 0x3a, 0x8b, 0x5f, 0xfb, 0x80, 0xa6, 0x75, 0x28, 0x50, 0x8c, 0x35, 0xbe, 0xf6, - 0xbf, 0xb1, 0xe0, 0x74, 0xa6, 0x6f, 0x2b, 0x5e, 0x9c, 0xa0, 0x37, 0xda, 0xfa, 0x37, 0x53, 0xac, + 0xbf, 0xb7, 0xe0, 0x74, 0xa6, 0x6f, 0x2b, 0x5e, 0x9c, 0xa0, 0x37, 0xda, 0xfa, 0x37, 0x53, 0xac, 0x7f, 0xb4, 0x34, 0xeb, 0x9d, 0x92, 0x17, 0x09, 0xd1, 0xfa, 0x86, 0xa1, 0xdf, 0x4b, 0xc8, 0xb6, 0xec, 0xd6, 0xf3, 0x05, 0xbb, 0xc5, 0xdb, 0x97, 0x7e, 0xa5, 0x65, 0xca, 0x03, 0x73, 0x56, 0xf6, - 0xff, 0xb2, 0xa0, 0xb2, 0x10, 0x06, 0x1b, 0xde, 0xe6, 0xaa, 0xd3, 0x3c, 0x81, 0xef, 0x53, 0x87, + 0xff, 0xb6, 0xa0, 0xb2, 0x10, 0x06, 0x1b, 0xde, 0xe6, 0xaa, 0xd3, 0x3c, 0x81, 0xef, 0x53, 0x87, 0x3e, 0xc6, 0x9d, 0x77, 0xe1, 0x72, 0x5e, 0x17, 0x44, 0xc3, 0x66, 0xe8, 0x9e, 0xca, 0x95, 0x05, 0xb5, 0x4c, 0x51, 0x10, 0x66, 0xcc, 0xa6, 0x5e, 0x86, 0x8a, 0x22, 0x40, 0x13, 0x50, 0xbe, 0x47, 0xb8, 0x26, 0x59, 0xc1, 0xf4, 0x27, 0x3a, 0x03, 0xfd, 0x3b, 0x8e, 0xdf, 0x12, 0x93, 0x17, 0xf3, - 0x3f, 0x9f, 0x2e, 0x5d, 0xb5, 0xec, 0x5f, 0x65, 0x33, 0x50, 0x54, 0xb2, 0x18, 0xec, 0x88, 0xc5, - 0xe1, 0x3d, 0x0b, 0xce, 0xf8, 0x1d, 0x16, 0x25, 0x31, 0x26, 0x47, 0x59, 0xce, 0x1e, 0x13, 0xcd, - 0x3e, 0xd3, 0x09, 0x8b, 0x3b, 0xd6, 0x66, 0xff, 0xc0, 0x82, 0x33, 0xaa, 0x75, 0x37, 0xc8, 0x6e, - 0x9d, 0xf8, 0xa4, 0x91, 0x84, 0xd1, 0x87, 0xa4, 0x7d, 0xe8, 0x71, 0x3e, 0xd2, 0x7c, 0xa5, 0x19, - 0x16, 0x0c, 0xca, 0x37, 0xc8, 0x2e, 0x1b, 0x76, 0xfb, 0xb7, 0x2d, 0x18, 0x55, 0xcd, 0x3f, 0x81, - 0xe9, 0xb1, 0x62, 0x4e, 0x8f, 0x8f, 0x17, 0x94, 0xad, 0x2e, 0x13, 0xe3, 0x5b, 0x25, 0x38, 0xab, - 0x68, 0x8c, 0xad, 0xe3, 0x43, 0x32, 0xfa, 0xbd, 0x75, 0xf7, 0x06, 0xd9, 0x5d, 0x0b, 0xe9, 0xde, - 0xdf, 0xb9, 0xbb, 0xe8, 0x32, 0x0c, 0xbb, 0x64, 0xc3, 0x69, 0xf9, 0x89, 0x52, 0x71, 0xfb, 0xb9, - 0xed, 0x53, 0x4d, 0xc1, 0x58, 0xa7, 0xb1, 0xbf, 0x35, 0xcc, 0x96, 0x8e, 0xc4, 0xa1, 0x1f, 0x8d, - 0x2a, 0x13, 0x9a, 0x25, 0x32, 0xa2, 0x5b, 0x22, 0xc2, 0xea, 0x78, 0x12, 0xfa, 0xbd, 0x6d, 0xba, - 0xbd, 0x94, 0xcc, 0x5d, 0x63, 0x99, 0x02, 0x31, 0xc7, 0xa1, 0xa7, 0x60, 0xb0, 0x11, 0x6e, 0x6f, - 0x3b, 0x81, 0x3b, 0x59, 0x66, 0xea, 0xcd, 0x30, 0xdd, 0x81, 0x16, 0x38, 0x08, 0x4b, 0x1c, 0x7a, - 0x0c, 0xfa, 0x9c, 0x68, 0x33, 0x9e, 0xec, 0x63, 0x34, 0x43, 0xb4, 0xa6, 0xb9, 0x68, 0x33, 0xc6, - 0x0c, 0x4a, 0xd5, 0x96, 0xfb, 0x61, 0x74, 0xcf, 0x0b, 0x36, 0xab, 0x5e, 0xc4, 0x74, 0x10, 0x4d, - 0x6d, 0xb9, 0xab, 0x30, 0x58, 0xa3, 0x42, 0x35, 0xe8, 0x6f, 0x86, 0x51, 0x12, 0x4f, 0x0e, 0xb0, - 0xe1, 0x7c, 0x2e, 0x57, 0x7a, 0x78, 0xbf, 0x6b, 0x61, 0x94, 0xa4, 0x5d, 0xa1, 0xff, 0x62, 0xcc, - 0x19, 0xa1, 0x05, 0x28, 0x93, 0x60, 0x67, 0x72, 0x90, 0xf1, 0xfb, 0xd8, 0xe1, 0xfc, 0x16, 0x83, - 0x9d, 0x3b, 0x4e, 0x94, 0x4e, 0xa2, 0xc5, 0x60, 0x07, 0xd3, 0xd2, 0xa8, 0x01, 0x15, 0xe9, 0x56, - 0x88, 0x27, 0x87, 0x8a, 0x08, 0x18, 0x16, 0xe4, 0x98, 0xbc, 0xd3, 0xf2, 0x22, 0xb2, 0x4d, 0x82, - 0x24, 0x4e, 0x75, 0x78, 0x89, 0x8d, 0x71, 0xca, 0x17, 0x35, 0x60, 0x84, 0xab, 0x3a, 0xab, 0x61, - 0x2b, 0x48, 0xe2, 0xc9, 0x0a, 0x6b, 0x72, 0x8e, 0x91, 0x7c, 0x27, 0x2d, 0x31, 0x7f, 0x46, 0xb0, - 0x1f, 0xd1, 0x80, 0x31, 0x36, 0x98, 0xa2, 0x37, 0x60, 0xd4, 0xf7, 0x76, 0x48, 0x40, 0xe2, 0xb8, - 0x16, 0x85, 0xeb, 0x64, 0x12, 0x58, 0x6f, 0x9e, 0xcc, 0x33, 0x18, 0xc3, 0x75, 0x32, 0x7f, 0x6a, - 0x7f, 0x6f, 0x7a, 0x74, 0x45, 0x2f, 0x8d, 0x4d, 0x66, 0xe8, 0x4d, 0x18, 0xa3, 0x7a, 0x95, 0x97, - 0xb2, 0x1f, 0x2e, 0xce, 0x1e, 0xed, 0xef, 0x4d, 0x8f, 0x61, 0xa3, 0x38, 0xce, 0xb0, 0x43, 0x6b, - 0x50, 0xf1, 0xbd, 0x0d, 0xd2, 0xd8, 0x6d, 0xf8, 0x64, 0x72, 0x84, 0xf1, 0xce, 0x99, 0x72, 0x2b, - 0x92, 0x9c, 0xeb, 0xb2, 0xea, 0x2f, 0x4e, 0x19, 0xa1, 0x3b, 0x70, 0x2e, 0x21, 0xd1, 0xb6, 0x17, - 0x38, 0x54, 0xb1, 0x10, 0x8a, 0x16, 0xb3, 0xca, 0x47, 0x99, 0xd4, 0x9e, 0x17, 0x03, 0x7b, 0x6e, - 0xad, 0x23, 0x15, 0xee, 0x52, 0x1a, 0xdd, 0x82, 0x71, 0x36, 0x9f, 0x6a, 0x2d, 0xdf, 0xaf, 0x85, - 0xbe, 0xd7, 0xd8, 0x9d, 0x1c, 0x63, 0x0c, 0x9f, 0x92, 0xb6, 0xf6, 0xb2, 0x89, 0xa6, 0x36, 0x48, - 0xfa, 0x0f, 0x67, 0x4b, 0x23, 0x1f, 0xc6, 0x63, 0xd2, 0x68, 0x45, 0x5e, 0xb2, 0x4b, 0x65, 0x9f, - 0x3c, 0x48, 0x26, 0xc7, 0x8b, 0xd8, 0x54, 0x75, 0xb3, 0x10, 0x77, 0x74, 0x64, 0x80, 0x38, 0xcb, - 0x9a, 0x2e, 0x15, 0x71, 0xe2, 0x7a, 0xc1, 0xe4, 0x04, 0x53, 0xa2, 0xd5, 0xfc, 0xaa, 0x53, 0x20, - 0xe6, 0x38, 0x66, 0xaa, 0xd2, 0x1f, 0xb7, 0xe8, 0xda, 0x7b, 0x8a, 0x11, 0xa6, 0xa6, 0xaa, 0x44, - 0xe0, 0x94, 0x86, 0xee, 0x57, 0x49, 0xb2, 0x3b, 0x89, 0x18, 0xa9, 0x9a, 0x6a, 0x6b, 0x6b, 0x5f, - 0xc0, 0x14, 0x8e, 0xee, 0xc0, 0x20, 0x09, 0x76, 0x96, 0xa2, 0x70, 0x7b, 0xf2, 0x74, 0x91, 0x35, - 0x60, 0x91, 0x13, 0xf3, 0x5d, 0x21, 0xd5, 0x96, 0x05, 0x18, 0x4b, 0x66, 0xe8, 0x01, 0x4c, 0x76, - 0xf8, 0x4a, 0xfc, 0xa3, 0x9c, 0x61, 0x1f, 0xe5, 0x33, 0xa2, 0xec, 0xe4, 0x5a, 0x17, 0xba, 0x83, - 0x43, 0x70, 0xb8, 0x2b, 0x77, 0x7b, 0x1d, 0xc6, 0xd4, 0x42, 0xc5, 0xbe, 0x37, 0x9a, 0x86, 0x7e, - 0xba, 0x16, 0x4b, 0xdb, 0xb1, 0x42, 0x07, 0x95, 0x2e, 0xd1, 0x31, 0xe6, 0x70, 0x36, 0xa8, 0xde, - 0xbb, 0x64, 0x7e, 0x37, 0x21, 0xdc, 0x86, 0x28, 0x6b, 0x83, 0x2a, 0x11, 0x38, 0xa5, 0xb1, 0xff, - 0x0f, 0xdf, 0xe5, 0xd3, 0xd5, 0xb0, 0xc0, 0x4e, 0x70, 0x09, 0x86, 0xb6, 0xc2, 0x38, 0xa1, 0xd4, - 0xac, 0x8e, 0xfe, 0x74, 0x5f, 0xbf, 0x2e, 0xe0, 0x58, 0x51, 0xa0, 0x57, 0x60, 0xb4, 0xa1, 0x57, - 0x20, 0x36, 0xa7, 0xb3, 0xa2, 0x88, 0x59, 0x3b, 0x36, 0x69, 0xd1, 0x55, 0x18, 0x62, 0x0e, 0xd5, - 0x46, 0xe8, 0x0b, 0x6b, 0x45, 0xee, 0xb5, 0x43, 0x35, 0x01, 0x3f, 0xd0, 0x7e, 0x63, 0x45, 0x4d, - 0x6d, 0x3e, 0xda, 0x84, 0xe5, 0x9a, 0xd8, 0x40, 0x94, 0xcd, 0x77, 0x9d, 0x41, 0xb1, 0xc0, 0xda, - 0xff, 0xb8, 0xa4, 0x8d, 0x32, 0xd5, 0xb5, 0x09, 0xfa, 0x22, 0x0c, 0xde, 0x77, 0xbc, 0xc4, 0x0b, - 0x36, 0x85, 0x4e, 0xf0, 0x42, 0xc1, 0xdd, 0x84, 0x15, 0xbf, 0xcb, 0x8b, 0xf2, 0x9d, 0x4f, 0xfc, - 0xc1, 0x92, 0x21, 0xe5, 0x1d, 0xb5, 0x82, 0x80, 0xf2, 0x2e, 0xf5, 0xce, 0x1b, 0xf3, 0xa2, 0x9c, - 0xb7, 0xf8, 0x83, 0x25, 0x43, 0xb4, 0x01, 0x20, 0x65, 0x89, 0xb8, 0xc2, 0x91, 0xf9, 0xc9, 0x5e, - 0xd8, 0xaf, 0xa9, 0xd2, 0xf3, 0x63, 0x74, 0xaf, 0x4d, 0xff, 0x63, 0x8d, 0xb3, 0x9d, 0x30, 0xd5, - 0xaa, 0xbd, 0x59, 0xe8, 0x4b, 0x74, 0x4a, 0x3b, 0x51, 0x42, 0xdc, 0xb9, 0x24, 0xeb, 0x0b, 0x3e, - 0x5c, 0x43, 0x5c, 0xf3, 0xb6, 0x89, 0x3e, 0xfd, 0x05, 0x13, 0x9c, 0xf2, 0xb3, 0xbf, 0x57, 0x86, - 0xc9, 0x6e, 0xcd, 0xa5, 0x22, 0x49, 0x1e, 0x78, 0xc9, 0x02, 0x55, 0x7e, 0x2c, 0x53, 0x24, 0x17, - 0x05, 0x1c, 0x2b, 0x0a, 0x2a, 0x1b, 0xb1, 0xb7, 0x19, 0x38, 0xbe, 0x10, 0x5f, 0x25, 0x1b, 0x75, - 0x06, 0xc5, 0x02, 0x4b, 0xe9, 0x22, 0xe2, 0xc4, 0xc2, 0x8f, 0xae, 0xc9, 0x10, 0x66, 0x50, 0x2c, - 0xb0, 0xba, 0xed, 0xdd, 0x97, 0x63, 0x7b, 0x1b, 0x43, 0xd4, 0xff, 0x70, 0x87, 0x08, 0x7d, 0x19, - 0x60, 0xc3, 0x0b, 0xbc, 0x78, 0x8b, 0x71, 0x1f, 0xe8, 0x99, 0xbb, 0x52, 0xb2, 0x96, 0x14, 0x17, - 0xac, 0x71, 0x44, 0x2f, 0xc1, 0xb0, 0x9a, 0x9e, 0xcb, 0xd5, 0xc9, 0x41, 0xd3, 0xf7, 0x9a, 0xae, - 0x55, 0x55, 0xac, 0xd3, 0xd9, 0x6f, 0x67, 0xe5, 0x45, 0xcc, 0x0a, 0x6d, 0x7c, 0xad, 0xa2, 0xe3, - 0x5b, 0x3a, 0x7c, 0x7c, 0xed, 0xff, 0x54, 0x86, 0x71, 0xa3, 0xb2, 0x56, 0x5c, 0x60, 0x45, 0x7b, - 0x8d, 0x6e, 0x58, 0x4e, 0x42, 0xc4, 0x9c, 0xbc, 0xd4, 0xcb, 0xa4, 0xd1, 0xb7, 0x37, 0x3a, 0x17, - 0x38, 0x27, 0xb4, 0x05, 0x15, 0xdf, 0x89, 0x99, 0xf5, 0x4e, 0xc4, 0x5c, 0xec, 0x8d, 0x6d, 0x6a, - 0x54, 0x38, 0x71, 0xa2, 0xed, 0x1e, 0xbc, 0x96, 0x94, 0x39, 0xdd, 0x6d, 0xa9, 0xb2, 0x23, 0x0f, - 0x6f, 0x54, 0x73, 0xa8, 0x46, 0xb4, 0x8b, 0x39, 0x0e, 0x5d, 0x85, 0x91, 0x88, 0x30, 0x49, 0x59, - 0xa0, 0xfa, 0x1c, 0x13, 0xbd, 0xfe, 0x54, 0xf1, 0xc3, 0x1a, 0x0e, 0x1b, 0x94, 0xa9, 0xde, 0x3f, - 0x70, 0x88, 0xde, 0xff, 0x0c, 0x0c, 0xb2, 0x1f, 0x4a, 0x2a, 0xd4, 0x17, 0x5a, 0xe6, 0x60, 0x2c, - 0xf1, 0x59, 0x21, 0x1a, 0x2a, 0x28, 0x44, 0xcf, 0xc2, 0x58, 0xd5, 0x21, 0xdb, 0x61, 0xb0, 0x18, - 0xb8, 0xcd, 0xd0, 0x0b, 0x12, 0x34, 0x09, 0x7d, 0x6c, 0x3f, 0xe1, 0xf3, 0xbd, 0x8f, 0x72, 0xc0, - 0x7d, 0x54, 0x77, 0xb7, 0xff, 0xaf, 0x05, 0xa3, 0x55, 0xe2, 0x93, 0x84, 0xdc, 0x6a, 0x32, 0x8f, - 0x0f, 0x5a, 0x02, 0xb4, 0x19, 0x39, 0x0d, 0x52, 0x23, 0x91, 0x17, 0xba, 0x75, 0xd2, 0x08, 0x03, - 0x76, 0xe6, 0x41, 0x37, 0xc8, 0x73, 0xfb, 0x7b, 0xd3, 0xe8, 0x5a, 0x1b, 0x16, 0x77, 0x28, 0x81, - 0x5c, 0x18, 0x6d, 0x46, 0xc4, 0x70, 0x51, 0x59, 0xf9, 0xaa, 0x46, 0x4d, 0x2f, 0xc2, 0xb5, 0x61, - 0x03, 0x84, 0x4d, 0xa6, 0xe8, 0x73, 0x30, 0x11, 0x46, 0xcd, 0x2d, 0x27, 0xa8, 0x92, 0x26, 0x09, - 0x5c, 0x6a, 0x02, 0x08, 0x7f, 0xe4, 0x99, 0xfd, 0xbd, 0xe9, 0x89, 0x5b, 0x19, 0x1c, 0x6e, 0xa3, - 0xb6, 0x7f, 0xbd, 0x04, 0x67, 0xab, 0xe1, 0xfd, 0xe0, 0xbe, 0x13, 0xb9, 0x73, 0xb5, 0x65, 0xae, - 0xd7, 0x33, 0xff, 0xae, 0xf4, 0x2b, 0x5b, 0x5d, 0xfd, 0xca, 0x5f, 0x82, 0xa1, 0x0d, 0x8f, 0xf8, - 0x2e, 0x26, 0x1b, 0xa2, 0x7b, 0x97, 0x8b, 0x38, 0xde, 0x97, 0x68, 0x19, 0xe9, 0xe3, 0xe0, 0x6e, - 0xed, 0x25, 0xc1, 0x06, 0x2b, 0x86, 0xa8, 0x05, 0x13, 0xd2, 0x70, 0x91, 0x58, 0x31, 0x3b, 0x5e, - 0x28, 0x66, 0x17, 0x99, 0xd5, 0xb0, 0xf1, 0xc0, 0x19, 0x86, 0xb8, 0xad, 0x0a, 0x6a, 0x70, 0x6e, - 0xd3, 0xbd, 0xa1, 0x8f, 0xc9, 0x0a, 0x33, 0x38, 0x99, 0x45, 0xcc, 0xa0, 0xf6, 0xdf, 0xb5, 0xe0, - 0x91, 0xb6, 0xd1, 0x12, 0xee, 0x82, 0xd7, 0xa5, 0x9d, 0xce, 0x0f, 0xc8, 0x72, 0x5a, 0xd9, 0x71, - 0xcc, 0x8b, 0xd9, 0xec, 0xa5, 0x02, 0x36, 0xfb, 0x2d, 0x38, 0xb3, 0xb8, 0xdd, 0x4c, 0x76, 0xab, - 0x9e, 0xe9, 0x0e, 0x7f, 0x19, 0x06, 0xb6, 0x89, 0xeb, 0xb5, 0xb6, 0xc5, 0x67, 0x9d, 0x96, 0x0b, - 0xe9, 0x2a, 0x83, 0x1e, 0xec, 0x4d, 0x8f, 0xd6, 0x93, 0x30, 0x72, 0x36, 0x09, 0x07, 0x60, 0x41, - 0x6e, 0xbf, 0x6f, 0xc1, 0xb8, 0x9c, 0x50, 0x73, 0xae, 0x1b, 0x91, 0x38, 0x46, 0x53, 0x50, 0xf2, - 0x9a, 0x82, 0x11, 0x08, 0x46, 0xa5, 0xe5, 0x1a, 0x2e, 0x79, 0x4d, 0xf4, 0x45, 0xa8, 0xf0, 0x53, - 0x94, 0x54, 0x38, 0x7a, 0x3c, 0x95, 0x61, 0xc6, 0xd4, 0x9a, 0xe4, 0x81, 0x53, 0x76, 0x52, 0xad, - 0x64, 0x4b, 0x75, 0xd9, 0xf4, 0xe9, 0x5f, 0x17, 0x70, 0xac, 0x28, 0xd0, 0x45, 0x18, 0x0a, 0x42, - 0x97, 0x1f, 0x74, 0xf1, 0x4d, 0x97, 0x89, 0xdc, 0x4d, 0x01, 0xc3, 0x0a, 0x6b, 0x7f, 0xdd, 0x82, - 0x11, 0xd9, 0xc7, 0x82, 0x1a, 0x2e, 0x9d, 0x24, 0xa9, 0x76, 0x9b, 0x4e, 0x12, 0xaa, 0xa1, 0x32, - 0x8c, 0xa1, 0x98, 0x96, 0x7b, 0x51, 0x4c, 0xed, 0xdf, 0x2a, 0xc1, 0x98, 0x6c, 0x4e, 0xbd, 0xb5, - 0x1e, 0x13, 0xba, 0x6f, 0x57, 0x1c, 0x3e, 0xf8, 0x44, 0xca, 0xd9, 0xf3, 0x79, 0xc6, 0x8b, 0xf1, - 0xcd, 0x52, 0xbd, 0x60, 0x4e, 0xf2, 0xc1, 0x29, 0x4b, 0xb4, 0x03, 0xa7, 0x82, 0x30, 0x61, 0xfb, - 0x81, 0xc2, 0x17, 0xf3, 0x42, 0x67, 0xeb, 0x79, 0x54, 0xd4, 0x73, 0xea, 0x66, 0x96, 0x1f, 0x6e, - 0xaf, 0x02, 0xdd, 0x92, 0x4e, 0x99, 0x32, 0xab, 0xeb, 0xd9, 0x62, 0x75, 0x75, 0xf7, 0xc9, 0xd8, - 0x3f, 0xb4, 0xa0, 0x22, 0xc9, 0x4e, 0xe2, 0x38, 0xe2, 0x2e, 0x0c, 0xc6, 0xec, 0x13, 0xc9, 0xe1, - 0xba, 0x54, 0xac, 0x0b, 0xfc, 0xbb, 0xa6, 0x9b, 0x20, 0xff, 0x1f, 0x63, 0xc9, 0x8d, 0x39, 0x57, - 0x55, 0x47, 0x3e, 0x74, 0xce, 0x55, 0xd5, 0xb2, 0xee, 0xa7, 0x0e, 0xa3, 0x86, 0xf9, 0x4c, 0x35, - 0xb9, 0x66, 0x44, 0x36, 0xbc, 0x07, 0x59, 0x4d, 0xae, 0xc6, 0xa0, 0x58, 0x60, 0xd1, 0x06, 0x8c, - 0x34, 0xa4, 0x57, 0x36, 0x5d, 0x42, 0x3e, 0x51, 0xd0, 0xd7, 0xab, 0x5c, 0xfc, 0x3c, 0x6c, 0x64, - 0x41, 0xe3, 0x84, 0x0d, 0xbe, 0x74, 0x9d, 0x4a, 0x4f, 0x31, 0xcb, 0x05, 0x3d, 0x1d, 0x11, 0x49, - 0xd2, 0x1a, 0xba, 0x1e, 0x60, 0xda, 0xdf, 0xb6, 0x60, 0x80, 0x3b, 0xfc, 0x8a, 0x79, 0x4d, 0xb5, - 0xc3, 0x8b, 0x74, 0x3c, 0xef, 0x50, 0xa0, 0x38, 0xcb, 0x40, 0x77, 0xa1, 0xc2, 0x7e, 0x30, 0xe7, - 0x45, 0xb9, 0x48, 0x0c, 0x0d, 0xaf, 0x5f, 0x6f, 0xea, 0x1d, 0xc9, 0x00, 0xa7, 0xbc, 0xec, 0x1f, - 0x94, 0xe9, 0xd2, 0x97, 0x92, 0x1a, 0x7b, 0xbb, 0x75, 0x12, 0x7b, 0x7b, 0xe9, 0xf8, 0xf7, 0xf6, - 0x77, 0x60, 0xbc, 0xa1, 0x1d, 0xb3, 0xa4, 0x5f, 0xfc, 0x4a, 0x41, 0xb1, 0xd2, 0xce, 0x66, 0xb8, - 0x83, 0x6b, 0xc1, 0x64, 0x87, 0xb3, 0xfc, 0x11, 0x81, 0x11, 0x2e, 0x0f, 0xa2, 0xbe, 0x3e, 0x56, - 0xdf, 0x6c, 0x11, 0x09, 0xd3, 0x2b, 0x63, 0x52, 0x5c, 0xd7, 0x18, 0x61, 0x83, 0xad, 0xfd, 0xd7, - 0xfb, 0xa1, 0x7f, 0x71, 0x87, 0x04, 0xc9, 0x09, 0x2c, 0x75, 0xdb, 0x30, 0xe6, 0x05, 0x3b, 0xa1, - 0xbf, 0x43, 0x5c, 0x8e, 0x3f, 0xda, 0xf6, 0x7e, 0x4e, 0x54, 0x32, 0xb6, 0x6c, 0x30, 0xc3, 0x19, - 0xe6, 0xc7, 0x61, 0x5a, 0xbf, 0x06, 0x03, 0x5c, 0x32, 0x84, 0x5d, 0x9d, 0xe3, 0x00, 0x67, 0x03, - 0x2b, 0x66, 0x50, 0xea, 0x00, 0xe0, 0xbe, 0x77, 0xc1, 0x08, 0xbd, 0x0d, 0x63, 0x1b, 0x5e, 0x14, - 0x27, 0xd4, 0x3a, 0x8e, 0x13, 0x67, 0xbb, 0x79, 0x04, 0xa3, 0x5a, 0x8d, 0xc8, 0x92, 0xc1, 0x09, - 0x67, 0x38, 0xa3, 0x4d, 0x18, 0xa5, 0x36, 0x5d, 0x5a, 0xd5, 0x60, 0xcf, 0x55, 0x29, 0x9f, 0xda, - 0x8a, 0xce, 0x08, 0x9b, 0x7c, 0xe9, 0x92, 0xd4, 0x60, 0x36, 0xe0, 0x10, 0xd3, 0x6e, 0xd4, 0x92, - 0xc4, 0x8d, 0x3f, 0x8e, 0xa3, 0x2b, 0x1b, 0x8b, 0x62, 0xa8, 0x98, 0x2b, 0x5b, 0x1a, 0xab, 0x60, - 0x7f, 0x97, 0xee, 0xc5, 0x74, 0x0c, 0x4f, 0x60, 0xfb, 0xba, 0x6e, 0x6e, 0x5f, 0x4f, 0x16, 0xf8, - 0xb2, 0x5d, 0xb6, 0xae, 0xb7, 0x60, 0x58, 0xfb, 0xf0, 0x68, 0x16, 0x2a, 0x0d, 0x79, 0xd0, 0x2e, - 0x56, 0x71, 0xa5, 0x4a, 0xa9, 0x13, 0x78, 0x9c, 0xd2, 0xd0, 0x71, 0xa1, 0x2a, 0x68, 0x36, 0x2c, - 0x87, 0x2a, 0xa8, 0x98, 0x61, 0xec, 0x17, 0x00, 0x16, 0x1f, 0x90, 0xc6, 0x5c, 0x83, 0x45, 0x83, - 0x68, 0x07, 0x62, 0x56, 0xf7, 0x03, 0x31, 0xfb, 0x3b, 0x16, 0x8c, 0x2d, 0x2d, 0x18, 0x3a, 0xfd, - 0x0c, 0x00, 0xd7, 0x8d, 0xef, 0xde, 0xbd, 0x29, 0x1d, 0xbe, 0xdc, 0x2b, 0xa7, 0xa0, 0x58, 0xa3, - 0x40, 0x8f, 0x42, 0xd9, 0x6f, 0x05, 0x42, 0x65, 0x1d, 0xdc, 0xdf, 0x9b, 0x2e, 0xaf, 0xb4, 0x02, - 0x4c, 0x61, 0x5a, 0xfc, 0x4b, 0xb9, 0x70, 0xfc, 0x4b, 0x7e, 0x24, 0xe8, 0x37, 0xcb, 0x30, 0xb1, - 0xe4, 0x93, 0x07, 0x46, 0xab, 0x9f, 0x86, 0x01, 0x37, 0xf2, 0x76, 0x48, 0x94, 0x55, 0x04, 0xaa, - 0x0c, 0x8a, 0x05, 0xb6, 0x70, 0x48, 0xce, 0x9b, 0xed, 0x1b, 0xf9, 0xf1, 0x85, 0x23, 0xe5, 0xf6, - 0x19, 0x6d, 0xc0, 0x60, 0xc8, 0x5d, 0x0a, 0x93, 0xfd, 0x4c, 0x14, 0x5f, 0x39, 0xbc, 0x31, 0xd9, - 0xf1, 0x99, 0x11, 0x0e, 0x09, 0x1e, 0x0c, 0xa1, 0xd6, 0x32, 0x01, 0xc5, 0x92, 0xf9, 0xd4, 0xa7, - 0x61, 0x44, 0xa7, 0xec, 0x29, 0x2a, 0xe2, 0x17, 0x2c, 0x38, 0xbd, 0xe4, 0x87, 0x8d, 0x7b, 0x99, - 0x98, 0xa9, 0x97, 0x60, 0x98, 0x4e, 0xa6, 0xd8, 0x08, 0x28, 0x34, 0x22, 0x27, 0x05, 0x0a, 0xeb, - 0x74, 0x5a, 0xb1, 0xdb, 0xb7, 0x97, 0xab, 0x9d, 0x02, 0x2e, 0x05, 0x0a, 0xeb, 0x74, 0xf6, 0xef, - 0x5b, 0xf0, 0xf8, 0xb5, 0x85, 0xc5, 0x1a, 0x89, 0x62, 0x2f, 0x4e, 0x48, 0x90, 0xb4, 0xc5, 0x7c, - 0x52, 0x9d, 0xd1, 0xd5, 0x9a, 0x92, 0xea, 0x8c, 0x55, 0xd6, 0x0a, 0x81, 0xfd, 0xb0, 0x04, 0x3e, - 0x7f, 0xdb, 0x82, 0xd3, 0xd7, 0xbc, 0x04, 0x93, 0x66, 0x98, 0x0d, 0xd3, 0x8c, 0x48, 0x33, 0x8c, - 0xbd, 0x24, 0x8c, 0x76, 0xb3, 0x61, 0x9a, 0x58, 0x61, 0xb0, 0x46, 0xc5, 0x6b, 0xde, 0xf1, 0x62, - 0xda, 0xd2, 0x92, 0x69, 0xea, 0x62, 0x01, 0xc7, 0x8a, 0x82, 0x76, 0xcc, 0xf5, 0x22, 0xa6, 0x32, - 0xec, 0x8a, 0x19, 0xac, 0x3a, 0x56, 0x95, 0x08, 0x9c, 0xd2, 0xd8, 0x7f, 0xc3, 0x82, 0xb3, 0xd7, - 0xfc, 0x56, 0x9c, 0x90, 0x68, 0x23, 0x36, 0x1a, 0xfb, 0x02, 0x54, 0x88, 0x54, 0xee, 0x45, 0x5b, - 0xd5, 0xa6, 0xa1, 0xb4, 0x7e, 0x1e, 0x23, 0xaa, 0xe8, 0x0a, 0x84, 0x22, 0xf6, 0x16, 0x38, 0xf7, - 0xdb, 0x25, 0x18, 0xbd, 0xbe, 0xb6, 0x56, 0xbb, 0x46, 0x12, 0xb1, 0x4a, 0xe6, 0x3b, 0xa5, 0x6a, - 0x9a, 0x45, 0xae, 0xed, 0x2d, 0x99, 0x59, 0xd7, 0x4a, 0x3c, 0x7f, 0x86, 0x87, 0xe4, 0xcf, 0x2c, - 0x07, 0xc9, 0xad, 0xa8, 0x9e, 0x44, 0x5e, 0xb0, 0xd9, 0xd1, 0x82, 0x97, 0x2b, 0x79, 0xb9, 0xdb, - 0x4a, 0x8e, 0x5e, 0x80, 0x01, 0x76, 0x8b, 0x40, 0xaa, 0x1e, 0x1f, 0x55, 0x5a, 0x02, 0x83, 0x1e, - 0xec, 0x4d, 0x57, 0x6e, 0xe3, 0x65, 0xfe, 0x07, 0x0b, 0x52, 0xf4, 0x26, 0x0c, 0x6f, 0x25, 0x49, - 0xf3, 0x3a, 0x71, 0x5c, 0x12, 0xc9, 0x55, 0xe2, 0xe2, 0xe1, 0xab, 0x04, 0x1d, 0x0c, 0x5e, 0x20, - 0x9d, 0x58, 0x29, 0x2c, 0xc6, 0x3a, 0x47, 0xbb, 0x0e, 0x90, 0xe2, 0x1e, 0x92, 0x05, 0x62, 0xff, - 0x7c, 0x09, 0x06, 0xaf, 0x3b, 0x81, 0xeb, 0x93, 0x08, 0x2d, 0x41, 0x1f, 0x79, 0x40, 0x1a, 0x62, - 0x1b, 0xcf, 0x69, 0x7a, 0xba, 0xd5, 0x71, 0xaf, 0x1a, 0xfd, 0x8f, 0x59, 0x79, 0x84, 0x61, 0x90, - 0xb6, 0xfb, 0x9a, 0x8a, 0xdf, 0x7d, 0x2e, 0x7f, 0x14, 0x94, 0x48, 0xf0, 0x7d, 0x52, 0x80, 0xb0, - 0x64, 0xc4, 0xfc, 0x4f, 0x8d, 0x66, 0x9d, 0x2e, 0x6e, 0x49, 0x31, 0xbb, 0x6e, 0x6d, 0xa1, 0xc6, - 0xc9, 0x05, 0x5f, 0xee, 0x7f, 0x92, 0x40, 0x9c, 0xb2, 0xb3, 0xaf, 0xc2, 0x19, 0x76, 0x7c, 0xe9, - 0x24, 0x5b, 0xc6, 0x9c, 0xc9, 0x15, 0x4e, 0xfb, 0x6f, 0x95, 0xe0, 0xd4, 0x72, 0x7d, 0xa1, 0x6e, - 0x7a, 0x0e, 0xaf, 0xc2, 0x08, 0xdf, 0x9e, 0xa9, 0xd0, 0x39, 0xbe, 0x28, 0xaf, 0x5c, 0xee, 0x6b, - 0x1a, 0x0e, 0x1b, 0x94, 0xe8, 0x71, 0x28, 0x7b, 0xef, 0x04, 0xd9, 0xc8, 0xac, 0xe5, 0xd7, 0x6e, - 0x62, 0x0a, 0xa7, 0x68, 0xba, 0xd3, 0xf3, 0x25, 0x4e, 0xa1, 0xd5, 0x6e, 0xff, 0x2a, 0x8c, 0x79, - 0x71, 0x23, 0xf6, 0x96, 0x03, 0x3a, 0xff, 0x9d, 0x86, 0x14, 0xdf, 0x54, 0x35, 0xa7, 0x4d, 0x55, - 0x58, 0x9c, 0xa1, 0xd6, 0xd6, 0xdb, 0xfe, 0xc2, 0xda, 0x42, 0x7e, 0x20, 0xef, 0xdb, 0x50, 0x51, - 0x41, 0x4c, 0x32, 0xf4, 0xcc, 0xea, 0x1c, 0x7a, 0x56, 0x60, 0xc1, 0x91, 0xfe, 0xdc, 0x72, 0x47, - 0x7f, 0xee, 0x3f, 0xb0, 0x20, 0x8d, 0xd7, 0x40, 0x18, 0x2a, 0xcd, 0x90, 0x1d, 0x96, 0x44, 0xf2, - 0x54, 0xf2, 0xa9, 0x1c, 0x49, 0xe4, 0x33, 0x81, 0xcb, 0x4a, 0x4d, 0x96, 0xc5, 0x29, 0x1b, 0xb4, - 0x02, 0x83, 0xcd, 0x88, 0xd4, 0x13, 0x16, 0x0d, 0xde, 0x03, 0x47, 0x26, 0xd5, 0x35, 0x5e, 0x12, - 0x4b, 0x16, 0xf6, 0x3f, 0xb7, 0x00, 0x56, 0xbc, 0x6d, 0x2f, 0xc1, 0x4e, 0xb0, 0x49, 0x4e, 0xc0, - 0xd8, 0xbb, 0x09, 0x7d, 0x71, 0x93, 0x34, 0x8a, 0x1d, 0x77, 0xa5, 0x2d, 0xab, 0x37, 0x49, 0x23, - 0xfd, 0x1c, 0xf4, 0x1f, 0x66, 0x7c, 0xec, 0x7f, 0x08, 0x30, 0x96, 0x92, 0x51, 0x85, 0x1b, 0x3d, - 0x6f, 0x84, 0x41, 0x3f, 0x9a, 0x09, 0x83, 0xae, 0x30, 0x6a, 0x2d, 0xf2, 0x39, 0x81, 0xf2, 0xb6, - 0xf3, 0x40, 0xe8, 0xf7, 0x2f, 0x15, 0x6d, 0x10, 0xad, 0x69, 0x66, 0xd5, 0x79, 0xc0, 0xd5, 0xa9, - 0xe7, 0xa4, 0x20, 0xad, 0x3a, 0x0f, 0x0e, 0xf8, 0xa1, 0x16, 0x9b, 0x89, 0xd4, 0xa0, 0xf8, 0xda, - 0x7f, 0x49, 0xff, 0xb3, 0xc5, 0x91, 0x56, 0xc7, 0x6a, 0xf5, 0x02, 0xe1, 0x9e, 0xec, 0xb1, 0x56, - 0x2f, 0xc8, 0xd6, 0xea, 0x05, 0x05, 0x6a, 0xf5, 0x02, 0xf4, 0x9e, 0x05, 0x83, 0xc2, 0xab, 0xcf, - 0x22, 0xe0, 0x86, 0xaf, 0x7c, 0xaa, 0xa7, 0xaa, 0xc5, 0xf1, 0x00, 0xaf, 0x7e, 0x56, 0xea, 0x90, - 0x02, 0x9a, 0xdb, 0x04, 0x59, 0x35, 0xfa, 0x35, 0x0b, 0xc6, 0xc4, 0x6f, 0x4c, 0xde, 0x69, 0x91, - 0x38, 0x11, 0xbb, 0xd5, 0xe7, 0x8e, 0xd2, 0x1a, 0xc1, 0x82, 0x37, 0xea, 0x93, 0x72, 0xa9, 0x31, - 0x91, 0xb9, 0x6d, 0xcb, 0xb4, 0x07, 0x7d, 0xdf, 0x82, 0x33, 0xdb, 0xce, 0x03, 0x5e, 0x23, 0x87, - 0x61, 0x27, 0xf1, 0x42, 0x11, 0xe5, 0xb7, 0xd4, 0xab, 0x9c, 0xb4, 0x31, 0xe2, 0xcd, 0x95, 0x01, - 0x3c, 0x67, 0x3a, 0x91, 0xe4, 0x36, 0xba, 0x63, 0x0b, 0xa7, 0x5c, 0x18, 0x92, 0x82, 0xd9, 0x41, - 0x7b, 0x9f, 0xd7, 0x37, 0xe5, 0xc3, 0x67, 0xa0, 0xf4, 0x77, 0xcd, 0xbc, 0xd6, 0x72, 0x82, 0xc4, - 0x4b, 0x76, 0x35, 0x5d, 0x9f, 0xd5, 0x22, 0x04, 0xf1, 0x18, 0x6b, 0xd9, 0x82, 0x11, 0x5d, 0xe6, - 0x8e, 0xb1, 0xa6, 0x10, 0x4e, 0x77, 0x90, 0xa7, 0x63, 0xac, 0xb0, 0x05, 0x8f, 0x76, 0x95, 0x8b, - 0xe3, 0xab, 0xd6, 0xfe, 0x67, 0x96, 0xbe, 0x60, 0x9e, 0x80, 0x07, 0x65, 0xd5, 0xf4, 0xa0, 0x5c, - 0x2c, 0x3a, 0x73, 0xba, 0xb8, 0x51, 0x36, 0xf4, 0xe6, 0xd3, 0x8d, 0x00, 0xad, 0xc1, 0x80, 0x4f, - 0x21, 0xf2, 0x00, 0xeb, 0x52, 0x2f, 0x73, 0x33, 0xd5, 0x31, 0x18, 0x3c, 0xc6, 0x82, 0x97, 0xfd, - 0x7d, 0x0b, 0xfa, 0x7e, 0x8a, 0x57, 0x33, 0xda, 0x58, 0x8b, 0xdb, 0xc5, 0x33, 0xd8, 0xb9, 0xbf, - 0xf8, 0x20, 0x21, 0x41, 0xcc, 0x54, 0xca, 0x8e, 0x43, 0xf4, 0xeb, 0x25, 0x18, 0xa6, 0x55, 0xc9, - 0x10, 0x84, 0x57, 0x60, 0xd4, 0x77, 0xd6, 0x89, 0x2f, 0xbd, 0xbf, 0x59, 0xf3, 0x6b, 0x45, 0x47, - 0x62, 0x93, 0x96, 0x16, 0xde, 0xd0, 0x9d, 0xe3, 0x42, 0x35, 0x52, 0x85, 0x0d, 0xcf, 0x39, 0x36, - 0x69, 0xa9, 0x05, 0x70, 0xdf, 0x49, 0x1a, 0x5b, 0xc2, 0x34, 0x53, 0xcd, 0xbd, 0x4b, 0x81, 0x98, - 0xe3, 0xd0, 0x1c, 0x8c, 0x4b, 0x89, 0xbd, 0x43, 0x6d, 0xf6, 0x30, 0x10, 0x6a, 0xa3, 0xba, 0xde, - 0x89, 0x4d, 0x34, 0xce, 0xd2, 0xa3, 0x4f, 0xc3, 0x18, 0x1d, 0x9c, 0xb0, 0x95, 0xc8, 0x00, 0x8b, - 0x7e, 0x16, 0x60, 0xc1, 0xe2, 0x73, 0xd7, 0x0c, 0x0c, 0xce, 0x50, 0xda, 0x6f, 0xc2, 0xe9, 0x95, - 0xd0, 0x71, 0xe7, 0x1d, 0xdf, 0x09, 0x1a, 0x24, 0x5a, 0x0e, 0x36, 0x73, 0xcf, 0xa2, 0xf5, 0xf3, - 0xe2, 0x52, 0xde, 0x79, 0xb1, 0x1d, 0x01, 0xd2, 0x2b, 0x10, 0xa1, 0x41, 0x6f, 0xc0, 0xa0, 0xc7, - 0xab, 0x12, 0x62, 0x7b, 0x39, 0xcf, 0xb9, 0xd4, 0xd6, 0x46, 0x2d, 0xd4, 0x85, 0x03, 0xb0, 0x64, - 0x49, 0x2d, 0x8a, 0x4e, 0xde, 0xa8, 0x7c, 0xa3, 0xcd, 0xfe, 0x8b, 0x16, 0x8c, 0xdf, 0xcc, 0xdc, - 0x1d, 0x7c, 0x1a, 0x06, 0x62, 0x12, 0x75, 0x70, 0xad, 0xd5, 0x19, 0x14, 0x0b, 0xec, 0x43, 0x37, - 0xd7, 0x7f, 0xb9, 0x04, 0x15, 0x16, 0x64, 0xda, 0xa4, 0xd6, 0xc1, 0xf1, 0x2b, 0xa7, 0xab, 0x86, - 0x72, 0x9a, 0x63, 0x34, 0xaa, 0x86, 0x75, 0xd3, 0x4d, 0xd1, 0x6d, 0x75, 0xa7, 0xae, 0x90, 0xbd, - 0x98, 0x32, 0xe4, 0xf7, 0xae, 0xc6, 0xcc, 0x2b, 0x78, 0xf2, 0xbe, 0x1d, 0x3b, 0xc1, 0x55, 0xb4, - 0x1f, 0xba, 0x13, 0x5c, 0xd5, 0xb2, 0x2e, 0x8b, 0x53, 0x4d, 0x6b, 0x3c, 0x5b, 0xbe, 0x3f, 0xcb, - 0x42, 0x07, 0x1d, 0xdf, 0x7b, 0x97, 0xa8, 0xab, 0xa9, 0xd3, 0x22, 0x14, 0x50, 0x40, 0x0f, 0xd8, - 0x3a, 0x23, 0xfe, 0xf1, 0x9b, 0xc7, 0x69, 0x11, 0xfb, 0x3a, 0x8c, 0x67, 0x86, 0x0e, 0xbd, 0x04, - 0xfd, 0xcd, 0x2d, 0x27, 0x26, 0x99, 0xa0, 0x94, 0xfe, 0x1a, 0x05, 0x1e, 0xec, 0x4d, 0x8f, 0xa9, - 0x02, 0x0c, 0x82, 0x39, 0xb5, 0xfd, 0x5e, 0x09, 0xfa, 0x6e, 0x86, 0xee, 0x49, 0x88, 0xda, 0x75, - 0x43, 0xd4, 0x9e, 0xce, 0xcf, 0x5b, 0xd0, 0x55, 0xca, 0x6a, 0x19, 0x29, 0xbb, 0x58, 0x80, 0xd7, - 0xe1, 0x02, 0xb6, 0x0d, 0xc3, 0x2c, 0x2f, 0x82, 0x88, 0xca, 0x79, 0xc1, 0xb0, 0xa7, 0xa6, 0x33, - 0xf6, 0xd4, 0xb8, 0x46, 0xaa, 0x59, 0x55, 0xcf, 0xc0, 0xa0, 0x88, 0x02, 0xc9, 0x06, 0x4e, 0x0a, - 0x5a, 0x2c, 0xf1, 0xf6, 0x3f, 0x29, 0x83, 0x91, 0x87, 0x01, 0xfd, 0xd0, 0x82, 0x99, 0x88, 0x5f, - 0x42, 0x71, 0xab, 0xad, 0xc8, 0x0b, 0x36, 0xeb, 0x8d, 0x2d, 0xe2, 0xb6, 0x7c, 0x2f, 0xd8, 0x5c, - 0xde, 0x0c, 0x42, 0x05, 0x5e, 0x7c, 0x40, 0x1a, 0x2d, 0xe6, 0x74, 0x2d, 0x9c, 0xfe, 0x41, 0x9d, - 0x80, 0x5e, 0xd9, 0xdf, 0x9b, 0x9e, 0xc1, 0x3d, 0xd5, 0x82, 0x7b, 0x6c, 0x15, 0xfa, 0x23, 0x0b, - 0x66, 0x79, 0x26, 0x82, 0xe2, 0x3d, 0x29, 0x64, 0x87, 0xd6, 0x24, 0xd3, 0x94, 0xdd, 0x1a, 0x89, - 0xb6, 0xe7, 0x5f, 0x16, 0x83, 0x3c, 0x5b, 0xeb, 0xad, 0x56, 0xdc, 0x6b, 0x33, 0xed, 0x7f, 0x59, - 0x86, 0x51, 0x3a, 0x9e, 0xe9, 0xed, 0xe3, 0x97, 0x0c, 0x31, 0x79, 0x22, 0x23, 0x26, 0xa7, 0x0c, - 0xe2, 0x87, 0x73, 0xf1, 0x38, 0x86, 0x53, 0xbe, 0x13, 0x27, 0xd7, 0x89, 0x13, 0x25, 0xeb, 0xc4, - 0x61, 0x07, 0x8d, 0xd9, 0x20, 0x86, 0x02, 0x67, 0x97, 0x2a, 0xb2, 0x68, 0x25, 0xcb, 0x0c, 0xb7, - 0xf3, 0x47, 0x3b, 0x80, 0xd8, 0xa1, 0x66, 0xe4, 0x04, 0x31, 0xef, 0x8b, 0x27, 0xdc, 0xb4, 0xbd, - 0xd5, 0x3a, 0x25, 0x6a, 0x45, 0x2b, 0x6d, 0xdc, 0x70, 0x87, 0x1a, 0xb4, 0x63, 0xeb, 0xfe, 0xa2, - 0xc7, 0xd6, 0x03, 0x39, 0x11, 0xcb, 0xbf, 0x68, 0xc1, 0x69, 0xfa, 0x59, 0xcc, 0xe8, 0xd6, 0x18, - 0x85, 0x30, 0x4e, 0xc5, 0xce, 0x27, 0x89, 0x84, 0x89, 0xf9, 0x95, 0xa3, 0x59, 0x9b, 0x7c, 0x52, - 0xf5, 0xed, 0x86, 0xc9, 0x0c, 0x67, 0xb9, 0xdb, 0xdf, 0xb1, 0x80, 0x85, 0xcf, 0x9d, 0xc0, 0x66, - 0x76, 0xcd, 0xdc, 0xcc, 0xec, 0xfc, 0x15, 0xa3, 0xcb, 0x3e, 0xf6, 0x22, 0x4c, 0x50, 0x6c, 0x2d, - 0x0a, 0x1f, 0xec, 0x4a, 0x45, 0x3b, 0xdf, 0x5f, 0xfb, 0x5e, 0x89, 0x4f, 0x1b, 0x75, 0x9b, 0x0e, - 0xfd, 0x92, 0x05, 0x43, 0x0d, 0xa7, 0xe9, 0x34, 0x78, 0x16, 0x9b, 0x02, 0x3e, 0x19, 0xa3, 0xfc, - 0xcc, 0x82, 0x28, 0xcb, 0xfd, 0x09, 0x9f, 0x90, 0x5d, 0x97, 0xe0, 0x5c, 0x1f, 0x82, 0xaa, 0x7c, - 0xca, 0x83, 0x51, 0x83, 0xd9, 0x31, 0x1a, 0xa1, 0xbf, 0x64, 0xf1, 0x25, 0x5f, 0x19, 0x0a, 0xf7, - 0xe1, 0x54, 0xa0, 0xfd, 0xa7, 0x8b, 0x99, 0xd4, 0x8b, 0x67, 0x8a, 0x2f, 0xea, 0x6c, 0x0d, 0xd4, - 0x02, 0x05, 0x33, 0x0c, 0x71, 0x7b, 0x1d, 0xf6, 0xdf, 0xb6, 0xe0, 0x11, 0x9d, 0x50, 0xbb, 0xfc, - 0x98, 0xe7, 0x2b, 0xae, 0xc2, 0x50, 0xd8, 0x24, 0x91, 0x93, 0x1a, 0x45, 0x17, 0xe5, 0xe8, 0xdf, - 0x12, 0xf0, 0x83, 0xbd, 0xe9, 0x33, 0x3a, 0x77, 0x09, 0xc7, 0xaa, 0x24, 0xb2, 0x61, 0x80, 0x8d, - 0x4b, 0x2c, 0xae, 0xad, 0xb2, 0x9c, 0x2e, 0xec, 0x84, 0x24, 0xc6, 0x02, 0x63, 0xff, 0x55, 0x8b, - 0x0b, 0x9b, 0xde, 0x74, 0xf4, 0x15, 0x98, 0xd8, 0xa6, 0xf6, 0xd3, 0xe2, 0x83, 0x26, 0xdd, 0x46, - 0xd9, 0xc9, 0xb0, 0x55, 0x64, 0xf3, 0xe8, 0xd2, 0xdd, 0xf9, 0x49, 0xd1, 0xfa, 0x89, 0xd5, 0x0c, - 0x5b, 0xdc, 0x56, 0x91, 0xfd, 0xc7, 0x62, 0xc6, 0x32, 0x0d, 0xee, 0x19, 0x18, 0x6c, 0x86, 0xee, - 0xc2, 0x72, 0x15, 0x8b, 0xb1, 0x52, 0x4b, 0x4e, 0x8d, 0x83, 0xb1, 0xc4, 0xa3, 0x2b, 0x00, 0xe4, - 0x41, 0x42, 0xa2, 0xc0, 0xf1, 0xd5, 0x89, 0xae, 0x52, 0x94, 0x16, 0x15, 0x06, 0x6b, 0x54, 0xb4, - 0x4c, 0x33, 0x0a, 0x77, 0x3c, 0x97, 0x45, 0xed, 0x97, 0xcd, 0x32, 0x35, 0x85, 0xc1, 0x1a, 0x15, - 0xb5, 0x5a, 0x5b, 0x41, 0xcc, 0x37, 0x31, 0x67, 0x5d, 0xa4, 0x20, 0x19, 0x4a, 0xad, 0xd6, 0xdb, - 0x3a, 0x12, 0x9b, 0xb4, 0xf6, 0x7f, 0xac, 0x00, 0xa4, 0x6a, 0x12, 0x7a, 0xaf, 0x7d, 0x86, 0x7e, - 0xb2, 0xa8, 0x8e, 0xf5, 0xf0, 0xa6, 0x27, 0xfa, 0x86, 0x05, 0xc3, 0x8e, 0xef, 0x87, 0x0d, 0x27, - 0x61, 0x3d, 0x2a, 0x15, 0x5d, 0x2b, 0x44, 0x4b, 0xe6, 0xd2, 0xb2, 0xbc, 0x31, 0x2f, 0xc8, 0x03, - 0x3f, 0x0d, 0x93, 0xdb, 0x1e, 0xbd, 0x09, 0xe8, 0x13, 0x52, 0xcd, 0xe6, 0x1f, 0x65, 0x2a, 0xab, - 0x66, 0x57, 0xd8, 0x0a, 0xa9, 0x69, 0xd8, 0xe8, 0x4d, 0x23, 0xcb, 0x46, 0x5f, 0x91, 0xdb, 0x92, - 0x86, 0xe2, 0x90, 0x97, 0x60, 0x03, 0x7d, 0x51, 0x0f, 0x68, 0xee, 0x2f, 0x72, 0x1d, 0x59, 0xd3, - 0x5f, 0x73, 0x82, 0x99, 0x13, 0x18, 0x77, 0xcd, 0xad, 0x52, 0x04, 0x65, 0x5d, 0xce, 0xaf, 0x21, - 0xb3, 0xc7, 0xa6, 0x9b, 0x63, 0x06, 0x81, 0xb3, 0x55, 0xa0, 0x2f, 0xf2, 0x70, 0xf3, 0xe5, 0x60, - 0x23, 0x14, 0x81, 0x59, 0x97, 0x0a, 0x7c, 0xf3, 0xdd, 0x38, 0x21, 0xdb, 0xb4, 0x4c, 0xba, 0x1b, - 0xde, 0x14, 0x5c, 0xb0, 0xe2, 0x87, 0xd6, 0x60, 0x80, 0x5d, 0x8e, 0x89, 0x27, 0x87, 0x8a, 0xb8, - 0xce, 0xcc, 0x3b, 0xa1, 0xa9, 0x0a, 0xc2, 0xfe, 0xc6, 0x58, 0xf0, 0x42, 0xd7, 0xe5, 0xad, 0xf0, - 0x78, 0x39, 0xb8, 0x1d, 0x13, 0x76, 0x2b, 0xbc, 0x32, 0xff, 0xb1, 0xf4, 0x9a, 0x37, 0x87, 0x77, - 0xcc, 0x33, 0x66, 0x94, 0xa4, 0x9a, 0x88, 0xf8, 0x2f, 0xd3, 0x97, 0x4d, 0x42, 0x91, 0x86, 0x9a, - 0xc9, 0xce, 0xd2, 0xc1, 0xbe, 0x63, 0x32, 0xc3, 0x59, 0xee, 0x27, 0xb8, 0x07, 0x4e, 0xf9, 0x30, - 0x91, 0x9d, 0x92, 0xc7, 0xb8, 0xe3, 0xfe, 0x69, 0x1f, 0x8c, 0x99, 0x82, 0x81, 0x66, 0xa1, 0x22, - 0xb4, 0x29, 0x95, 0xca, 0x48, 0xc9, 0xff, 0xaa, 0x44, 0xe0, 0x94, 0x86, 0x25, 0x75, 0x62, 0xc5, - 0xb5, 0x70, 0x9c, 0x34, 0xa9, 0x93, 0xc2, 0x60, 0x8d, 0x8a, 0xaa, 0xad, 0xeb, 0x61, 0x98, 0xa8, - 0x85, 0x5b, 0xc9, 0xcc, 0x3c, 0x83, 0x62, 0x81, 0xa5, 0x0b, 0xf6, 0x3d, 0xda, 0x21, 0xdf, 0x74, - 0x01, 0xaa, 0x05, 0xfb, 0x86, 0x8e, 0xc4, 0x26, 0x2d, 0xdd, 0x80, 0xc2, 0x98, 0x09, 0xa1, 0x50, - 0x8e, 0xd3, 0xf0, 0xa6, 0x3a, 0xbf, 0x2c, 0x26, 0xf1, 0xe8, 0x0b, 0xf0, 0x88, 0xba, 0xdb, 0x85, - 0xb9, 0x4b, 0x55, 0xd6, 0x38, 0x60, 0xd8, 0xb7, 0x8f, 0x2c, 0x74, 0x26, 0xc3, 0xdd, 0xca, 0xa3, - 0x57, 0x61, 0x4c, 0x28, 0xb6, 0x92, 0xe3, 0xa0, 0x79, 0xfa, 0x7d, 0xc3, 0xc0, 0xe2, 0x0c, 0x35, - 0xaa, 0xc2, 0x04, 0x85, 0x30, 0x8d, 0x52, 0x72, 0xe0, 0x77, 0xd4, 0xd4, 0xce, 0x7c, 0x23, 0x83, - 0xc7, 0x6d, 0x25, 0xd0, 0x1c, 0x8c, 0x73, 0xdd, 0x82, 0x5a, 0x71, 0xec, 0x3b, 0x88, 0x48, 0x4a, - 0x35, 0x09, 0x6e, 0x99, 0x68, 0x9c, 0xa5, 0x47, 0x57, 0x61, 0xc4, 0x89, 0x1a, 0x5b, 0x5e, 0x42, - 0x1a, 0x49, 0x2b, 0xe2, 0xf9, 0x16, 0xb4, 0xf0, 0x81, 0x39, 0x0d, 0x87, 0x0d, 0x4a, 0xfb, 0x5d, - 0x38, 0xdd, 0x21, 0x6c, 0x9b, 0x0a, 0x8e, 0xd3, 0xf4, 0x64, 0x9f, 0x32, 0x81, 0x4a, 0x73, 0xb5, - 0x65, 0xd9, 0x1b, 0x8d, 0x8a, 0x4a, 0x27, 0xf3, 0x25, 0x6b, 0x99, 0x06, 0x95, 0x74, 0x2e, 0x49, - 0x04, 0x4e, 0x69, 0xec, 0xff, 0x59, 0x01, 0xcd, 0xd5, 0x52, 0x20, 0x3c, 0xe5, 0x2a, 0x8c, 0xc8, - 0xe4, 0x99, 0x5a, 0xd2, 0x3a, 0xd5, 0xcd, 0x6b, 0x1a, 0x0e, 0x1b, 0x94, 0xb4, 0x6d, 0x81, 0x74, - 0x20, 0x65, 0xc3, 0xa2, 0x94, 0x67, 0x09, 0xa7, 0x34, 0xe8, 0x12, 0x0c, 0xc5, 0xc4, 0xdf, 0x58, - 0xf1, 0x82, 0x7b, 0x42, 0xb0, 0xd5, 0xaa, 0x5c, 0x17, 0x70, 0xac, 0x28, 0xd0, 0x3c, 0x94, 0x5b, - 0x9e, 0x2b, 0x44, 0x59, 0xaa, 0x0c, 0xe5, 0xdb, 0xcb, 0xd5, 0x83, 0xbd, 0xe9, 0x27, 0xba, 0x65, - 0x1f, 0xa5, 0xc6, 0x74, 0x3c, 0x43, 0xa7, 0x1f, 0x2d, 0xdc, 0xc9, 0xa9, 0x3e, 0xd0, 0xa3, 0x53, - 0xfd, 0x0a, 0x80, 0xe8, 0xb5, 0x94, 0xe5, 0x72, 0xfa, 0xd5, 0xae, 0x29, 0x0c, 0xd6, 0xa8, 0xa8, - 0x49, 0xde, 0x88, 0x88, 0x23, 0xad, 0x56, 0x1e, 0x4e, 0x3c, 0x74, 0x74, 0x93, 0x7c, 0x21, 0xcb, - 0x0c, 0xb7, 0xf3, 0x47, 0x21, 0x9c, 0x72, 0xe9, 0x44, 0x32, 0x2a, 0xad, 0xf4, 0x1e, 0xc3, 0x4c, - 0x2b, 0xac, 0x66, 0x19, 0xe1, 0x76, 0xde, 0xe8, 0xcb, 0x30, 0x25, 0x81, 0xed, 0xb7, 0x37, 0xd9, - 0x74, 0x29, 0xcf, 0x9f, 0xdf, 0xdf, 0x9b, 0x9e, 0xaa, 0x76, 0xa5, 0xc2, 0x87, 0x70, 0x40, 0x6f, - 0xc0, 0x00, 0x3b, 0x84, 0x89, 0x27, 0x87, 0xd9, 0x6e, 0xf7, 0x62, 0x91, 0x48, 0x78, 0x2a, 0xf5, - 0x33, 0xec, 0x28, 0x47, 0xc4, 0x78, 0xa6, 0x27, 0x5b, 0x0c, 0x88, 0x05, 0x4f, 0xd4, 0x84, 0x61, - 0x27, 0x08, 0xc2, 0xc4, 0xe1, 0x4a, 0xd8, 0x48, 0x11, 0x3d, 0x52, 0xab, 0x62, 0x2e, 0x2d, 0xcb, - 0xeb, 0x51, 0x81, 0x63, 0x1a, 0x06, 0xeb, 0x55, 0xa0, 0xfb, 0x30, 0x1e, 0xde, 0xa7, 0x0b, 0xa6, - 0x3c, 0x87, 0x88, 0x27, 0x47, 0xcd, 0x8e, 0xe5, 0x78, 0x55, 0x8d, 0xc2, 0xda, 0x4a, 0x66, 0x32, - 0xc5, 0xd9, 0x5a, 0xd0, 0x8c, 0xe1, 0x5b, 0x1e, 0x4b, 0x23, 0x99, 0x53, 0xdf, 0xb2, 0xee, 0x4a, - 0x66, 0x37, 0x84, 0x79, 0xf4, 0x22, 0x5b, 0x11, 0xc6, 0x33, 0x37, 0x84, 0x53, 0x14, 0xd6, 0xe9, - 0xa6, 0x3e, 0x05, 0xc3, 0xda, 0xc0, 0xf7, 0x12, 0x32, 0x3b, 0xf5, 0x2a, 0x4c, 0x64, 0x07, 0xb4, - 0xa7, 0x90, 0xdb, 0xff, 0x51, 0x82, 0xf1, 0x0e, 0x87, 0x3c, 0xf7, 0x3c, 0x16, 0xf6, 0x6d, 0x2c, - 0x7d, 0x37, 0xbc, 0xc0, 0xc5, 0x0c, 0x63, 0x2e, 0x60, 0xa5, 0x02, 0x0b, 0x98, 0x5c, 0x4d, 0xcb, - 0x5d, 0x57, 0x53, 0xb1, 0x68, 0xf5, 0x7d, 0x90, 0x45, 0xcb, 0xdc, 0x27, 0xfa, 0x0b, 0xed, 0x13, - 0x0f, 0x61, 0xa1, 0x33, 0xb6, 0x9a, 0xc1, 0x02, 0x5b, 0xcd, 0xb7, 0x4b, 0x30, 0x91, 0x86, 0x17, - 0x8b, 0x8c, 0xba, 0xc7, 0x7f, 0x66, 0xb0, 0x66, 0x9c, 0x19, 0xe4, 0x25, 0xcc, 0xcd, 0xb4, 0xaf, - 0xeb, 0xf9, 0xc1, 0x1b, 0x99, 0xf3, 0x83, 0x17, 0x7b, 0xe4, 0x7b, 0xf8, 0x59, 0xc2, 0xf7, 0x4a, - 0x70, 0x36, 0x5b, 0x64, 0xc1, 0x77, 0xbc, 0xed, 0x13, 0x18, 0xaf, 0x2f, 0x18, 0xe3, 0xf5, 0x72, - 0x6f, 0xfd, 0x62, 0x8d, 0xec, 0x3a, 0x68, 0x4e, 0x66, 0xd0, 0x3e, 0x75, 0x14, 0xe6, 0x87, 0x8f, - 0xdc, 0x1f, 0x58, 0xf0, 0x68, 0xc7, 0x72, 0x27, 0xe0, 0x25, 0x7d, 0xdd, 0xf4, 0x92, 0xbe, 0x70, - 0x84, 0xde, 0x75, 0x71, 0x9b, 0xfe, 0xd7, 0x52, 0x97, 0x5e, 0x31, 0x4f, 0xd2, 0x2d, 0x18, 0x76, - 0x1a, 0x0d, 0x12, 0xc7, 0xab, 0xa1, 0xab, 0x72, 0x0d, 0x3d, 0xcf, 0xf6, 0x96, 0x14, 0x7c, 0xb0, - 0x37, 0x3d, 0x95, 0x65, 0x91, 0xa2, 0xb1, 0xce, 0xc1, 0xcc, 0x82, 0x56, 0x3a, 0xa6, 0x2c, 0x68, - 0x57, 0x00, 0x76, 0x94, 0x05, 0x9b, 0x75, 0x50, 0x69, 0xb6, 0xad, 0x46, 0x85, 0xfe, 0x3c, 0xd3, - 0x08, 0x79, 0x44, 0x45, 0x9f, 0x79, 0x53, 0x31, 0xe7, 0xfb, 0xe9, 0xd1, 0x19, 0xfc, 0x42, 0xa4, - 0x72, 0xe6, 0x29, 0x96, 0xf6, 0x3f, 0x2d, 0xc3, 0x47, 0x0f, 0x11, 0x3a, 0x34, 0x67, 0x1e, 0x90, - 0x3e, 0x97, 0xf5, 0xdc, 0x4c, 0x75, 0x2c, 0x6c, 0xb8, 0x72, 0x32, 0xdf, 0xaa, 0xf4, 0x81, 0xbf, - 0xd5, 0x37, 0x75, 0x3f, 0x1b, 0x0f, 0x8c, 0xbc, 0x76, 0xe4, 0x69, 0xf5, 0xb3, 0xe9, 0x17, 0xff, - 0x9a, 0x05, 0x4f, 0x74, 0xec, 0x94, 0x11, 0x8e, 0x31, 0x0b, 0x95, 0x06, 0x05, 0x6a, 0x37, 0x58, - 0xd2, 0xab, 0x63, 0x12, 0x81, 0x53, 0x1a, 0x23, 0xea, 0xa2, 0x94, 0x1b, 0x75, 0xf1, 0x7b, 0x16, - 0x9c, 0xc9, 0x36, 0xe2, 0x04, 0xd6, 0x9c, 0xba, 0xb9, 0xe6, 0xcc, 0xf4, 0xf6, 0xe9, 0xbb, 0x2c, - 0x37, 0xbf, 0x36, 0x0a, 0xe7, 0xda, 0x76, 0x2c, 0x3e, 0x8a, 0x3f, 0x67, 0xc1, 0xa9, 0x4d, 0xa6, - 0x79, 0x6b, 0xd7, 0x84, 0x44, 0xbf, 0x72, 0xee, 0x56, 0x1d, 0x7a, 0xbb, 0x88, 0xdb, 0x11, 0x6d, - 0x24, 0xb8, 0xbd, 0x32, 0xf4, 0x75, 0x0b, 0xce, 0x38, 0xf7, 0xe3, 0xb6, 0xb7, 0x1a, 0x84, 0x18, - 0xbd, 0x9a, 0xe3, 0xe4, 0xca, 0x79, 0xe5, 0x61, 0x7e, 0x72, 0x7f, 0x6f, 0xfa, 0x4c, 0x27, 0x2a, - 0xdc, 0xb1, 0x56, 0xfa, 0x7d, 0xb7, 0xc4, 0x35, 0x84, 0x62, 0x17, 0xde, 0x3a, 0x5d, 0x5a, 0xe0, - 0x4b, 0x92, 0xc4, 0x60, 0xc5, 0x11, 0xbd, 0x05, 0x95, 0x4d, 0x79, 0x33, 0x28, 0xbb, 0xe4, 0x75, - 0x19, 0xe6, 0x4e, 0x17, 0x89, 0x78, 0x68, 0xbc, 0x42, 0xe1, 0x94, 0x29, 0xba, 0x0e, 0xe5, 0x60, - 0x23, 0x16, 0x77, 0x70, 0xf3, 0x82, 0x6d, 0xcc, 0x10, 0x27, 0x7e, 0x6d, 0xf1, 0xe6, 0x52, 0x1d, - 0x53, 0x16, 0x94, 0x53, 0xb4, 0xee, 0x0a, 0xef, 0x6e, 0x0e, 0x27, 0x3c, 0x5f, 0x6d, 0xe7, 0x84, - 0xe7, 0xab, 0x98, 0xb2, 0x40, 0x35, 0xe8, 0x67, 0x97, 0x1c, 0x84, 0xeb, 0x36, 0xe7, 0xa2, 0x76, - 0xdb, 0x55, 0x0e, 0x9e, 0x68, 0x8f, 0x81, 0x31, 0x67, 0x84, 0xd6, 0x60, 0xa0, 0xc1, 0xd2, 0x92, - 0x0b, 0xbb, 0x3a, 0x2f, 0x85, 0x41, 0x5b, 0x0a, 0x73, 0x7e, 0xc4, 0xc4, 0xe1, 0x58, 0xf0, 0x62, - 0x5c, 0x49, 0x73, 0x6b, 0x23, 0x16, 0x86, 0x73, 0x1e, 0xd7, 0xb6, 0x04, 0xf3, 0x82, 0x2b, 0x83, - 0x63, 0xc1, 0x0b, 0x55, 0xa1, 0xb4, 0xd1, 0x10, 0xf9, 0x3a, 0x73, 0x5c, 0xb6, 0xe6, 0x1d, 0xd4, - 0xf9, 0x81, 0xfd, 0xbd, 0xe9, 0xd2, 0xd2, 0x02, 0x2e, 0x6d, 0x34, 0xd0, 0xeb, 0x30, 0xb8, 0xc1, - 0x6f, 0x15, 0x8a, 0xdc, 0x9c, 0x97, 0xf3, 0xae, 0x3e, 0xb6, 0x5d, 0x41, 0xe4, 0xd7, 0x1f, 0x04, - 0x02, 0x4b, 0x76, 0x2c, 0x6d, 0x99, 0xba, 0x27, 0x29, 0x92, 0x73, 0xce, 0xf4, 0x76, 0xaf, 0x52, - 0xd8, 0x93, 0x0a, 0x8a, 0x35, 0x8e, 0x54, 0xe6, 0x1d, 0xf9, 0xc2, 0x02, 0x4b, 0xcc, 0x99, 0x2b, - 0xf3, 0x1d, 0x1f, 0x64, 0xe0, 0x32, 0xaf, 0x50, 0x38, 0x65, 0x8a, 0x5a, 0x30, 0xba, 0x13, 0x37, - 0xb7, 0x88, 0x9c, 0xfa, 0x2c, 0x5b, 0xe7, 0xf0, 0x95, 0xcf, 0xe4, 0xa4, 0x60, 0x15, 0x45, 0xbc, - 0x28, 0x69, 0x39, 0x7e, 0xdb, 0x0a, 0xc6, 0xf2, 0x44, 0xdd, 0xd1, 0xd9, 0x62, 0xb3, 0x16, 0xfa, - 0x49, 0xde, 0x69, 0x85, 0xeb, 0xbb, 0x09, 0x11, 0xd9, 0x3c, 0x73, 0x3e, 0xc9, 0x6b, 0x9c, 0xb8, - 0xfd, 0x93, 0x08, 0x04, 0x96, 0xec, 0xd4, 0x90, 0xb1, 0xd5, 0x78, 0xa2, 0xf0, 0x90, 0xb5, 0xf5, - 0x21, 0x1d, 0x32, 0xb6, 0xfa, 0xa6, 0x4c, 0xd9, 0xaa, 0xdb, 0xdc, 0x0a, 0x93, 0x30, 0xc8, 0xac, - 0xfd, 0xa7, 0x8a, 0xac, 0xba, 0xb5, 0x0e, 0x25, 0xdb, 0x57, 0xdd, 0x4e, 0x54, 0xb8, 0x63, 0xad, - 0xf6, 0x1f, 0xf7, 0xb7, 0x6f, 0xb7, 0x4c, 0x19, 0xfe, 0x2b, 0xed, 0xe7, 0x8e, 0x9f, 0xeb, 0xdd, - 0xe6, 0x7b, 0x88, 0x27, 0x90, 0x5f, 0xb7, 0xe0, 0x5c, 0xb3, 0xe3, 0x66, 0x2a, 0x36, 0xac, 0x5e, - 0x4d, 0x47, 0x3e, 0x60, 0x2a, 0x55, 0x6d, 0x67, 0x3c, 0xee, 0x52, 0x67, 0x56, 0x01, 0x2d, 0x7f, - 0x60, 0x05, 0xf4, 0x2e, 0x0c, 0x31, 0x9d, 0x29, 0xcd, 0xab, 0xd1, 0x63, 0x0a, 0x0a, 0xb6, 0xf5, - 0x2d, 0x08, 0x16, 0x58, 0x31, 0xa3, 0x03, 0xf7, 0x78, 0xb6, 0x13, 0x98, 0x30, 0xb4, 0x48, 0xe7, - 0xca, 0x7d, 0x1d, 0x4b, 0x62, 0x24, 0x1e, 0xaf, 0x1d, 0x46, 0x7c, 0x90, 0x47, 0x80, 0x0f, 0xaf, - 0xec, 0x24, 0x15, 0xda, 0xbf, 0x67, 0x75, 0xd0, 0xbf, 0xb8, 0x09, 0xf2, 0x19, 0xd3, 0x04, 0x79, - 0x3a, 0x6b, 0x82, 0xb4, 0xb9, 0x0d, 0x0c, 0xeb, 0xa3, 0x78, 0x62, 0xc6, 0xa2, 0x09, 0x3f, 0x6c, - 0x1f, 0x2e, 0xe4, 0x4d, 0x6e, 0x16, 0xe1, 0xe3, 0xaa, 0xe3, 0xb2, 0x34, 0xc2, 0xc7, 0x5d, 0xae, - 0x62, 0x86, 0x29, 0x7a, 0x67, 0xdc, 0xfe, 0xf9, 0x12, 0x94, 0x6b, 0xa1, 0x7b, 0x02, 0x6e, 0x90, - 0x6b, 0x86, 0x1b, 0xe4, 0xa9, 0xdc, 0xf7, 0xa5, 0xba, 0x3a, 0x3d, 0x6e, 0x65, 0x9c, 0x1e, 0x1f, - 0xcf, 0x67, 0x75, 0xb8, 0x8b, 0xe3, 0xfb, 0x65, 0xd0, 0x5f, 0xc8, 0x42, 0xff, 0xe1, 0x28, 0x81, - 0x9f, 0xe5, 0x62, 0x8f, 0x66, 0x89, 0x3a, 0x58, 0x88, 0x90, 0xbc, 0x24, 0xf6, 0x33, 0x1b, 0xff, - 0x79, 0x97, 0x78, 0x9b, 0x5b, 0x09, 0x71, 0xb3, 0x1d, 0x3b, 0xb9, 0xf8, 0xcf, 0xff, 0x66, 0xc1, - 0x78, 0xa6, 0x76, 0xe4, 0x77, 0xba, 0x67, 0x72, 0x44, 0xc7, 0xc6, 0xa9, 0xdc, 0x8b, 0x29, 0x33, - 0x00, 0xca, 0x3f, 0x2d, 0xdd, 0x0f, 0x4c, 0x17, 0x53, 0x0e, 0xec, 0x18, 0x6b, 0x14, 0xe8, 0x25, - 0x18, 0x4e, 0xc2, 0x66, 0xe8, 0x87, 0x9b, 0xbb, 0x37, 0x88, 0xcc, 0x66, 0xa0, 0x7c, 0xfb, 0x6b, - 0x29, 0x0a, 0xeb, 0x74, 0xf6, 0x0f, 0xca, 0x90, 0x7d, 0x5f, 0xed, 0xff, 0xcb, 0xe9, 0xcf, 0x8e, - 0x9c, 0xfe, 0xa1, 0x05, 0x13, 0xb4, 0x76, 0x16, 0xe0, 0x21, 0xe3, 0x34, 0x55, 0x96, 0x78, 0xeb, - 0x90, 0x2c, 0xf1, 0x4f, 0xd3, 0xd5, 0xce, 0x0d, 0x5b, 0x89, 0x70, 0x99, 0x68, 0x8b, 0x18, 0x85, - 0x62, 0x81, 0x15, 0x74, 0x24, 0x8a, 0xc4, 0x85, 0x16, 0x9d, 0x8e, 0x44, 0x11, 0x16, 0x58, 0x99, - 0x44, 0xbe, 0xaf, 0x4b, 0x12, 0x79, 0x96, 0x0f, 0x48, 0x04, 0x16, 0x08, 0x75, 0x40, 0xcb, 0x07, - 0x24, 0x23, 0x0e, 0x52, 0x1a, 0xfb, 0xbb, 0x65, 0x18, 0xa9, 0x85, 0x6e, 0x1a, 0x80, 0xfd, 0xa2, - 0x11, 0x80, 0x7d, 0x21, 0x13, 0x80, 0x3d, 0xa1, 0xd3, 0x3e, 0x9c, 0xf8, 0x6b, 0x91, 0x37, 0x8a, - 0x3d, 0x73, 0x70, 0xc4, 0xd8, 0x6b, 0x23, 0x6f, 0x94, 0x62, 0x84, 0x4d, 0xbe, 0x7f, 0x96, 0x62, - 0xae, 0xff, 0xb7, 0x05, 0x63, 0xb5, 0xd0, 0xa5, 0x02, 0xfa, 0x67, 0x49, 0x1a, 0xf5, 0x6c, 0x53, - 0x03, 0x87, 0x64, 0x9b, 0xfa, 0x47, 0x16, 0x0c, 0xd6, 0x42, 0xf7, 0x04, 0xdc, 0x89, 0x4b, 0xa6, - 0x3b, 0xf1, 0x89, 0xdc, 0x95, 0xb7, 0x8b, 0x07, 0xf1, 0x37, 0xcb, 0x30, 0x4a, 0x5b, 0x1c, 0x6e, - 0xca, 0xef, 0x65, 0x8c, 0x8d, 0x55, 0x60, 0x6c, 0xa8, 0x4a, 0x18, 0xfa, 0x7e, 0x78, 0x3f, 0xfb, - 0xed, 0x96, 0x18, 0x14, 0x0b, 0x2c, 0xba, 0x04, 0x43, 0xcd, 0x88, 0xec, 0x78, 0x61, 0x2b, 0xce, - 0x5e, 0x8e, 0xab, 0x09, 0x38, 0x56, 0x14, 0xe8, 0x45, 0x18, 0x89, 0xbd, 0xa0, 0x41, 0x64, 0xd8, - 0x41, 0x1f, 0x0b, 0x3b, 0xe0, 0x89, 0xfd, 0x34, 0x38, 0x36, 0xa8, 0xd0, 0x5d, 0xa8, 0xb0, 0xff, - 0x6c, 0x06, 0xf5, 0x9e, 0x05, 0x9e, 0x67, 0xb3, 0x92, 0x0c, 0x70, 0xca, 0x0b, 0x5d, 0x01, 0x48, - 0x64, 0x80, 0x44, 0x2c, 0xb2, 0x72, 0x28, 0xbd, 0x54, 0x85, 0x4e, 0xc4, 0x58, 0xa3, 0x42, 0xcf, - 0x41, 0x25, 0x71, 0x3c, 0x7f, 0xc5, 0x0b, 0x48, 0x2c, 0x02, 0x4c, 0x44, 0x92, 0x5e, 0x01, 0xc4, - 0x29, 0x9e, 0xee, 0xf7, 0xec, 0x6a, 0x2e, 0x7f, 0x61, 0x62, 0x88, 0x51, 0xb3, 0xfd, 0x7e, 0x45, - 0x41, 0xb1, 0x46, 0x61, 0x5f, 0x85, 0xb3, 0xb5, 0xd0, 0xad, 0x85, 0x51, 0xb2, 0x14, 0x46, 0xf7, - 0x9d, 0xc8, 0x95, 0xdf, 0x6f, 0x5a, 0xe6, 0x86, 0xa5, 0x7b, 0x72, 0x3f, 0xf7, 0xb0, 0x19, 0xb9, - 0x5e, 0x5f, 0x60, 0x3b, 0x7e, 0x8f, 0x91, 0xfd, 0x3f, 0x2e, 0x01, 0xaa, 0xb1, 0x10, 0x0e, 0xe3, - 0x41, 0x92, 0x2d, 0x18, 0x8b, 0xc9, 0x8a, 0x17, 0xb4, 0x1e, 0x08, 0x56, 0xc5, 0xae, 0x52, 0xd4, - 0x17, 0xf5, 0x32, 0xfc, 0x1e, 0xab, 0x09, 0xc3, 0x19, 0xbe, 0x74, 0x30, 0xa3, 0x56, 0x30, 0x17, - 0xdf, 0x8e, 0x49, 0x24, 0x1e, 0xe0, 0x60, 0x83, 0x89, 0x25, 0x10, 0xa7, 0x78, 0x2a, 0x3c, 0xec, - 0xcf, 0xcd, 0x30, 0xc0, 0x61, 0x98, 0x48, 0x71, 0x63, 0x09, 0xd9, 0x35, 0x38, 0x36, 0xa8, 0xd0, - 0x12, 0xa0, 0xb8, 0xd5, 0x6c, 0xfa, 0xec, 0x54, 0xcc, 0xf1, 0xaf, 0x45, 0x61, 0xab, 0xc9, 0xa3, - 0x78, 0x45, 0x2e, 0xf3, 0x7a, 0x1b, 0x16, 0x77, 0x28, 0x41, 0x17, 0x8b, 0x8d, 0x98, 0xfd, 0x16, - 0xf7, 0x74, 0xb9, 0x77, 0xae, 0xce, 0x40, 0x58, 0xe2, 0xec, 0xaf, 0xb2, 0x0d, 0x8e, 0xbd, 0x8c, - 0x90, 0xb4, 0x22, 0x82, 0xb6, 0x61, 0xb4, 0xc9, 0x36, 0xb1, 0x24, 0x0a, 0x7d, 0x9f, 0x48, 0xfd, - 0xf2, 0x68, 0x41, 0x24, 0x3c, 0x17, 0xba, 0xce, 0x0e, 0x9b, 0xdc, 0xed, 0x9f, 0x0c, 0xb3, 0xb5, - 0x4a, 0x1c, 0x4c, 0x0e, 0x8a, 0x50, 0x51, 0xa1, 0xc9, 0x7d, 0xac, 0xc8, 0x1b, 0x47, 0xe9, 0x3e, - 0x20, 0x02, 0x4f, 0xb1, 0xe4, 0x82, 0xbe, 0xc4, 0x02, 0xa1, 0xf9, 0x02, 0x51, 0xfc, 0xe1, 0x31, - 0x4e, 0x6f, 0x04, 0x41, 0x0b, 0x16, 0x58, 0x63, 0x87, 0x56, 0x60, 0x54, 0x24, 0xd2, 0x17, 0xee, - 0x85, 0xb2, 0x61, 0x62, 0x8f, 0x62, 0x1d, 0x79, 0x90, 0x05, 0x60, 0xb3, 0x30, 0xda, 0x84, 0xc7, - 0xb5, 0x87, 0x62, 0x3a, 0x04, 0x3c, 0xf1, 0x95, 0xe7, 0x89, 0xfd, 0xbd, 0xe9, 0xc7, 0xd7, 0x0e, - 0x23, 0xc4, 0x87, 0xf3, 0x41, 0xb7, 0xe0, 0xac, 0xd3, 0x48, 0xbc, 0x1d, 0x52, 0x25, 0x8e, 0xeb, - 0x7b, 0x01, 0x31, 0x2f, 0x73, 0x3f, 0xba, 0xbf, 0x37, 0x7d, 0x76, 0xae, 0x13, 0x01, 0xee, 0x5c, - 0x0e, 0x7d, 0x06, 0x2a, 0x6e, 0x10, 0x8b, 0x31, 0x18, 0x30, 0xde, 0x45, 0xaa, 0x54, 0x6f, 0xd6, - 0x55, 0xff, 0xd3, 0x3f, 0x38, 0x2d, 0x80, 0xde, 0xe1, 0x4f, 0x4c, 0x2b, 0x6b, 0x86, 0xbf, 0xc7, - 0xf5, 0x72, 0x21, 0xfb, 0xd9, 0xb8, 0x64, 0xc1, 0x3d, 0x6f, 0x2a, 0xb0, 0xd0, 0xb8, 0x7f, 0x61, - 0x54, 0x81, 0x3e, 0x0f, 0x28, 0x26, 0xd1, 0x8e, 0xd7, 0x20, 0x73, 0x0d, 0x96, 0x0d, 0x93, 0x1d, - 0xf1, 0x0d, 0x19, 0xd1, 0xf5, 0xa8, 0xde, 0x46, 0x81, 0x3b, 0x94, 0x42, 0xd7, 0xe9, 0xca, 0xa3, - 0x43, 0x45, 0x1c, 0xa8, 0x54, 0x0c, 0x27, 0xab, 0xa4, 0x19, 0x91, 0x86, 0x93, 0x10, 0xd7, 0xe4, - 0x88, 0x33, 0xe5, 0xe8, 0xbe, 0xa4, 0x12, 0x9e, 0x83, 0x19, 0xbd, 0xd8, 0x9e, 0xf4, 0x9c, 0xda, - 0x59, 0x5b, 0x61, 0x9c, 0xdc, 0x24, 0xc9, 0xfd, 0x30, 0xba, 0xc7, 0x3c, 0xf6, 0x43, 0x5a, 0x72, - 0xb1, 0x14, 0x85, 0x75, 0x3a, 0xaa, 0x43, 0xb1, 0xa3, 0xa2, 0xe5, 0x2a, 0xf3, 0xc3, 0x0f, 0xa5, - 0x73, 0xe7, 0x3a, 0x07, 0x63, 0x89, 0x97, 0xa4, 0xcb, 0xb5, 0x05, 0xe6, 0x53, 0xcf, 0x90, 0x2e, - 0xd7, 0x16, 0xb0, 0xc4, 0xa3, 0xb0, 0xfd, 0xf5, 0xa9, 0xb1, 0x22, 0xe7, 0x1b, 0xed, 0x2b, 0x79, - 0xc1, 0x07, 0xa8, 0x1e, 0xc0, 0x84, 0x7a, 0x01, 0x8b, 0x67, 0x7d, 0x8c, 0x27, 0xc7, 0x8b, 0x3c, - 0x70, 0xdd, 0x31, 0x79, 0xa4, 0x0a, 0xfc, 0x5d, 0xce, 0xf0, 0xc4, 0x6d, 0xb5, 0x18, 0x49, 0x09, - 0x26, 0x72, 0x93, 0xd8, 0xcf, 0x42, 0x25, 0x6e, 0xad, 0xbb, 0xe1, 0xb6, 0xe3, 0x05, 0xcc, 0xf1, - 0xad, 0x3f, 0xd7, 0x2c, 0x11, 0x38, 0xa5, 0x41, 0x35, 0x18, 0x72, 0xe4, 0x4b, 0xe5, 0xa8, 0xc8, - 0xa5, 0x65, 0xf5, 0x44, 0x39, 0xf3, 0x8a, 0xaa, 0xb7, 0xc9, 0x15, 0x17, 0xf4, 0x0a, 0x8c, 0x8a, - 0x5b, 0x37, 0x24, 0x62, 0xad, 0x3e, 0x6d, 0x86, 0x7c, 0xd7, 0x25, 0x92, 0x09, 0x98, 0x49, 0x3b, - 0xf5, 0x59, 0x38, 0xd5, 0x36, 0xc5, 0x7a, 0x0a, 0x9c, 0xfb, 0xb7, 0x7d, 0x50, 0x51, 0x1e, 0x2a, - 0x34, 0x6b, 0x3a, 0x23, 0x1f, 0xcd, 0x3a, 0x23, 0x87, 0xa8, 0x42, 0xa0, 0xfb, 0x1f, 0xbf, 0xdc, - 0xe1, 0xb9, 0xd8, 0x67, 0x73, 0x65, 0xaa, 0xf8, 0x3d, 0x96, 0x1e, 0x1e, 0xd5, 0x4d, 0xad, 0x94, - 0xbe, 0x43, 0xad, 0x94, 0x82, 0xef, 0x52, 0x51, 0x7b, 0xa4, 0x19, 0xba, 0xcb, 0xb5, 0xec, 0xb3, - 0x2b, 0x35, 0x0a, 0xc4, 0x1c, 0xc7, 0xf4, 0x48, 0xba, 0x47, 0x30, 0x3d, 0x72, 0xf0, 0x88, 0x7a, - 0xa4, 0x64, 0x80, 0x53, 0x5e, 0x68, 0x07, 0x4e, 0x35, 0xcc, 0x57, 0x74, 0xd4, 0xed, 0x94, 0xe7, - 0x7b, 0x78, 0xc5, 0xa6, 0xa5, 0xbd, 0x18, 0xb0, 0x90, 0xe5, 0x87, 0xdb, 0xab, 0x40, 0xaf, 0xc0, - 0xd0, 0x3b, 0x61, 0xbc, 0xe0, 0x3b, 0x71, 0x2c, 0x16, 0x4a, 0x79, 0x13, 0x60, 0xe8, 0xb5, 0x5b, - 0x75, 0x06, 0x3f, 0xe0, 0x0f, 0xfa, 0xcb, 0xbf, 0x58, 0x15, 0xb0, 0x7f, 0x87, 0x7b, 0xc3, 0x84, - 0x7d, 0x4c, 0xe2, 0x96, 0x7f, 0x12, 0x89, 0xb3, 0x6f, 0x19, 0xa6, 0xfb, 0x43, 0xf0, 0xc7, 0xfe, - 0x7b, 0x8b, 0xf9, 0x63, 0xd7, 0xc8, 0x76, 0xd3, 0x77, 0x92, 0x93, 0x08, 0x69, 0xfc, 0x12, 0x0c, - 0x25, 0xa2, 0xb6, 0x62, 0x59, 0xbf, 0xb5, 0xe6, 0x31, 0x3f, 0xb5, 0x5a, 0xe3, 0x24, 0x14, 0x2b, - 0x86, 0xf6, 0xbf, 0xe0, 0x5f, 0x45, 0x62, 0x4e, 0xc0, 0xe8, 0xbc, 0x69, 0x1a, 0x9d, 0xcf, 0x14, - 0xee, 0x4b, 0x17, 0xe3, 0xf3, 0x07, 0x66, 0x0f, 0x98, 0x2a, 0xfa, 0xb3, 0x73, 0x60, 0x60, 0xdf, - 0x02, 0xf3, 0xb5, 0x21, 0xf4, 0x2a, 0x0f, 0x12, 0xe6, 0x8b, 0xec, 0xa5, 0x9e, 0x03, 0x84, 0xed, - 0xdf, 0x28, 0xc1, 0x19, 0xee, 0x32, 0x9c, 0xdb, 0x09, 0x3d, 0xb7, 0x16, 0xba, 0x22, 0x64, 0xda, - 0x85, 0x91, 0xa6, 0x66, 0x2a, 0x14, 0xcb, 0x07, 0xa1, 0x1b, 0x17, 0xa9, 0x7a, 0xa6, 0x43, 0xb1, - 0xc1, 0x95, 0xd6, 0x42, 0x76, 0xbc, 0x86, 0xf2, 0x40, 0x95, 0x7a, 0x5e, 0xf7, 0x54, 0x2d, 0x8b, - 0x1a, 0x1f, 0x6c, 0x70, 0x3d, 0x86, 0x04, 0xf5, 0xf6, 0xdf, 0xb1, 0xe0, 0x91, 0x2e, 0x39, 0x23, - 0x68, 0x75, 0xf7, 0x99, 0x9b, 0x56, 0x3c, 0x67, 0xa5, 0xaa, 0xe3, 0xce, 0x5b, 0x2c, 0xb0, 0x68, - 0x1d, 0x80, 0x3b, 0x5f, 0xd9, 0x93, 0xc5, 0xa5, 0x22, 0xb1, 0x12, 0x6d, 0x77, 0xb3, 0xb5, 0x6b, - 0xbb, 0xea, 0x91, 0x62, 0x8d, 0xab, 0xfd, 0x9d, 0x32, 0xf4, 0xf3, 0x57, 0x53, 0x6b, 0x30, 0xb8, - 0xc5, 0x33, 0x57, 0xf6, 0x96, 0x38, 0x33, 0x55, 0x05, 0x39, 0x00, 0x4b, 0x36, 0x68, 0x15, 0x4e, - 0x53, 0xbd, 0xc3, 0x73, 0xfc, 0x2a, 0xf1, 0x9d, 0x5d, 0x69, 0x5b, 0xf0, 0xac, 0xe5, 0x32, 0xc1, - 0xee, 0xe9, 0xe5, 0x76, 0x12, 0xdc, 0xa9, 0x1c, 0x7a, 0xb5, 0x2d, 0xe5, 0x14, 0xcf, 0x08, 0xaa, - 0x6e, 0x7b, 0x1d, 0x9e, 0x76, 0x8a, 0x6a, 0x3f, 0xcd, 0x36, 0x2b, 0x4a, 0x7b, 0x9c, 0xd2, 0xb4, - 0x9c, 0x4c, 0x5a, 0x54, 0x85, 0x89, 0xb8, 0xc5, 0x4e, 0xae, 0xd7, 0xb6, 0x22, 0x12, 0x6f, 0x85, - 0xbe, 0x2b, 0xde, 0x55, 0x53, 0x1a, 0x63, 0x3d, 0x83, 0xc7, 0x6d, 0x25, 0x28, 0x97, 0x0d, 0xc7, - 0xf3, 0x5b, 0x11, 0x49, 0xb9, 0x0c, 0x98, 0x5c, 0x96, 0x32, 0x78, 0xdc, 0x56, 0xc2, 0xfe, 0x13, - 0x0b, 0x4e, 0x77, 0x08, 0xef, 0xe0, 0x41, 0x87, 0x9b, 0x5e, 0x9c, 0xa8, 0xdc, 0xd4, 0x5a, 0xd0, - 0x21, 0x87, 0x63, 0x45, 0x41, 0xa5, 0x90, 0x9b, 0xc6, 0xd9, 0x63, 0x53, 0x71, 0x80, 0x2d, 0xb0, - 0xbd, 0x25, 0x90, 0x42, 0x17, 0xa0, 0xaf, 0x15, 0x93, 0x48, 0x3e, 0xd3, 0x24, 0x97, 0x28, 0xe6, - 0x0d, 0x61, 0x18, 0xaa, 0xec, 0x6c, 0x2a, 0x47, 0x84, 0xa6, 0xec, 0x70, 0x57, 0x04, 0xc7, 0xd9, - 0xdf, 0x2c, 0xc3, 0x78, 0x26, 0xcc, 0x8b, 0x36, 0x64, 0x3b, 0x0c, 0xbc, 0x24, 0x54, 0x49, 0x8b, - 0xf8, 0xcb, 0x30, 0xa4, 0xb9, 0xb5, 0x2a, 0xe0, 0x58, 0x51, 0xa0, 0xa7, 0xcd, 0x27, 0xac, 0xd3, - 0x36, 0xcf, 0x57, 0x8d, 0xd7, 0xec, 0x8a, 0xe6, 0xcb, 0x7f, 0x12, 0xfa, 0x9a, 0xa1, 0x7a, 0x99, - 0x54, 0x09, 0x3d, 0x9e, 0xaf, 0xd6, 0xc2, 0xd0, 0xc7, 0x0c, 0x89, 0x9e, 0x12, 0xbd, 0xcf, 0xf8, - 0x6f, 0xb1, 0xe3, 0x86, 0xb1, 0x36, 0x04, 0xcf, 0xc0, 0xe0, 0x3d, 0xb2, 0x1b, 0x79, 0xc1, 0x66, - 0xd6, 0x7b, 0x7d, 0x83, 0x83, 0xb1, 0xc4, 0x9b, 0x39, 0xf1, 0x07, 0x8f, 0x39, 0x27, 0xfe, 0x50, - 0x6e, 0xa4, 0xea, 0x6f, 0x5a, 0x30, 0xce, 0x32, 0xf9, 0x89, 0x8b, 0xb4, 0x5e, 0x18, 0x9c, 0xc0, - 0xf6, 0xf8, 0x24, 0xf4, 0x47, 0xb4, 0xd2, 0x6c, 0x5a, 0x6b, 0xd6, 0x12, 0xcc, 0x71, 0xe8, 0x31, - 0xe8, 0x63, 0x4d, 0xa0, 0x9f, 0x71, 0x84, 0xa7, 0x09, 0xae, 0x3a, 0x89, 0x83, 0x19, 0x94, 0xdd, - 0x8a, 0xc0, 0xa4, 0xe9, 0x7b, 0xbc, 0xd1, 0xa9, 0xd3, 0xe9, 0xc3, 0x76, 0x2b, 0xa2, 0x63, 0x23, - 0x1f, 0xd6, 0xad, 0x88, 0xce, 0xcc, 0x0f, 0x57, 0x51, 0xff, 0x7b, 0x09, 0xce, 0x77, 0x2c, 0x97, - 0x9e, 0x83, 0x2d, 0x19, 0xe7, 0x60, 0x57, 0x32, 0xe7, 0x60, 0xf6, 0xe1, 0xa5, 0x1f, 0xce, 0xc9, - 0x58, 0xe7, 0x03, 0xab, 0xf2, 0x09, 0x1e, 0x58, 0xf5, 0x15, 0x55, 0x1d, 0xfa, 0x73, 0x54, 0x87, - 0x3f, 0xb0, 0xe0, 0xd1, 0x8e, 0x43, 0xf6, 0xa1, 0xbb, 0x86, 0xd2, 0xb1, 0x95, 0x5d, 0x14, 0xeb, - 0x5f, 0x2e, 0x77, 0xe9, 0x15, 0x53, 0xb1, 0x2f, 0xd2, 0x55, 0x88, 0x21, 0x63, 0xa1, 0x14, 0x8d, - 0xf0, 0x15, 0x88, 0xc3, 0xb0, 0xc2, 0xa2, 0x58, 0xbb, 0xc6, 0xc1, 0x1b, 0xb9, 0x78, 0xc4, 0x09, - 0x35, 0x63, 0x7a, 0x0b, 0xf5, 0xfb, 0xc1, 0x99, 0xcb, 0x1d, 0xe8, 0xae, 0x66, 0x34, 0x95, 0x8f, - 0x62, 0x34, 0x8d, 0x74, 0x36, 0x98, 0xd0, 0x1c, 0x8c, 0x6f, 0x7b, 0x01, 0x7b, 0x4a, 0xcf, 0xd4, - 0x4a, 0xd4, 0x5d, 0xba, 0x55, 0x13, 0x8d, 0xb3, 0xf4, 0x53, 0xaf, 0xc0, 0xe8, 0xd1, 0x7d, 0x32, - 0xef, 0x97, 0xe1, 0xa3, 0x87, 0x2c, 0x0a, 0x7c, 0x77, 0x30, 0xbe, 0x8b, 0xb6, 0x3b, 0xb4, 0x7d, - 0x9b, 0x1a, 0x9c, 0xd9, 0x68, 0xf9, 0xfe, 0x2e, 0x8b, 0x22, 0x21, 0xae, 0xa4, 0x10, 0x1a, 0x9f, - 0x7a, 0xe4, 0x76, 0xa9, 0x03, 0x0d, 0xee, 0x58, 0x12, 0x7d, 0x1e, 0x50, 0xb8, 0xce, 0x72, 0x5d, - 0xba, 0xe9, 0xfd, 0x67, 0xf6, 0x09, 0xca, 0xe9, 0x54, 0xbd, 0xd5, 0x46, 0x81, 0x3b, 0x94, 0xa2, - 0xfa, 0x1f, 0x7b, 0x1f, 0x57, 0x35, 0x2b, 0xa3, 0xff, 0x61, 0x1d, 0x89, 0x4d, 0x5a, 0x74, 0x0d, - 0x4e, 0x39, 0x3b, 0x8e, 0xc7, 0xb3, 0xd7, 0x48, 0x06, 0x5c, 0x01, 0x54, 0x5e, 0x8f, 0xb9, 0x2c, - 0x01, 0x6e, 0x2f, 0x83, 0x9a, 0x86, 0x1b, 0x8b, 0xe7, 0xb6, 0xfe, 0xcc, 0x11, 0x24, 0xb8, 0xb0, - 0x63, 0xcb, 0xfe, 0x89, 0x45, 0xb7, 0xbe, 0x0e, 0xaf, 0xae, 0x19, 0xcf, 0xb5, 0x6b, 0x57, 0x5b, - 0xda, 0x9f, 0x6b, 0xe7, 0xfe, 0x40, 0x83, 0x96, 0x8b, 0x46, 0x9c, 0x06, 0xa3, 0x1a, 0xda, 0xa6, - 0xb8, 0xd1, 0xa5, 0x28, 0xd0, 0x5d, 0x18, 0x74, 0xbd, 0x1d, 0x2f, 0x0e, 0xa3, 0x02, 0x0f, 0x24, - 0xb7, 0x05, 0x38, 0xa6, 0xab, 0x65, 0x95, 0x33, 0xc1, 0x92, 0x9b, 0xfd, 0xad, 0x12, 0x8c, 0xca, - 0xfa, 0x5e, 0x6b, 0x85, 0x89, 0x73, 0x02, 0x1b, 0xfa, 0x6b, 0xc6, 0x86, 0x3e, 0x5b, 0xec, 0x7a, - 0x1b, 0x6b, 0x5c, 0xd7, 0x8d, 0xfc, 0x0b, 0x99, 0x8d, 0xfc, 0x72, 0x2f, 0x4c, 0x0f, 0xdf, 0xc0, - 0xff, 0xb5, 0x05, 0xa7, 0x0c, 0xfa, 0x13, 0xd8, 0x47, 0x6a, 0xe6, 0x3e, 0xf2, 0x5c, 0x0f, 0xbd, - 0xe9, 0xb2, 0x7f, 0x7c, 0xa7, 0x94, 0xe9, 0x05, 0xdb, 0x37, 0xbe, 0x02, 0x7d, 0x5b, 0x4e, 0xe4, - 0x16, 0x4b, 0xe3, 0xd6, 0x56, 0x7c, 0xe6, 0xba, 0x13, 0xb9, 0x7c, 0xf5, 0xbf, 0xa4, 0xde, 0x84, - 0x71, 0x22, 0x37, 0x37, 0x42, 0x9b, 0x55, 0x8a, 0xae, 0xc2, 0x40, 0xdc, 0x08, 0x9b, 0x2a, 0x16, - 0xee, 0x02, 0x7f, 0x2f, 0x86, 0x42, 0x0e, 0xf6, 0xa6, 0x91, 0x59, 0x1d, 0x05, 0x63, 0x41, 0x3f, - 0x45, 0xa0, 0xa2, 0xaa, 0x3e, 0xc6, 0x58, 0xe0, 0xf7, 0xcb, 0x70, 0xba, 0x83, 0xa4, 0xa0, 0xaf, - 0x1a, 0xa3, 0xf6, 0x4a, 0xcf, 0xa2, 0xf6, 0x01, 0xc7, 0xed, 0xab, 0xcc, 0x4a, 0x72, 0x85, 0x6c, - 0x1c, 0xa1, 0xfa, 0xdb, 0x31, 0xc9, 0x56, 0x4f, 0x41, 0xf9, 0xd5, 0xd3, 0x6a, 0x4f, 0x68, 0xf0, - 0x69, 0x35, 0xaa, 0x9d, 0xc7, 0xf8, 0x8d, 0xdf, 0xeb, 0x83, 0x33, 0x9d, 0x6e, 0xd0, 0xa2, 0x5f, - 0xb4, 0x32, 0x59, 0xda, 0x5f, 0xed, 0xfd, 0x1a, 0x2e, 0x4f, 0xdd, 0x2e, 0xb2, 0x4e, 0xcc, 0x98, - 0x79, 0xdb, 0x73, 0x47, 0x5b, 0xd4, 0xce, 0x6e, 0x55, 0x44, 0x3c, 0xdf, 0xbe, 0x5c, 0x0f, 0x3e, - 0x77, 0x84, 0xa6, 0x88, 0x94, 0xfd, 0x71, 0xe6, 0x56, 0x85, 0x04, 0xe7, 0xdf, 0xaa, 0x90, 0x6d, - 0x98, 0xda, 0x84, 0x61, 0xad, 0x5f, 0xc7, 0x28, 0x02, 0x1e, 0xdd, 0x9a, 0xb4, 0x56, 0x1f, 0xa3, - 0x18, 0xfc, 0xaa, 0x05, 0x99, 0x70, 0x15, 0xe5, 0x8a, 0xb1, 0xba, 0xba, 0x62, 0x2e, 0x40, 0x5f, - 0x14, 0xfa, 0x24, 0x9b, 0x3d, 0x1c, 0x87, 0x3e, 0xc1, 0x0c, 0xa3, 0x9e, 0x86, 0x2c, 0x77, 0x7b, - 0x1a, 0x92, 0xda, 0xe6, 0x3e, 0xd9, 0x21, 0xd2, 0x31, 0xa2, 0x16, 0xef, 0x15, 0x0a, 0xc4, 0x1c, - 0x67, 0xff, 0x7e, 0x19, 0x06, 0xb8, 0xf7, 0xe1, 0x04, 0x76, 0xe7, 0x9a, 0x70, 0x04, 0x14, 0xba, - 0xd5, 0xca, 0x5b, 0x35, 0x53, 0x75, 0x12, 0x87, 0x0b, 0x96, 0xea, 0x63, 0xea, 0x3c, 0x40, 0x33, - 0xc6, 0x28, 0x4c, 0x65, 0xec, 0x5b, 0xe0, 0x3c, 0xb4, 0x31, 0xd9, 0x02, 0x88, 0xd9, 0x63, 0x64, - 0x94, 0x87, 0xc8, 0xb9, 0xf7, 0x62, 0xa1, 0x76, 0xd4, 0x55, 0x31, 0xde, 0x9a, 0x34, 0xd9, 0x97, - 0x42, 0x60, 0x8d, 0xf7, 0xd4, 0xcb, 0x50, 0x51, 0xc4, 0x79, 0x8a, 0xff, 0x88, 0x2e, 0x9a, 0x7f, - 0x0e, 0xc6, 0x33, 0x75, 0xf5, 0x64, 0x37, 0xfc, 0x8a, 0x05, 0xe3, 0x99, 0x57, 0x94, 0xd1, 0x7b, - 0x16, 0x9c, 0xf1, 0x3b, 0x38, 0x9f, 0xc4, 0x67, 0x3e, 0x8a, 0xdb, 0x4a, 0x99, 0x0c, 0x9d, 0xb0, - 0xb8, 0x63, 0x6d, 0xf6, 0x6f, 0x59, 0x70, 0xaa, 0xed, 0xf9, 0xdd, 0x0f, 0x49, 0xe3, 0x64, 0x82, - 0xd3, 0x52, 0xe7, 0x04, 0xa7, 0xf6, 0x6f, 0x58, 0x20, 0xa4, 0xe9, 0x04, 0x74, 0xb4, 0x65, 0x53, - 0x47, 0xfb, 0x58, 0x11, 0x01, 0xed, 0xa2, 0x9c, 0xfd, 0x9e, 0x05, 0x88, 0x13, 0x64, 0x9f, 0x4b, - 0xe4, 0x8e, 0x46, 0xcd, 0xb8, 0x48, 0x25, 0x5a, 0x61, 0xb0, 0x46, 0xd5, 0x63, 0xee, 0x7b, 0xf5, - 0xcc, 0x58, 0xe7, 0x86, 0xa1, 0xcb, 0x30, 0x2c, 0x9e, 0x19, 0x5a, 0x4d, 0x9f, 0x10, 0x1b, 0x67, - 0x8f, 0x59, 0xa6, 0x60, 0xac, 0xd3, 0xd8, 0xbf, 0x53, 0x86, 0x6c, 0xd0, 0x09, 0x7a, 0x0b, 0x46, - 0x1a, 0x4e, 0xd3, 0x59, 0xf7, 0x7c, 0x2f, 0xf1, 0x48, 0x5c, 0xec, 0xb0, 0x6b, 0x41, 0x2b, 0x21, - 0x5c, 0xd5, 0x1a, 0x04, 0x1b, 0x1c, 0xd1, 0x0c, 0x40, 0x33, 0xf2, 0x76, 0x3c, 0x9f, 0x6c, 0x32, - 0xcd, 0x88, 0x45, 0xad, 0xf2, 0x73, 0x1b, 0x09, 0xc5, 0x1a, 0x45, 0x87, 0x28, 0xc7, 0xf2, 0x49, - 0x44, 0x39, 0xf6, 0xf5, 0x18, 0xe5, 0xd8, 0x5f, 0x28, 0xca, 0x11, 0xc3, 0x39, 0xe9, 0x61, 0xa6, - 0xff, 0x97, 0x3c, 0x9f, 0xf0, 0x84, 0x86, 0x22, 0xaa, 0x75, 0x6a, 0x7f, 0x6f, 0xfa, 0x1c, 0xee, - 0x48, 0x81, 0xbb, 0x94, 0xb4, 0x5b, 0x70, 0xba, 0x4e, 0x22, 0x8f, 0xe5, 0x99, 0x72, 0xd3, 0x09, - 0xf8, 0x65, 0xa8, 0x44, 0x99, 0xb9, 0xdf, 0xe3, 0x95, 0x43, 0x2d, 0x33, 0x89, 0x9c, 0xeb, 0x29, - 0x4b, 0xfb, 0x2f, 0x97, 0x60, 0x50, 0x04, 0x77, 0x9d, 0xc0, 0x56, 0x77, 0xc3, 0x30, 0x44, 0x9f, - 0xc9, 0x9b, 0xc1, 0xac, 0x59, 0x5d, 0x4d, 0xd0, 0x7a, 0xc6, 0x04, 0x7d, 0xae, 0x18, 0xbb, 0xc3, - 0x8d, 0xcf, 0x1f, 0x96, 0x60, 0xcc, 0x0c, 0x76, 0x3b, 0x81, 0x61, 0x79, 0x1d, 0x06, 0x63, 0x11, - 0x09, 0x56, 0x2a, 0x12, 0xc7, 0x92, 0xfd, 0xc4, 0xca, 0xdb, 0x20, 0x63, 0xbf, 0x24, 0xbb, 0x8e, - 0xc1, 0x66, 0xe5, 0x93, 0x08, 0x36, 0xb3, 0x7f, 0x97, 0x2d, 0xb1, 0xfa, 0x40, 0x9e, 0xc0, 0x16, - 0xf1, 0x9a, 0xb9, 0x18, 0x5f, 0x2a, 0x24, 0x11, 0xa2, 0x79, 0x5d, 0xb6, 0x8a, 0xef, 0x59, 0x30, - 0x2c, 0x08, 0x4f, 0xa0, 0x03, 0x9f, 0x37, 0x3b, 0xf0, 0x54, 0xa1, 0x0e, 0x74, 0x69, 0xf9, 0xdf, - 0x2c, 0xa9, 0x96, 0xd7, 0xc4, 0xa3, 0xb2, 0xb9, 0xf9, 0x2e, 0x87, 0x9a, 0x51, 0x98, 0x84, 0x8d, - 0xd0, 0x17, 0x5b, 0xfe, 0x63, 0xe9, 0xf5, 0x02, 0x0e, 0x3f, 0xd0, 0x7e, 0x63, 0x45, 0xcd, 0xa2, - 0xdf, 0xc3, 0x28, 0x11, 0x1b, 0x56, 0xa7, 0x27, 0x6d, 0xd7, 0xe5, 0x93, 0xe1, 0x14, 0x26, 0x6e, - 0xe6, 0xf4, 0xfa, 0x54, 0x6e, 0x7a, 0x5b, 0x40, 0x71, 0xc2, 0x1a, 0x57, 0x19, 0x86, 0xca, 0x6a, - 0xe8, 0x37, 0xbd, 0xbf, 0x37, 0x05, 0x1c, 0x2b, 0x0a, 0xfb, 0x65, 0xb6, 0xe2, 0xb2, 0xe1, 0xe9, - 0x2d, 0x90, 0xff, 0x2f, 0x0d, 0xa8, 0x81, 0x65, 0x4e, 0x9d, 0x9b, 0xfa, 0x75, 0x81, 0xa2, 0xcb, - 0x1a, 0x6d, 0x82, 0x1e, 0x39, 0x97, 0xde, 0x2e, 0x40, 0xa4, 0xed, 0xc8, 0xe0, 0xe5, 0xc2, 0x2b, - 0x65, 0x0f, 0x87, 0x04, 0x2c, 0x49, 0x10, 0xcb, 0x8c, 0xb2, 0x5c, 0xcb, 0xe6, 0x28, 0x5d, 0x90, - 0x08, 0x9c, 0xd2, 0xa0, 0x59, 0x61, 0x56, 0x98, 0x2f, 0x0e, 0x4b, 0xb3, 0x42, 0x0e, 0x89, 0x66, - 0x57, 0x5c, 0x86, 0x61, 0x95, 0xa5, 0xbd, 0xc6, 0x93, 0x6d, 0x57, 0xb8, 0x36, 0xb3, 0x98, 0x82, - 0xb1, 0x4e, 0x83, 0x96, 0xe1, 0xb4, 0xab, 0xa2, 0x8e, 0x6b, 0xad, 0x75, 0xdf, 0x6b, 0xd0, 0xa2, - 0xfc, 0xc6, 0xd0, 0x23, 0xfb, 0x7b, 0xd3, 0xa7, 0xab, 0xed, 0x68, 0xdc, 0xa9, 0x0c, 0x5a, 0x83, - 0xf1, 0x98, 0x67, 0xa3, 0x97, 0xa1, 0xa5, 0x22, 0x75, 0xdf, 0xb3, 0xf2, 0xac, 0xa2, 0x6e, 0xa2, - 0x0f, 0x18, 0x88, 0xaf, 0x09, 0x32, 0x18, 0x35, 0xcb, 0x02, 0xbd, 0x0a, 0x63, 0xbe, 0xfe, 0xd0, - 0x56, 0x4d, 0x04, 0x5f, 0xab, 0xa8, 0x0e, 0xe3, 0x19, 0xae, 0x1a, 0xce, 0x50, 0xa3, 0xd7, 0x61, - 0x52, 0x87, 0x88, 0x0c, 0x06, 0x4e, 0xb0, 0x49, 0x62, 0x91, 0x06, 0xfb, 0xb1, 0xfd, 0xbd, 0xe9, - 0xc9, 0x95, 0x2e, 0x34, 0xb8, 0x6b, 0x69, 0x74, 0x15, 0x46, 0xe4, 0x48, 0x6a, 0x81, 0xd8, 0x69, - 0x3c, 0x91, 0x86, 0xc3, 0x06, 0xe5, 0x07, 0x3b, 0x92, 0xf9, 0x0a, 0x2d, 0xac, 0x6d, 0xad, 0xe8, - 0x6d, 0x18, 0xd1, 0xdb, 0x98, 0xdd, 0x33, 0xf3, 0x1f, 0x2f, 0x13, 0x5b, 0xb4, 0x6a, 0xb9, 0x8e, - 0xc3, 0x06, 0x6f, 0xfb, 0x16, 0x0c, 0xd4, 0x77, 0xe3, 0x46, 0xe2, 0x3f, 0xac, 0xc7, 0xa6, 0x1b, - 0x30, 0x9e, 0x79, 0x95, 0x59, 0x3d, 0xef, 0x6d, 0x3d, 0xac, 0xe7, 0xbd, 0xed, 0xaf, 0x59, 0xd0, - 0xbf, 0xe6, 0x78, 0xf9, 0x0f, 0x48, 0x14, 0x69, 0x32, 0x7a, 0x09, 0x06, 0xc8, 0xc6, 0x06, 0x69, - 0xc8, 0xe7, 0xc2, 0x1f, 0x97, 0xaa, 0xcd, 0x22, 0x83, 0xd2, 0xa9, 0xc9, 0x2a, 0xe3, 0x7f, 0xb1, - 0x20, 0xb6, 0xff, 0x9d, 0x05, 0xb0, 0x16, 0xfa, 0xf2, 0xb4, 0x29, 0xa7, 0x25, 0xf3, 0x6d, 0x4f, - 0x59, 0x3c, 0xdd, 0xe1, 0x29, 0x0b, 0x94, 0x32, 0xec, 0xf0, 0x90, 0x85, 0xea, 0x4d, 0xb9, 0x50, - 0x6f, 0xfa, 0x7a, 0xe9, 0xcd, 0x37, 0x2c, 0x10, 0x81, 0x40, 0x05, 0x24, 0xc1, 0x95, 0xe9, 0xe7, - 0x8d, 0xdc, 0x24, 0xcf, 0x16, 0xb9, 0xb0, 0x23, 0x32, 0x92, 0x28, 0xd9, 0x34, 0xf2, 0x90, 0x18, - 0x5c, 0xa9, 0x61, 0x3f, 0xcc, 0xd1, 0xab, 0x4c, 0x8f, 0xcc, 0x6f, 0x57, 0x4f, 0x59, 0xd8, 0x58, - 0x76, 0x76, 0xca, 0x58, 0x65, 0xe3, 0xd2, 0xb3, 0xb3, 0x4b, 0x04, 0x4e, 0x69, 0xd0, 0x33, 0x30, - 0x18, 0xb7, 0xd6, 0x19, 0x79, 0x26, 0x2a, 0xa8, 0xce, 0xc1, 0x58, 0xe2, 0xed, 0x5f, 0x40, 0x60, - 0x74, 0xcd, 0xc8, 0xfc, 0x65, 0x3d, 0xf4, 0xcc, 0x5f, 0x6f, 0xc0, 0x10, 0xd9, 0x6e, 0x26, 0xbb, - 0x55, 0x2f, 0x2a, 0x96, 0x83, 0x71, 0x51, 0x50, 0xb7, 0x73, 0x97, 0x18, 0xac, 0x38, 0x76, 0xc9, - 0xe3, 0x56, 0xfe, 0x50, 0xe4, 0x71, 0xeb, 0xfb, 0xa9, 0xe4, 0x71, 0x7b, 0x1d, 0x06, 0x37, 0xbd, - 0x04, 0x93, 0x66, 0x28, 0x6e, 0x78, 0xe6, 0x1c, 0xdf, 0x5d, 0xe3, 0xc4, 0xed, 0xc9, 0x99, 0x04, - 0x02, 0x4b, 0x76, 0x68, 0x0d, 0x06, 0xb8, 0xed, 0x21, 0x52, 0xa3, 0x7d, 0xa2, 0x88, 0x97, 0xa6, - 0x3d, 0x4b, 0x98, 0x08, 0xfd, 0x12, 0xbc, 0x64, 0xde, 0xb6, 0xc1, 0x0f, 0x9e, 0xb7, 0x4d, 0x65, - 0x5b, 0x1b, 0x7a, 0x58, 0xd9, 0xd6, 0x8c, 0xac, 0x75, 0x95, 0xe3, 0xc8, 0x5a, 0xf7, 0x0d, 0x0b, - 0xce, 0x36, 0x3b, 0xe5, 0x7c, 0x14, 0x79, 0xd3, 0x3e, 0x7b, 0x84, 0x1c, 0x98, 0x46, 0xd5, 0xec, - 0xde, 0x5c, 0x47, 0x32, 0xdc, 0xb9, 0x62, 0x99, 0xfe, 0x6e, 0xf8, 0x83, 0xa7, 0xbf, 0x3b, 0xee, - 0x04, 0x6b, 0x69, 0x32, 0xbc, 0xd1, 0x63, 0x49, 0x86, 0x37, 0xf6, 0x10, 0x93, 0xe1, 0x69, 0x69, - 0xec, 0xc6, 0x1f, 0x6e, 0x1a, 0xbb, 0x2d, 0x18, 0x76, 0xc3, 0xfb, 0xc1, 0x7d, 0x27, 0x72, 0xe7, - 0x6a, 0xcb, 0x22, 0x6b, 0x5a, 0x4e, 0x6a, 0x8e, 0x6a, 0x5a, 0xc0, 0xa8, 0x81, 0xbb, 0x23, 0x53, - 0x24, 0xd6, 0x59, 0x8b, 0x84, 0x7e, 0xa7, 0x3e, 0x60, 0x42, 0x3f, 0x23, 0x2d, 0x1e, 0x3a, 0x8e, - 0xb4, 0x78, 0x6f, 0xb1, 0x3b, 0xfa, 0x1b, 0xde, 0xe6, 0xaa, 0xd3, 0x64, 0xf7, 0xca, 0x72, 0x6b, - 0x58, 0x90, 0xe4, 0xed, 0x35, 0x28, 0x14, 0x4e, 0x99, 0xb6, 0x27, 0xde, 0x3b, 0x73, 0xd2, 0x89, - 0xf7, 0xce, 0x1e, 0x63, 0xe2, 0xbd, 0x73, 0x27, 0x9a, 0x78, 0xef, 0x91, 0x9f, 0x4a, 0xe2, 0xbd, - 0xbf, 0x00, 0xe7, 0x0f, 0xff, 0x1c, 0x69, 0x62, 0xe7, 0x5a, 0xea, 0x32, 0xc8, 0x24, 0x76, 0x66, - 0xaa, 0x8e, 0x46, 0x55, 0x38, 0xff, 0xd7, 0x77, 0x2d, 0x78, 0xa4, 0x4b, 0x7a, 0x9c, 0xc2, 0x57, - 0x32, 0x9a, 0x30, 0xde, 0x34, 0x8b, 0x16, 0xbe, 0x44, 0x65, 0xa4, 0xe3, 0x51, 0xe1, 0x7d, 0x19, - 0x04, 0xce, 0xb2, 0x9f, 0xff, 0xd8, 0x8f, 0xde, 0x3f, 0xff, 0x91, 0x1f, 0xbf, 0x7f, 0xfe, 0x23, - 0x7f, 0xf4, 0xfe, 0xf9, 0x8f, 0xfc, 0xdc, 0xfe, 0x79, 0xeb, 0x47, 0xfb, 0xe7, 0xad, 0x1f, 0xef, - 0x9f, 0xb7, 0xfe, 0x64, 0xff, 0xbc, 0xf5, 0x8d, 0x3f, 0x3d, 0xff, 0x91, 0x2f, 0x96, 0x76, 0x2e, - 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x37, 0x41, 0x6d, 0xd5, 0x05, 0xba, 0x00, 0x00, + 0x3f, 0x9f, 0x2c, 0x5d, 0xb5, 0xec, 0xef, 0xb3, 0x19, 0x28, 0x2a, 0x59, 0x0c, 0x76, 0xc4, 0xe2, + 0xf0, 0xae, 0x05, 0x67, 0xfc, 0x0e, 0x8b, 0x92, 0x18, 0x93, 0xa3, 0x2c, 0x67, 0x8f, 0x89, 0x66, + 0x9f, 0xe9, 0x84, 0xc5, 0x1d, 0x6b, 0xa3, 0x6b, 0x7d, 0xd8, 0xa4, 0x02, 0xe7, 0xf8, 0xac, 0xe9, + 0x42, 0x07, 0xb8, 0x25, 0x60, 0x58, 0x61, 0xed, 0x3f, 0xb1, 0xe0, 0x8c, 0xea, 0xc7, 0x0d, 0xb2, + 0x5b, 0x27, 0x3e, 0x69, 0x24, 0x61, 0xf4, 0x41, 0xe9, 0xc9, 0xe3, 0xfc, 0x9b, 0xf0, 0x35, 0x69, + 0x58, 0x30, 0x28, 0xdf, 0x20, 0xbb, 0xfc, 0x03, 0xe9, 0x1d, 0x2d, 0x1f, 0xda, 0xd1, 0xdf, 0xb2, + 0x60, 0x54, 0x75, 0xf4, 0x04, 0xa6, 0xdc, 0x8a, 0x39, 0xe5, 0x3e, 0x5a, 0x50, 0x5e, 0xbb, 0x4c, + 0xb6, 0xdf, 0x2d, 0xc1, 0x59, 0x45, 0x63, 0x6c, 0x47, 0x1f, 0x90, 0xef, 0xd4, 0x5b, 0x77, 0x6f, + 0x90, 0xdd, 0xb5, 0x90, 0xea, 0x13, 0x9d, 0xbb, 0x8b, 0x2e, 0xc3, 0xb0, 0x4b, 0x36, 0x9c, 0x96, + 0x9f, 0x28, 0xb5, 0xb9, 0x9f, 0xdb, 0x53, 0xd5, 0x14, 0x8c, 0x75, 0x1a, 0x43, 0x12, 0xfa, 0x0e, + 0x95, 0x84, 0x5f, 0x19, 0x66, 0x0b, 0x57, 0xe2, 0xd0, 0xcf, 0x4b, 0x55, 0x19, 0xcd, 0x0e, 0x1a, + 0xd1, 0xed, 0x20, 0x61, 0xf3, 0x3c, 0x09, 0xfd, 0xde, 0x36, 0xdd, 0xdc, 0x4a, 0xe6, 0x9e, 0xb5, + 0x4c, 0x81, 0x98, 0xe3, 0xd0, 0x53, 0x30, 0xd8, 0x08, 0xb7, 0xb7, 0x9d, 0xc0, 0x9d, 0x2c, 0x33, + 0xe5, 0x6a, 0x98, 0xee, 0x7f, 0x0b, 0x1c, 0x84, 0x25, 0x0e, 0x3d, 0x06, 0x7d, 0x4e, 0xb4, 0x19, + 0x4f, 0xf6, 0x31, 0x9a, 0x21, 0x5a, 0xd3, 0x5c, 0xb4, 0x19, 0x63, 0x06, 0xa5, 0x4a, 0xd3, 0xfd, + 0x30, 0xba, 0xe7, 0x05, 0x9b, 0x55, 0x2f, 0x62, 0x1a, 0x90, 0xa6, 0x34, 0xdd, 0x55, 0x18, 0xac, + 0x51, 0xa1, 0x1a, 0xf4, 0x37, 0xc3, 0x28, 0x89, 0x27, 0x07, 0xd8, 0xc0, 0x3f, 0x97, 0x2b, 0x67, + 0xbc, 0xdf, 0xb5, 0x30, 0x4a, 0xd2, 0xae, 0xd0, 0x7f, 0x31, 0xe6, 0x8c, 0xd0, 0x02, 0x94, 0x49, + 0xb0, 0x33, 0x39, 0xc8, 0xf8, 0x7d, 0xe4, 0x70, 0x7e, 0x8b, 0xc1, 0xce, 0x1d, 0x27, 0x4a, 0x27, + 0xe6, 0x62, 0xb0, 0x83, 0x69, 0x69, 0xd4, 0x80, 0x8a, 0x74, 0x6a, 0xc4, 0x93, 0x43, 0x45, 0x44, + 0x11, 0x0b, 0x72, 0x4c, 0xde, 0x6e, 0x79, 0x11, 0xd9, 0x26, 0x41, 0x12, 0xa7, 0x16, 0x84, 0xc4, + 0xc6, 0x38, 0xe5, 0x8b, 0x1a, 0x30, 0xc2, 0x15, 0xad, 0xd5, 0xb0, 0x15, 0x24, 0xf1, 0x64, 0x85, + 0x35, 0x39, 0xc7, 0x44, 0xbf, 0x93, 0x96, 0x98, 0x3f, 0x23, 0xd8, 0x8f, 0x68, 0xc0, 0x18, 0x1b, + 0x4c, 0xd1, 0x1b, 0x30, 0xea, 0x7b, 0x3b, 0x24, 0x20, 0x71, 0x5c, 0x8b, 0xc2, 0x75, 0x32, 0x09, + 0xac, 0x37, 0x4f, 0xe6, 0x99, 0xab, 0xe1, 0x3a, 0x99, 0x3f, 0xb5, 0xbf, 0x37, 0x3d, 0xba, 0xa2, + 0x97, 0xc6, 0x26, 0x33, 0xf4, 0x26, 0x8c, 0x51, 0xad, 0xce, 0x4b, 0xd9, 0x0f, 0x17, 0x67, 0x8f, + 0xf6, 0xf7, 0xa6, 0xc7, 0xb0, 0x51, 0x1c, 0x67, 0xd8, 0xa1, 0x35, 0xa8, 0xf8, 0xde, 0x06, 0x69, + 0xec, 0x36, 0x7c, 0x32, 0x39, 0xc2, 0x78, 0xe7, 0x4c, 0xce, 0x15, 0x49, 0xce, 0x35, 0x69, 0xf5, + 0x17, 0xa7, 0x8c, 0xd0, 0x1d, 0x38, 0x97, 0x90, 0x68, 0xdb, 0x0b, 0x1c, 0x3a, 0xa9, 0x84, 0x9a, + 0xc7, 0x7c, 0x02, 0xa3, 0x4c, 0x6a, 0xcf, 0x8b, 0x81, 0x3d, 0xb7, 0xd6, 0x91, 0x0a, 0x77, 0x29, + 0x8d, 0x6e, 0xc1, 0x38, 0x9b, 0x4f, 0xb5, 0x96, 0xef, 0xd7, 0x42, 0xdf, 0x6b, 0xec, 0x4e, 0x8e, + 0x31, 0x86, 0x4f, 0x49, 0x4b, 0x7f, 0xd9, 0x44, 0x53, 0x0b, 0x28, 0xfd, 0x87, 0xb3, 0xa5, 0x91, + 0x0f, 0xe3, 0x31, 0x69, 0xb4, 0x22, 0x2f, 0xd9, 0xa5, 0xb2, 0x4f, 0x1e, 0x24, 0x93, 0xe3, 0x45, + 0x2c, 0xba, 0xba, 0x59, 0x88, 0xbb, 0x59, 0x32, 0x40, 0x9c, 0x65, 0x4d, 0x97, 0x8a, 0x38, 0x71, + 0xbd, 0x60, 0x72, 0x82, 0xad, 0x40, 0x6a, 0x7e, 0xd5, 0x29, 0x10, 0x73, 0x1c, 0x33, 0x94, 0xe9, + 0x8f, 0x5b, 0x74, 0x95, 0x3e, 0xc5, 0x08, 0x53, 0x43, 0x59, 0x22, 0x70, 0x4a, 0x43, 0xf7, 0xc0, + 0x24, 0xd9, 0x9d, 0x44, 0x8c, 0x54, 0x4d, 0xb5, 0xb5, 0xb5, 0xcf, 0x61, 0x0a, 0x47, 0x77, 0x60, + 0x90, 0x04, 0x3b, 0x4b, 0x51, 0xb8, 0x3d, 0x79, 0xba, 0xc8, 0x1a, 0xb0, 0xc8, 0x89, 0xf9, 0xfe, + 0x91, 0xea, 0xea, 0x02, 0x8c, 0x25, 0x33, 0xf4, 0x00, 0x26, 0x3b, 0x7c, 0x25, 0xfe, 0x51, 0xce, + 0xb0, 0x8f, 0xf2, 0x29, 0x51, 0x76, 0x72, 0xad, 0x0b, 0xdd, 0xc1, 0x21, 0x38, 0xdc, 0x95, 0xbb, + 0xbd, 0x0e, 0x63, 0x6a, 0xa1, 0x62, 0xdf, 0x1b, 0x4d, 0x43, 0x3f, 0x5d, 0x8b, 0xa5, 0xe5, 0x5a, + 0xa1, 0x83, 0x4a, 0x97, 0xe8, 0x18, 0x73, 0x38, 0x1b, 0x54, 0xef, 0x1d, 0x32, 0xbf, 0x9b, 0x10, + 0x6e, 0xc1, 0x94, 0xb5, 0x41, 0x95, 0x08, 0x9c, 0xd2, 0xd8, 0xff, 0x97, 0xeb, 0x03, 0xe9, 0x6a, + 0x58, 0x60, 0x27, 0xb8, 0x04, 0x43, 0x5b, 0x61, 0x9c, 0x50, 0x6a, 0x56, 0x47, 0x7f, 0xaa, 0x01, + 0x5c, 0x17, 0x70, 0xac, 0x28, 0xd0, 0x2b, 0x30, 0xda, 0xd0, 0x2b, 0x10, 0xdb, 0xd8, 0x59, 0x51, + 0xc4, 0xac, 0x1d, 0x9b, 0xb4, 0xe8, 0x2a, 0x0c, 0x31, 0x77, 0x6e, 0x23, 0xf4, 0x85, 0xad, 0x24, + 0x77, 0xe5, 0xa1, 0x9a, 0x80, 0x1f, 0x68, 0xbf, 0xb1, 0xa2, 0xa6, 0x16, 0x27, 0x6d, 0xc2, 0x72, + 0x4d, 0x6c, 0x20, 0xca, 0xe2, 0xbc, 0xce, 0xa0, 0x58, 0x60, 0xed, 0x7f, 0x5e, 0xd2, 0x46, 0x99, + 0x6a, 0xfa, 0x04, 0x7d, 0x1e, 0x06, 0xef, 0x3b, 0x5e, 0xe2, 0x05, 0x9b, 0x42, 0x7b, 0x78, 0xa1, + 0xe0, 0x6e, 0xc2, 0x8a, 0xdf, 0xe5, 0x45, 0xf9, 0xce, 0x27, 0xfe, 0x60, 0xc9, 0x90, 0xf2, 0x8e, + 0x5a, 0x41, 0x40, 0x79, 0x97, 0x7a, 0xe7, 0x8d, 0x79, 0x51, 0xce, 0x5b, 0xfc, 0xc1, 0x92, 0x21, + 0xda, 0x00, 0x90, 0xb2, 0x44, 0x5c, 0xe1, 0x46, 0xfd, 0x78, 0x2f, 0xec, 0xd7, 0x54, 0xe9, 0xf9, + 0x31, 0xba, 0xd7, 0xa6, 0xff, 0xb1, 0xc6, 0xd9, 0x4e, 0x98, 0x12, 0xd6, 0xde, 0x2c, 0xf4, 0x05, + 0x3a, 0xa5, 0x9d, 0x28, 0x21, 0xee, 0x5c, 0x92, 0xf5, 0x44, 0x1f, 0xae, 0x4b, 0xae, 0x79, 0xdb, + 0x44, 0x9f, 0xfe, 0x82, 0x09, 0x4e, 0xf9, 0xd9, 0xdf, 0x29, 0xc3, 0x64, 0xb7, 0xe6, 0x52, 0x91, + 0x24, 0x0f, 0xbc, 0x64, 0x81, 0xaa, 0x49, 0x96, 0x29, 0x92, 0x8b, 0x02, 0x8e, 0x15, 0x05, 0x95, + 0x8d, 0xd8, 0xdb, 0x94, 0x56, 0x41, 0x7f, 0x2a, 0x1b, 0x75, 0x06, 0xc5, 0x02, 0x4b, 0xe9, 0x22, + 0xe2, 0xc4, 0xc2, 0x8b, 0xaf, 0xc9, 0x10, 0x66, 0x50, 0x2c, 0xb0, 0xba, 0xe5, 0xdf, 0x97, 0x63, + 0xf9, 0x1b, 0x43, 0xd4, 0xff, 0x70, 0x87, 0x08, 0x7d, 0x11, 0x60, 0xc3, 0x0b, 0xbc, 0x78, 0x8b, + 0x71, 0x1f, 0xe8, 0x99, 0xbb, 0x52, 0xb2, 0x96, 0x14, 0x17, 0xac, 0x71, 0x44, 0x2f, 0xc1, 0xb0, + 0x9a, 0x9e, 0xcb, 0xd5, 0xc9, 0x41, 0xd3, 0xf3, 0x9b, 0xae, 0x55, 0x55, 0xac, 0xd3, 0xd9, 0x5f, + 0xca, 0xca, 0x8b, 0x98, 0x15, 0xda, 0xf8, 0x5a, 0x45, 0xc7, 0xb7, 0x74, 0xf8, 0xf8, 0xda, 0xff, + 0xb5, 0x0c, 0xe3, 0x46, 0x65, 0xad, 0xb8, 0xc0, 0x8a, 0xf6, 0x1a, 0xdd, 0xb0, 0x9c, 0x84, 0x88, + 0x39, 0x79, 0xa9, 0x97, 0x49, 0xa3, 0x6f, 0x6f, 0x74, 0x2e, 0x70, 0x4e, 0x68, 0x0b, 0x2a, 0xbe, + 0x13, 0x33, 0xdf, 0x01, 0x11, 0x73, 0xb1, 0x37, 0xb6, 0xa9, 0xf9, 0xe1, 0xc4, 0x89, 0xb6, 0x7b, + 0xf0, 0x5a, 0x52, 0xe6, 0x74, 0xb7, 0xa5, 0xca, 0x8e, 0x3c, 0x3a, 0x52, 0xcd, 0xa1, 0x1a, 0xd1, + 0x2e, 0xe6, 0x38, 0x74, 0x15, 0x46, 0x22, 0xc2, 0x24, 0x65, 0x81, 0xea, 0x73, 0x4c, 0xf4, 0xfa, + 0x53, 0xc5, 0x0f, 0x6b, 0x38, 0x6c, 0x50, 0xa6, 0x7a, 0xff, 0xc0, 0x21, 0x7a, 0xff, 0x33, 0x30, + 0xc8, 0x7e, 0x28, 0xa9, 0x50, 0x5f, 0x68, 0x99, 0x83, 0xb1, 0xc4, 0x67, 0x85, 0x68, 0xa8, 0xa0, + 0x10, 0x3d, 0x0b, 0x63, 0x55, 0x87, 0x6c, 0x87, 0xc1, 0x62, 0xe0, 0x36, 0x43, 0x2f, 0x48, 0xd0, + 0x24, 0xf4, 0xb1, 0xfd, 0x84, 0xcf, 0xf7, 0x3e, 0xca, 0x01, 0xf7, 0x51, 0xdd, 0xdd, 0xfe, 0x7f, + 0x16, 0x8c, 0x56, 0x89, 0x4f, 0x12, 0xc2, 0xed, 0x9e, 0x18, 0x2d, 0x01, 0xda, 0x8c, 0x9c, 0x06, + 0xa9, 0x91, 0xc8, 0x0b, 0xdd, 0x3a, 0x69, 0x84, 0x01, 0x3b, 0x71, 0xa1, 0x1b, 0xe4, 0xb9, 0xfd, + 0xbd, 0x69, 0x74, 0xad, 0x0d, 0x8b, 0x3b, 0x94, 0x40, 0x2e, 0x8c, 0x36, 0x23, 0x62, 0x38, 0xc8, + 0xac, 0x7c, 0x55, 0xa3, 0xa6, 0x17, 0xe1, 0xda, 0xb0, 0x01, 0xc2, 0x26, 0x53, 0xf4, 0x19, 0x98, + 0x08, 0xa3, 0xe6, 0x96, 0x13, 0x54, 0x49, 0x93, 0x04, 0x2e, 0x35, 0x01, 0x84, 0x59, 0x7f, 0x66, + 0x7f, 0x6f, 0x7a, 0xe2, 0x56, 0x06, 0x87, 0xdb, 0xa8, 0xed, 0x5f, 0x2b, 0xc1, 0xd9, 0x6a, 0x78, + 0x3f, 0xb8, 0xef, 0x44, 0xee, 0x5c, 0x6d, 0x99, 0xeb, 0xf5, 0xcc, 0xbb, 0x2c, 0xbd, 0xda, 0x56, + 0x57, 0xaf, 0xf6, 0x17, 0x60, 0x68, 0xc3, 0x23, 0xbe, 0x8b, 0xc9, 0x86, 0xe8, 0xde, 0xe5, 0x22, + 0x6e, 0xff, 0x25, 0x5a, 0x46, 0xfa, 0x4d, 0xb8, 0xd5, 0xb9, 0x24, 0xd8, 0x60, 0xc5, 0x10, 0xb5, + 0x60, 0x42, 0x1a, 0x2e, 0x12, 0x2b, 0x66, 0xc7, 0x0b, 0xc5, 0xec, 0x22, 0xb3, 0x1a, 0x36, 0x1e, + 0x38, 0xc3, 0x10, 0xb7, 0x55, 0x41, 0x0d, 0xce, 0x6d, 0xba, 0x37, 0xf4, 0x31, 0x59, 0x61, 0x06, + 0x27, 0xb3, 0x9d, 0x19, 0xd4, 0xfe, 0x87, 0x16, 0x3c, 0xd2, 0x36, 0x5a, 0xc2, 0xb1, 0xf0, 0xba, + 0xb4, 0xe8, 0xf9, 0xf1, 0x5c, 0x4e, 0x2b, 0x3b, 0x8e, 0x79, 0x31, 0xeb, 0xbe, 0x94, 0x6f, 0xdd, + 0xdb, 0xb7, 0xe0, 0xcc, 0xe2, 0x76, 0x33, 0xd9, 0xad, 0x7a, 0xa6, 0x33, 0xfe, 0x65, 0x18, 0xd8, + 0x26, 0xae, 0xd7, 0xda, 0x16, 0x9f, 0x75, 0x5a, 0x2e, 0xa4, 0xab, 0x0c, 0x7a, 0xb0, 0x37, 0x3d, + 0x5a, 0x4f, 0xc2, 0xc8, 0xd9, 0x24, 0x1c, 0x80, 0x05, 0xb9, 0xfd, 0x9e, 0x05, 0xe3, 0x72, 0x42, + 0xcd, 0xb9, 0x6e, 0x44, 0xe2, 0x18, 0x4d, 0x41, 0xc9, 0x6b, 0x0a, 0x46, 0x20, 0x18, 0x95, 0x96, + 0x6b, 0xb8, 0xe4, 0x35, 0xd1, 0xe7, 0xa1, 0xc2, 0xcf, 0x70, 0x52, 0xe1, 0xe8, 0xf1, 0x4c, 0x88, + 0x19, 0x53, 0x6b, 0x92, 0x07, 0x4e, 0xd9, 0x49, 0xb5, 0x92, 0x2d, 0xd5, 0x65, 0xf3, 0x44, 0xe1, + 0xba, 0x80, 0x63, 0x45, 0x81, 0x2e, 0xc2, 0x50, 0x10, 0xba, 0xfc, 0x98, 0x8d, 0x6f, 0xba, 0x4c, + 0xe4, 0x6e, 0x0a, 0x18, 0x56, 0x58, 0xfb, 0x6b, 0x16, 0x8c, 0xc8, 0x3e, 0x16, 0xd4, 0x70, 0xe9, + 0x24, 0x49, 0xb5, 0xdb, 0x74, 0x92, 0x50, 0x0d, 0x95, 0x61, 0x0c, 0xc5, 0xb4, 0xdc, 0x8b, 0x62, + 0x6a, 0xff, 0x66, 0x09, 0xc6, 0x64, 0x73, 0xea, 0xad, 0xf5, 0x98, 0xd0, 0x7d, 0xbb, 0xe2, 0xf0, + 0xc1, 0x27, 0x52, 0xce, 0x9e, 0xcf, 0x33, 0x5e, 0x8c, 0x6f, 0x96, 0xea, 0x05, 0x73, 0x92, 0x0f, + 0x4e, 0x59, 0xa2, 0x1d, 0x38, 0x15, 0x84, 0x09, 0xdb, 0x0f, 0x14, 0xbe, 0x98, 0x0f, 0x3c, 0x5b, + 0xcf, 0xa3, 0xa2, 0x9e, 0x53, 0x37, 0xb3, 0xfc, 0x70, 0x7b, 0x15, 0xe8, 0x96, 0x74, 0xca, 0x94, + 0x59, 0x5d, 0xcf, 0x16, 0xab, 0xab, 0xbb, 0x4f, 0xc6, 0xfe, 0x81, 0x05, 0x15, 0x49, 0x76, 0x12, + 0x87, 0x21, 0x77, 0x61, 0x30, 0x66, 0x9f, 0x48, 0x0e, 0xd7, 0xa5, 0x62, 0x5d, 0xe0, 0xdf, 0x35, + 0xdd, 0x04, 0xf9, 0xff, 0x18, 0x4b, 0x6e, 0xcc, 0x0d, 0xab, 0x3a, 0xf2, 0x81, 0x73, 0xc3, 0xaa, + 0x96, 0x75, 0x3f, 0xf3, 0x18, 0x35, 0xcc, 0x67, 0xaa, 0xc9, 0x35, 0x23, 0xb2, 0xe1, 0x3d, 0xc8, + 0x6a, 0x72, 0x35, 0x06, 0xc5, 0x02, 0x8b, 0x36, 0x60, 0xa4, 0x21, 0xfd, 0xb7, 0xe9, 0x12, 0xf2, + 0xb1, 0x82, 0x5e, 0x61, 0x75, 0xc0, 0xc0, 0x83, 0x56, 0x16, 0x34, 0x4e, 0xd8, 0xe0, 0x4b, 0xd7, + 0xa9, 0xf4, 0x0c, 0xb5, 0x5c, 0xd0, 0xd3, 0x11, 0x91, 0x24, 0xad, 0xa1, 0xeb, 0xf1, 0xa9, 0xfd, + 0x4d, 0x0b, 0x06, 0xb8, 0xc3, 0xaf, 0x98, 0xd7, 0x54, 0x3b, 0x3a, 0x49, 0xc7, 0xf3, 0x0e, 0x05, + 0x8a, 0x93, 0x14, 0x74, 0x17, 0x2a, 0xec, 0x07, 0x73, 0x5e, 0x94, 0x8b, 0x44, 0xf0, 0xf0, 0xfa, + 0xf5, 0xa6, 0xde, 0x91, 0x0c, 0x70, 0xca, 0xcb, 0xfe, 0x5e, 0x99, 0x2e, 0x7d, 0x29, 0xa9, 0xb1, + 0xb7, 0x5b, 0x27, 0xb1, 0xb7, 0x97, 0x8e, 0x7f, 0x6f, 0x7f, 0x1b, 0xc6, 0x1b, 0xda, 0xd1, 0x4d, + 0xfa, 0xc5, 0xaf, 0x14, 0x14, 0x2b, 0xed, 0xbc, 0x87, 0x3b, 0xb8, 0x16, 0x4c, 0x76, 0x38, 0xcb, + 0x1f, 0x11, 0x18, 0xe1, 0xf2, 0x20, 0xea, 0xeb, 0x63, 0xf5, 0xcd, 0x16, 0x91, 0x30, 0xbd, 0x32, + 0x26, 0xc5, 0x75, 0x8d, 0x11, 0x36, 0xd8, 0xda, 0x7f, 0xab, 0x1f, 0xfa, 0x17, 0x77, 0x48, 0x90, + 0x9c, 0xc0, 0x52, 0xb7, 0x0d, 0x63, 0x5e, 0xb0, 0x13, 0xfa, 0x3b, 0xc4, 0xe5, 0xf8, 0xa3, 0x6d, + 0xef, 0xe7, 0x44, 0x25, 0x63, 0xcb, 0x06, 0x33, 0x9c, 0x61, 0x7e, 0x1c, 0xa6, 0xf5, 0x6b, 0x30, + 0xc0, 0x25, 0x43, 0xd8, 0xd5, 0x39, 0x0e, 0x70, 0x36, 0xb0, 0x62, 0x06, 0xa5, 0x0e, 0x00, 0xee, + 0x7b, 0x17, 0x8c, 0xd0, 0x97, 0x60, 0x6c, 0xc3, 0x8b, 0xe2, 0x84, 0x5a, 0xc7, 0x71, 0xe2, 0x6c, + 0x37, 0x8f, 0x60, 0x54, 0xab, 0x11, 0x59, 0x32, 0x38, 0xe1, 0x0c, 0x67, 0xb4, 0x09, 0xa3, 0xd4, + 0xa6, 0x4b, 0xab, 0x1a, 0xec, 0xb9, 0x2a, 0xe5, 0x53, 0x5b, 0xd1, 0x19, 0x61, 0x93, 0x2f, 0x5d, + 0x92, 0x1a, 0xcc, 0x06, 0x1c, 0x62, 0xda, 0x8d, 0x5a, 0x92, 0xb8, 0xf1, 0xc7, 0x71, 0x74, 0x65, + 0x63, 0x31, 0x14, 0x15, 0x73, 0x65, 0x4b, 0x23, 0x25, 0xec, 0x6f, 0xd3, 0xbd, 0x98, 0x8e, 0xe1, + 0x09, 0x6c, 0x5f, 0xd7, 0xcd, 0xed, 0xeb, 0xc9, 0x02, 0x5f, 0xb6, 0xcb, 0xd6, 0xf5, 0x16, 0x0c, + 0x6b, 0x1f, 0x1e, 0xcd, 0x42, 0xa5, 0x21, 0x8f, 0xf9, 0xc5, 0x2a, 0xae, 0x54, 0x29, 0x75, 0xfe, + 0x8f, 0x53, 0x1a, 0x3a, 0x2e, 0x54, 0x05, 0xcd, 0x06, 0x05, 0x51, 0x05, 0x15, 0x33, 0x8c, 0xfd, + 0x02, 0xc0, 0xe2, 0x03, 0xd2, 0x98, 0x6b, 0xb0, 0x58, 0x14, 0xed, 0x40, 0xcc, 0xea, 0x7e, 0x20, + 0x66, 0x7f, 0xcb, 0x82, 0xb1, 0xa5, 0x05, 0x43, 0xa7, 0x9f, 0x01, 0xe0, 0xba, 0xf1, 0xdd, 0xbb, + 0x37, 0xa5, 0xc3, 0x97, 0x7b, 0xe5, 0x14, 0x14, 0x6b, 0x14, 0xe8, 0x51, 0x28, 0xfb, 0xad, 0x40, + 0xa8, 0xac, 0x83, 0xfb, 0x7b, 0xd3, 0xe5, 0x95, 0x56, 0x80, 0x29, 0x4c, 0x8b, 0xbe, 0x29, 0x17, + 0x8e, 0xbe, 0xc9, 0x8f, 0x43, 0xfd, 0x46, 0x19, 0x26, 0x96, 0x7c, 0xf2, 0xc0, 0x68, 0xf5, 0xd3, + 0x30, 0xe0, 0x46, 0xde, 0x0e, 0x89, 0xb2, 0x8a, 0x40, 0x95, 0x41, 0xb1, 0xc0, 0x16, 0x0e, 0x08, + 0x7a, 0xb3, 0x7d, 0x23, 0x3f, 0xbe, 0x60, 0xa8, 0xdc, 0x3e, 0xa3, 0x0d, 0x18, 0xe4, 0x07, 0xa8, + 0xf1, 0x64, 0x3f, 0x13, 0xc5, 0x57, 0x0e, 0x6f, 0x4c, 0x76, 0x7c, 0x66, 0x84, 0x43, 0x82, 0x87, + 0x62, 0xa8, 0xb5, 0x4c, 0x40, 0xb1, 0x64, 0x3e, 0xf5, 0x49, 0x18, 0xd1, 0x29, 0x7b, 0x8a, 0xc9, + 0xf8, 0x05, 0x0b, 0x4e, 0x2f, 0xf9, 0x61, 0xe3, 0x5e, 0x26, 0x62, 0xeb, 0x25, 0x18, 0xa6, 0x93, + 0x29, 0x36, 0xc2, 0x19, 0x8d, 0xb8, 0x4d, 0x81, 0xc2, 0x3a, 0x9d, 0x56, 0xec, 0xf6, 0xed, 0xe5, + 0x6a, 0xa7, 0x70, 0x4f, 0x81, 0xc2, 0x3a, 0x9d, 0xfd, 0x7b, 0x16, 0x3c, 0x7e, 0x6d, 0x61, 0xb1, + 0x46, 0xa2, 0xd8, 0x8b, 0x13, 0x12, 0x24, 0x6d, 0x11, 0xa7, 0x54, 0x67, 0x74, 0xb5, 0xa6, 0xa4, + 0x3a, 0x63, 0x95, 0xb5, 0x42, 0x60, 0x3f, 0x28, 0x61, 0xd7, 0xdf, 0xb4, 0xe0, 0xf4, 0x35, 0x2f, + 0xc1, 0xa4, 0x19, 0x66, 0x83, 0x44, 0x23, 0xd2, 0x0c, 0x63, 0x2f, 0x09, 0xa3, 0xdd, 0x6c, 0x90, + 0x28, 0x56, 0x18, 0xac, 0x51, 0xf1, 0x9a, 0x77, 0xbc, 0x98, 0xb6, 0xb4, 0x64, 0x9a, 0xba, 0x58, + 0xc0, 0xb1, 0xa2, 0xa0, 0x1d, 0x73, 0xbd, 0x88, 0xa9, 0x0c, 0xbb, 0x62, 0x06, 0xab, 0x8e, 0x55, + 0x25, 0x02, 0xa7, 0x34, 0xf6, 0xdf, 0xb1, 0xe0, 0xec, 0x35, 0xbf, 0x15, 0x27, 0x24, 0xda, 0x88, + 0x8d, 0xc6, 0xbe, 0x00, 0x15, 0x22, 0x95, 0x7b, 0xd1, 0x56, 0xb5, 0x69, 0x28, 0xad, 0x9f, 0x47, + 0xa8, 0x2a, 0xba, 0x02, 0x81, 0x90, 0xbd, 0x85, 0xed, 0xfd, 0x56, 0x09, 0x46, 0xaf, 0xaf, 0xad, + 0xd5, 0xae, 0x91, 0x44, 0xac, 0x92, 0xf9, 0x4e, 0xa9, 0x9a, 0x66, 0x91, 0x6b, 0x7b, 0x4b, 0x66, + 0xd6, 0xb5, 0x12, 0xcf, 0x9f, 0xe1, 0x17, 0x02, 0x66, 0x96, 0x83, 0xe4, 0x56, 0x54, 0x4f, 0x22, + 0x2f, 0xd8, 0xec, 0x68, 0xc1, 0xcb, 0x95, 0xbc, 0xdc, 0x6d, 0x25, 0x47, 0x2f, 0xc0, 0x00, 0xbb, + 0xc3, 0x20, 0x55, 0x8f, 0x0f, 0x2b, 0x2d, 0x81, 0x41, 0x0f, 0xf6, 0xa6, 0x2b, 0xb7, 0xf1, 0x32, + 0xff, 0x83, 0x05, 0x29, 0x7a, 0x13, 0x86, 0xb7, 0x92, 0xa4, 0x79, 0x9d, 0x38, 0x2e, 0x89, 0xe4, + 0x2a, 0x71, 0xf1, 0xf0, 0x55, 0x82, 0x0e, 0x06, 0x2f, 0x90, 0x4e, 0xac, 0x14, 0x16, 0x63, 0x9d, + 0xa3, 0x5d, 0x07, 0x48, 0x71, 0x0f, 0xc9, 0x02, 0xb1, 0x7f, 0xbe, 0x04, 0x83, 0xd7, 0x9d, 0xc0, + 0xf5, 0x49, 0x84, 0x96, 0xa0, 0x8f, 0x3c, 0x20, 0x0d, 0xb1, 0x8d, 0xe7, 0x34, 0x3d, 0xdd, 0xea, + 0xb8, 0x57, 0x8d, 0xfe, 0xc7, 0xac, 0x3c, 0xc2, 0x30, 0x48, 0xdb, 0x7d, 0x4d, 0x45, 0x0f, 0x3f, + 0x97, 0x3f, 0x0a, 0x4a, 0x24, 0xf8, 0x3e, 0x29, 0x40, 0x58, 0x32, 0x62, 0xfe, 0xa7, 0x46, 0xb3, + 0x4e, 0x17, 0xb7, 0xa4, 0x98, 0x5d, 0xb7, 0xb6, 0x50, 0xe3, 0xe4, 0x82, 0x2f, 0xf7, 0x3f, 0x49, + 0x20, 0x4e, 0xd9, 0xd9, 0x57, 0xe1, 0x0c, 0x3b, 0xbe, 0x74, 0x92, 0x2d, 0x63, 0xce, 0xe4, 0x0a, + 0xa7, 0xfd, 0xf7, 0x4a, 0x70, 0x6a, 0xb9, 0xbe, 0x50, 0x37, 0x3d, 0x87, 0x57, 0x61, 0x84, 0x6f, + 0xcf, 0x54, 0xe8, 0x1c, 0x5f, 0x94, 0x57, 0x2e, 0xf7, 0x35, 0x0d, 0x87, 0x0d, 0x4a, 0xf4, 0x38, + 0x94, 0xbd, 0xb7, 0x83, 0x6c, 0xb4, 0xd7, 0xf2, 0x6b, 0x37, 0x31, 0x85, 0x53, 0x34, 0xdd, 0xe9, + 0xf9, 0x12, 0xa7, 0xd0, 0x6a, 0xb7, 0x7f, 0x15, 0xc6, 0xbc, 0xb8, 0x11, 0x7b, 0xcb, 0x01, 0x9d, + 0xff, 0x4e, 0x43, 0x8a, 0x6f, 0xaa, 0x9a, 0xd3, 0xa6, 0x2a, 0x2c, 0xce, 0x50, 0x6b, 0xeb, 0x6d, + 0x7f, 0x61, 0x6d, 0x21, 0x3f, 0x8c, 0xf8, 0x4b, 0x50, 0x51, 0xe1, 0x4e, 0x32, 0x9c, 0xcd, 0xea, + 0x12, 0xce, 0x96, 0xbf, 0xe0, 0x48, 0x7f, 0x6e, 0xb9, 0xa3, 0x3f, 0xf7, 0x9f, 0x58, 0x90, 0xc6, + 0x6b, 0x20, 0x0c, 0x95, 0x66, 0xc8, 0x0e, 0x4b, 0x22, 0x79, 0x2a, 0xf9, 0x54, 0x8e, 0x24, 0xf2, + 0x99, 0xc0, 0x65, 0xa5, 0x26, 0xcb, 0xe2, 0x94, 0x0d, 0x5a, 0x81, 0xc1, 0x66, 0x44, 0xea, 0x09, + 0x8b, 0x45, 0xef, 0x81, 0x23, 0x93, 0xea, 0x1a, 0x2f, 0x89, 0x25, 0x0b, 0xfb, 0x5f, 0x5b, 0x00, + 0x2b, 0xde, 0xb6, 0x97, 0x60, 0x27, 0xd8, 0x24, 0x27, 0x60, 0xec, 0xdd, 0x84, 0xbe, 0xb8, 0x49, + 0x1a, 0xc5, 0x8e, 0xbb, 0xd2, 0x96, 0xd5, 0x9b, 0xa4, 0x91, 0x7e, 0x0e, 0xfa, 0x0f, 0x33, 0x3e, + 0xf6, 0x3f, 0x05, 0x18, 0x4b, 0xc9, 0xa8, 0xc2, 0x8d, 0x9e, 0x37, 0x82, 0xb0, 0x1f, 0xcd, 0x04, + 0x61, 0x57, 0x18, 0xb5, 0x16, 0x77, 0x9d, 0x40, 0x79, 0xdb, 0x79, 0x20, 0xf4, 0xfb, 0x97, 0x8a, + 0x36, 0x88, 0xd6, 0x34, 0xb3, 0xea, 0x3c, 0xe0, 0xea, 0xd4, 0x73, 0x52, 0x90, 0x56, 0x9d, 0x07, + 0x07, 0xfc, 0x50, 0x8b, 0xcd, 0x44, 0x6a, 0x50, 0x7c, 0xf5, 0xbf, 0xa7, 0xff, 0xd9, 0xe2, 0x48, + 0xab, 0x63, 0xb5, 0x7a, 0x81, 0x70, 0x4f, 0xf6, 0x58, 0xab, 0x17, 0x64, 0x6b, 0xf5, 0x82, 0x02, + 0xb5, 0x7a, 0x01, 0x7a, 0xd7, 0x82, 0x41, 0xe1, 0xd5, 0x67, 0x11, 0x70, 0xc3, 0x57, 0x3e, 0xd1, + 0x53, 0xd5, 0xe2, 0x78, 0x80, 0x57, 0x3f, 0x2b, 0x75, 0x48, 0x01, 0xcd, 0x6d, 0x82, 0xac, 0x1a, + 0xfd, 0xaa, 0x05, 0x63, 0xe2, 0x37, 0x26, 0x6f, 0xb7, 0x48, 0x9c, 0x88, 0xdd, 0xea, 0x33, 0x47, + 0x69, 0x8d, 0x60, 0xc1, 0x1b, 0xf5, 0x71, 0xb9, 0xd4, 0x98, 0xc8, 0xdc, 0xb6, 0x65, 0xda, 0x83, + 0xbe, 0x6b, 0xc1, 0x99, 0x6d, 0xe7, 0x01, 0xaf, 0x91, 0xc3, 0xb0, 0x93, 0x78, 0xa1, 0x88, 0xf2, + 0x5b, 0xea, 0x55, 0x4e, 0xda, 0x18, 0xf1, 0xe6, 0xca, 0x00, 0x9e, 0x33, 0x9d, 0x48, 0x72, 0x1b, + 0xdd, 0xb1, 0x85, 0x53, 0x2e, 0x0c, 0x49, 0xc1, 0xec, 0xa0, 0xbd, 0xcf, 0xeb, 0x9b, 0xf2, 0xe1, + 0x33, 0x50, 0xfa, 0xbb, 0x66, 0x5e, 0x6b, 0x39, 0x41, 0xe2, 0x25, 0xbb, 0x9a, 0xae, 0xcf, 0x6a, + 0x11, 0x82, 0x78, 0x8c, 0xb5, 0x6c, 0xc1, 0x88, 0x2e, 0x73, 0xc7, 0x58, 0x53, 0x08, 0xa7, 0x3b, + 0xc8, 0xd3, 0x31, 0x56, 0xd8, 0x82, 0x47, 0xbb, 0xca, 0xc5, 0xf1, 0x55, 0x6b, 0xff, 0x2b, 0x4b, + 0x5f, 0x30, 0x4f, 0xc0, 0x83, 0xb2, 0x6a, 0x7a, 0x50, 0x2e, 0x16, 0x9d, 0x39, 0x5d, 0xdc, 0x28, + 0x1b, 0x7a, 0xf3, 0xe9, 0x46, 0x80, 0xd6, 0x60, 0xc0, 0xa7, 0x10, 0x79, 0x80, 0x75, 0xa9, 0x97, + 0xb9, 0x99, 0xea, 0x18, 0x0c, 0x1e, 0x63, 0xc1, 0xcb, 0xfe, 0xae, 0x05, 0x7d, 0x3f, 0xc5, 0x8b, + 0x21, 0x6d, 0xac, 0xc5, 0xdd, 0xe6, 0x19, 0xec, 0xdc, 0x5f, 0x7c, 0x90, 0x90, 0x20, 0x66, 0x2a, + 0x65, 0xc7, 0x21, 0xfa, 0xb5, 0x12, 0x0c, 0xd3, 0xaa, 0x64, 0x08, 0xc2, 0x2b, 0x30, 0xea, 0x3b, + 0xeb, 0xc4, 0x97, 0xde, 0xdf, 0xac, 0xf9, 0xb5, 0xa2, 0x23, 0xb1, 0x49, 0x4b, 0x0b, 0x6f, 0xe8, + 0xce, 0x71, 0xa1, 0x1a, 0xa9, 0xc2, 0x86, 0xe7, 0x1c, 0x9b, 0xb4, 0xd4, 0x02, 0xb8, 0xef, 0x24, + 0x8d, 0x2d, 0x61, 0x9a, 0xa9, 0xe6, 0xde, 0xa5, 0x40, 0xcc, 0x71, 0x68, 0x0e, 0xc6, 0xa5, 0xc4, + 0xde, 0xa1, 0x36, 0x7b, 0x18, 0x08, 0xb5, 0x51, 0x5d, 0x2e, 0xc5, 0x26, 0x1a, 0x67, 0xe9, 0xd1, + 0x27, 0x61, 0x8c, 0x0e, 0x4e, 0xd8, 0x4a, 0x64, 0x80, 0x45, 0x3f, 0x0b, 0xb0, 0x60, 0xf1, 0xb9, + 0x6b, 0x06, 0x06, 0x67, 0x28, 0xed, 0x37, 0xe1, 0xf4, 0x4a, 0xe8, 0xb8, 0xf3, 0x8e, 0xef, 0x04, + 0x0d, 0x12, 0x2d, 0x07, 0x9b, 0xb9, 0x67, 0xd1, 0xfa, 0x79, 0x71, 0x29, 0xef, 0xbc, 0xd8, 0x8e, + 0x00, 0xe9, 0x15, 0x88, 0xd0, 0xa0, 0x37, 0x60, 0xd0, 0xe3, 0x55, 0x09, 0xb1, 0xbd, 0x9c, 0xe7, + 0x5c, 0x6a, 0x6b, 0xa3, 0x16, 0xea, 0xc2, 0x01, 0x58, 0xb2, 0xa4, 0x16, 0x45, 0x27, 0x6f, 0x54, + 0xbe, 0xd1, 0x66, 0xff, 0x65, 0x0b, 0xc6, 0x6f, 0x66, 0x6e, 0x2e, 0x3e, 0x0d, 0x03, 0x31, 0x89, + 0x3a, 0xb8, 0xd6, 0xea, 0x0c, 0x8a, 0x05, 0xf6, 0xa1, 0x9b, 0xeb, 0xbf, 0x5c, 0x82, 0x0a, 0x0b, + 0x32, 0x6d, 0x52, 0xeb, 0xe0, 0xf8, 0x95, 0xd3, 0x55, 0x43, 0x39, 0xcd, 0x31, 0x1a, 0x55, 0xc3, + 0xba, 0xe9, 0xa6, 0xe8, 0xb6, 0xba, 0xd1, 0x57, 0xc8, 0x5e, 0x4c, 0x19, 0xf2, 0x5b, 0x5f, 0x63, + 0xe6, 0x05, 0x40, 0x79, 0xdb, 0x8f, 0x9d, 0xe0, 0x2a, 0xda, 0x0f, 0xdc, 0x09, 0xae, 0x6a, 0x59, + 0x97, 0xc5, 0xa9, 0xa6, 0x35, 0x9e, 0x2d, 0xdf, 0x9f, 0x66, 0xa1, 0x83, 0x8e, 0xef, 0xbd, 0x43, + 0xd4, 0xc5, 0xd8, 0x69, 0x11, 0x0a, 0x28, 0xa0, 0x07, 0x6c, 0x9d, 0x11, 0xff, 0xf8, 0xbd, 0xe7, + 0xb4, 0x88, 0x7d, 0x1d, 0xc6, 0x33, 0x43, 0x87, 0x5e, 0x82, 0xfe, 0xe6, 0x96, 0x13, 0x93, 0x4c, + 0x50, 0x4a, 0x7f, 0x8d, 0x02, 0x0f, 0xf6, 0xa6, 0xc7, 0x54, 0x01, 0x06, 0xc1, 0x9c, 0xda, 0x7e, + 0xb7, 0x04, 0x7d, 0x37, 0x43, 0xf7, 0x24, 0x44, 0xed, 0xba, 0x21, 0x6a, 0x4f, 0xe7, 0x67, 0x4d, + 0xe8, 0x2a, 0x65, 0xb5, 0x8c, 0x94, 0x5d, 0x2c, 0xc0, 0xeb, 0x70, 0x01, 0xdb, 0x86, 0x61, 0x96, + 0x95, 0x41, 0x44, 0xe5, 0xbc, 0x60, 0xd8, 0x53, 0xd3, 0x19, 0x7b, 0x6a, 0x5c, 0x23, 0xd5, 0xac, + 0xaa, 0x67, 0x60, 0x50, 0x44, 0x81, 0x64, 0x03, 0x27, 0x05, 0x2d, 0x96, 0x78, 0xfb, 0x5f, 0x94, + 0xc1, 0xc8, 0x02, 0x81, 0x7e, 0x60, 0xc1, 0x4c, 0xc4, 0x2f, 0xa1, 0xb8, 0xd5, 0x56, 0xe4, 0x05, + 0x9b, 0xf5, 0xc6, 0x16, 0x71, 0x5b, 0xbe, 0x17, 0x6c, 0x2e, 0x6f, 0x06, 0xa1, 0x02, 0x2f, 0x3e, + 0x20, 0x8d, 0x16, 0x73, 0xba, 0x16, 0x4e, 0x3e, 0xa1, 0x4e, 0x40, 0xaf, 0xec, 0xef, 0x4d, 0xcf, + 0xe0, 0x9e, 0x6a, 0xc1, 0x3d, 0xb6, 0x0a, 0xfd, 0xa1, 0x05, 0xb3, 0x3c, 0x0f, 0x42, 0xf1, 0x9e, + 0x14, 0xb2, 0x43, 0x6b, 0x92, 0x69, 0xca, 0x6e, 0x8d, 0x44, 0xdb, 0xf3, 0x2f, 0x8b, 0x41, 0x9e, + 0xad, 0xf5, 0x56, 0x2b, 0xee, 0xb5, 0x99, 0xf6, 0xbf, 0x2d, 0xc3, 0x28, 0x1d, 0xcf, 0xf4, 0xee, + 0xf3, 0x4b, 0x86, 0x98, 0x3c, 0x91, 0x11, 0x93, 0x53, 0x06, 0xf1, 0xc3, 0xb9, 0xf6, 0x1c, 0xc3, + 0x29, 0xdf, 0x89, 0x93, 0xeb, 0xc4, 0x89, 0x92, 0x75, 0xe2, 0xb0, 0x83, 0xc6, 0x6c, 0x10, 0x43, + 0x81, 0xb3, 0x4b, 0x15, 0x59, 0xb4, 0x92, 0x65, 0x86, 0xdb, 0xf9, 0xa3, 0x1d, 0x40, 0xec, 0x50, + 0x33, 0x72, 0x82, 0x98, 0xf7, 0xc5, 0x13, 0x6e, 0xda, 0xde, 0x6a, 0x9d, 0x12, 0xb5, 0xa2, 0x95, + 0x36, 0x6e, 0xb8, 0x43, 0x0d, 0xda, 0xb1, 0x75, 0x7f, 0xd1, 0x63, 0xeb, 0x81, 0x9c, 0x88, 0xe5, + 0x5f, 0xb4, 0xe0, 0x34, 0xfd, 0x2c, 0x66, 0x74, 0x6b, 0x8c, 0x42, 0x18, 0xa7, 0x62, 0xe7, 0x93, + 0x44, 0xc2, 0xc4, 0xfc, 0xca, 0xd1, 0xac, 0x4d, 0x3e, 0xa9, 0xfa, 0x76, 0xc3, 0x64, 0x86, 0xb3, + 0xdc, 0xed, 0x6f, 0x59, 0xc0, 0xc2, 0xe7, 0x4e, 0x60, 0x33, 0xbb, 0x66, 0x6e, 0x66, 0x76, 0xfe, + 0x8a, 0xd1, 0x65, 0x1f, 0x7b, 0x11, 0x26, 0x28, 0xb6, 0x16, 0x85, 0x0f, 0x76, 0xa5, 0xa2, 0x9d, + 0xef, 0xaf, 0x7d, 0xb7, 0xc4, 0xa7, 0x8d, 0xba, 0x4d, 0x87, 0x7e, 0xc9, 0x82, 0xa1, 0x86, 0xd3, + 0x74, 0x1a, 0x3c, 0x87, 0x4e, 0x01, 0x9f, 0x8c, 0x51, 0x7e, 0x66, 0x41, 0x94, 0xe5, 0xfe, 0x84, + 0x8f, 0xc9, 0xae, 0x4b, 0x70, 0xae, 0x0f, 0x41, 0x55, 0x3e, 0xe5, 0xc1, 0xa8, 0xc1, 0xec, 0x18, + 0x8d, 0xd0, 0x5f, 0xb2, 0xf8, 0x92, 0xaf, 0x0c, 0x85, 0xfb, 0x70, 0x2a, 0xd0, 0xfe, 0xd3, 0xc5, + 0x4c, 0xea, 0xc5, 0x33, 0xc5, 0x17, 0x75, 0xb6, 0x06, 0x6a, 0x81, 0x82, 0x19, 0x86, 0xb8, 0xbd, + 0x0e, 0xfb, 0xef, 0x5b, 0xf0, 0x88, 0x4e, 0xa8, 0x5d, 0x7e, 0xcc, 0xf3, 0x15, 0x57, 0x61, 0x28, + 0x6c, 0x92, 0xc8, 0x49, 0x8d, 0xa2, 0x8b, 0x72, 0xf4, 0x6f, 0x09, 0xf8, 0xc1, 0xde, 0xf4, 0x19, + 0x9d, 0xbb, 0x84, 0x63, 0x55, 0x12, 0xd9, 0x30, 0xc0, 0xc6, 0x25, 0x16, 0xd7, 0x56, 0x59, 0x46, + 0x19, 0x76, 0x42, 0x12, 0x63, 0x81, 0xb1, 0xff, 0xba, 0xc5, 0x85, 0x4d, 0x6f, 0x3a, 0xfa, 0x32, + 0x4c, 0x6c, 0x53, 0xfb, 0x69, 0xf1, 0x41, 0x93, 0x6e, 0xa3, 0xec, 0x64, 0xd8, 0x2a, 0xb2, 0x79, + 0x74, 0xe9, 0xee, 0xfc, 0xa4, 0x68, 0xfd, 0xc4, 0x6a, 0x86, 0x2d, 0x6e, 0xab, 0xc8, 0xfe, 0x23, + 0x31, 0x63, 0x99, 0x06, 0xf7, 0x0c, 0x0c, 0x36, 0x43, 0x77, 0x61, 0xb9, 0x8a, 0xc5, 0x58, 0xa9, + 0x25, 0xa7, 0xc6, 0xc1, 0x58, 0xe2, 0xd1, 0x15, 0x00, 0xf2, 0x20, 0x21, 0x51, 0xe0, 0xf8, 0xea, + 0x44, 0x57, 0x29, 0x4a, 0x8b, 0x0a, 0x83, 0x35, 0x2a, 0x5a, 0xa6, 0x19, 0x85, 0x3b, 0x9e, 0xcb, + 0xa2, 0xf6, 0xcb, 0x66, 0x99, 0x9a, 0xc2, 0x60, 0x8d, 0x8a, 0x5a, 0xad, 0xad, 0x20, 0xe6, 0x9b, + 0x98, 0xb3, 0x2e, 0x12, 0xa0, 0x0c, 0xa5, 0x56, 0xeb, 0x6d, 0x1d, 0x89, 0x4d, 0x5a, 0xfb, 0xbf, + 0x54, 0x00, 0x52, 0x35, 0x09, 0xbd, 0xdb, 0x3e, 0x43, 0x3f, 0x5e, 0x54, 0xc7, 0x7a, 0x78, 0xd3, + 0x13, 0x7d, 0xdd, 0x82, 0x61, 0xc7, 0xf7, 0xc3, 0x86, 0x93, 0xb0, 0x1e, 0x95, 0x8a, 0xae, 0x15, + 0xa2, 0x25, 0x73, 0x69, 0x59, 0xde, 0x98, 0x17, 0xe4, 0x81, 0x9f, 0x86, 0xc9, 0x6d, 0x8f, 0xde, + 0x04, 0xf4, 0x31, 0xa9, 0x66, 0xf3, 0x8f, 0x32, 0x95, 0x55, 0xb3, 0x2b, 0x6c, 0x85, 0xd4, 0x34, + 0x6c, 0xf4, 0xa6, 0x91, 0xe3, 0xa3, 0xaf, 0xc8, 0x6d, 0x49, 0x43, 0x71, 0xc8, 0x4b, 0xef, 0x81, + 0x3e, 0xaf, 0x07, 0x34, 0xf7, 0x17, 0xb9, 0x8e, 0xac, 0xe9, 0xaf, 0x39, 0xc1, 0xcc, 0x09, 0x8c, + 0xbb, 0xe6, 0x56, 0x29, 0x82, 0xb2, 0x2e, 0xe7, 0xd7, 0x90, 0xd9, 0x63, 0xd3, 0xcd, 0x31, 0x83, + 0xc0, 0xd9, 0x2a, 0xd0, 0xe7, 0x79, 0xb8, 0xf9, 0x72, 0xb0, 0x11, 0x8a, 0xc0, 0xac, 0x4b, 0x05, + 0xbe, 0xf9, 0x6e, 0x9c, 0x90, 0x6d, 0x5a, 0x26, 0xdd, 0x0d, 0x6f, 0x0a, 0x2e, 0x58, 0xf1, 0x43, + 0x6b, 0x30, 0xc0, 0x2e, 0xc7, 0xc4, 0x93, 0x43, 0x45, 0x5c, 0x67, 0xe6, 0x9d, 0xd0, 0x54, 0x05, + 0x61, 0x7f, 0x63, 0x2c, 0x78, 0xa1, 0xeb, 0xf2, 0x56, 0x78, 0xbc, 0x1c, 0xdc, 0x8e, 0x09, 0xbb, + 0x15, 0x5e, 0x99, 0xff, 0x48, 0x7a, 0xcd, 0x9b, 0xc3, 0x3b, 0x66, 0x39, 0x33, 0x4a, 0x52, 0x4d, + 0x44, 0xfc, 0x97, 0xc9, 0xd3, 0x26, 0xa1, 0x48, 0x43, 0xcd, 0x54, 0x6b, 0xe9, 0x60, 0xdf, 0x31, + 0x99, 0xe1, 0x2c, 0xf7, 0x13, 0xdc, 0x03, 0xa7, 0x7c, 0x98, 0xc8, 0x4e, 0xc9, 0x63, 0xdc, 0x71, + 0x7f, 0xd2, 0x07, 0x63, 0xa6, 0x60, 0xa0, 0x59, 0xa8, 0x08, 0x6d, 0x4a, 0x25, 0x52, 0x52, 0xf2, + 0xbf, 0x2a, 0x11, 0x38, 0xa5, 0x61, 0x29, 0xa5, 0x58, 0x71, 0x2d, 0x1c, 0x27, 0x4d, 0x29, 0xa5, + 0x30, 0x58, 0xa3, 0xa2, 0x6a, 0xeb, 0x7a, 0x18, 0x26, 0x6a, 0xe1, 0x56, 0x32, 0x33, 0xcf, 0xa0, + 0x58, 0x60, 0xe9, 0x82, 0x7d, 0x8f, 0x76, 0xc8, 0x37, 0x5d, 0x80, 0x6a, 0xc1, 0xbe, 0xa1, 0x23, + 0xb1, 0x49, 0x4b, 0x37, 0xa0, 0x30, 0x66, 0x42, 0x28, 0x94, 0xe3, 0x34, 0xbc, 0xa9, 0xce, 0x2f, + 0x8b, 0x49, 0x3c, 0xfa, 0x1c, 0x3c, 0xa2, 0xee, 0x76, 0x61, 0xee, 0x52, 0x95, 0x35, 0x0e, 0x18, + 0xf6, 0xed, 0x23, 0x0b, 0x9d, 0xc9, 0x70, 0xb7, 0xf2, 0xe8, 0x55, 0x18, 0x13, 0x8a, 0xad, 0xe4, + 0x38, 0x68, 0x9e, 0x7e, 0xdf, 0x30, 0xb0, 0x38, 0x43, 0x8d, 0xaa, 0x30, 0x41, 0x21, 0x4c, 0xa3, + 0x94, 0x1c, 0xf8, 0x1d, 0x35, 0xb5, 0x33, 0xdf, 0xc8, 0xe0, 0x71, 0x5b, 0x09, 0x34, 0x07, 0xe3, + 0x5c, 0xb7, 0xa0, 0x56, 0x1c, 0xfb, 0x0e, 0x22, 0x92, 0x52, 0x4d, 0x82, 0x5b, 0x26, 0x1a, 0x67, + 0xe9, 0xd1, 0x55, 0x18, 0x71, 0xa2, 0xc6, 0x96, 0x97, 0x90, 0x46, 0xd2, 0x8a, 0x78, 0xbe, 0x05, + 0x2d, 0x7c, 0x60, 0x4e, 0xc3, 0x61, 0x83, 0xd2, 0x7e, 0x07, 0x4e, 0x77, 0x08, 0xdb, 0xa6, 0x82, + 0xe3, 0x34, 0x3d, 0xd9, 0xa7, 0x4c, 0xa0, 0xd2, 0x5c, 0x6d, 0x59, 0xf6, 0x46, 0xa3, 0xa2, 0xd2, + 0xc9, 0x7c, 0xc9, 0x5a, 0x9e, 0x43, 0x25, 0x9d, 0x4b, 0x12, 0x81, 0x53, 0x1a, 0xfb, 0x4f, 0x2b, + 0xa0, 0xb9, 0x5a, 0x0a, 0x84, 0xa7, 0x5c, 0x85, 0x11, 0x99, 0xba, 0x53, 0x4b, 0x99, 0xa7, 0xba, + 0x79, 0x4d, 0xc3, 0x61, 0x83, 0x92, 0xb6, 0x2d, 0x90, 0x0e, 0xa4, 0x6c, 0x58, 0x94, 0xf2, 0x2c, + 0xe1, 0x94, 0x06, 0x5d, 0x82, 0xa1, 0x98, 0xf8, 0x1b, 0x2b, 0x5e, 0x70, 0x4f, 0x08, 0xb6, 0x5a, + 0x95, 0xeb, 0x02, 0x8e, 0x15, 0x05, 0x9a, 0x87, 0x72, 0xcb, 0x73, 0x85, 0x28, 0x4b, 0x95, 0xa1, + 0x7c, 0x7b, 0xb9, 0x7a, 0xb0, 0x37, 0xfd, 0x44, 0xb7, 0xdc, 0xa7, 0xd4, 0x98, 0x8e, 0x67, 0xe8, + 0xf4, 0xa3, 0x85, 0x3b, 0x39, 0xd5, 0x07, 0x7a, 0x74, 0xaa, 0x5f, 0x01, 0x10, 0xbd, 0x96, 0xb2, + 0x5c, 0x4e, 0xbf, 0xda, 0x35, 0x85, 0xc1, 0x1a, 0x15, 0x35, 0xc9, 0x1b, 0x11, 0x71, 0xa4, 0xd5, + 0xca, 0xc3, 0x89, 0x87, 0x8e, 0x6e, 0x92, 0x2f, 0x64, 0x99, 0xe1, 0x76, 0xfe, 0x28, 0x84, 0x53, + 0x2e, 0x9d, 0x48, 0x46, 0xa5, 0x95, 0xde, 0x63, 0x98, 0x69, 0x85, 0xd5, 0x2c, 0x23, 0xdc, 0xce, + 0x1b, 0x7d, 0x11, 0xa6, 0x24, 0xb0, 0xfd, 0xf6, 0x26, 0x9b, 0x2e, 0xe5, 0xf9, 0xf3, 0xfb, 0x7b, + 0xd3, 0x53, 0xd5, 0xae, 0x54, 0xf8, 0x10, 0x0e, 0xe8, 0x0d, 0x18, 0x60, 0x87, 0x30, 0xf1, 0xe4, + 0x30, 0xdb, 0xed, 0x5e, 0x2c, 0x12, 0x09, 0x4f, 0xa5, 0x7e, 0x86, 0x1d, 0xe5, 0x88, 0x18, 0xcf, + 0xf4, 0x64, 0x8b, 0x01, 0xb1, 0xe0, 0x89, 0x9a, 0x30, 0xec, 0x04, 0x41, 0x98, 0x38, 0x5c, 0x09, + 0x1b, 0x29, 0xa2, 0x47, 0x6a, 0x55, 0xcc, 0xa5, 0x65, 0x79, 0x3d, 0x2a, 0x70, 0x4c, 0xc3, 0x60, + 0xbd, 0x0a, 0x74, 0x1f, 0xc6, 0xc3, 0xfb, 0x74, 0xc1, 0x94, 0xe7, 0x10, 0xf1, 0xe4, 0xa8, 0xd9, + 0xb1, 0x1c, 0xaf, 0xaa, 0x51, 0x58, 0x5b, 0xc9, 0x4c, 0xa6, 0x38, 0x5b, 0x0b, 0x9a, 0x31, 0x7c, + 0xcb, 0x63, 0x69, 0x24, 0x73, 0xea, 0x5b, 0xd6, 0x5d, 0xc9, 0xec, 0x86, 0x30, 0x8f, 0x5e, 0x64, + 0x2b, 0xc2, 0x78, 0xe6, 0x86, 0x70, 0x8a, 0xc2, 0x3a, 0xdd, 0xd4, 0x27, 0x60, 0x58, 0x1b, 0xf8, + 0x5e, 0x42, 0x66, 0xa7, 0x5e, 0x85, 0x89, 0xec, 0x80, 0xf6, 0x14, 0x72, 0xfb, 0xbf, 0x4a, 0x30, + 0xde, 0xe1, 0x90, 0xe7, 0x9e, 0xc7, 0xc2, 0xbe, 0x8d, 0xa5, 0xef, 0x86, 0x17, 0xb8, 0x98, 0x61, + 0xcc, 0x05, 0xac, 0x54, 0x60, 0x01, 0x93, 0xab, 0x69, 0xb9, 0xeb, 0x6a, 0x2a, 0x16, 0xad, 0xbe, + 0xf7, 0xb3, 0x68, 0x99, 0xfb, 0x44, 0x7f, 0xa1, 0x7d, 0xe2, 0x21, 0x2c, 0x74, 0xc6, 0x56, 0x33, + 0x58, 0x60, 0xab, 0xf9, 0x66, 0x09, 0x26, 0xd2, 0xf0, 0x62, 0x91, 0xcf, 0xf7, 0xf8, 0xcf, 0x0c, + 0xd6, 0x8c, 0x33, 0x83, 0xbc, 0x74, 0xbd, 0x99, 0xf6, 0x75, 0x3d, 0x3f, 0x78, 0x23, 0x73, 0x7e, + 0xf0, 0x62, 0x8f, 0x7c, 0x0f, 0x3f, 0x4b, 0xf8, 0x4e, 0x09, 0xce, 0x66, 0x8b, 0x2c, 0xf8, 0x8e, + 0xb7, 0x7d, 0x02, 0xe3, 0xf5, 0x39, 0x63, 0xbc, 0x5e, 0xee, 0xad, 0x5f, 0xac, 0x91, 0x5d, 0x07, + 0xcd, 0xc9, 0x0c, 0xda, 0x27, 0x8e, 0xc2, 0xfc, 0xf0, 0x91, 0xfb, 0x7d, 0x0b, 0x1e, 0xed, 0x58, + 0xee, 0x04, 0xbc, 0xa4, 0xaf, 0x9b, 0x5e, 0xd2, 0x17, 0x8e, 0xd0, 0xbb, 0x2e, 0x6e, 0xd3, 0xff, + 0x51, 0xea, 0xd2, 0x2b, 0xe6, 0x49, 0xba, 0x05, 0xc3, 0x4e, 0xa3, 0x41, 0xe2, 0x78, 0x35, 0x74, + 0x55, 0xae, 0xa1, 0xe7, 0xd9, 0xde, 0x92, 0x82, 0x0f, 0xf6, 0xa6, 0xa7, 0xb2, 0x2c, 0x52, 0x34, + 0xd6, 0x39, 0x98, 0x59, 0xd0, 0x4a, 0xc7, 0x94, 0x05, 0xed, 0x0a, 0xc0, 0x8e, 0xb2, 0x60, 0xb3, + 0x0e, 0x2a, 0xcd, 0xb6, 0xd5, 0xa8, 0xd0, 0x5f, 0x64, 0x1a, 0x21, 0x8f, 0xa8, 0xe8, 0x33, 0x6f, + 0x2a, 0xe6, 0x7c, 0x3f, 0x3d, 0x3a, 0x83, 0x5f, 0x88, 0x54, 0xce, 0x3c, 0xc5, 0xd2, 0xfe, 0x97, + 0x65, 0xf8, 0xf0, 0x21, 0x42, 0x87, 0xe6, 0xcc, 0x03, 0xd2, 0xe7, 0xb2, 0x9e, 0x9b, 0xa9, 0x8e, + 0x85, 0x0d, 0x57, 0x4e, 0xe6, 0x5b, 0x95, 0xde, 0xf7, 0xb7, 0xfa, 0x86, 0xee, 0x67, 0xe3, 0x81, + 0x91, 0xd7, 0x8e, 0x3c, 0xad, 0x7e, 0x36, 0xfd, 0xe2, 0x5f, 0xb5, 0xe0, 0x89, 0x8e, 0x9d, 0x32, + 0xc2, 0x31, 0x66, 0xa1, 0xd2, 0xa0, 0x40, 0xed, 0x06, 0x4b, 0x7a, 0x75, 0x4c, 0x22, 0x70, 0x4a, + 0x63, 0x44, 0x5d, 0x94, 0x72, 0xa3, 0x2e, 0x7e, 0xd7, 0x82, 0x33, 0xd9, 0x46, 0x9c, 0xc0, 0x9a, + 0x53, 0x37, 0xd7, 0x9c, 0x99, 0xde, 0x3e, 0x7d, 0x97, 0xe5, 0xe6, 0x57, 0x47, 0xe1, 0x5c, 0xdb, + 0x8e, 0xc5, 0x47, 0xf1, 0xe7, 0x2c, 0x38, 0xb5, 0xc9, 0x34, 0x6f, 0xed, 0x9a, 0x90, 0xe8, 0x57, + 0xce, 0xdd, 0xaa, 0x43, 0x6f, 0x17, 0x71, 0x3b, 0xa2, 0x8d, 0x04, 0xb7, 0x57, 0x86, 0xbe, 0x66, + 0xc1, 0x19, 0xe7, 0x7e, 0xdc, 0xf6, 0x52, 0x84, 0x10, 0xa3, 0x57, 0x73, 0x9c, 0x5c, 0x39, 0x6f, + 0x4c, 0xcc, 0x4f, 0xee, 0xef, 0x4d, 0x9f, 0xe9, 0x44, 0x85, 0x3b, 0xd6, 0x4a, 0xbf, 0xef, 0x96, + 0xb8, 0x86, 0x50, 0xec, 0xc2, 0x5b, 0xa7, 0x4b, 0x0b, 0x7c, 0x49, 0x92, 0x18, 0xac, 0x38, 0xa2, + 0xb7, 0xa0, 0xb2, 0x29, 0x6f, 0x06, 0x65, 0x97, 0xbc, 0x2e, 0xc3, 0xdc, 0xe9, 0x22, 0x11, 0x0f, + 0x8d, 0x57, 0x28, 0x9c, 0x32, 0x45, 0xd7, 0xa1, 0x1c, 0x6c, 0xc4, 0xe2, 0x0e, 0x6e, 0x5e, 0xb0, + 0x8d, 0x19, 0xe2, 0xc4, 0xaf, 0x2d, 0xde, 0x5c, 0xaa, 0x63, 0xca, 0x82, 0x72, 0x8a, 0xd6, 0x5d, + 0xe1, 0xdd, 0xcd, 0xe1, 0x84, 0xe7, 0xab, 0xed, 0x9c, 0xf0, 0x7c, 0x15, 0x53, 0x16, 0xa8, 0x06, + 0xfd, 0xec, 0x92, 0x83, 0x70, 0xdd, 0xe6, 0x5c, 0xd4, 0x6e, 0xbb, 0xca, 0xc1, 0x13, 0xed, 0x31, + 0x30, 0xe6, 0x8c, 0xd0, 0x1a, 0x0c, 0x34, 0x58, 0x52, 0x74, 0x61, 0x57, 0xe7, 0xa5, 0x30, 0x68, + 0x4b, 0xa0, 0xce, 0x8f, 0x98, 0x38, 0x1c, 0x0b, 0x5e, 0x8c, 0x2b, 0x69, 0x6e, 0x6d, 0xc4, 0xc2, + 0x70, 0xce, 0xe3, 0xda, 0x96, 0xde, 0x5e, 0x70, 0x65, 0x70, 0x2c, 0x78, 0xa1, 0x2a, 0x94, 0x36, + 0x1a, 0x22, 0x5f, 0x67, 0x8e, 0xcb, 0xd6, 0xbc, 0x83, 0x3a, 0x3f, 0xb0, 0xbf, 0x37, 0x5d, 0x5a, + 0x5a, 0xc0, 0xa5, 0x8d, 0x06, 0x7a, 0x1d, 0x06, 0x37, 0xf8, 0xad, 0x42, 0x91, 0x9b, 0xf3, 0x72, + 0xde, 0xd5, 0xc7, 0xb6, 0x2b, 0x88, 0xfc, 0xfa, 0x83, 0x40, 0x60, 0xc9, 0x8e, 0xa5, 0x2d, 0x53, + 0xf7, 0x24, 0x45, 0x72, 0xce, 0x99, 0xde, 0xee, 0x55, 0x0a, 0x7b, 0x52, 0x41, 0xb1, 0xc6, 0x91, + 0xca, 0xbc, 0x23, 0xdf, 0x77, 0x60, 0x89, 0x39, 0x73, 0x65, 0xbe, 0xe3, 0x73, 0x10, 0x5c, 0xe6, + 0x15, 0x0a, 0xa7, 0x4c, 0x51, 0x0b, 0x46, 0x77, 0xe2, 0xe6, 0x16, 0x91, 0x53, 0x9f, 0x65, 0xeb, + 0x1c, 0xbe, 0xf2, 0xa9, 0x9c, 0x14, 0xac, 0xa2, 0x88, 0x17, 0x25, 0x2d, 0xc7, 0x6f, 0x5b, 0xc1, + 0x58, 0x9e, 0xa8, 0x3b, 0x3a, 0x5b, 0x6c, 0xd6, 0x42, 0x3f, 0xc9, 0xdb, 0xad, 0x70, 0x7d, 0x37, + 0x21, 0x22, 0x9b, 0x67, 0xce, 0x27, 0x79, 0x8d, 0x13, 0xb7, 0x7f, 0x12, 0x81, 0xc0, 0x92, 0x9d, + 0x1a, 0x32, 0xb6, 0x1a, 0x4f, 0x14, 0x1e, 0xb2, 0xb6, 0x3e, 0xa4, 0x43, 0xc6, 0x56, 0xdf, 0x94, + 0x29, 0x5b, 0x75, 0x9b, 0x5b, 0x61, 0x12, 0x06, 0x99, 0xb5, 0xff, 0x54, 0x91, 0x55, 0xb7, 0xd6, + 0xa1, 0x64, 0xfb, 0xaa, 0xdb, 0x89, 0x0a, 0x77, 0xac, 0xd5, 0xfe, 0xa3, 0xfe, 0xf6, 0xed, 0x96, + 0x29, 0xc3, 0x7f, 0xad, 0xfd, 0xdc, 0xf1, 0x33, 0xbd, 0xdb, 0x7c, 0x0f, 0xf1, 0x04, 0xf2, 0x6b, + 0x16, 0x9c, 0x6b, 0x76, 0xdc, 0x4c, 0xc5, 0x86, 0xd5, 0xab, 0xe9, 0xc8, 0x07, 0x4c, 0xa5, 0xaa, + 0xed, 0x8c, 0xc7, 0x5d, 0xea, 0xcc, 0x2a, 0xa0, 0xe5, 0xf7, 0xad, 0x80, 0xde, 0x85, 0x21, 0xa6, + 0x33, 0xa5, 0x79, 0x35, 0x7a, 0x4c, 0x41, 0xc1, 0xb6, 0xbe, 0x05, 0xc1, 0x02, 0x2b, 0x66, 0x74, + 0xe0, 0x1e, 0xcf, 0x76, 0x02, 0x13, 0x86, 0x16, 0xe9, 0x5c, 0xb9, 0xaf, 0x63, 0x49, 0x8c, 0xc4, + 0xe3, 0xb5, 0xc3, 0x88, 0x0f, 0xf2, 0x08, 0xf0, 0xe1, 0x95, 0x9d, 0xa4, 0x42, 0xfb, 0x8f, 0xac, + 0x0e, 0xfa, 0x17, 0x37, 0x41, 0x3e, 0x65, 0x9a, 0x20, 0x4f, 0x67, 0x4d, 0x90, 0x36, 0xb7, 0x81, + 0x61, 0x7d, 0x14, 0x4f, 0xcc, 0x58, 0x34, 0xe1, 0x87, 0xed, 0xc3, 0x85, 0xbc, 0xc9, 0xcd, 0x22, + 0x7c, 0x5c, 0x75, 0x5c, 0x96, 0x46, 0xf8, 0xb8, 0xcb, 0x55, 0xcc, 0x30, 0x45, 0xef, 0x8c, 0xdb, + 0x3f, 0x5f, 0x82, 0x72, 0x2d, 0x74, 0x4f, 0xc0, 0x0d, 0x72, 0xcd, 0x70, 0x83, 0x3c, 0x95, 0xfb, + 0xba, 0x55, 0x57, 0xa7, 0xc7, 0xad, 0x8c, 0xd3, 0xe3, 0xa3, 0xf9, 0xac, 0x0e, 0x77, 0x71, 0x7c, + 0xb7, 0x0c, 0xfa, 0xfb, 0x5c, 0xe8, 0x3f, 0x1f, 0x25, 0xf0, 0xb3, 0x5c, 0xec, 0xc9, 0x2e, 0x51, + 0x07, 0x0b, 0x11, 0x92, 0x97, 0xc4, 0x7e, 0x66, 0xe3, 0x3f, 0xef, 0x12, 0x6f, 0x73, 0x2b, 0x21, + 0x6e, 0xb6, 0x63, 0x27, 0x17, 0xff, 0xf9, 0x27, 0x16, 0x8c, 0x67, 0x6a, 0x47, 0x7e, 0xa7, 0x7b, + 0x26, 0x47, 0x74, 0x6c, 0x9c, 0xca, 0xbd, 0x98, 0x32, 0x03, 0xa0, 0xfc, 0xd3, 0xd2, 0xfd, 0xc0, + 0x74, 0x31, 0xe5, 0xc0, 0x8e, 0xb1, 0x46, 0x81, 0x5e, 0x82, 0xe1, 0x24, 0x6c, 0x86, 0x7e, 0xb8, + 0xb9, 0x7b, 0x83, 0xc8, 0x6c, 0x06, 0xca, 0xb7, 0xbf, 0x96, 0xa2, 0xb0, 0x4e, 0x67, 0x7f, 0xaf, + 0x0c, 0xd9, 0xd7, 0xdd, 0xfe, 0x5c, 0x4e, 0x7f, 0x76, 0xe4, 0xf4, 0x0f, 0x2c, 0x98, 0xa0, 0xb5, + 0xb3, 0x00, 0x0f, 0x19, 0xa7, 0xa9, 0xb2, 0xc4, 0x5b, 0x87, 0x64, 0x89, 0x7f, 0x9a, 0xae, 0x76, + 0x6e, 0xd8, 0x4a, 0x84, 0xcb, 0x44, 0x5b, 0xc4, 0x28, 0x14, 0x0b, 0xac, 0xa0, 0x23, 0x51, 0x24, + 0x2e, 0xb4, 0xe8, 0x74, 0x24, 0x8a, 0xb0, 0xc0, 0xca, 0x24, 0xf2, 0x7d, 0x5d, 0x92, 0xc8, 0xb3, + 0x7c, 0x40, 0x22, 0xb0, 0x40, 0xa8, 0x03, 0x5a, 0x3e, 0x20, 0x19, 0x71, 0x90, 0xd2, 0xd8, 0xdf, + 0x2e, 0xc3, 0x48, 0x2d, 0x74, 0xd3, 0x00, 0xec, 0x17, 0x8d, 0x00, 0xec, 0x0b, 0x99, 0x00, 0xec, + 0x09, 0x9d, 0xf6, 0xe1, 0xc4, 0x5f, 0x8b, 0xbc, 0x51, 0xec, 0x99, 0x83, 0x23, 0xc6, 0x5e, 0x1b, + 0x79, 0xa3, 0x14, 0x23, 0x6c, 0xf2, 0xfd, 0xb3, 0x14, 0x73, 0xfd, 0x7f, 0x2c, 0x18, 0xab, 0x85, + 0x2e, 0x15, 0xd0, 0x3f, 0x4b, 0xd2, 0xa8, 0x67, 0x9b, 0x1a, 0x38, 0x24, 0xdb, 0xd4, 0x3f, 0xb3, + 0x60, 0xb0, 0x16, 0xba, 0x27, 0xe0, 0x4e, 0x5c, 0x32, 0xdd, 0x89, 0x4f, 0xe4, 0xae, 0xbc, 0x5d, + 0x3c, 0x88, 0xbf, 0x51, 0x86, 0x51, 0xda, 0xe2, 0x70, 0x53, 0x7e, 0x2f, 0x63, 0x6c, 0xac, 0x02, + 0x63, 0x43, 0x55, 0xc2, 0xd0, 0xf7, 0xc3, 0xfb, 0xd9, 0x6f, 0xb7, 0xc4, 0xa0, 0x58, 0x60, 0xd1, + 0x25, 0x18, 0x6a, 0x46, 0x64, 0xc7, 0x0b, 0x5b, 0x71, 0xf6, 0x72, 0x5c, 0x4d, 0xc0, 0xb1, 0xa2, + 0x40, 0x2f, 0xc2, 0x48, 0xec, 0x05, 0x0d, 0x22, 0xc3, 0x0e, 0xfa, 0x58, 0xd8, 0x01, 0x4f, 0xec, + 0xa7, 0xc1, 0xb1, 0x41, 0x85, 0xee, 0x42, 0x85, 0xfd, 0x67, 0x33, 0xa8, 0xf7, 0x2c, 0xf0, 0x3c, + 0x9b, 0x95, 0x64, 0x80, 0x53, 0x5e, 0xe8, 0x0a, 0x40, 0x22, 0x03, 0x24, 0x62, 0x91, 0x95, 0x43, + 0xe9, 0xa5, 0x2a, 0x74, 0x22, 0xc6, 0x1a, 0x15, 0x7a, 0x0e, 0x2a, 0x89, 0xe3, 0xf9, 0x2b, 0x5e, + 0x40, 0x62, 0x11, 0x60, 0x22, 0x92, 0xf4, 0x0a, 0x20, 0x4e, 0xf1, 0x74, 0xbf, 0x67, 0x57, 0x73, + 0xf9, 0x0b, 0x13, 0x43, 0x8c, 0x9a, 0xed, 0xf7, 0x2b, 0x0a, 0x8a, 0x35, 0x0a, 0xfb, 0x2a, 0x9c, + 0xad, 0x85, 0x6e, 0x2d, 0x8c, 0x92, 0xa5, 0x30, 0xba, 0xef, 0x44, 0xae, 0xfc, 0x7e, 0xd3, 0x32, + 0x37, 0x2c, 0xdd, 0x93, 0xfb, 0xb9, 0x87, 0xcd, 0xc8, 0xf5, 0xfa, 0x02, 0xdb, 0xf1, 0x7b, 0x8c, + 0xec, 0xff, 0x51, 0x09, 0x50, 0x8d, 0x85, 0x70, 0x18, 0x0f, 0x92, 0x6c, 0xc1, 0x58, 0x4c, 0x56, + 0xbc, 0xa0, 0xf5, 0x40, 0xb0, 0x2a, 0x76, 0x95, 0xa2, 0xbe, 0xa8, 0x97, 0xe1, 0xf7, 0x58, 0x4d, + 0x18, 0xce, 0xf0, 0xa5, 0x83, 0x19, 0xb5, 0x82, 0xb9, 0xf8, 0x76, 0x4c, 0x22, 0xf1, 0x00, 0x07, + 0x1b, 0x4c, 0x2c, 0x81, 0x38, 0xc5, 0x53, 0xe1, 0x61, 0x7f, 0x6e, 0x86, 0x01, 0x0e, 0xc3, 0x44, + 0x8a, 0x1b, 0x4b, 0xc8, 0xae, 0xc1, 0xb1, 0x41, 0x85, 0x96, 0x00, 0xc5, 0xad, 0x66, 0xd3, 0x67, + 0xa7, 0x62, 0x8e, 0x7f, 0x2d, 0x0a, 0x5b, 0x4d, 0x1e, 0xc5, 0x2b, 0x72, 0x99, 0xd7, 0xdb, 0xb0, + 0xb8, 0x43, 0x09, 0xba, 0x58, 0x6c, 0xc4, 0xec, 0xb7, 0xb8, 0xa7, 0xcb, 0xbd, 0x73, 0x75, 0x06, + 0xc2, 0x12, 0x67, 0x7f, 0x85, 0x6d, 0x70, 0xec, 0x65, 0x84, 0xa4, 0x15, 0x11, 0xb4, 0x0d, 0xa3, + 0x4d, 0xb6, 0x89, 0x25, 0x51, 0xe8, 0xfb, 0x44, 0xea, 0x97, 0x47, 0x0b, 0x22, 0xe1, 0xb9, 0xd0, + 0x75, 0x76, 0xd8, 0xe4, 0x6e, 0xff, 0x78, 0x98, 0xad, 0x55, 0xe2, 0x60, 0x72, 0x50, 0x84, 0x8a, + 0x0a, 0x4d, 0xee, 0x23, 0x45, 0xde, 0x38, 0x4a, 0xf7, 0x01, 0x11, 0x78, 0x8a, 0x25, 0x17, 0xf4, + 0x05, 0x16, 0x08, 0xcd, 0x17, 0x88, 0xe2, 0x4f, 0x94, 0x71, 0x7a, 0x23, 0x08, 0x5a, 0xb0, 0xc0, + 0x1a, 0x3b, 0xb4, 0x02, 0xa3, 0x22, 0x91, 0xbe, 0x70, 0x2f, 0x94, 0x0d, 0x13, 0x7b, 0x14, 0xeb, + 0xc8, 0x83, 0x2c, 0x00, 0x9b, 0x85, 0xd1, 0x26, 0x3c, 0xae, 0x3d, 0x14, 0xd3, 0x21, 0xe0, 0x89, + 0xaf, 0x3c, 0x4f, 0xec, 0xef, 0x4d, 0x3f, 0xbe, 0x76, 0x18, 0x21, 0x3e, 0x9c, 0x0f, 0xba, 0x05, + 0x67, 0x9d, 0x46, 0xe2, 0xed, 0x90, 0x2a, 0x71, 0x5c, 0xdf, 0x0b, 0x88, 0x79, 0x99, 0xfb, 0xd1, + 0xfd, 0xbd, 0xe9, 0xb3, 0x73, 0x9d, 0x08, 0x70, 0xe7, 0x72, 0xe8, 0x53, 0x50, 0x71, 0x83, 0x58, + 0x8c, 0xc1, 0x80, 0xf1, 0x2e, 0x52, 0xa5, 0x7a, 0xb3, 0xae, 0xfa, 0x9f, 0xfe, 0xc1, 0x69, 0x01, + 0xf4, 0x36, 0x7f, 0xe0, 0x5a, 0x59, 0x33, 0xfc, 0x3d, 0xae, 0x97, 0x0b, 0xd9, 0xcf, 0xc6, 0x25, + 0x0b, 0xee, 0x79, 0x53, 0x81, 0x85, 0xc6, 0xfd, 0x0b, 0xa3, 0x0a, 0xf4, 0x59, 0x40, 0x31, 0x89, + 0x76, 0xbc, 0x06, 0x99, 0x6b, 0xb0, 0x6c, 0x98, 0xec, 0x88, 0x6f, 0xc8, 0x88, 0xae, 0x47, 0xf5, + 0x36, 0x0a, 0xdc, 0xa1, 0x14, 0xba, 0x4e, 0x57, 0x1e, 0x1d, 0x2a, 0xe2, 0x40, 0xa5, 0x62, 0x38, + 0x59, 0x25, 0xcd, 0x88, 0x34, 0x9c, 0x84, 0xb8, 0x26, 0x47, 0x9c, 0x29, 0x47, 0xf7, 0x25, 0x95, + 0xf0, 0x1c, 0xcc, 0xe8, 0xc5, 0xf6, 0xa4, 0xe7, 0xd4, 0xce, 0xda, 0x0a, 0xe3, 0xe4, 0x26, 0x49, + 0xee, 0x87, 0xd1, 0x3d, 0xe6, 0xb1, 0x1f, 0xd2, 0x92, 0x8b, 0xa5, 0x28, 0xac, 0xd3, 0x51, 0x1d, + 0x8a, 0x1d, 0x15, 0x2d, 0x57, 0x99, 0x1f, 0x7e, 0x28, 0x9d, 0x3b, 0xd7, 0x39, 0x18, 0x4b, 0xbc, + 0x24, 0x5d, 0xae, 0x2d, 0x30, 0x9f, 0x7a, 0x86, 0x74, 0xb9, 0xb6, 0x80, 0x25, 0x1e, 0x85, 0xed, + 0xaf, 0x4f, 0x8d, 0x15, 0x39, 0xdf, 0x68, 0x5f, 0xc9, 0x0b, 0x3e, 0x40, 0xf5, 0x00, 0x26, 0xd4, + 0x0b, 0x58, 0x3c, 0xeb, 0x63, 0x3c, 0x39, 0x5e, 0xe4, 0x79, 0xed, 0x8e, 0xc9, 0x23, 0x55, 0xe0, + 0xef, 0x72, 0x86, 0x27, 0x6e, 0xab, 0xc5, 0x48, 0x4a, 0x30, 0x91, 0x9b, 0xc4, 0x7e, 0x16, 0x2a, + 0x71, 0x6b, 0xdd, 0x0d, 0xb7, 0x1d, 0x2f, 0x60, 0x8e, 0x6f, 0xfd, 0xb1, 0x68, 0x89, 0xc0, 0x29, + 0x0d, 0xaa, 0xc1, 0x90, 0x23, 0xdf, 0x49, 0x47, 0x45, 0x2e, 0x2d, 0xab, 0x07, 0xd2, 0x99, 0x57, + 0x54, 0xbd, 0x8c, 0xae, 0xb8, 0xa0, 0x57, 0x60, 0x54, 0xdc, 0xba, 0x21, 0x11, 0x6b, 0xf5, 0x69, + 0x33, 0xe4, 0xbb, 0x2e, 0x91, 0x4c, 0xc0, 0x4c, 0xda, 0xa9, 0x4f, 0xc3, 0xa9, 0xb6, 0x29, 0xd6, + 0x53, 0xe0, 0xdc, 0x7f, 0xe8, 0x83, 0x8a, 0xf2, 0x50, 0xa1, 0x59, 0xd3, 0x19, 0xf9, 0x68, 0xd6, + 0x19, 0x39, 0x44, 0x15, 0x02, 0xdd, 0xff, 0xf8, 0xc5, 0x0e, 0x8f, 0xd5, 0x3e, 0x9b, 0x2b, 0x53, + 0xc5, 0xef, 0xb1, 0xf4, 0xf0, 0xa4, 0x6f, 0x6a, 0xa5, 0xf4, 0x1d, 0x6a, 0xa5, 0x14, 0x7c, 0x97, + 0x8a, 0xda, 0x23, 0xcd, 0xd0, 0x5d, 0xae, 0x65, 0x9f, 0x5d, 0xa9, 0x51, 0x20, 0xe6, 0x38, 0xa6, + 0x47, 0xd2, 0x3d, 0x82, 0xe9, 0x91, 0x83, 0x47, 0xd4, 0x23, 0x25, 0x03, 0x9c, 0xf2, 0x42, 0x3b, + 0x70, 0xaa, 0x61, 0xbe, 0xa2, 0xa3, 0x6e, 0xa7, 0x3c, 0xdf, 0xc3, 0x2b, 0x36, 0x2d, 0xed, 0xc5, + 0x80, 0x85, 0x2c, 0x3f, 0xdc, 0x5e, 0x05, 0x7a, 0x05, 0x86, 0xde, 0x0e, 0xe3, 0x05, 0xdf, 0x89, + 0x63, 0xb1, 0x50, 0xca, 0x9b, 0x00, 0x43, 0xaf, 0xdd, 0xaa, 0x33, 0xf8, 0xc1, 0xde, 0xf4, 0x70, + 0x2d, 0x74, 0xe5, 0x5f, 0xac, 0x0a, 0xd8, 0xbf, 0xc3, 0xbd, 0x61, 0xc2, 0x3e, 0x26, 0x71, 0xcb, + 0x3f, 0x89, 0xc4, 0xd9, 0xb7, 0x0c, 0xd3, 0xfd, 0x21, 0xf8, 0x63, 0xff, 0x93, 0xc5, 0xfc, 0xb1, + 0x6b, 0x64, 0xbb, 0xe9, 0x3b, 0xc9, 0x49, 0x84, 0x34, 0x7e, 0x01, 0x86, 0x12, 0x51, 0x5b, 0xb1, + 0xac, 0xdf, 0x5a, 0xf3, 0x98, 0x9f, 0x5a, 0xad, 0x71, 0x12, 0x8a, 0x15, 0x43, 0xfb, 0xdf, 0xf0, + 0xaf, 0x22, 0x31, 0x27, 0x60, 0x74, 0xde, 0x34, 0x8d, 0xce, 0x67, 0x0a, 0xf7, 0xa5, 0x8b, 0xf1, + 0xf9, 0x3d, 0xb3, 0x07, 0x4c, 0x15, 0xfd, 0xd9, 0x39, 0x30, 0xb0, 0x6f, 0x81, 0xf9, 0xda, 0x10, + 0x7a, 0x95, 0x07, 0x09, 0xf3, 0x45, 0xf6, 0x52, 0xcf, 0x01, 0xc2, 0xf6, 0xaf, 0x97, 0xe0, 0x0c, + 0x77, 0x19, 0xce, 0xed, 0x84, 0x9e, 0x5b, 0x0b, 0x5d, 0x11, 0x32, 0xed, 0xc2, 0x48, 0x53, 0x33, + 0x15, 0x8a, 0xe5, 0x83, 0xd0, 0x8d, 0x8b, 0x54, 0x3d, 0xd3, 0xa1, 0xd8, 0xe0, 0x4a, 0x6b, 0x21, + 0x3b, 0x5e, 0x43, 0x79, 0xa0, 0x4a, 0x3d, 0xaf, 0x7b, 0xaa, 0x96, 0x45, 0x8d, 0x0f, 0x36, 0xb8, + 0x1e, 0x43, 0x82, 0x7a, 0xfb, 0x1f, 0x58, 0xf0, 0x48, 0x97, 0x9c, 0x11, 0xb4, 0xba, 0xfb, 0xcc, + 0x4d, 0x2b, 0x9e, 0xb3, 0x52, 0xd5, 0x71, 0xe7, 0x2d, 0x16, 0x58, 0xb4, 0x0e, 0xc0, 0x9d, 0xaf, + 0xec, 0x71, 0xe3, 0x52, 0x91, 0x58, 0x89, 0xb6, 0xbb, 0xd9, 0xda, 0xb5, 0x5d, 0xf5, 0x9c, 0xb1, + 0xc6, 0xd5, 0xfe, 0x56, 0x19, 0xfa, 0xf9, 0xab, 0xa9, 0x35, 0x18, 0xdc, 0xe2, 0x99, 0x2b, 0x7b, + 0x4b, 0x9c, 0x99, 0xaa, 0x82, 0x1c, 0x80, 0x25, 0x1b, 0xb4, 0x0a, 0xa7, 0xa9, 0xde, 0xe1, 0x39, + 0x7e, 0x95, 0xf8, 0xce, 0xae, 0xb4, 0x2d, 0x78, 0xd6, 0x72, 0x99, 0x60, 0xf7, 0xf4, 0x72, 0x3b, + 0x09, 0xee, 0x54, 0x0e, 0xbd, 0xda, 0x96, 0x72, 0x8a, 0x67, 0x04, 0x55, 0xb7, 0xbd, 0x0e, 0x4f, + 0x3b, 0x45, 0xb5, 0x9f, 0x66, 0x9b, 0x15, 0xa5, 0x3d, 0x4e, 0x69, 0x5a, 0x4e, 0x26, 0x2d, 0xaa, + 0xc2, 0x44, 0xdc, 0x62, 0x27, 0xd7, 0x6b, 0x5b, 0x11, 0x89, 0xb7, 0x42, 0xdf, 0x15, 0xef, 0xaa, + 0x29, 0x8d, 0xb1, 0x9e, 0xc1, 0xe3, 0xb6, 0x12, 0x94, 0xcb, 0x86, 0xe3, 0xf9, 0xad, 0x88, 0xa4, + 0x5c, 0x06, 0x4c, 0x2e, 0x4b, 0x19, 0x3c, 0x6e, 0x2b, 0x61, 0xff, 0xb1, 0x05, 0xa7, 0x3b, 0x84, + 0x77, 0xf0, 0xa0, 0xc3, 0x4d, 0x2f, 0x4e, 0x54, 0x6e, 0x6a, 0x2d, 0xe8, 0x90, 0xc3, 0xb1, 0xa2, + 0xa0, 0x52, 0xc8, 0x4d, 0xe3, 0xec, 0xb1, 0xa9, 0x38, 0xc0, 0x16, 0xd8, 0xde, 0x12, 0x48, 0xa1, + 0x0b, 0xd0, 0xd7, 0x8a, 0x49, 0x24, 0x9f, 0x69, 0x92, 0x4b, 0x14, 0xf3, 0x86, 0x30, 0x0c, 0x55, + 0x76, 0x36, 0x95, 0x23, 0x42, 0x53, 0x76, 0xb8, 0x2b, 0x82, 0xe3, 0xec, 0x6f, 0x94, 0x61, 0x3c, + 0x13, 0xe6, 0x45, 0x1b, 0xb2, 0x1d, 0x06, 0x5e, 0x12, 0xaa, 0xa4, 0x45, 0xfc, 0x65, 0x18, 0xd2, + 0xdc, 0x5a, 0x15, 0x70, 0xac, 0x28, 0xd0, 0xd3, 0xe6, 0x13, 0xd6, 0x69, 0x9b, 0xe7, 0xab, 0xc6, + 0x6b, 0x76, 0x45, 0xf3, 0xe5, 0x3f, 0x09, 0x7d, 0xcd, 0x50, 0xbd, 0x4c, 0xaa, 0x84, 0x1e, 0xcf, + 0x57, 0x6b, 0x61, 0xe8, 0x63, 0x86, 0x44, 0x4f, 0x89, 0xde, 0x67, 0xfc, 0xb7, 0xd8, 0x71, 0xc3, + 0x58, 0x1b, 0x82, 0x67, 0x60, 0xf0, 0x1e, 0xd9, 0x8d, 0xbc, 0x60, 0x33, 0xeb, 0xbd, 0xbe, 0xc1, + 0xc1, 0x58, 0xe2, 0xcd, 0x9c, 0xf8, 0x83, 0xc7, 0x9c, 0x13, 0x7f, 0x28, 0x37, 0x52, 0xf5, 0x37, + 0x2c, 0x18, 0x67, 0x99, 0xfc, 0xc4, 0x45, 0x5a, 0x2f, 0x0c, 0x4e, 0x60, 0x7b, 0x7c, 0x12, 0xfa, + 0x23, 0x5a, 0x69, 0x36, 0xad, 0x35, 0x6b, 0x09, 0xe6, 0x38, 0xf4, 0x18, 0xf4, 0xb1, 0x26, 0xd0, + 0xcf, 0x38, 0xc2, 0xd3, 0x04, 0x57, 0x9d, 0xc4, 0xc1, 0x0c, 0xca, 0x6e, 0x45, 0x60, 0xd2, 0xf4, + 0x3d, 0xde, 0xe8, 0xd4, 0xe9, 0xf4, 0x41, 0xbb, 0x15, 0xd1, 0xb1, 0x91, 0x0f, 0xeb, 0x56, 0x44, + 0x67, 0xe6, 0x87, 0xab, 0xa8, 0xff, 0xb3, 0x04, 0xe7, 0x3b, 0x96, 0x4b, 0xcf, 0xc1, 0x96, 0x8c, + 0x73, 0xb0, 0x2b, 0x99, 0x73, 0x30, 0xfb, 0xf0, 0xd2, 0x0f, 0xe7, 0x64, 0xac, 0xf3, 0x81, 0x55, + 0xf9, 0x04, 0x0f, 0xac, 0xfa, 0x8a, 0xaa, 0x0e, 0xfd, 0x39, 0xaa, 0xc3, 0xef, 0x5b, 0xf0, 0x68, + 0xc7, 0x21, 0xfb, 0xc0, 0x5d, 0x43, 0xe9, 0xd8, 0xca, 0x2e, 0x8a, 0xf5, 0x2f, 0x97, 0xbb, 0xf4, + 0x8a, 0xa9, 0xd8, 0x17, 0xe9, 0x2a, 0xc4, 0x90, 0xb1, 0x50, 0x8a, 0x46, 0xf8, 0x0a, 0xc4, 0x61, + 0x58, 0x61, 0x51, 0xac, 0x5d, 0xe3, 0xe0, 0x8d, 0x5c, 0x3c, 0xe2, 0x84, 0x9a, 0x31, 0xbd, 0x85, + 0xfa, 0xfd, 0xe0, 0xcc, 0xe5, 0x0e, 0x74, 0x57, 0x33, 0x9a, 0xca, 0x47, 0x31, 0x9a, 0x46, 0x3a, + 0x1b, 0x4c, 0x68, 0x0e, 0xc6, 0xb7, 0xbd, 0x80, 0x3d, 0xa5, 0x67, 0x6a, 0x25, 0xea, 0x2e, 0xdd, + 0xaa, 0x89, 0xc6, 0x59, 0xfa, 0xa9, 0x57, 0x60, 0xf4, 0xe8, 0x3e, 0x99, 0xf7, 0xca, 0xf0, 0xe1, + 0x43, 0x16, 0x05, 0xbe, 0x3b, 0x18, 0xdf, 0x45, 0xdb, 0x1d, 0xda, 0xbe, 0x4d, 0x0d, 0xce, 0x6c, + 0xb4, 0x7c, 0x7f, 0x97, 0x45, 0x91, 0x10, 0x57, 0x52, 0x08, 0x8d, 0x4f, 0x3d, 0x72, 0xbb, 0xd4, + 0x81, 0x06, 0x77, 0x2c, 0x89, 0x3e, 0x0b, 0x28, 0x5c, 0x67, 0xb9, 0x2e, 0xdd, 0xf4, 0xfe, 0x33, + 0xfb, 0x04, 0xe5, 0x74, 0xaa, 0xde, 0x6a, 0xa3, 0xc0, 0x1d, 0x4a, 0x51, 0xfd, 0x8f, 0xbd, 0x8f, + 0xab, 0x9a, 0x95, 0xd1, 0xff, 0xb0, 0x8e, 0xc4, 0x26, 0x2d, 0xba, 0x06, 0xa7, 0x9c, 0x1d, 0xc7, + 0xe3, 0xd9, 0x6b, 0x24, 0x03, 0xae, 0x00, 0x2a, 0xaf, 0xc7, 0x5c, 0x96, 0x00, 0xb7, 0x97, 0x41, + 0x4d, 0xc3, 0x8d, 0xc5, 0x73, 0x5b, 0x7f, 0xea, 0x08, 0x12, 0x5c, 0xd8, 0xb1, 0x65, 0xff, 0xd8, + 0xa2, 0x5b, 0x5f, 0x87, 0x57, 0xd7, 0x8c, 0xe7, 0xda, 0xb5, 0xab, 0x2d, 0xed, 0xcf, 0xb5, 0x73, + 0x7f, 0xa0, 0x41, 0xcb, 0x45, 0x23, 0x4e, 0x83, 0x51, 0x0d, 0x6d, 0x53, 0xdc, 0xe8, 0x52, 0x14, + 0xe8, 0x2e, 0x0c, 0xba, 0xde, 0x8e, 0x17, 0x87, 0x51, 0x81, 0x07, 0x92, 0xdb, 0x02, 0x1c, 0xd3, + 0xd5, 0xb2, 0xca, 0x99, 0x60, 0xc9, 0xcd, 0xfe, 0x95, 0x12, 0x8c, 0xca, 0xfa, 0x5e, 0x6b, 0x85, + 0x89, 0x73, 0x02, 0x1b, 0xfa, 0x6b, 0xc6, 0x86, 0x3e, 0x5b, 0xec, 0x7a, 0x1b, 0x6b, 0x5c, 0xd7, + 0x8d, 0xfc, 0x73, 0x99, 0x8d, 0xfc, 0x72, 0x2f, 0x4c, 0x0f, 0xdf, 0xc0, 0xff, 0x9d, 0x05, 0xa7, + 0x0c, 0xfa, 0x13, 0xd8, 0x47, 0x6a, 0xe6, 0x3e, 0xf2, 0x5c, 0x0f, 0xbd, 0xe9, 0xb2, 0x7f, 0x7c, + 0xab, 0x94, 0xe9, 0x05, 0xdb, 0x37, 0xbe, 0x0c, 0x7d, 0x5b, 0x4e, 0xe4, 0x16, 0x4b, 0xe3, 0xd6, + 0x56, 0x7c, 0xe6, 0xba, 0x13, 0xb9, 0x7c, 0xf5, 0xbf, 0xa4, 0xde, 0x84, 0x71, 0x22, 0x37, 0x37, + 0x42, 0x9b, 0x55, 0x8a, 0xae, 0xc2, 0x40, 0xdc, 0x08, 0x9b, 0x2a, 0x16, 0xee, 0x02, 0x7f, 0x2f, + 0x86, 0x42, 0x0e, 0xf6, 0xa6, 0x91, 0x59, 0x1d, 0x05, 0x63, 0x41, 0x3f, 0x45, 0xa0, 0xa2, 0xaa, + 0x3e, 0xc6, 0x58, 0xe0, 0xf7, 0xca, 0x70, 0xba, 0x83, 0xa4, 0xa0, 0xaf, 0x18, 0xa3, 0xf6, 0x4a, + 0xcf, 0xa2, 0xf6, 0x3e, 0xc7, 0xed, 0x2b, 0xcc, 0x4a, 0x72, 0x85, 0x6c, 0x1c, 0xa1, 0xfa, 0xdb, + 0x31, 0xc9, 0x56, 0x4f, 0x41, 0xf9, 0xd5, 0xd3, 0x6a, 0x4f, 0x68, 0xf0, 0x69, 0x35, 0xaa, 0x9d, + 0xc7, 0xf8, 0x8d, 0xdf, 0xed, 0x83, 0x33, 0x9d, 0x6e, 0xd0, 0xa2, 0x5f, 0xb4, 0x32, 0x59, 0xda, + 0x5f, 0xed, 0xfd, 0x1a, 0x2e, 0x4f, 0xdd, 0x2e, 0xb2, 0x4e, 0xcc, 0x98, 0x79, 0xdb, 0x73, 0x47, + 0x5b, 0xd4, 0xce, 0x6e, 0x55, 0x44, 0x3c, 0xdf, 0xbe, 0x5c, 0x0f, 0x3e, 0x73, 0x84, 0xa6, 0x88, + 0x94, 0xfd, 0x71, 0xe6, 0x56, 0x85, 0x04, 0xe7, 0xdf, 0xaa, 0x90, 0x6d, 0x98, 0xda, 0x84, 0x61, + 0xad, 0x5f, 0xc7, 0x28, 0x02, 0x1e, 0xdd, 0x9a, 0xb4, 0x56, 0x1f, 0xa3, 0x18, 0xfc, 0x6d, 0x0b, + 0x32, 0xe1, 0x2a, 0xca, 0x15, 0x63, 0x75, 0x75, 0xc5, 0x5c, 0x80, 0xbe, 0x28, 0xf4, 0x49, 0x36, + 0x7b, 0x38, 0x0e, 0x7d, 0x82, 0x19, 0x46, 0x3d, 0x0d, 0x59, 0xee, 0xf6, 0x34, 0x24, 0xb5, 0xcd, + 0x7d, 0xb2, 0x43, 0xa4, 0x63, 0x44, 0x2d, 0xde, 0x2b, 0x14, 0x88, 0x39, 0xce, 0xfe, 0xbd, 0x32, + 0x0c, 0x70, 0xef, 0xc3, 0x09, 0xec, 0xce, 0x35, 0xe1, 0x08, 0x28, 0x74, 0xab, 0x95, 0xb7, 0x6a, + 0xa6, 0xea, 0x24, 0x0e, 0x17, 0x2c, 0xd5, 0xc7, 0xd4, 0x79, 0x80, 0x66, 0x8c, 0x51, 0x98, 0xca, + 0xd8, 0xb7, 0xc0, 0x79, 0x68, 0x63, 0xb2, 0x05, 0x10, 0xb3, 0xc7, 0xc8, 0x28, 0x0f, 0x91, 0x73, + 0xef, 0xc5, 0x42, 0xed, 0xa8, 0xab, 0x62, 0xbc, 0x35, 0x69, 0xb2, 0x2f, 0x85, 0xc0, 0x1a, 0xef, + 0xa9, 0x97, 0xa1, 0xa2, 0x88, 0xf3, 0x14, 0xff, 0x11, 0x5d, 0x34, 0xff, 0x02, 0x8c, 0x67, 0xea, + 0xea, 0xc9, 0x6e, 0xf8, 0x6d, 0x0b, 0xc6, 0x33, 0xaf, 0x28, 0xa3, 0x77, 0x2d, 0x38, 0xe3, 0x77, + 0x70, 0x3e, 0x89, 0xcf, 0x7c, 0x14, 0xb7, 0x95, 0x32, 0x19, 0x3a, 0x61, 0x71, 0xc7, 0xda, 0xa8, + 0x29, 0xc9, 0x5f, 0x56, 0x74, 0x7c, 0x11, 0xfd, 0x37, 0xc2, 0x13, 0x84, 0x72, 0x18, 0x56, 0x58, + 0xfb, 0x27, 0x16, 0x9c, 0x6a, 0x7b, 0xa8, 0xf7, 0x83, 0xd2, 0x0d, 0x91, 0x0a, 0xb5, 0xd4, 0x25, + 0x15, 0xaa, 0xde, 0xcb, 0xf2, 0xa1, 0xbd, 0xfc, 0x75, 0x0b, 0x84, 0x84, 0x9e, 0x80, 0xde, 0xb7, + 0x6c, 0xea, 0x7d, 0x1f, 0x29, 0x22, 0xf4, 0x5d, 0x14, 0xbe, 0x3f, 0xb5, 0x00, 0x71, 0x82, 0xec, + 0x13, 0x8c, 0xdc, 0x79, 0xa9, 0x19, 0x2c, 0xe9, 0x2c, 0x51, 0x18, 0xac, 0x51, 0xf5, 0x98, 0x4f, + 0x5f, 0x3d, 0x5d, 0xd6, 0xb9, 0x61, 0xe8, 0x32, 0x0c, 0x8b, 0xa7, 0x8b, 0x56, 0xd3, 0x67, 0xc9, + 0xc6, 0xd9, 0x03, 0x99, 0x29, 0x18, 0xeb, 0x34, 0xc6, 0xd7, 0xea, 0x3b, 0xf4, 0x6b, 0xfd, 0x4e, + 0x19, 0xb2, 0x21, 0x2f, 0xe8, 0x2d, 0x18, 0x69, 0x38, 0x4d, 0x67, 0xdd, 0xf3, 0xbd, 0xc4, 0x23, + 0x71, 0xb1, 0xa3, 0xb6, 0x05, 0xad, 0x84, 0x70, 0x94, 0x6b, 0x10, 0x6c, 0x70, 0x44, 0x33, 0x00, + 0xcd, 0xc8, 0xdb, 0xf1, 0x7c, 0xb2, 0xc9, 0xf4, 0x32, 0x16, 0x33, 0xcb, 0x4f, 0x8d, 0x24, 0x14, + 0x6b, 0x14, 0x1d, 0x62, 0x2c, 0xcb, 0x27, 0x11, 0x63, 0xd9, 0xd7, 0x63, 0x8c, 0x65, 0x7f, 0xa1, + 0x18, 0x4b, 0x0c, 0xe7, 0xa4, 0x7f, 0x9b, 0xfe, 0x5f, 0xf2, 0x7c, 0xc2, 0xd3, 0x29, 0x8a, 0x98, + 0xda, 0xa9, 0xfd, 0xbd, 0xe9, 0x73, 0xb8, 0x23, 0x05, 0xee, 0x52, 0xd2, 0x6e, 0xc1, 0xe9, 0x3a, + 0x89, 0x3c, 0x96, 0xe5, 0xca, 0x4d, 0x27, 0xf5, 0x17, 0xa1, 0x12, 0x65, 0xd6, 0x93, 0x1e, 0x2f, + 0x3c, 0x6a, 0x79, 0x51, 0xe4, 0xfa, 0x91, 0xb2, 0xb4, 0xff, 0x6a, 0x09, 0x06, 0x45, 0x68, 0xd9, + 0x09, 0x6c, 0xb4, 0x37, 0x0c, 0x33, 0xf8, 0x99, 0xbc, 0xb9, 0xce, 0x9a, 0xd5, 0xd5, 0x00, 0xae, + 0x67, 0x0c, 0xe0, 0xe7, 0x8a, 0xb1, 0x3b, 0xdc, 0xf4, 0xfd, 0x41, 0x09, 0xc6, 0xcc, 0x50, 0xbb, + 0x13, 0x18, 0x96, 0xd7, 0x61, 0x30, 0x16, 0x71, 0x68, 0xa5, 0x22, 0x51, 0x34, 0xd9, 0x4f, 0xac, + 0x7c, 0x1d, 0x32, 0xf2, 0x4c, 0xb2, 0xeb, 0x18, 0xea, 0x56, 0x3e, 0x89, 0x50, 0x37, 0xfb, 0xfb, + 0x6c, 0x31, 0xd6, 0x07, 0xf2, 0x04, 0x36, 0x93, 0xd7, 0xcc, 0x65, 0xfb, 0x52, 0x21, 0x89, 0x10, + 0xcd, 0xeb, 0xb2, 0xa9, 0x7c, 0xc7, 0x82, 0x61, 0x41, 0x78, 0x02, 0x1d, 0xf8, 0xac, 0xd9, 0x81, + 0xa7, 0x0a, 0x75, 0xa0, 0x4b, 0xcb, 0xff, 0x6e, 0x49, 0xb5, 0xbc, 0x26, 0x9e, 0xb4, 0xcd, 0xcd, + 0xb6, 0x39, 0xd4, 0x8c, 0xc2, 0x24, 0x6c, 0x84, 0xbe, 0x50, 0x23, 0x1e, 0x4b, 0x2f, 0x37, 0x70, + 0xf8, 0x81, 0xf6, 0x1b, 0x2b, 0x6a, 0x16, 0x7b, 0x1f, 0x46, 0x89, 0xd8, 0xda, 0x3a, 0x3d, 0xa8, + 0xbb, 0x2e, 0x1f, 0x2c, 0xa7, 0x30, 0x71, 0x2f, 0xa8, 0xd7, 0x87, 0x7a, 0xd3, 0xbb, 0x0a, 0x8a, + 0x13, 0xd6, 0xb8, 0xca, 0x20, 0x58, 0x56, 0x43, 0xbf, 0xe9, 0x7b, 0xbe, 0x29, 0xe0, 0x58, 0x51, + 0xd8, 0x2f, 0xb3, 0x15, 0x97, 0x0d, 0x4f, 0x6f, 0xd7, 0x08, 0xfe, 0xca, 0x80, 0x1a, 0x58, 0xe6, + 0x52, 0xba, 0xa9, 0x5f, 0x56, 0x28, 0xba, 0xac, 0xd1, 0x26, 0xe8, 0x71, 0x7b, 0xe9, 0xdd, 0x06, + 0x44, 0xda, 0x0e, 0x2c, 0x5e, 0x2e, 0xbc, 0x52, 0xf6, 0x70, 0x44, 0xc1, 0x52, 0x14, 0xb1, 0xbc, + 0x2c, 0xcb, 0xb5, 0x6c, 0x86, 0xd4, 0x05, 0x89, 0xc0, 0x29, 0x0d, 0x9a, 0x15, 0x46, 0x8d, 0xf9, + 0xde, 0xb1, 0x34, 0x6a, 0xe4, 0x90, 0x68, 0x56, 0xcd, 0x65, 0x18, 0x56, 0x39, 0xe2, 0x6b, 0x3c, + 0xd5, 0x77, 0x85, 0xeb, 0x3d, 0x8b, 0x29, 0x18, 0xeb, 0x34, 0x68, 0x19, 0x4e, 0xbb, 0x2a, 0xe6, + 0xb9, 0xd6, 0x5a, 0xf7, 0xbd, 0x06, 0x2d, 0xca, 0xef, 0x2b, 0x3d, 0xb2, 0xbf, 0x37, 0x7d, 0xba, + 0xda, 0x8e, 0xc6, 0x9d, 0xca, 0xa0, 0x35, 0x18, 0x8f, 0x79, 0x2e, 0x7c, 0x19, 0xd8, 0x2a, 0x12, + 0x07, 0x3e, 0x2b, 0x4f, 0x4a, 0xea, 0x26, 0xfa, 0x80, 0x81, 0xf8, 0x9a, 0x20, 0x43, 0x61, 0xb3, + 0x2c, 0xd0, 0xab, 0x30, 0xe6, 0xeb, 0xcf, 0x7c, 0xd5, 0x44, 0xe8, 0xb7, 0x8a, 0x29, 0x31, 0x1e, + 0x01, 0xab, 0xe1, 0x0c, 0x35, 0x7a, 0x1d, 0x26, 0x75, 0x88, 0xc8, 0x9f, 0xe0, 0x04, 0x9b, 0x24, + 0x16, 0x49, 0xb8, 0x1f, 0xdb, 0xdf, 0x9b, 0x9e, 0x5c, 0xe9, 0x42, 0x83, 0xbb, 0x96, 0x46, 0x57, + 0x61, 0x44, 0x8e, 0xa4, 0x16, 0x06, 0x9e, 0x46, 0x33, 0x69, 0x38, 0x6c, 0x50, 0xbe, 0xbf, 0x03, + 0xa1, 0x2f, 0xd3, 0xc2, 0xda, 0xd6, 0x8a, 0xbe, 0x04, 0x23, 0x7a, 0x1b, 0xb3, 0x7b, 0x66, 0xfe, + 0xd3, 0x69, 0x62, 0x8b, 0x56, 0x2d, 0xd7, 0x71, 0xd8, 0xe0, 0x6d, 0xdf, 0x82, 0x81, 0xfa, 0x6e, + 0xdc, 0x48, 0xfc, 0x87, 0xf5, 0xd4, 0x75, 0x03, 0xc6, 0x33, 0x6f, 0x42, 0xab, 0xc7, 0xc5, 0xad, + 0x87, 0xf5, 0xb8, 0xb8, 0xfd, 0x55, 0x0b, 0xfa, 0xd7, 0x1c, 0x2f, 0xff, 0xf9, 0x8a, 0x22, 0x4d, + 0x46, 0x2f, 0xc1, 0x00, 0xd9, 0xd8, 0x20, 0x0d, 0xf9, 0x58, 0xf9, 0xe3, 0x52, 0xb5, 0x59, 0x64, + 0x50, 0x3a, 0x35, 0x59, 0x65, 0xfc, 0x2f, 0x16, 0xc4, 0xf6, 0x7f, 0xb4, 0x00, 0xd6, 0x42, 0x5f, + 0x9e, 0x75, 0xe5, 0xb4, 0x64, 0xbe, 0xed, 0x21, 0x8d, 0xa7, 0x3b, 0x3c, 0xa4, 0x81, 0x52, 0x86, + 0x1d, 0x9e, 0xd1, 0x50, 0xbd, 0x29, 0x17, 0xea, 0x4d, 0x5f, 0x2f, 0xbd, 0xf9, 0xba, 0x05, 0x22, + 0x0c, 0xa9, 0x80, 0x24, 0xb8, 0x32, 0xf9, 0xbd, 0x91, 0x19, 0xe5, 0xd9, 0x22, 0xd7, 0x85, 0x44, + 0x3e, 0x14, 0x25, 0x9b, 0x46, 0x16, 0x14, 0x83, 0xab, 0xfd, 0x9b, 0x16, 0x0c, 0x73, 0xf4, 0x2a, + 0xd3, 0x23, 0xf3, 0xdb, 0xd5, 0x53, 0x0e, 0x38, 0x96, 0x1b, 0x9e, 0x32, 0x56, 0xb9, 0xc0, 0xf4, + 0xdc, 0xf0, 0x12, 0x81, 0x53, 0x1a, 0xf4, 0x0c, 0x0c, 0xc6, 0xad, 0x75, 0x46, 0x9e, 0x89, 0x49, + 0xaa, 0x73, 0x30, 0x96, 0x78, 0xfb, 0x17, 0x10, 0x18, 0x5d, 0x33, 0xf2, 0x8e, 0x59, 0x0f, 0x3d, + 0xef, 0xd8, 0x1b, 0x30, 0x44, 0xb6, 0x9b, 0xc9, 0x6e, 0xd5, 0x8b, 0x8a, 0x65, 0x80, 0x5c, 0x14, + 0xd4, 0xed, 0xdc, 0x25, 0x06, 0x2b, 0x8e, 0x5d, 0xb2, 0xc8, 0x95, 0x3f, 0x10, 0x59, 0xe4, 0xfa, + 0x7e, 0x2a, 0x59, 0xe4, 0x5e, 0x87, 0xc1, 0x4d, 0x2f, 0xc1, 0xa4, 0x19, 0x8a, 0xfb, 0xa5, 0x39, + 0x87, 0x87, 0xd7, 0x38, 0x71, 0x7b, 0x6a, 0x28, 0x81, 0xc0, 0x92, 0x1d, 0x5a, 0x83, 0x01, 0x6e, + 0x7b, 0x88, 0xc4, 0x6c, 0x1f, 0x2b, 0xe2, 0xcf, 0x69, 0xcf, 0x51, 0x26, 0x02, 0xcf, 0x04, 0x2f, + 0x99, 0x35, 0x6e, 0xf0, 0xfd, 0x67, 0x8d, 0x53, 0xb9, 0xde, 0x86, 0x1e, 0x56, 0xae, 0x37, 0x23, + 0x67, 0x5e, 0xe5, 0x38, 0x72, 0xe6, 0x7d, 0xdd, 0x82, 0xb3, 0xcd, 0x4e, 0x19, 0x27, 0x45, 0xd6, + 0xb6, 0x4f, 0x1f, 0x21, 0x03, 0xa7, 0x51, 0x35, 0xbb, 0xb5, 0xd7, 0x91, 0x0c, 0x77, 0xae, 0x58, + 0x26, 0xdf, 0x1b, 0x7e, 0xff, 0xc9, 0xf7, 0x8e, 0x3b, 0xbd, 0x5b, 0x9a, 0x8a, 0x6f, 0xf4, 0x58, + 0x52, 0xf1, 0x8d, 0x3d, 0xc4, 0x54, 0x7c, 0x5a, 0x12, 0xbd, 0xf1, 0x87, 0x9b, 0x44, 0x6f, 0x0b, + 0x86, 0xdd, 0xf0, 0x7e, 0x70, 0xdf, 0x89, 0xdc, 0xb9, 0xda, 0xb2, 0xc8, 0xd9, 0x96, 0x93, 0x18, + 0xa4, 0x9a, 0x16, 0x30, 0x6a, 0xe0, 0x8e, 0xcb, 0x14, 0x89, 0x75, 0xd6, 0x22, 0x9d, 0xe0, 0xa9, + 0xf7, 0x99, 0x4e, 0xd0, 0x48, 0xca, 0x87, 0x8e, 0x23, 0x29, 0xdf, 0x5b, 0x2c, 0x43, 0xc0, 0x86, + 0xb7, 0xb9, 0xea, 0x34, 0xd9, 0xad, 0xb6, 0xdc, 0x1a, 0x16, 0x24, 0x79, 0x7b, 0x0d, 0x0a, 0x85, + 0x53, 0xa6, 0xed, 0x69, 0xff, 0xce, 0x9c, 0x74, 0xda, 0xbf, 0xb3, 0xc7, 0x98, 0xf6, 0xef, 0xdc, + 0x89, 0xa6, 0xfd, 0x7b, 0xe4, 0xa7, 0x92, 0xf6, 0xef, 0x2f, 0xc1, 0xf9, 0xc3, 0x3f, 0x47, 0x9a, + 0x56, 0xba, 0x96, 0xba, 0x0c, 0x32, 0x69, 0xa5, 0x99, 0xaa, 0xa3, 0x51, 0x15, 0xce, 0x3e, 0xf6, + 0x6d, 0x0b, 0x1e, 0xe9, 0x92, 0x9c, 0xa7, 0xf0, 0x85, 0x90, 0x26, 0x8c, 0x37, 0xcd, 0xa2, 0x85, + 0xaf, 0x70, 0x19, 0xc9, 0x80, 0x54, 0x70, 0x61, 0x06, 0x81, 0xb3, 0xec, 0xe7, 0x3f, 0xf2, 0xc3, + 0xf7, 0xce, 0x7f, 0xe8, 0x47, 0xef, 0x9d, 0xff, 0xd0, 0x1f, 0xbe, 0x77, 0xfe, 0x43, 0x3f, 0xb7, + 0x7f, 0xde, 0xfa, 0xe1, 0xfe, 0x79, 0xeb, 0x47, 0xfb, 0xe7, 0xad, 0x3f, 0xde, 0x3f, 0x6f, 0x7d, + 0xfd, 0x27, 0xe7, 0x3f, 0xf4, 0xf9, 0xd2, 0xce, 0xe5, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0xac, + 0x63, 0x67, 0xe3, 0x01, 0xbb, 0x00, 0x00, } diff --git a/pkg/api/v1/generated.proto b/pkg/api/v1/generated.proto index d990885fa47..0f64867d39d 100644 --- a/pkg/api/v1/generated.proto +++ b/pkg/api/v1/generated.proto @@ -279,6 +279,10 @@ message ConfigMap { message ConfigMapEnvSource { // The ConfigMap to select from. optional LocalObjectReference localObjectReference = 1; + + // Specify whether the ConfigMap must be defined + // +optional + optional bool optional = 2; } // Selects a key from a ConfigMap. @@ -288,6 +292,10 @@ message ConfigMapKeySelector { // The key to select. optional string key = 2; + + // Specify whether the ConfigMap or it's key must be defined + // +optional + optional bool optional = 3; } // ConfigMapList is a resource containing a list of ConfigMap objects. @@ -314,8 +322,8 @@ message ConfigMapVolumeSource { // key and content is the value. If specified, the listed keys will be // projected into the specified paths, and unlisted keys will not be // present. If a key is specified which is not present in the ConfigMap, - // the volume setup will error. Paths must be relative and may not contain - // the '..' path or start with '..'. + // the volume setup will error unless it is marked optional. Paths must be + // relative and may not contain the '..' path or start with '..'. // +optional repeated KeyToPath items = 2; @@ -326,6 +334,10 @@ message ConfigMapVolumeSource { // mode, like fsGroup, and the result can be other mode bits set. // +optional optional int32 defaultMode = 3; + + // Specify whether the ConfigMap or it's keys must be defined + // +optional + optional bool optional = 4; } // A single application container that you want to run within a pod. @@ -3104,6 +3116,10 @@ message Secret { message SecretEnvSource { // The Secret to select from. optional LocalObjectReference localObjectReference = 1; + + // Specify whether the Secret must be defined + // +optional + optional bool optional = 2; } // SecretKeySelector selects a key of a Secret. @@ -3113,6 +3129,10 @@ message SecretKeySelector { // The key of the secret to select from. Must be a valid secret key. optional string key = 2; + + // Specify whether the Secret or it's key must be defined + // +optional + optional bool optional = 3; } // SecretList is a list of Secret. @@ -3143,8 +3163,8 @@ message SecretVolumeSource { // key and content is the value. If specified, the listed keys will be // projected into the specified paths, and unlisted keys will not be // present. If a key is specified which is not present in the Secret, - // the volume setup will error. Paths must be relative and may not contain - // the '..' path or start with '..'. + // the volume setup will error unless it is marked optional. Paths must be + // relative and may not contain the '..' path or start with '..'. // +optional repeated KeyToPath items = 2; @@ -3155,6 +3175,10 @@ message SecretVolumeSource { // mode, like fsGroup, and the result can be other mode bits set. // +optional optional int32 defaultMode = 3; + + // Specify whether the Secret or it's keys must be defined + // +optional + optional bool optional = 4; } // SecurityContext holds security configuration that will be applied to a container. diff --git a/pkg/api/v1/types.generated.go b/pkg/api/v1/types.generated.go index f30cd923fa4..997fea2ee14 100644 --- a/pkg/api/v1/types.generated.go +++ b/pkg/api/v1/types.generated.go @@ -14141,15 +14141,16 @@ func (x *SecretVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [3]bool + var yyq2 [4]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.SecretName != "" yyq2[1] = len(x.Items) != 0 yyq2[2] = x.DefaultMode != nil + yyq2[3] = x.Optional != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(3) + r.EncodeArrayStart(4) } else { yynn2 = 0 for _, b := range yyq2 { @@ -14253,6 +14254,41 @@ func (x *SecretVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[3] { + if x.Optional == nil { + r.EncodeNil() + } else { + yy15 := *x.Optional + yym16 := z.EncBinary() + _ = yym16 + if false { + } else { + r.EncodeBool(bool(yy15)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("optional")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Optional == nil { + r.EncodeNil() + } else { + yy17 := *x.Optional + yym18 := z.EncBinary() + _ = yym18 + if false { + } else { + r.EncodeBool(bool(yy17)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -14354,6 +14390,22 @@ func (x *SecretVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) } } + case "optional": + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym11 := z.DecBinary() + _ = yym11 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -14365,16 +14417,16 @@ func (x *SecretVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decode var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj10 int - var yyb10 bool - var yyhl10 bool = l >= 0 - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l + var yyj12 int + var yyb12 bool + var yyhl12 bool = l >= 0 + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l } else { - yyb10 = r.CheckBreak() + yyb12 = r.CheckBreak() } - if yyb10 { + if yyb12 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -14382,21 +14434,21 @@ func (x *SecretVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.SecretName = "" } else { - yyv11 := &x.SecretName - yym12 := z.DecBinary() - _ = yym12 + yyv13 := &x.SecretName + yym14 := z.DecBinary() + _ = yym14 if false { } else { - *((*string)(yyv11)) = r.DecodeString() + *((*string)(yyv13)) = r.DecodeString() } } - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l } else { - yyb10 = r.CheckBreak() + yyb12 = r.CheckBreak() } - if yyb10 { + if yyb12 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -14404,21 +14456,21 @@ func (x *SecretVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.Items = nil } else { - yyv13 := &x.Items - yym14 := z.DecBinary() - _ = yym14 + yyv15 := &x.Items + yym16 := z.DecBinary() + _ = yym16 if false { } else { - h.decSliceKeyToPath((*[]KeyToPath)(yyv13), d) + h.decSliceKeyToPath((*[]KeyToPath)(yyv15), d) } } - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l } else { - yyb10 = r.CheckBreak() + yyb12 = r.CheckBreak() } - if yyb10 { + if yyb12 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -14431,25 +14483,51 @@ func (x *SecretVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decode if x.DefaultMode == nil { x.DefaultMode = new(int32) } - yym16 := z.DecBinary() - _ = yym16 + yym18 := z.DecBinary() + _ = yym18 if false { } else { *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) } } - for { - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l - } else { - yyb10 = r.CheckBreak() + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil } - if yyb10 { + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym20 := z.DecBinary() + _ = yym20 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } + for { + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj10-1, "") + z.DecStructFieldNotFound(yyj12-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -16810,15 +16888,16 @@ func (x *ConfigMapVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [3]bool + var yyq2 [4]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Name != "" yyq2[1] = len(x.Items) != 0 yyq2[2] = x.DefaultMode != nil + yyq2[3] = x.Optional != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(3) + r.EncodeArrayStart(4) } else { yynn2 = 0 for _, b := range yyq2 { @@ -16922,6 +17001,41 @@ func (x *ConfigMapVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[3] { + if x.Optional == nil { + r.EncodeNil() + } else { + yy15 := *x.Optional + yym16 := z.EncBinary() + _ = yym16 + if false { + } else { + r.EncodeBool(bool(yy15)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("optional")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Optional == nil { + r.EncodeNil() + } else { + yy17 := *x.Optional + yym18 := z.EncBinary() + _ = yym18 + if false { + } else { + r.EncodeBool(bool(yy17)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -17023,6 +17137,22 @@ func (x *ConfigMapVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decod *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) } } + case "optional": + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym11 := z.DecBinary() + _ = yym11 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -17034,16 +17164,16 @@ func (x *ConfigMapVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Dec var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj10 int - var yyb10 bool - var yyhl10 bool = l >= 0 - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l + var yyj12 int + var yyb12 bool + var yyhl12 bool = l >= 0 + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l } else { - yyb10 = r.CheckBreak() + yyb12 = r.CheckBreak() } - if yyb10 { + if yyb12 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -17051,21 +17181,21 @@ func (x *ConfigMapVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Dec if r.TryDecodeAsNil() { x.Name = "" } else { - yyv11 := &x.Name - yym12 := z.DecBinary() - _ = yym12 + yyv13 := &x.Name + yym14 := z.DecBinary() + _ = yym14 if false { } else { - *((*string)(yyv11)) = r.DecodeString() + *((*string)(yyv13)) = r.DecodeString() } } - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l } else { - yyb10 = r.CheckBreak() + yyb12 = r.CheckBreak() } - if yyb10 { + if yyb12 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -17073,21 +17203,21 @@ func (x *ConfigMapVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Dec if r.TryDecodeAsNil() { x.Items = nil } else { - yyv13 := &x.Items - yym14 := z.DecBinary() - _ = yym14 + yyv15 := &x.Items + yym16 := z.DecBinary() + _ = yym16 if false { } else { - h.decSliceKeyToPath((*[]KeyToPath)(yyv13), d) + h.decSliceKeyToPath((*[]KeyToPath)(yyv15), d) } } - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l } else { - yyb10 = r.CheckBreak() + yyb12 = r.CheckBreak() } - if yyb10 { + if yyb12 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -17100,25 +17230,51 @@ func (x *ConfigMapVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Dec if x.DefaultMode == nil { x.DefaultMode = new(int32) } - yym16 := z.DecBinary() - _ = yym16 + yym18 := z.DecBinary() + _ = yym18 if false { } else { *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) } } - for { - yyj10++ - if yyhl10 { - yyb10 = yyj10 > l - } else { - yyb10 = r.CheckBreak() + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil } - if yyb10 { + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym20 := z.DecBinary() + _ = yym20 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } + for { + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj10-1, "") + z.DecStructFieldNotFound(yyj12-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -19360,13 +19516,14 @@ func (x *ConfigMapKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [2]bool + var yyq2 [3]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Name != "" + yyq2[2] = x.Optional != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(2) + r.EncodeArrayStart(3) } else { yynn2 = 1 for _, b := range yyq2 { @@ -19421,6 +19578,41 @@ func (x *ConfigMapKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, string(x.Key)) } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + if x.Optional == nil { + r.EncodeNil() + } else { + yy10 := *x.Optional + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeBool(bool(yy10)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("optional")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Optional == nil { + r.EncodeNil() + } else { + yy12 := *x.Optional + yym13 := z.EncBinary() + _ = yym13 + if false { + } else { + r.EncodeBool(bool(yy12)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -19506,6 +19698,22 @@ func (x *ConfigMapKeySelector) codecDecodeSelfFromMap(l int, d *codec1978.Decode *((*string)(yyv6)) = r.DecodeString() } } + case "optional": + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -19517,16 +19725,16 @@ func (x *ConfigMapKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Deco var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj8 int - var yyb8 bool - var yyhl8 bool = l >= 0 - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l } else { - yyb8 = r.CheckBreak() + yyb10 = r.CheckBreak() } - if yyb8 { + if yyb10 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -19534,29 +19742,7 @@ func (x *ConfigMapKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.Name = "" } else { - yyv9 := &x.Name - yym10 := z.DecBinary() - _ = yym10 - if false { - } else { - *((*string)(yyv9)) = r.DecodeString() - } - } - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l - } else { - yyb8 = r.CheckBreak() - } - if yyb8 { - z.DecSendContainerState(codecSelfer_containerArrayEnd1234) - return - } - z.DecSendContainerState(codecSelfer_containerArrayElem1234) - if r.TryDecodeAsNil() { - x.Key = "" - } else { - yyv11 := &x.Key + yyv11 := &x.Name yym12 := z.DecBinary() _ = yym12 if false { @@ -19564,18 +19750,66 @@ func (x *ConfigMapKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Deco *((*string)(yyv11)) = r.DecodeString() } } - for { - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + yyv13 := &x.Key + yym14 := z.DecBinary() + _ = yym14 + if false { } else { - yyb8 = r.CheckBreak() + *((*string)(yyv13)) = r.DecodeString() } - if yyb8 { + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj8-1, "") + z.DecStructFieldNotFound(yyj10-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -19594,13 +19828,14 @@ func (x *SecretKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [2]bool + var yyq2 [3]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Name != "" + yyq2[2] = x.Optional != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(2) + r.EncodeArrayStart(3) } else { yynn2 = 1 for _, b := range yyq2 { @@ -19655,6 +19890,41 @@ func (x *SecretKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, string(x.Key)) } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + if x.Optional == nil { + r.EncodeNil() + } else { + yy10 := *x.Optional + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeBool(bool(yy10)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("optional")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Optional == nil { + r.EncodeNil() + } else { + yy12 := *x.Optional + yym13 := z.EncBinary() + _ = yym13 + if false { + } else { + r.EncodeBool(bool(yy12)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -19740,6 +20010,22 @@ func (x *SecretKeySelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) *((*string)(yyv6)) = r.DecodeString() } } + case "optional": + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -19751,16 +20037,16 @@ func (x *SecretKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj8 int - var yyb8 bool - var yyhl8 bool = l >= 0 - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l } else { - yyb8 = r.CheckBreak() + yyb10 = r.CheckBreak() } - if yyb8 { + if yyb10 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -19768,29 +20054,7 @@ func (x *SecretKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder if r.TryDecodeAsNil() { x.Name = "" } else { - yyv9 := &x.Name - yym10 := z.DecBinary() - _ = yym10 - if false { - } else { - *((*string)(yyv9)) = r.DecodeString() - } - } - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l - } else { - yyb8 = r.CheckBreak() - } - if yyb8 { - z.DecSendContainerState(codecSelfer_containerArrayEnd1234) - return - } - z.DecSendContainerState(codecSelfer_containerArrayElem1234) - if r.TryDecodeAsNil() { - x.Key = "" - } else { - yyv11 := &x.Key + yyv11 := &x.Name yym12 := z.DecBinary() _ = yym12 if false { @@ -19798,18 +20062,66 @@ func (x *SecretKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder *((*string)(yyv11)) = r.DecodeString() } } - for { - yyj8++ - if yyhl8 { - yyb8 = yyj8 > l + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + yyv13 := &x.Key + yym14 := z.DecBinary() + _ = yym14 + if false { } else { - yyb8 = r.CheckBreak() + *((*string)(yyv13)) = r.DecodeString() } - if yyb8 { + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj8-1, "") + z.DecStructFieldNotFound(yyj10-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -20121,13 +20433,14 @@ func (x *ConfigMapEnvSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [1]bool + var yyq2 [2]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Name != "" + yyq2[1] = x.Optional != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(1) + r.EncodeArrayStart(2) } else { yynn2 = 0 for _, b := range yyq2 { @@ -20163,6 +20476,41 @@ func (x *ConfigMapEnvSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + if x.Optional == nil { + r.EncodeNil() + } else { + yy7 := *x.Optional + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeBool(bool(yy7)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("optional")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Optional == nil { + r.EncodeNil() + } else { + yy9 := *x.Optional + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeBool(bool(yy9)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -20236,6 +20584,22 @@ func (x *ConfigMapEnvSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) *((*string)(yyv4)) = r.DecodeString() } } + case "optional": + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -20247,16 +20611,16 @@ func (x *ConfigMapEnvSource) codecDecodeSelfFromArray(l int, d *codec1978.Decode var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj6 int - var yyb6 bool - var yyhl6 bool = l >= 0 - yyj6++ - if yyhl6 { - yyb6 = yyj6 > l + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l } else { - yyb6 = r.CheckBreak() + yyb8 = r.CheckBreak() } - if yyb6 { + if yyb8 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -20264,26 +20628,52 @@ func (x *ConfigMapEnvSource) codecDecodeSelfFromArray(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.Name = "" } else { - yyv7 := &x.Name - yym8 := z.DecBinary() - _ = yym8 + yyv9 := &x.Name + yym10 := z.DecBinary() + _ = yym10 if false { } else { - *((*string)(yyv7)) = r.DecodeString() + *((*string)(yyv9)) = r.DecodeString() + } + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() } } for { - yyj6++ - if yyhl6 { - yyb6 = yyj6 > l + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l } else { - yyb6 = r.CheckBreak() + yyb8 = r.CheckBreak() } - if yyb6 { + if yyb8 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj6-1, "") + z.DecStructFieldNotFound(yyj8-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -20302,13 +20692,14 @@ func (x *SecretEnvSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [1]bool + var yyq2 [2]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Name != "" + yyq2[1] = x.Optional != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(1) + r.EncodeArrayStart(2) } else { yynn2 = 0 for _, b := range yyq2 { @@ -20344,6 +20735,41 @@ func (x *SecretEnvSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + if x.Optional == nil { + r.EncodeNil() + } else { + yy7 := *x.Optional + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeBool(bool(yy7)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("optional")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Optional == nil { + r.EncodeNil() + } else { + yy9 := *x.Optional + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeBool(bool(yy9)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -20417,6 +20843,22 @@ func (x *SecretEnvSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { *((*string)(yyv4)) = r.DecodeString() } } + case "optional": + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -20428,16 +20870,16 @@ func (x *SecretEnvSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj6 int - var yyb6 bool - var yyhl6 bool = l >= 0 - yyj6++ - if yyhl6 { - yyb6 = yyj6 > l + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l } else { - yyb6 = r.CheckBreak() + yyb8 = r.CheckBreak() } - if yyb6 { + if yyb8 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -20445,26 +20887,52 @@ func (x *SecretEnvSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Name = "" } else { - yyv7 := &x.Name - yym8 := z.DecBinary() - _ = yym8 + yyv9 := &x.Name + yym10 := z.DecBinary() + _ = yym10 if false { } else { - *((*string)(yyv7)) = r.DecodeString() + *((*string)(yyv9)) = r.DecodeString() + } + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Optional != nil { + x.Optional = nil + } + } else { + if x.Optional == nil { + x.Optional = new(bool) + } + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*bool)(x.Optional)) = r.DecodeBool() } } for { - yyj6++ - if yyhl6 { - yyb6 = yyj6 > l + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l } else { - yyb6 = r.CheckBreak() + yyb8 = r.CheckBreak() } - if yyb6 { + if yyb8 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj6-1, "") + z.DecStructFieldNotFound(yyj8-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } diff --git a/pkg/api/v1/types_swagger_doc_generated.go b/pkg/api/v1/types_swagger_doc_generated.go index e0c9e0cb072..ba292316da8 100644 --- a/pkg/api/v1/types_swagger_doc_generated.go +++ b/pkg/api/v1/types_swagger_doc_generated.go @@ -181,7 +181,8 @@ func (ConfigMap) SwaggerDoc() map[string]string { } var map_ConfigMapEnvSource = map[string]string{ - "": "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.", + "": "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.", + "optional": "Specify whether the ConfigMap must be defined", } func (ConfigMapEnvSource) SwaggerDoc() map[string]string { @@ -189,8 +190,9 @@ func (ConfigMapEnvSource) SwaggerDoc() map[string]string { } var map_ConfigMapKeySelector = map[string]string{ - "": "Selects a key from a ConfigMap.", - "key": "The key to select.", + "": "Selects a key from a ConfigMap.", + "key": "The key to select.", + "optional": "Specify whether the ConfigMap or it's key must be defined", } func (ConfigMapKeySelector) SwaggerDoc() map[string]string { @@ -209,8 +211,9 @@ func (ConfigMapList) SwaggerDoc() map[string]string { var map_ConfigMapVolumeSource = map[string]string{ "": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", - "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "optional": "Specify whether the ConfigMap or it's keys must be defined", } func (ConfigMapVolumeSource) SwaggerDoc() map[string]string { @@ -1600,7 +1603,8 @@ func (Secret) SwaggerDoc() map[string]string { } var map_SecretEnvSource = map[string]string{ - "": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.", + "": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.", + "optional": "Specify whether the Secret must be defined", } func (SecretEnvSource) SwaggerDoc() map[string]string { @@ -1608,8 +1612,9 @@ func (SecretEnvSource) SwaggerDoc() map[string]string { } var map_SecretKeySelector = map[string]string{ - "": "SecretKeySelector selects a key of a Secret.", - "key": "The key of the secret to select from. Must be a valid secret key.", + "": "SecretKeySelector selects a key of a Secret.", + "key": "The key of the secret to select from. Must be a valid secret key.", + "optional": "Specify whether the Secret or it's key must be defined", } func (SecretKeySelector) SwaggerDoc() map[string]string { @@ -1629,8 +1634,9 @@ func (SecretList) SwaggerDoc() map[string]string { var map_SecretVolumeSource = map[string]string{ "": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", "secretName": "Name of the secret in the pod's namespace to use. More info: http://kubernetes.io/docs/user-guide/volumes#secrets", - "items": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "items": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "optional": "Specify whether the Secret or it's keys must be defined", } func (SecretVolumeSource) SwaggerDoc() map[string]string { diff --git a/pkg/api/v1/zz_generated.conversion.go b/pkg/api/v1/zz_generated.conversion.go index 161f607c05d..a17e444fd9b 100644 --- a/pkg/api/v1/zz_generated.conversion.go +++ b/pkg/api/v1/zz_generated.conversion.go @@ -674,6 +674,7 @@ func autoConvert_v1_ConfigMapEnvSource_To_api_ConfigMapEnvSource(in *ConfigMapEn if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { return err } + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -685,6 +686,7 @@ func autoConvert_api_ConfigMapEnvSource_To_v1_ConfigMapEnvSource(in *api.ConfigM if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { return err } + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -697,6 +699,7 @@ func autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in *ConfigM return err } out.Key = in.Key + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -709,6 +712,7 @@ func autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in *api.Con return err } out.Key = in.Key + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -742,6 +746,7 @@ func autoConvert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource(in *Confi } out.Items = *(*[]api.KeyToPath)(unsafe.Pointer(&in.Items)) out.DefaultMode = (*int32)(unsafe.Pointer(in.DefaultMode)) + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -755,6 +760,7 @@ func autoConvert_api_ConfigMapVolumeSource_To_v1_ConfigMapVolumeSource(in *api.C } out.Items = *(*[]KeyToPath)(unsafe.Pointer(&in.Items)) out.DefaultMode = (*int32)(unsafe.Pointer(in.DefaultMode)) + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -3790,6 +3796,7 @@ func autoConvert_v1_SecretEnvSource_To_api_SecretEnvSource(in *SecretEnvSource, if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { return err } + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -3801,6 +3808,7 @@ func autoConvert_api_SecretEnvSource_To_v1_SecretEnvSource(in *api.SecretEnvSour if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { return err } + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -3813,6 +3821,7 @@ func autoConvert_v1_SecretKeySelector_To_api_SecretKeySelector(in *SecretKeySele return err } out.Key = in.Key + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -3825,6 +3834,7 @@ func autoConvert_api_SecretKeySelector_To_v1_SecretKeySelector(in *api.SecretKey return err } out.Key = in.Key + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -3876,6 +3886,7 @@ func autoConvert_v1_SecretVolumeSource_To_api_SecretVolumeSource(in *SecretVolum out.SecretName = in.SecretName out.Items = *(*[]api.KeyToPath)(unsafe.Pointer(&in.Items)) out.DefaultMode = (*int32)(unsafe.Pointer(in.DefaultMode)) + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } @@ -3887,6 +3898,7 @@ func autoConvert_api_SecretVolumeSource_To_v1_SecretVolumeSource(in *api.SecretV out.SecretName = in.SecretName out.Items = *(*[]KeyToPath)(unsafe.Pointer(&in.Items)) out.DefaultMode = (*int32)(unsafe.Pointer(in.DefaultMode)) + out.Optional = (*bool)(unsafe.Pointer(in.Optional)) return nil } diff --git a/pkg/api/v1/zz_generated.deepcopy.go b/pkg/api/v1/zz_generated.deepcopy.go index f25d325aa20..3ddc081a176 100644 --- a/pkg/api/v1/zz_generated.deepcopy.go +++ b/pkg/api/v1/zz_generated.deepcopy.go @@ -437,6 +437,11 @@ func DeepCopy_v1_ConfigMapEnvSource(in interface{}, out interface{}, c *conversi in := in.(*ConfigMapEnvSource) out := out.(*ConfigMapEnvSource) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -446,6 +451,11 @@ func DeepCopy_v1_ConfigMapKeySelector(in interface{}, out interface{}, c *conver in := in.(*ConfigMapKeySelector) out := out.(*ConfigMapKeySelector) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -487,6 +497,11 @@ func DeepCopy_v1_ConfigMapVolumeSource(in interface{}, out interface{}, c *conve *out = new(int32) **out = **in } + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -873,12 +888,16 @@ func DeepCopy_v1_EnvFromSource(in interface{}, out interface{}, c *conversion.Cl if in.ConfigMapRef != nil { in, out := &in.ConfigMapRef, &out.ConfigMapRef *out = new(ConfigMapEnvSource) - **out = **in + if err := DeepCopy_v1_ConfigMapEnvSource(*in, *out, c); err != nil { + return err + } } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef *out = new(SecretEnvSource) - **out = **in + if err := DeepCopy_v1_SecretEnvSource(*in, *out, c); err != nil { + return err + } } return nil } @@ -920,12 +939,16 @@ func DeepCopy_v1_EnvVarSource(in interface{}, out interface{}, c *conversion.Clo if in.ConfigMapKeyRef != nil { in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef *out = new(ConfigMapKeySelector) - **out = **in + if err := DeepCopy_v1_ConfigMapKeySelector(*in, *out, c); err != nil { + return err + } } if in.SecretKeyRef != nil { in, out := &in.SecretKeyRef, &out.SecretKeyRef *out = new(SecretKeySelector) - **out = **in + if err := DeepCopy_v1_SecretKeySelector(*in, *out, c); err != nil { + return err + } } return nil } @@ -2793,6 +2816,11 @@ func DeepCopy_v1_SecretEnvSource(in interface{}, out interface{}, c *conversion. in := in.(*SecretEnvSource) out := out.(*SecretEnvSource) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -2802,6 +2830,11 @@ func DeepCopy_v1_SecretKeySelector(in interface{}, out interface{}, c *conversio in := in.(*SecretKeySelector) out := out.(*SecretKeySelector) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -2843,6 +2876,11 @@ func DeepCopy_v1_SecretVolumeSource(in interface{}, out interface{}, c *conversi *out = new(int32) **out = **in } + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } diff --git a/pkg/api/zz_generated.deepcopy.go b/pkg/api/zz_generated.deepcopy.go index cd5df234e27..7207b2237d8 100644 --- a/pkg/api/zz_generated.deepcopy.go +++ b/pkg/api/zz_generated.deepcopy.go @@ -440,6 +440,11 @@ func DeepCopy_api_ConfigMapEnvSource(in interface{}, out interface{}, c *convers in := in.(*ConfigMapEnvSource) out := out.(*ConfigMapEnvSource) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -449,6 +454,11 @@ func DeepCopy_api_ConfigMapKeySelector(in interface{}, out interface{}, c *conve in := in.(*ConfigMapKeySelector) out := out.(*ConfigMapKeySelector) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -490,6 +500,11 @@ func DeepCopy_api_ConfigMapVolumeSource(in interface{}, out interface{}, c *conv *out = new(int32) **out = **in } + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -901,12 +916,16 @@ func DeepCopy_api_EnvFromSource(in interface{}, out interface{}, c *conversion.C if in.ConfigMapRef != nil { in, out := &in.ConfigMapRef, &out.ConfigMapRef *out = new(ConfigMapEnvSource) - **out = **in + if err := DeepCopy_api_ConfigMapEnvSource(*in, *out, c); err != nil { + return err + } } if in.SecretRef != nil { in, out := &in.SecretRef, &out.SecretRef *out = new(SecretEnvSource) - **out = **in + if err := DeepCopy_api_SecretEnvSource(*in, *out, c); err != nil { + return err + } } return nil } @@ -948,12 +967,16 @@ func DeepCopy_api_EnvVarSource(in interface{}, out interface{}, c *conversion.Cl if in.ConfigMapKeyRef != nil { in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef *out = new(ConfigMapKeySelector) - **out = **in + if err := DeepCopy_api_ConfigMapKeySelector(*in, *out, c); err != nil { + return err + } } if in.SecretKeyRef != nil { in, out := &in.SecretKeyRef, &out.SecretKeyRef *out = new(SecretKeySelector) - **out = **in + if err := DeepCopy_api_SecretKeySelector(*in, *out, c); err != nil { + return err + } } return nil } @@ -2825,6 +2848,11 @@ func DeepCopy_api_SecretEnvSource(in interface{}, out interface{}, c *conversion in := in.(*SecretEnvSource) out := out.(*SecretEnvSource) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -2834,6 +2862,11 @@ func DeepCopy_api_SecretKeySelector(in interface{}, out interface{}, c *conversi in := in.(*SecretKeySelector) out := out.(*SecretKeySelector) *out = *in + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } @@ -2875,6 +2908,11 @@ func DeepCopy_api_SecretVolumeSource(in interface{}, out interface{}, c *convers *out = new(int32) **out = **in } + if in.Optional != nil { + in, out := &in.Optional, &out.Optional + *out = new(bool) + **out = **in + } return nil } } diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 242270003ff..f6eaab7036e 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -933,6 +933,13 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions Format: "", }, }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the ConfigMap must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, }, }, }, @@ -957,6 +964,13 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions Format: "", }, }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the ConfigMap or it's key must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, }, Required: []string{"key"}, }, @@ -1022,7 +1036,7 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions }, "items": { SchemaProps: spec.SchemaProps{ - Description: "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + Description: "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -1040,6 +1054,13 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions Format: "int32", }, }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the ConfigMap or it's keys must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, }, }, }, @@ -7430,6 +7451,13 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions Format: "", }, }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the Secret must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, }, }, }, @@ -7454,6 +7482,13 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions Format: "", }, }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the Secret or it's key must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, }, Required: []string{"key"}, }, @@ -7519,7 +7554,7 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions }, "items": { SchemaProps: spec.SchemaProps{ - Description: "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + Description: "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ @@ -7537,6 +7572,13 @@ var OpenAPIDefinitions *openapi.OpenAPIDefinitions = &openapi.OpenAPIDefinitions Format: "int32", }, }, + "optional": { + SchemaProps: spec.SchemaProps{ + Description: "Specify whether the Secret or it's keys must be defined", + Type: []string{"boolean"}, + Format: "", + }, + }, }, }, }, diff --git a/pkg/volume/configmap/BUILD b/pkg/volume/configmap/BUILD index b77901a5a9b..0536ab6af7b 100644 --- a/pkg/volume/configmap/BUILD +++ b/pkg/volume/configmap/BUILD @@ -23,6 +23,7 @@ go_library( "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//vendor:github.com/golang/glog", + "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/types", ], diff --git a/pkg/volume/secret/BUILD b/pkg/volume/secret/BUILD index c324db545dd..2f26e3c2ccf 100644 --- a/pkg/volume/secret/BUILD +++ b/pkg/volume/secret/BUILD @@ -23,6 +23,8 @@ go_library( "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", "//vendor:github.com/golang/glog", + "//vendor:k8s.io/apimachinery/pkg/api/errors", + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/types", ], )