From c41cf55a2cdcb0e678be719c8909ea193b72ca84 Mon Sep 17 00:00:00 2001 From: Michael Taufen Date: Mon, 29 Jan 2018 09:32:48 -0800 Subject: [PATCH] explicit kubelet config key in Node.Spec.ConfigSource.ConfigMap This makes the Kubelet config key in the ConfigMap an explicit part of the API, so we can stop using magic key names. As part of this change, we are retiring ConfigMapRef for ConfigMap. --- api/openapi-spec/swagger.json | 52 +- api/swagger-spec/v1.json | 36 +- cmd/kubeadm/app/phases/kubelet/kubelet.go | 9 +- .../app/phases/kubelet/kubelet_test.go | 4 +- docs/api-reference/v1/definitions.html | 85 +- pkg/apis/core/register.go | 1 - pkg/apis/core/types.go | 44 +- pkg/apis/core/v1/zz_generated.conversion.go | 34 +- pkg/apis/core/validation/validation.go | 56 +- pkg/apis/core/zz_generated.deepcopy.go | 31 +- pkg/kubelet/apis/kubeletconfig/BUILD | 1 + pkg/kubelet/apis/kubeletconfig/register.go | 1 + pkg/kubelet/apis/kubeletconfig/types.go | 13 + pkg/kubelet/apis/kubeletconfig/v1beta1/BUILD | 1 + .../apis/kubeletconfig/v1beta1/register.go | 1 + .../apis/kubeletconfig/v1beta1/types.go | 13 + .../v1beta1/zz_generated.conversion.go | 22 + .../v1beta1/zz_generated.deepcopy.go | 26 + .../kubeletconfig/zz_generated.deepcopy.go | 26 + pkg/kubelet/kubeletconfig/BUILD | 2 +- pkg/kubelet/kubeletconfig/checkpoint/BUILD | 4 +- .../kubeletconfig/checkpoint/download.go | 74 +- .../kubeletconfig/checkpoint/download_test.go | 127 +- .../kubeletconfig/checkpoint/store/fsstore.go | 3 +- .../checkpoint/store/fsstore_test.go | 105 +- .../checkpoint/store/store_test.go | 14 +- pkg/kubelet/kubeletconfig/status/status.go | 6 +- pkg/kubelet/kubeletconfig/util/codec/codec.go | 6 +- pkg/kubelet/kubeletconfig/util/equal/equal.go | 27 - pkg/kubelet/kubeletconfig/watch.go | 4 +- .../noderestriction/admission_test.go | 14 +- plugin/pkg/auth/authorizer/node/graph.go | 2 +- .../auth/authorizer/node/graph_populator.go | 14 +- .../authorizer/node/node_authorizer_test.go | 9 +- .../src/k8s.io/api/core/v1/generated.pb.go | 2156 ++++++++++------- .../src/k8s.io/api/core/v1/generated.proto | 31 +- staging/src/k8s.io/api/core/v1/register.go | 1 - staging/src/k8s.io/api/core/v1/types.go | 45 +- .../core/v1/types_swagger_doc_generated.go | 16 +- .../api/core/v1/zz_generated.deepcopy.go | 31 +- test/e2e_node/dynamic_kubelet_config_test.go | 221 +- test/e2e_node/util.go | 15 +- test/integration/apiserver/print_test.go | 1 - test/integration/auth/node_test.go | 5 +- .../etcd/etcd_storage_path_test.go | 1 - 45 files changed, 2123 insertions(+), 1267 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 4b2c557962..a4abf7c174 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -75671,6 +75671,36 @@ } ] }, + "io.k8s.api.core.v1.ConfigMapNodeConfigSource": { + "description": "ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.", + "required": [ + "namespace", + "name", + "kubeletConfigKey" + ], + "properties": { + "kubeletConfigKey": { + "description": "KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.", + "type": "string" + }, + "name": { + "description": "Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.", + "type": "string" + }, + "namespace": { + "description": "Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.", + "type": "string" + }, + "resourceVersion": { + "description": "ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec.", + "type": "string" + }, + "uid": { + "description": "UID is the metadata.UID of the referenced ConfigMap. This field is currently reqired in Node.Spec.", + "type": "string" + } + } + }, "io.k8s.api.core.v1.ConfigMapProjection": { "description": "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected 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. Note that this is identical to a configmap volume source without the default mode.", "properties": { @@ -77242,25 +77272,11 @@ "io.k8s.api.core.v1.NodeConfigSource": { "description": "NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.", "properties": { - "apiVersion": { - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - "type": "string" - }, - "configMapRef": { - "$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference" - }, - "kind": { - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" + "configMap": { + "description": "ConfigMap is a reference to a Node's ConfigMap", + "$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapNodeConfigSource" } - }, - "x-kubernetes-group-version-kind": [ - { - "group": "", - "kind": "NodeConfigSource", - "version": "v1" - } - ] + } }, "io.k8s.api.core.v1.NodeDaemonEndpoints": { "description": "NodeDaemonEndpoints lists ports opened by daemons running on the Node.", diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json index f5d4303c78..b1a691f2e0 100644 --- a/api/swagger-spec/v1.json +++ b/api/swagger-spec/v1.json @@ -18718,16 +18718,40 @@ "id": "v1.NodeConfigSource", "description": "NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.", "properties": { - "kind": { + "configMap": { + "$ref": "v1.ConfigMapNodeConfigSource", + "description": "ConfigMap is a reference to a Node's ConfigMap" + } + } + }, + "v1.ConfigMapNodeConfigSource": { + "id": "v1.ConfigMapNodeConfigSource", + "description": "ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.", + "required": [ + "namespace", + "name", + "kubeletConfigKey" + ], + "properties": { + "namespace": { "type": "string", - "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds" + "description": "Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases." }, - "apiVersion": { + "name": { "type": "string", - "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources" + "description": "Name is the metadata.name of the referenced ConfigMap. This field is required in all cases." }, - "configMapRef": { - "$ref": "v1.ObjectReference" + "uid": { + "type": "string", + "description": "UID is the metadata.UID of the referenced ConfigMap. This field is currently reqired in Node.Spec." + }, + "resourceVersion": { + "type": "string", + "description": "ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec." + }, + "kubeletConfigKey": { + "type": "string", + "description": "KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases." } } }, diff --git a/cmd/kubeadm/app/phases/kubelet/kubelet.go b/cmd/kubeadm/app/phases/kubelet/kubelet.go index 13afaaa332..4f0a51888a 100644 --- a/cmd/kubeadm/app/phases/kubelet/kubelet.go +++ b/cmd/kubeadm/app/phases/kubelet/kubelet.go @@ -116,10 +116,11 @@ func updateNodeWithConfigMap(client clientset.Interface, nodeName string) error } node.Spec.ConfigSource = &v1.NodeConfigSource{ - ConfigMapRef: &v1.ObjectReference{ - Name: kubeadmconstants.KubeletBaseConfigurationConfigMap, - Namespace: metav1.NamespaceSystem, - UID: kubeletCfg.UID, + ConfigMap: &v1.ConfigMapNodeConfigSource{ + Name: kubeadmconstants.KubeletBaseConfigurationConfigMap, + Namespace: metav1.NamespaceSystem, + UID: kubeletCfg.UID, + KubeletConfigKey: kubeadmconstants.KubeletBaseConfigurationConfigMapKey, }, } diff --git a/cmd/kubeadm/app/phases/kubelet/kubelet_test.go b/cmd/kubeadm/app/phases/kubelet/kubelet_test.go index 9c6935e4a8..8d211b052a 100644 --- a/cmd/kubeadm/app/phases/kubelet/kubelet_test.go +++ b/cmd/kubeadm/app/phases/kubelet/kubelet_test.go @@ -50,7 +50,7 @@ func TestCreateBaseKubeletConfiguration(t *testing.T) { }, Spec: v1.NodeSpec{ ConfigSource: &v1.NodeConfigSource{ - ConfigMapRef: &v1.ObjectReference{ + ConfigMap: &v1.ConfigMapNodeConfigSource{ UID: "", }, }, @@ -94,7 +94,7 @@ func TestUpdateNodeWithConfigMap(t *testing.T) { }, Spec: v1.NodeSpec{ ConfigSource: &v1.NodeConfigSource{ - ConfigMapRef: &v1.ObjectReference{ + ConfigMap: &v1.ConfigMapNodeConfigSource{ UID: "", }, }, diff --git a/docs/api-reference/v1/definitions.html b/docs/api-reference/v1/definitions.html index 8b923d3bf2..de1f986cb5 100755 --- a/docs/api-reference/v1/definitions.html +++ b/docs/api-reference/v1/definitions.html @@ -403,9 +403,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

v1.Node

  • -

    v1.NodeConfigSource

    -
  • -
  • v1.NodeList

  • @@ -3661,6 +3658,68 @@ Examples:
    + +
    +

    v1.ConfigMapNodeConfigSource

    +
    +

    ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.

    +
    + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameDescriptionRequiredSchemaDefault

    namespace

    Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.

    true

    string

    name

    Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.

    true

    string

    uid

    UID is the metadata.UID of the referenced ConfigMap. This field is currently reqired in Node.Spec.

    false

    string

    resourceVersion

    ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec.

    false

    string

    kubeletConfigKey

    KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.

    true

    string

    +

    v1.EndpointPort

    @@ -5830,24 +5889,10 @@ Examples:
    -

    kind

    -

    Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

    +

    configMap

    +

    ConfigMap is a reference to a Node’s ConfigMap

    false

    -

    string

    - - - -

    apiVersion

    -

    APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

    -

    false

    -

    string

    - - - -

    configMapRef

    - -

    false

    -

    v1.ObjectReference

    +

    v1.ConfigMapNodeConfigSource

    diff --git a/pkg/apis/core/register.go b/pkg/apis/core/register.go index 2784cbe157..c6cd8681d8 100644 --- a/pkg/apis/core/register.go +++ b/pkg/apis/core/register.go @@ -60,7 +60,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ServiceProxyOptions{}, &NodeList{}, &Node{}, - &NodeConfigSource{}, &NodeProxyOptions{}, &Endpoints{}, &EndpointsList{}, diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go index 4880b64743..00cb5c819c 100644 --- a/pkg/apis/core/types.go +++ b/pkg/apis/core/types.go @@ -3257,12 +3257,48 @@ type NodeSpec struct { DoNotUse_ExternalID string } -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - // NodeConfigSource specifies a source of node configuration. Exactly one subfield must be non-nil. type NodeConfigSource struct { - metav1.TypeMeta - ConfigMapRef *ObjectReference + ConfigMap *ConfigMapNodeConfigSource +} + +type ConfigMapNodeConfigSource struct { + // Namespace is the metadata.namespace of the referenced ConfigMap. + // This field is required in all cases. + Namespace string + + // Name is the metadata.name of the referenced ConfigMap. + // This field is required in all cases. + Name string + + // UID is the metadata.UID of the referenced ConfigMap. + // This field is currently reqired in Node.Spec. + // TODO(#61643): This field will be forbidden in Node.Spec when #61643 is resolved. + // #61643 changes the behavior of dynamic Kubelet config to respect + // ConfigMap updates, and thus removes the ability to pin the Spec to a given UID. + // TODO(#56896): This field will be required in Node.Status when #56896 is resolved. + // #63314 (the PR that resolves #56896) adds a structured status to the Node + // object for reporting information about the config. This status requires UID + // and ResourceVersion, so that it represents a fully-explicit description of + // the configuration in use, while (see previous TODO) the Spec will be + // restricted to namespace/name in #61643. + // +optional + UID types.UID + + // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. + // This field is forbidden in Node.Spec. + // TODO(#56896): This field will be required in Node.Status when #56896 is resolved. + // #63314 (the PR that resolves #56896) adds a structured status to the Node + // object for reporting information about the config. This status requires UID + // and ResourceVersion, so that it represents a fully-explicit description of + // the configuration in use, while (see previous TODO) the Spec will be + // restricted to namespace/name in #61643. + // +optional + ResourceVersion string + + // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure + // This field is required in all cases. + KubeletConfigKey string } // DaemonEndpoint contains information about a single Daemon endpoint. diff --git a/pkg/apis/core/v1/zz_generated.conversion.go b/pkg/apis/core/v1/zz_generated.conversion.go index 4762d90b8e..4d207e69f5 100644 --- a/pkg/apis/core/v1/zz_generated.conversion.go +++ b/pkg/apis/core/v1/zz_generated.conversion.go @@ -82,6 +82,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_core_ConfigMapKeySelector_To_v1_ConfigMapKeySelector, Convert_v1_ConfigMapList_To_core_ConfigMapList, Convert_core_ConfigMapList_To_v1_ConfigMapList, + Convert_v1_ConfigMapNodeConfigSource_To_core_ConfigMapNodeConfigSource, + Convert_core_ConfigMapNodeConfigSource_To_v1_ConfigMapNodeConfigSource, Convert_v1_ConfigMapProjection_To_core_ConfigMapProjection, Convert_core_ConfigMapProjection_To_v1_ConfigMapProjection, Convert_v1_ConfigMapVolumeSource_To_core_ConfigMapVolumeSource, @@ -941,6 +943,34 @@ func Convert_core_ConfigMapList_To_v1_ConfigMapList(in *core.ConfigMapList, out return autoConvert_core_ConfigMapList_To_v1_ConfigMapList(in, out, s) } +func autoConvert_v1_ConfigMapNodeConfigSource_To_core_ConfigMapNodeConfigSource(in *v1.ConfigMapNodeConfigSource, out *core.ConfigMapNodeConfigSource, s conversion.Scope) error { + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = types.UID(in.UID) + out.ResourceVersion = in.ResourceVersion + out.KubeletConfigKey = in.KubeletConfigKey + return nil +} + +// Convert_v1_ConfigMapNodeConfigSource_To_core_ConfigMapNodeConfigSource is an autogenerated conversion function. +func Convert_v1_ConfigMapNodeConfigSource_To_core_ConfigMapNodeConfigSource(in *v1.ConfigMapNodeConfigSource, out *core.ConfigMapNodeConfigSource, s conversion.Scope) error { + return autoConvert_v1_ConfigMapNodeConfigSource_To_core_ConfigMapNodeConfigSource(in, out, s) +} + +func autoConvert_core_ConfigMapNodeConfigSource_To_v1_ConfigMapNodeConfigSource(in *core.ConfigMapNodeConfigSource, out *v1.ConfigMapNodeConfigSource, s conversion.Scope) error { + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = types.UID(in.UID) + out.ResourceVersion = in.ResourceVersion + out.KubeletConfigKey = in.KubeletConfigKey + return nil +} + +// Convert_core_ConfigMapNodeConfigSource_To_v1_ConfigMapNodeConfigSource is an autogenerated conversion function. +func Convert_core_ConfigMapNodeConfigSource_To_v1_ConfigMapNodeConfigSource(in *core.ConfigMapNodeConfigSource, out *v1.ConfigMapNodeConfigSource, s conversion.Scope) error { + return autoConvert_core_ConfigMapNodeConfigSource_To_v1_ConfigMapNodeConfigSource(in, out, s) +} + func autoConvert_v1_ConfigMapProjection_To_core_ConfigMapProjection(in *v1.ConfigMapProjection, out *core.ConfigMapProjection, s conversion.Scope) error { if err := Convert_v1_LocalObjectReference_To_core_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { return err @@ -2586,7 +2616,7 @@ func Convert_core_NodeCondition_To_v1_NodeCondition(in *core.NodeCondition, out } func autoConvert_v1_NodeConfigSource_To_core_NodeConfigSource(in *v1.NodeConfigSource, out *core.NodeConfigSource, s conversion.Scope) error { - out.ConfigMapRef = (*core.ObjectReference)(unsafe.Pointer(in.ConfigMapRef)) + out.ConfigMap = (*core.ConfigMapNodeConfigSource)(unsafe.Pointer(in.ConfigMap)) return nil } @@ -2596,7 +2626,7 @@ func Convert_v1_NodeConfigSource_To_core_NodeConfigSource(in *v1.NodeConfigSourc } func autoConvert_core_NodeConfigSource_To_v1_NodeConfigSource(in *core.NodeConfigSource, out *v1.NodeConfigSource, s conversion.Scope) error { - out.ConfigMapRef = (*v1.ObjectReference)(unsafe.Pointer(in.ConfigMapRef)) + out.ConfigMap = (*v1.ConfigMapNodeConfigSource)(unsafe.Pointer(in.ConfigMap)) return nil } diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go index 9238b9cf0b..6fdc9c5d01 100644 --- a/pkg/apis/core/validation/validation.go +++ b/pkg/apis/core/validation/validation.go @@ -4120,7 +4120,7 @@ func ValidateNodeUpdate(node, oldNode *core.Node) field.ErrorList { // Allow updates to Node.Spec.ConfigSource if DynamicKubeletConfig feature gate is enabled if utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { if node.Spec.ConfigSource != nil { - allErrs = append(allErrs, validateNodeConfigSource(node.Spec.ConfigSource, field.NewPath("spec", "configSource"))...) + allErrs = append(allErrs, validateNodeConfigSourceSpec(node.Spec.ConfigSource, field.NewPath("spec", "configSource"))...) } oldNode.Spec.ConfigSource = node.Spec.ConfigSource } @@ -4135,15 +4135,13 @@ func ValidateNodeUpdate(node, oldNode *core.Node) field.ErrorList { return allErrs } -func validateNodeConfigSource(source *core.NodeConfigSource, fldPath *field.Path) field.ErrorList { +// validation specific to Node.Spec.ConfigSource +func validateNodeConfigSourceSpec(source *core.NodeConfigSource, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} count := int(0) - if ref := source.ConfigMapRef; ref != nil { + if source.ConfigMap != nil { count++ - // name, namespace, and UID must all be non-empty for ConfigMapRef - if ref.Name == "" || ref.Namespace == "" || string(ref.UID) == "" { - allErrs = append(allErrs, field.Invalid(fldPath.Child("configMapRef"), ref, "name, namespace, and UID must all be non-empty")) - } + allErrs = append(allErrs, validateConfigMapNodeConfigSourceSpec(source.ConfigMap, fldPath.Child("configMap"))...) } // add more subfields here in the future as they are added to NodeConfigSource @@ -4154,6 +4152,50 @@ func validateNodeConfigSource(source *core.NodeConfigSource, fldPath *field.Path return allErrs } +// validation specific to Node.Spec.ConfigSource.ConfigMap +func validateConfigMapNodeConfigSourceSpec(source *core.ConfigMapNodeConfigSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // TODO(#61643): Prevent ref.UID from being set here when we switch from requiring UID to respecting all ConfigMap updates + if string(source.UID) == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("uid"), "uid must be set in spec")) + } + // resourceVersion must not be set in spec + if source.ResourceVersion != "" { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("resourceVersion"), "resourceVersion must not be set in spec")) + } + return append(allErrs, validateConfigMapNodeConfigSource(source, fldPath)...) +} + +// common validation +func validateConfigMapNodeConfigSource(source *core.ConfigMapNodeConfigSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // validate target configmap namespace + if source.Namespace == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("namespace"), "namespace must be set in spec")) + } else { + for _, msg := range ValidateNameFunc(ValidateNamespaceName)(source.Namespace, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("namespace"), source.Namespace, msg)) + } + } + // validate target configmap name + if source.Name == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("name"), "name must be set in spec")) + } else { + for _, msg := range ValidateNameFunc(ValidateConfigMapName)(source.Name, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), source.Name, msg)) + } + } + // validate kubeletConfigKey against rules for configMap key names + if source.KubeletConfigKey == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("kubeletConfigKey"), "kubeletConfigKey must be set in spec")) + } else { + for _, msg := range validation.IsConfigMapKey(source.KubeletConfigKey) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("kubeletConfigKey"), source.KubeletConfigKey, msg)) + } + } + return allErrs +} + // Validate compute resource typename. // Refer to docs/design/resources.md for more details. func validateResourceName(value string, fldPath *field.Path) field.ErrorList { diff --git a/pkg/apis/core/zz_generated.deepcopy.go b/pkg/apis/core/zz_generated.deepcopy.go index b5ceff0d13..93246d3b9e 100644 --- a/pkg/apis/core/zz_generated.deepcopy.go +++ b/pkg/apis/core/zz_generated.deepcopy.go @@ -631,6 +631,22 @@ func (in *ConfigMapList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigMapNodeConfigSource) DeepCopyInto(out *ConfigMapNodeConfigSource) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapNodeConfigSource. +func (in *ConfigMapNodeConfigSource) DeepCopy() *ConfigMapNodeConfigSource { + if in == nil { + return nil + } + out := new(ConfigMapNodeConfigSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigMapProjection) DeepCopyInto(out *ConfigMapProjection) { *out = *in @@ -2364,13 +2380,12 @@ func (in *NodeCondition) DeepCopy() *NodeCondition { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeConfigSource) DeepCopyInto(out *NodeConfigSource) { *out = *in - out.TypeMeta = in.TypeMeta - if in.ConfigMapRef != nil { - in, out := &in.ConfigMapRef, &out.ConfigMapRef + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap if *in == nil { *out = nil } else { - *out = new(ObjectReference) + *out = new(ConfigMapNodeConfigSource) **out = **in } } @@ -2387,14 +2402,6 @@ func (in *NodeConfigSource) DeepCopy() *NodeConfigSource { return out } -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeConfigSource) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeDaemonEndpoints) DeepCopyInto(out *NodeDaemonEndpoints) { *out = *in diff --git a/pkg/kubelet/apis/kubeletconfig/BUILD b/pkg/kubelet/apis/kubeletconfig/BUILD index 0aa5579dde..969efbc99c 100644 --- a/pkg/kubelet/apis/kubeletconfig/BUILD +++ b/pkg/kubelet/apis/kubeletconfig/BUILD @@ -17,6 +17,7 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig", deps = [ + "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", diff --git a/pkg/kubelet/apis/kubeletconfig/register.go b/pkg/kubelet/apis/kubeletconfig/register.go index fd5d5de5f7..886f39dec4 100644 --- a/pkg/kubelet/apis/kubeletconfig/register.go +++ b/pkg/kubelet/apis/kubeletconfig/register.go @@ -46,6 +46,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { // TODO this will get cleaned up with the scheme types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &KubeletConfiguration{}, + &SerializedNodeConfigSource{}, ) return nil } diff --git a/pkg/kubelet/apis/kubeletconfig/types.go b/pkg/kubelet/apis/kubeletconfig/types.go index c61278f587..e0337e5aaf 100644 --- a/pkg/kubelet/apis/kubeletconfig/types.go +++ b/pkg/kubelet/apis/kubeletconfig/types.go @@ -17,6 +17,7 @@ limitations under the License. package kubeletconfig import ( + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -333,3 +334,15 @@ type KubeletAnonymousAuthentication struct { // Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated. Enabled bool } + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SerializedNodeConfigSource allows us to serialize NodeConfigSource +// This type is used internally by the Kubelet for tracking checkpointed dynamic configs. +// It exists in the kubeletconfig API group because it is classified as a versioned input to the Kubelet. +type SerializedNodeConfigSource struct { + metav1.TypeMeta + // Source is the source that we are serializing + // +optional + Source v1.NodeConfigSource +} diff --git a/pkg/kubelet/apis/kubeletconfig/v1beta1/BUILD b/pkg/kubelet/apis/kubeletconfig/v1beta1/BUILD index e54e8b0a34..c45da80cf9 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1beta1/BUILD +++ b/pkg/kubelet/apis/kubeletconfig/v1beta1/BUILD @@ -23,6 +23,7 @@ go_library( "//pkg/kubelet/types:go_default_library", "//pkg/master/ports:go_default_library", "//pkg/util/pointer:go_default_library", + "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/pkg/kubelet/apis/kubeletconfig/v1beta1/register.go b/pkg/kubelet/apis/kubeletconfig/v1beta1/register.go index 306fc55e09..4c6b2931b8 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1beta1/register.go +++ b/pkg/kubelet/apis/kubeletconfig/v1beta1/register.go @@ -45,6 +45,7 @@ func init() { func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &KubeletConfiguration{}, + &SerializedNodeConfigSource{}, ) return nil } diff --git a/pkg/kubelet/apis/kubeletconfig/v1beta1/types.go b/pkg/kubelet/apis/kubeletconfig/v1beta1/types.go index 60d314bace..984b61b304 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1beta1/types.go +++ b/pkg/kubelet/apis/kubeletconfig/v1beta1/types.go @@ -17,6 +17,7 @@ limitations under the License. package v1beta1 import ( + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -512,3 +513,15 @@ type KubeletAnonymousAuthentication struct { // +optional Enabled *bool `json:"enabled,omitempty"` } + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// SerializedNodeConfigSource allows us to serialize v1.NodeConfigSource. +// This type is used internally by the Kubelet for tracking checkpointed dynamic configs. +// It exists in the kubeletconfig API group because it is classified as a versioned input to the Kubelet. +type SerializedNodeConfigSource struct { + metav1.TypeMeta `json:",inline"` + // Source is the source that we are serializing + // +optional + Source v1.NodeConfigSource `json:"source,omitempty" protobuf:"bytes,1,opt,name=source"` +} diff --git a/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.conversion.go b/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.conversion.go index 51074bc126..67234da275 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.conversion.go +++ b/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.conversion.go @@ -51,6 +51,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_kubeletconfig_KubeletWebhookAuthorization_To_v1beta1_KubeletWebhookAuthorization, Convert_v1beta1_KubeletX509Authentication_To_kubeletconfig_KubeletX509Authentication, Convert_kubeletconfig_KubeletX509Authentication_To_v1beta1_KubeletX509Authentication, + Convert_v1beta1_SerializedNodeConfigSource_To_kubeletconfig_SerializedNodeConfigSource, + Convert_kubeletconfig_SerializedNodeConfigSource_To_v1beta1_SerializedNodeConfigSource, ) } @@ -453,3 +455,23 @@ func autoConvert_kubeletconfig_KubeletX509Authentication_To_v1beta1_KubeletX509A func Convert_kubeletconfig_KubeletX509Authentication_To_v1beta1_KubeletX509Authentication(in *kubeletconfig.KubeletX509Authentication, out *KubeletX509Authentication, s conversion.Scope) error { return autoConvert_kubeletconfig_KubeletX509Authentication_To_v1beta1_KubeletX509Authentication(in, out, s) } + +func autoConvert_v1beta1_SerializedNodeConfigSource_To_kubeletconfig_SerializedNodeConfigSource(in *SerializedNodeConfigSource, out *kubeletconfig.SerializedNodeConfigSource, s conversion.Scope) error { + out.Source = in.Source + return nil +} + +// Convert_v1beta1_SerializedNodeConfigSource_To_kubeletconfig_SerializedNodeConfigSource is an autogenerated conversion function. +func Convert_v1beta1_SerializedNodeConfigSource_To_kubeletconfig_SerializedNodeConfigSource(in *SerializedNodeConfigSource, out *kubeletconfig.SerializedNodeConfigSource, s conversion.Scope) error { + return autoConvert_v1beta1_SerializedNodeConfigSource_To_kubeletconfig_SerializedNodeConfigSource(in, out, s) +} + +func autoConvert_kubeletconfig_SerializedNodeConfigSource_To_v1beta1_SerializedNodeConfigSource(in *kubeletconfig.SerializedNodeConfigSource, out *SerializedNodeConfigSource, s conversion.Scope) error { + out.Source = in.Source + return nil +} + +// Convert_kubeletconfig_SerializedNodeConfigSource_To_v1beta1_SerializedNodeConfigSource is an autogenerated conversion function. +func Convert_kubeletconfig_SerializedNodeConfigSource_To_v1beta1_SerializedNodeConfigSource(in *kubeletconfig.SerializedNodeConfigSource, out *SerializedNodeConfigSource, s conversion.Scope) error { + return autoConvert_kubeletconfig_SerializedNodeConfigSource_To_v1beta1_SerializedNodeConfigSource(in, out, s) +} diff --git a/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.deepcopy.go b/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.deepcopy.go index 456f551a64..f7fc0a79cc 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.deepcopy.go +++ b/pkg/kubelet/apis/kubeletconfig/v1beta1/zz_generated.deepcopy.go @@ -426,3 +426,29 @@ func (in *KubeletX509Authentication) DeepCopy() *KubeletX509Authentication { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SerializedNodeConfigSource) DeepCopyInto(out *SerializedNodeConfigSource) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Source.DeepCopyInto(&out.Source) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SerializedNodeConfigSource. +func (in *SerializedNodeConfigSource) DeepCopy() *SerializedNodeConfigSource { + if in == nil { + return nil + } + out := new(SerializedNodeConfigSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SerializedNodeConfigSource) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/pkg/kubelet/apis/kubeletconfig/zz_generated.deepcopy.go b/pkg/kubelet/apis/kubeletconfig/zz_generated.deepcopy.go index e1ec334667..2a312ad844 100644 --- a/pkg/kubelet/apis/kubeletconfig/zz_generated.deepcopy.go +++ b/pkg/kubelet/apis/kubeletconfig/zz_generated.deepcopy.go @@ -246,3 +246,29 @@ func (in *KubeletX509Authentication) DeepCopy() *KubeletX509Authentication { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SerializedNodeConfigSource) DeepCopyInto(out *SerializedNodeConfigSource) { + *out = *in + out.TypeMeta = in.TypeMeta + in.Source.DeepCopyInto(&out.Source) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SerializedNodeConfigSource. +func (in *SerializedNodeConfigSource) DeepCopy() *SerializedNodeConfigSource { + if in == nil { + return nil + } + out := new(SerializedNodeConfigSource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *SerializedNodeConfigSource) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/pkg/kubelet/kubeletconfig/BUILD b/pkg/kubelet/kubeletconfig/BUILD index ae3e99f674..c409bd2a3f 100644 --- a/pkg/kubelet/kubeletconfig/BUILD +++ b/pkg/kubelet/kubeletconfig/BUILD @@ -19,12 +19,12 @@ go_library( "//pkg/kubelet/kubeletconfig/checkpoint:go_default_library", "//pkg/kubelet/kubeletconfig/checkpoint/store:go_default_library", "//pkg/kubelet/kubeletconfig/status:go_default_library", - "//pkg/kubelet/kubeletconfig/util/equal:go_default_library", "//pkg/kubelet/kubeletconfig/util/log:go_default_library", "//pkg/kubelet/kubeletconfig/util/panic:go_default_library", "//pkg/util/filesystem:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/pkg/kubelet/kubeletconfig/checkpoint/BUILD b/pkg/kubelet/kubeletconfig/checkpoint/BUILD index 9484499156..cb21adad99 100644 --- a/pkg/kubelet/kubeletconfig/checkpoint/BUILD +++ b/pkg/kubelet/kubeletconfig/checkpoint/BUILD @@ -31,7 +31,9 @@ go_library( ], importpath = "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/checkpoint", deps = [ - "//pkg/api/legacyscheme:go_default_library", + "//pkg/kubelet/apis/kubeletconfig:go_default_library", + "//pkg/kubelet/apis/kubeletconfig/scheme:go_default_library", + "//pkg/kubelet/apis/kubeletconfig/v1beta1:go_default_library", "//pkg/kubelet/kubeletconfig/status:go_default_library", "//pkg/kubelet/kubeletconfig/util/codec:go_default_library", "//pkg/kubelet/kubeletconfig/util/log:go_default_library", diff --git a/pkg/kubelet/kubeletconfig/checkpoint/download.go b/pkg/kubelet/kubeletconfig/checkpoint/download.go index bbc624adb7..0e45cba050 100644 --- a/pkg/kubelet/kubeletconfig/checkpoint/download.go +++ b/pkg/kubelet/kubeletconfig/checkpoint/download.go @@ -24,7 +24,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" clientset "k8s.io/client-go/kubernetes" - "k8s.io/kubernetes/pkg/api/legacyscheme" + kubeletconfiginternal "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig" + "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/scheme" + kubeletconfigv1beta1 "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/v1beta1" "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/status" utilcodec "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/util/codec" utillog "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/util/log" @@ -46,6 +48,8 @@ type Payload interface { type RemoteConfigSource interface { // UID returns a globally unique identifier of the source described by the remote config source object UID() string + // KubeletFilename returns the name of the Kubelet config file as it should appear in the keys of Payload.Files() + KubeletFilename() string // APIPath returns the API path to the remote resource, e.g. its SelfLink APIPath() string // Download downloads the remote config source object returns a Payload backed by the object, @@ -60,25 +64,18 @@ type RemoteConfigSource interface { object() interface{} } -// NewRemoteConfigSource constructs a RemoteConfigSource from a v1/NodeConfigSource object, or returns -// a sanitized failure reason and an error if the `source` is blatantly invalid. +// NewRemoteConfigSource constructs a RemoteConfigSource from a v1/NodeConfigSource object // You should only call this with a non-nil config source. +// Note that the API server validates Node.Spec.ConfigSource. func NewRemoteConfigSource(source *apiv1.NodeConfigSource) (RemoteConfigSource, string, error) { - // exactly one subfield of the config source must be non-nil, toady ConfigMapRef is the only reference - if source.ConfigMapRef == nil { + // NOTE: Even though the API server validates the config, we check whether all *known* fields are + // nil here, so that if a new API server allows a new config source type, old clients can send + // an error message rather than crashing due to a nil pointer dereference. + + // exactly one reference subfield of the config source must be non-nil, today ConfigMap is the only reference subfield + if source.ConfigMap == nil { return nil, status.FailSyncReasonAllNilSubfields, fmt.Errorf("%s, NodeConfigSource was: %#v", status.FailSyncReasonAllNilSubfields, source) } - - // validate the NodeConfigSource: - - // at this point we know we're using the ConfigMapRef subfield - ref := source.ConfigMapRef - - // name, namespace, and UID must all be non-empty for ConfigMapRef - if ref.Name == "" || ref.Namespace == "" || string(ref.UID) == "" { - return nil, status.FailSyncReasonPartialObjectReference, fmt.Errorf("%s, ObjectReference was: %#v", status.FailSyncReasonPartialObjectReference, ref) - } - return &remoteConfigMap{source}, "", nil } @@ -86,21 +83,25 @@ func NewRemoteConfigSource(source *apiv1.NodeConfigSource) (RemoteConfigSource, // e.g. the metadata stored by checkpoint/store/fsstore.go func DecodeRemoteConfigSource(data []byte) (RemoteConfigSource, error) { // decode the remote config source - obj, err := runtime.Decode(legacyscheme.Codecs.UniversalDecoder(), data) + _, codecs, err := scheme.NewSchemeAndCodecs() + if err != nil { + return nil, err + } + + obj, err := runtime.Decode(codecs.UniversalDecoder(), data) if err != nil { return nil, fmt.Errorf("failed to decode, error: %v", err) } - // for now we assume we are trying to load an apiv1.NodeConfigSource, + // for now we assume we are trying to load an kubeletconfigv1beta1.SerializedNodeConfigSource, // this may need to be extended if e.g. a new version of the api is born - - // convert it to the external NodeConfigSource type, so we're consistently working with the external type outside of the on-disk representation - cs := &apiv1.NodeConfigSource{} - err = legacyscheme.Scheme.Convert(obj, cs, nil) - if err != nil { - return nil, fmt.Errorf("failed to convert decoded object into a v1 NodeConfigSource, error: %v", err) + cs, ok := obj.(*kubeletconfiginternal.SerializedNodeConfigSource) + if !ok { + return nil, fmt.Errorf("failed to cast decoded remote config source to *k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig.SerializedNodeConfigSource") } - source, _, err := NewRemoteConfigSource(cs) + + // we use the v1.NodeConfigSource type on internal and external, so no need to convert to external here + source, _, err := NewRemoteConfigSource(&cs.Source) return source, err } @@ -121,32 +122,36 @@ type remoteConfigMap struct { var _ RemoteConfigSource = (*remoteConfigMap)(nil) func (r *remoteConfigMap) UID() string { - return string(r.source.ConfigMapRef.UID) + return string(r.source.ConfigMap.UID) +} + +func (r *remoteConfigMap) KubeletFilename() string { + return r.source.ConfigMap.KubeletConfigKey } const configMapAPIPathFmt = "/api/v1/namespaces/%s/configmaps/%s" func (r *remoteConfigMap) APIPath() string { - ref := r.source.ConfigMapRef + ref := r.source.ConfigMap return fmt.Sprintf(configMapAPIPathFmt, ref.Namespace, ref.Name) } func (r *remoteConfigMap) Download(client clientset.Interface) (Payload, string, error) { var reason string - uid := string(r.source.ConfigMapRef.UID) + uid := string(r.source.ConfigMap.UID) utillog.Infof("attempting to download ConfigMap with UID %q", uid) // get the ConfigMap via namespace/name, there doesn't seem to be a way to get it by UID - cm, err := client.CoreV1().ConfigMaps(r.source.ConfigMapRef.Namespace).Get(r.source.ConfigMapRef.Name, metav1.GetOptions{}) + cm, err := client.CoreV1().ConfigMaps(r.source.ConfigMap.Namespace).Get(r.source.ConfigMap.Name, metav1.GetOptions{}) if err != nil { reason = fmt.Sprintf(status.FailSyncReasonDownloadFmt, r.APIPath()) return nil, reason, fmt.Errorf("%s, error: %v", reason, err) } - // ensure that UID matches the UID on the reference, the ObjectReference must be unambiguous - if r.source.ConfigMapRef.UID != cm.UID { - reason = fmt.Sprintf(status.FailSyncReasonUIDMismatchFmt, r.source.ConfigMapRef.UID, r.APIPath(), cm.UID) + // ensure that UID matches the UID on the source + if r.source.ConfigMap.UID != cm.UID { + reason = fmt.Sprintf(status.FailSyncReasonUIDMismatchFmt, r.source.ConfigMap.UID, r.APIPath(), cm.UID) return nil, reason, fmt.Errorf(reason) } @@ -161,11 +166,12 @@ func (r *remoteConfigMap) Download(client clientset.Interface) (Payload, string, } func (r *remoteConfigMap) Encode() ([]byte, error) { - encoder, err := utilcodec.NewYAMLEncoder(apiv1.GroupName) + encoder, err := utilcodec.NewKubeletconfigYAMLEncoder(kubeletconfigv1beta1.SchemeGroupVersion) if err != nil { return nil, err } - data, err := runtime.Encode(encoder, r.source) + + data, err := runtime.Encode(encoder, &kubeletconfigv1beta1.SerializedNodeConfigSource{Source: *r.source}) if err != nil { return nil, err } diff --git a/pkg/kubelet/kubeletconfig/checkpoint/download_test.go b/pkg/kubelet/kubeletconfig/checkpoint/download_test.go index 0f9b3a362c..caa5aa3f3c 100644 --- a/pkg/kubelet/kubeletconfig/checkpoint/download_test.go +++ b/pkg/kubelet/kubeletconfig/checkpoint/download_test.go @@ -36,33 +36,30 @@ func TestNewRemoteConfigSource(t *testing.T) { expect RemoteConfigSource err string }{ - // all NodeConfigSource subfields nil - {"all NodeConfigSource subfields nil", - &apiv1.NodeConfigSource{}, nil, "exactly one subfield must be non-nil"}, - {"ConfigMapRef: empty name, namespace, and UID", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{}}, nil, "invalid ObjectReference"}, - // ConfigMapRef: empty name and namespace - {"ConfigMapRef: empty name and namespace", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{UID: "uid"}}, nil, "invalid ObjectReference"}, - // ConfigMapRef: empty name and UID - {"ConfigMapRef: empty name and UID", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Namespace: "namespace"}}, nil, "invalid ObjectReference"}, - // ConfigMapRef: empty namespace and UID - {"ConfigMapRef: empty namespace and UID", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name"}}, nil, "invalid ObjectReference"}, - // ConfigMapRef: empty UID - {"ConfigMapRef: empty namespace and UID", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace"}}, nil, "invalid ObjectReference"}, - // ConfigMapRef: empty namespace - {"ConfigMapRef: empty namespace and UID", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", UID: "uid"}}, nil, "invalid ObjectReference"}, - // ConfigMapRef: empty name - {"ConfigMapRef: empty namespace and UID", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Namespace: "namespace", UID: "uid"}}, nil, "invalid ObjectReference"}, - // ConfigMapRef: valid reference - {"ConfigMapRef: valid reference", - &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}, - &remoteConfigMap{&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}}, ""}, + { + desc: "all NodeConfigSource subfields nil", + source: &apiv1.NodeConfigSource{}, + expect: nil, + err: "exactly one subfield must be non-nil", + }, + { + desc: "ConfigMap: valid reference", + source: &apiv1.NodeConfigSource{ + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}, + expect: &remoteConfigMap{&apiv1.NodeConfigSource{ + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}}, + err: "", + }, } for _, c := range cases { @@ -82,7 +79,12 @@ func TestNewRemoteConfigSource(t *testing.T) { func TestRemoteConfigMapUID(t *testing.T) { const expect = "uid" - source, _, err := NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: expect}}) + source, _, err := NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: expect, + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("error constructing remote config source: %v", err) } @@ -93,14 +95,22 @@ func TestRemoteConfigMapUID(t *testing.T) { } func TestRemoteConfigMapAPIPath(t *testing.T) { - const namespace = "namespace" - const name = "name" - source, _, err := NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: name, Namespace: namespace, UID: "uid"}}) + const ( + name = "name" + namespace = "namespace" + ) + source, _, err := NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: name, + Namespace: namespace, + UID: "uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("error constructing remote config source: %v", err) } expect := fmt.Sprintf(configMapAPIPathFmt, namespace, name) path := source.APIPath() + if expect != path { t.Errorf("expect %q, but got %q", expect, path) } @@ -133,18 +143,39 @@ func TestRemoteConfigMapDownload(t *testing.T) { expect Payload err string }{ - // object doesn't exist - {"object doesn't exist", - makeSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "bogus", Namespace: "namespace", UID: "bogus"}}), - nil, "not found"}, - // UID of downloaded object doesn't match UID of referent found via namespace/name - {"UID is incorrect for namespace/name", - makeSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "bogus"}}), - nil, "does not match"}, - // successful download - {"object exists and reference is correct", - makeSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}), - payload, ""}, + { + desc: "object doesn't exist", + source: makeSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "bogus", + Namespace: "namespace", + UID: "bogus", + KubeletConfigKey: "kubelet", + }}), + expect: nil, + err: "not found", + }, + { + desc: "UID is incorrect for namespace/name", + source: makeSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "bogus", + KubeletConfigKey: "kubelet", + }}), + expect: nil, + err: "does not match", + }, + { + desc: "object exists and reference is correct", + source: makeSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}), + expect: payload, + err: "", + }, } for _, c := range cases { @@ -173,10 +204,12 @@ func TestEqualRemoteConfigSources(t *testing.T) { {"a nil", nil, &remoteConfigMap{}, false}, {"b nil", &remoteConfigMap{}, nil, false}, {"neither nil, equal", &remoteConfigMap{}, &remoteConfigMap{}, true}, - {"neither nil, not equal", - &remoteConfigMap{&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "a"}}}, - &remoteConfigMap{}, - false}, + { + desc: "neither nil, not equal", + a: &remoteConfigMap{&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{Name: "a"}}}, + b: &remoteConfigMap{&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{KubeletConfigKey: "kubelet"}}}, + expect: false, + }, } for _, c := range cases { diff --git a/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go b/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go index 3ce1744fab..309e9d908d 100644 --- a/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go +++ b/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore.go @@ -35,7 +35,6 @@ const ( lastKnownGoodFile = "last-known-good" checkpointsDir = "checkpoints" - kubeletKey = "kubelet" // TODO(mtaufen): eventually the API will have a way to parameterize the kubelet file name, and then we can remove this ) // fsStore is for tracking checkpoints in the local filesystem, implements Store @@ -101,7 +100,7 @@ func (s *fsStore) Load(source checkpoint.RemoteConfigSource) (*kubeletconfig.Kub } // load the kubelet config file utillog.Infof("loading kubelet configuration checkpoint for source %s", sourceFmt) - loader, err := configfiles.NewFsLoader(s.fs, filepath.Join(s.checkpointPath(source.UID()), kubeletKey)) + loader, err := configfiles.NewFsLoader(s.fs, filepath.Join(s.checkpointPath(source.UID()), source.KubeletFilename())) if err != nil { return nil, err } diff --git a/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore_test.go b/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore_test.go index ee1c8b57e6..0aa656b76f 100644 --- a/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore_test.go +++ b/pkg/kubelet/kubeletconfig/checkpoint/store/fsstore_test.go @@ -125,7 +125,12 @@ func TestFsStoreExists(t *testing.T) { for _, c := range cases { t.Run(c.desc, func(t *testing.T) { source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ - ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: c.uid}}) + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: c.uid, + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("error constructing remote config source: %v", err) } @@ -214,7 +219,10 @@ func TestFsStoreLoad(t *testing.T) { t.Fatalf("error encoding KubeletConfiguration: %v", err) } // construct a payload that contains the kubeletconfig - const uid = "uid" + const ( + uid = "uid" + kubeletKey = "kubelet" + ) p, err := checkpoint.NewConfigMapPayload(&apiv1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{UID: types.UID(uid)}, Data: map[string]string{ @@ -241,7 +249,12 @@ func TestFsStoreLoad(t *testing.T) { for _, c := range cases { t.Run(c.desc, func(t *testing.T) { source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ - ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: c.uid}}) + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: c.uid, + KubeletConfigKey: kubeletKey, + }}) if err != nil { t.Fatalf("error constructing remote config source: %v", err) } @@ -291,7 +304,12 @@ func TestFsStoreCurrent(t *testing.T) { } source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ - ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}) + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -329,7 +347,12 @@ func TestFsStoreLastKnownGood(t *testing.T) { } source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ - ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}) + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -367,15 +390,21 @@ func TestFsStoreSetCurrent(t *testing.T) { } const uid = "uid" - expect := fmt.Sprintf(`apiVersion: v1 -configMapRef: - name: name - namespace: namespace - uid: %s -kind: NodeConfigSource + expect := fmt.Sprintf(`apiVersion: kubelet.config.k8s.io/v1beta1 +kind: SerializedNodeConfigSource +source: + configMap: + kubeletConfigKey: kubelet + name: name + namespace: namespace + uid: %s `, uid) - source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - Name: "name", Namespace: "namespace", UID: types.UID(uid)}}) + source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: types.UID(uid), + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -399,15 +428,21 @@ func TestFsStoreSetLastKnownGood(t *testing.T) { } const uid = "uid" - expect := fmt.Sprintf(`apiVersion: v1 -configMapRef: - name: name - namespace: namespace - uid: %s -kind: NodeConfigSource + expect := fmt.Sprintf(`apiVersion: kubelet.config.k8s.io/v1beta1 +kind: SerializedNodeConfigSource +source: + configMap: + kubeletConfigKey: kubelet + name: name + namespace: namespace + uid: %s `, uid) - source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - Name: "name", Namespace: "namespace", UID: types.UID(uid)}}) + source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: types.UID(uid), + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -430,11 +465,21 @@ func TestFsStoreReset(t *testing.T) { t.Fatalf("error constructing store: %v", err) } - source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}) + source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } - otherSource, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "other-name", Namespace: "namespace", UID: "other-uid"}}) + otherSource, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "other-name", + Namespace: "namespace", + UID: "other-uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -498,7 +543,12 @@ func TestFsStoreReadRemoteConfigSource(t *testing.T) { } source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ - ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}) + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -534,7 +584,12 @@ func TestFsStoreWriteRemoteConfigSource(t *testing.T) { t.Fatalf("error constructing store: %v", err) } - source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}) + source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } diff --git a/pkg/kubelet/kubeletconfig/checkpoint/store/store_test.go b/pkg/kubelet/kubeletconfig/checkpoint/store/store_test.go index 4d4acb2934..0ef91b236b 100644 --- a/pkg/kubelet/kubeletconfig/checkpoint/store/store_test.go +++ b/pkg/kubelet/kubeletconfig/checkpoint/store/store_test.go @@ -26,11 +26,21 @@ import ( ) func TestReset(t *testing.T) { - source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "name", Namespace: "namespace", UID: "uid"}}) + source, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "name", + Namespace: "namespace", + UID: "uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } - otherSource, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{Name: "other-name", Namespace: "namespace", UID: "other-uid"}}) + otherSource, _, err := checkpoint.NewRemoteConfigSource(&apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Name: "other-name", + Namespace: "namespace", + UID: "other-uid", + KubeletConfigKey: "kubelet", + }}) if err != nil { t.Fatalf("unexpected error: %v", err) } diff --git a/pkg/kubelet/kubeletconfig/status/status.go b/pkg/kubelet/kubeletconfig/status/status.go index 014b7981d6..c603a6d4e6 100644 --- a/pkg/kubelet/kubeletconfig/status/status.go +++ b/pkg/kubelet/kubeletconfig/status/status.go @@ -65,11 +65,11 @@ const ( FailSyncReasonFmt = "failed to sync, reason: %s" // FailSyncReasonAllNilSubfields is used when no subfields are set FailSyncReasonAllNilSubfields = "invalid NodeConfigSource, exactly one subfield must be non-nil, but all were nil" - // FailSyncReasonPartialObjectReference is used when some required subfields remain unset - FailSyncReasonPartialObjectReference = "invalid ObjectReference, all of UID, Name, and Namespace must be specified" + // FailSyncReasonPartialConfigMapSource is used when some required subfields remain unset + FailSyncReasonPartialConfigMapSource = "invalid ConfigSource.ConfigMap, all of UID, Name, Namespace, and KubeletConfigKey must be specified" // FailSyncReasonUIDMismatchFmt is used when there is a UID mismatch between the referenced and downloaded ConfigMaps, // this can happen because objects must be downloaded by namespace/name, rather than by UID - FailSyncReasonUIDMismatchFmt = "invalid ConfigSource.ConfigMapRef.UID: %s does not match %s.UID: %s" + FailSyncReasonUIDMismatchFmt = "invalid ConfigSource.ConfigMap.UID: %s does not match %s.UID: %s" // FailSyncReasonDownloadFmt is used when the download fails, e.g. due to network issues FailSyncReasonDownloadFmt = "failed to download: %s" // FailSyncReasonInformer is used when the informer fails to report the Node object diff --git a/pkg/kubelet/kubeletconfig/util/codec/codec.go b/pkg/kubelet/kubeletconfig/util/codec/codec.go index c499ac8c0c..4559e38dfd 100644 --- a/pkg/kubelet/kubeletconfig/util/codec/codec.go +++ b/pkg/kubelet/kubeletconfig/util/codec/codec.go @@ -32,7 +32,7 @@ import ( // EncodeKubeletConfig encodes an internal KubeletConfiguration to an external YAML representation func EncodeKubeletConfig(internal *kubeletconfig.KubeletConfiguration, targetVersion schema.GroupVersion) ([]byte, error) { - encoder, err := newKubeletConfigYAMLEncoder(targetVersion) + encoder, err := NewKubeletconfigYAMLEncoder(targetVersion) if err != nil { return nil, err } @@ -44,8 +44,8 @@ func EncodeKubeletConfig(internal *kubeletconfig.KubeletConfiguration, targetVer return data, nil } -// newKubeletConfigYAMLEncoder returns an encoder that can write a KubeletConfig to YAML -func newKubeletConfigYAMLEncoder(targetVersion schema.GroupVersion) (runtime.Encoder, error) { +// NewKubeletconfigYAMLEncoder returns an encoder that can write objects in the kubeletconfig API group to YAML +func NewKubeletconfigYAMLEncoder(targetVersion schema.GroupVersion) (runtime.Encoder, error) { _, codecs, err := scheme.NewSchemeAndCodecs() if err != nil { return nil, err diff --git a/pkg/kubelet/kubeletconfig/util/equal/equal.go b/pkg/kubelet/kubeletconfig/util/equal/equal.go index 5a59edb94b..b943e019f9 100644 --- a/pkg/kubelet/kubeletconfig/util/equal/equal.go +++ b/pkg/kubelet/kubeletconfig/util/equal/equal.go @@ -18,33 +18,6 @@ package equal import apiv1 "k8s.io/api/core/v1" -// ConfigSourceEq returns true if the two config sources are semantically equivalent in the context of dynamic config -func ConfigSourceEq(a, b *apiv1.NodeConfigSource) bool { - if a == b { - return true - } else if a == nil || b == nil { - // not equal, and one is nil - return false - } - // check equality of config source subifelds - if a.ConfigMapRef != b.ConfigMapRef { - return ObjectRefEq(a.ConfigMapRef, b.ConfigMapRef) - } - // all internal subfields of the config source are equal - return true -} - -// ObjectRefEq returns true if the two object references are semantically equivalent in the context of dynamic config -func ObjectRefEq(a, b *apiv1.ObjectReference) bool { - if a == b { - return true - } else if a == nil || b == nil { - // not equal, and one is nil - return false - } - return a.UID == b.UID && a.Namespace == b.Namespace && a.Name == b.Name -} - // KubeletConfigOkEq returns true if the two conditions are semantically equivalent in the context of dynamic config func KubeletConfigOkEq(a, b *apiv1.NodeCondition) bool { return a.Message == b.Message && a.Reason == b.Reason && a.Status == b.Status diff --git a/pkg/kubelet/kubeletconfig/watch.go b/pkg/kubelet/kubeletconfig/watch.go index 8c02e3c9a8..09b22233e0 100644 --- a/pkg/kubelet/kubeletconfig/watch.go +++ b/pkg/kubelet/kubeletconfig/watch.go @@ -21,13 +21,13 @@ import ( "time" apiv1 "k8s.io/api/core/v1" + apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" kuberuntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" - utilequal "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/util/equal" utillog "k8s.io/kubernetes/pkg/kubelet/kubeletconfig/util/log" ) @@ -94,7 +94,7 @@ func (cc *Controller) onUpdateNodeEvent(oldObj interface{}, newObj interface{}) utillog.Errorf("failed to cast old object to Node, couldn't handle event") return } - if !utilequal.ConfigSourceEq(oldNode.Spec.ConfigSource, newNode.Spec.ConfigSource) { + if !apiequality.Semantic.DeepEqual(oldNode.Spec.ConfigSource, newNode.Spec.ConfigSource) { cc.pokeConfigSourceWorker() } } diff --git a/plugin/pkg/admission/noderestriction/admission_test.go b/plugin/pkg/admission/noderestriction/admission_test.go index 93dec71461..a5cd8063b8 100644 --- a/plugin/pkg/admission/noderestriction/admission_test.go +++ b/plugin/pkg/admission/noderestriction/admission_test.go @@ -91,9 +91,19 @@ func Test_nodePlugin_Admit(t *testing.T) { mynodeObjMeta = metav1.ObjectMeta{Name: "mynode"} mynodeObj = &api.Node{ObjectMeta: mynodeObjMeta} mynodeObjConfigA = &api.Node{ObjectMeta: mynodeObjMeta, Spec: api.NodeSpec{ConfigSource: &api.NodeConfigSource{ - ConfigMapRef: &api.ObjectReference{Name: "foo", Namespace: "bar", UID: "fooUID"}}}} + ConfigMap: &api.ConfigMapNodeConfigSource{ + Name: "foo", + Namespace: "bar", + UID: "fooUID", + KubeletConfigKey: "kubelet", + }}}} mynodeObjConfigB = &api.Node{ObjectMeta: mynodeObjMeta, Spec: api.NodeSpec{ConfigSource: &api.NodeConfigSource{ - ConfigMapRef: &api.ObjectReference{Name: "qux", Namespace: "bar", UID: "quxUID"}}}} + ConfigMap: &api.ConfigMapNodeConfigSource{ + Name: "qux", + Namespace: "bar", + UID: "quxUID", + KubeletConfigKey: "kubelet", + }}}} othernodeObj = &api.Node{ObjectMeta: metav1.ObjectMeta{Name: "othernode"}} mymirrorpod = makeTestPod("ns", "mymirrorpod", "mynode", true) diff --git a/plugin/pkg/auth/authorizer/node/graph.go b/plugin/pkg/auth/authorizer/node/graph.go index 7a1b1b97e0..872ea6cadc 100644 --- a/plugin/pkg/auth/authorizer/node/graph.go +++ b/plugin/pkg/auth/authorizer/node/graph.go @@ -346,7 +346,7 @@ func (g *Graph) DeleteVolumeAttachment(name string) { g.deleteVertex_locked(vaVertexType, "", name) } -// SetNodeConfigMap sets up edges for the Node.Spec.ConfigSource.ConfigMapRef relationship: +// SetNodeConfigMap sets up edges for the Node.Spec.ConfigSource.ConfigMap relationship: // // configmap -> node func (g *Graph) SetNodeConfigMap(nodeName, configMapName, configMapNamespace string) { diff --git a/plugin/pkg/auth/authorizer/node/graph_populator.go b/plugin/pkg/auth/authorizer/node/graph_populator.go index bf8e0e324f..3d8f9baa6a 100644 --- a/plugin/pkg/auth/authorizer/node/graph_populator.go +++ b/plugin/pkg/auth/authorizer/node/graph_populator.go @@ -84,19 +84,19 @@ func (g *graphPopulator) updateNode(oldObj, obj interface{}) { oldNode = oldObj.(*api.Node) } - // we only set up rules for ConfigMapRef today, because that is the only reference type + // we only set up rules for ConfigMap today, because that is the only reference type var name, namespace string - if source := node.Spec.ConfigSource; source != nil && source.ConfigMapRef != nil { - name = source.ConfigMapRef.Name - namespace = source.ConfigMapRef.Namespace + if source := node.Spec.ConfigSource; source != nil && source.ConfigMap != nil { + name = source.ConfigMap.Name + namespace = source.ConfigMap.Namespace } var oldName, oldNamespace string if oldNode != nil { - if oldSource := oldNode.Spec.ConfigSource; oldSource != nil && oldSource.ConfigMapRef != nil { - oldName = oldSource.ConfigMapRef.Name - oldNamespace = oldSource.ConfigMapRef.Namespace + if oldSource := oldNode.Spec.ConfigSource; oldSource != nil && oldSource.ConfigMap != nil { + oldName = oldSource.ConfigMap.Name + oldNamespace = oldSource.ConfigMap.Namespace } } diff --git a/plugin/pkg/auth/authorizer/node/node_authorizer_test.go b/plugin/pkg/auth/authorizer/node/node_authorizer_test.go index f3affd2552..aa1fede301 100644 --- a/plugin/pkg/auth/authorizer/node/node_authorizer_test.go +++ b/plugin/pkg/auth/authorizer/node/node_authorizer_test.go @@ -693,10 +693,11 @@ func generate(opts sampleDataOpts) ([]*api.Node, []*api.Pod, []*api.PersistentVo ObjectMeta: metav1.ObjectMeta{Name: nodeName}, Spec: api.NodeSpec{ ConfigSource: &api.NodeConfigSource{ - ConfigMapRef: &api.ObjectReference{ - Name: name, - Namespace: "ns0", - UID: types.UID(fmt.Sprintf("ns0-%s", name)), + ConfigMap: &api.ConfigMapNodeConfigSource{ + Name: name, + Namespace: "ns0", + UID: types.UID(fmt.Sprintf("ns0-%s", name)), + KubeletConfigKey: "kubelet", }, }, }, diff --git a/staging/src/k8s.io/api/core/v1/generated.pb.go b/staging/src/k8s.io/api/core/v1/generated.pb.go index 5406c1283c..b126dd0743 100644 --- a/staging/src/k8s.io/api/core/v1/generated.pb.go +++ b/staging/src/k8s.io/api/core/v1/generated.pb.go @@ -46,6 +46,7 @@ limitations under the License. ConfigMapEnvSource ConfigMapKeySelector ConfigMapList + ConfigMapNodeConfigSource ConfigMapProjection ConfigMapVolumeSource Container @@ -333,708 +334,714 @@ func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } func (*ConfigMapList) ProtoMessage() {} func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } +func (m *ConfigMapNodeConfigSource) Reset() { *m = ConfigMapNodeConfigSource{} } +func (*ConfigMapNodeConfigSource) ProtoMessage() {} +func (*ConfigMapNodeConfigSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{21} +} + func (m *ConfigMapProjection) Reset() { *m = ConfigMapProjection{} } func (*ConfigMapProjection) ProtoMessage() {} -func (*ConfigMapProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } +func (*ConfigMapProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } func (m *ConfigMapVolumeSource) Reset() { *m = ConfigMapVolumeSource{} } func (*ConfigMapVolumeSource) ProtoMessage() {} -func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } +func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } func (m *Container) Reset() { *m = Container{} } func (*Container) ProtoMessage() {} -func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } +func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } func (m *ContainerImage) Reset() { *m = ContainerImage{} } func (*ContainerImage) ProtoMessage() {} -func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } +func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } func (m *ContainerPort) Reset() { *m = ContainerPort{} } func (*ContainerPort) ProtoMessage() {} -func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } +func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } func (m *ContainerState) Reset() { *m = ContainerState{} } func (*ContainerState) ProtoMessage() {} -func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } +func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } func (m *ContainerStateRunning) Reset() { *m = ContainerStateRunning{} } func (*ContainerStateRunning) ProtoMessage() {} -func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } +func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } func (m *ContainerStateTerminated) Reset() { *m = ContainerStateTerminated{} } func (*ContainerStateTerminated) ProtoMessage() {} func (*ContainerStateTerminated) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{28} + return fileDescriptorGenerated, []int{29} } func (m *ContainerStateWaiting) Reset() { *m = ContainerStateWaiting{} } func (*ContainerStateWaiting) ProtoMessage() {} -func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } +func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } func (*ContainerStatus) ProtoMessage() {} -func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } +func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } func (*DaemonEndpoint) ProtoMessage() {} -func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } +func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } func (m *DownwardAPIProjection) Reset() { *m = DownwardAPIProjection{} } func (*DownwardAPIProjection) ProtoMessage() {} -func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } +func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } func (*DownwardAPIVolumeFile) ProtoMessage() {} -func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } +func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } func (*DownwardAPIVolumeSource) ProtoMessage() {} func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{34} + return fileDescriptorGenerated, []int{35} } func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } func (*EmptyDirVolumeSource) ProtoMessage() {} -func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } +func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } func (*EndpointAddress) ProtoMessage() {} -func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } +func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } func (m *EndpointPort) Reset() { *m = EndpointPort{} } func (*EndpointPort) ProtoMessage() {} -func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } +func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } func (*EndpointSubset) ProtoMessage() {} -func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } +func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } func (m *Endpoints) Reset() { *m = Endpoints{} } func (*Endpoints) ProtoMessage() {} -func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } +func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } func (m *EndpointsList) Reset() { *m = EndpointsList{} } func (*EndpointsList) ProtoMessage() {} -func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } +func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } func (m *EnvFromSource) Reset() { *m = EnvFromSource{} } func (*EnvFromSource) ProtoMessage() {} -func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } +func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } func (m *EnvVar) Reset() { *m = EnvVar{} } func (*EnvVar) ProtoMessage() {} -func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } +func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } func (*EnvVarSource) ProtoMessage() {} -func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } +func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } func (m *Event) Reset() { *m = Event{} } func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } func (m *EventList) Reset() { *m = EventList{} } func (*EventList) ProtoMessage() {} -func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } +func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } func (m *EventSeries) Reset() { *m = EventSeries{} } func (*EventSeries) ProtoMessage() {} -func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } +func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } func (m *EventSource) Reset() { *m = EventSource{} } func (*EventSource) ProtoMessage() {} -func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } +func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } func (m *ExecAction) Reset() { *m = ExecAction{} } func (*ExecAction) ProtoMessage() {} -func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } +func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } func (*FCVolumeSource) ProtoMessage() {} -func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } +func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } func (m *FlexPersistentVolumeSource) Reset() { *m = FlexPersistentVolumeSource{} } func (*FlexPersistentVolumeSource) ProtoMessage() {} func (*FlexPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{50} + return fileDescriptorGenerated, []int{51} } func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } func (*FlexVolumeSource) ProtoMessage() {} -func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } +func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } func (*FlockerVolumeSource) ProtoMessage() {} -func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } +func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{53} + return fileDescriptorGenerated, []int{54} } func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } func (*GitRepoVolumeSource) ProtoMessage() {} -func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } +func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } func (*GlusterfsVolumeSource) ProtoMessage() {} -func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } +func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } func (*HTTPGetAction) ProtoMessage() {} -func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } +func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } func (*HTTPHeader) ProtoMessage() {} -func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } +func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } func (m *Handler) Reset() { *m = Handler{} } func (*Handler) ProtoMessage() {} -func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } +func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } func (m *HostAlias) Reset() { *m = HostAlias{} } func (*HostAlias) ProtoMessage() {} -func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } +func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } func (*HostPathVolumeSource) ProtoMessage() {} -func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } +func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } func (m *ISCSIPersistentVolumeSource) Reset() { *m = ISCSIPersistentVolumeSource{} } func (*ISCSIPersistentVolumeSource) ProtoMessage() {} func (*ISCSIPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{61} + return fileDescriptorGenerated, []int{62} } func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } func (*ISCSIVolumeSource) ProtoMessage() {} -func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } +func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } func (m *KeyToPath) Reset() { *m = KeyToPath{} } func (*KeyToPath) ProtoMessage() {} -func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } +func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} } func (m *Lifecycle) Reset() { *m = Lifecycle{} } func (*Lifecycle) ProtoMessage() {} -func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} } +func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } func (m *LimitRange) Reset() { *m = LimitRange{} } func (*LimitRange) ProtoMessage() {} -func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } +func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } func (*LimitRangeItem) ProtoMessage() {} -func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } +func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } func (*LimitRangeList) ProtoMessage() {} -func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } +func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } func (*LimitRangeSpec) ProtoMessage() {} -func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } +func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } func (m *List) Reset() { *m = List{} } func (*List) ProtoMessage() {} -func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } +func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } func (*LoadBalancerIngress) ProtoMessage() {} -func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } +func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } func (*LoadBalancerStatus) ProtoMessage() {} -func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } +func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } func (*LocalObjectReference) ProtoMessage() {} -func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } +func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } func (m *LocalVolumeSource) Reset() { *m = LocalVolumeSource{} } func (*LocalVolumeSource) ProtoMessage() {} -func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } +func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } func (*NFSVolumeSource) ProtoMessage() {} -func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } +func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } func (m *Namespace) Reset() { *m = Namespace{} } func (*Namespace) ProtoMessage() {} -func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } +func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } func (m *NamespaceList) Reset() { *m = NamespaceList{} } func (*NamespaceList) ProtoMessage() {} -func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } +func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } func (*NamespaceSpec) ProtoMessage() {} -func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } +func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } func (*NamespaceStatus) ProtoMessage() {} -func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } +func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } func (m *Node) Reset() { *m = Node{} } func (*Node) ProtoMessage() {} -func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } +func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } func (m *NodeAddress) Reset() { *m = NodeAddress{} } func (*NodeAddress) ProtoMessage() {} -func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } +func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } func (*NodeAffinity) ProtoMessage() {} -func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } +func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } func (m *NodeCondition) Reset() { *m = NodeCondition{} } func (*NodeCondition) ProtoMessage() {} -func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } +func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } func (m *NodeConfigSource) Reset() { *m = NodeConfigSource{} } func (*NodeConfigSource) ProtoMessage() {} -func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } +func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } func (*NodeDaemonEndpoints) ProtoMessage() {} -func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } +func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } func (m *NodeList) Reset() { *m = NodeList{} } func (*NodeList) ProtoMessage() {} -func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } +func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } func (*NodeProxyOptions) ProtoMessage() {} -func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } +func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } func (m *NodeResources) Reset() { *m = NodeResources{} } func (*NodeResources) ProtoMessage() {} -func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } +func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } func (m *NodeSelector) Reset() { *m = NodeSelector{} } func (*NodeSelector) ProtoMessage() {} -func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } +func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} } func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } func (*NodeSelectorRequirement) ProtoMessage() {} func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{89} + return fileDescriptorGenerated, []int{90} } func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } func (*NodeSelectorTerm) ProtoMessage() {} -func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} } +func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } func (m *NodeSpec) Reset() { *m = NodeSpec{} } func (*NodeSpec) ProtoMessage() {} -func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } +func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} } func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} -func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} } +func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} } func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } func (*NodeSystemInfo) ProtoMessage() {} -func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} } +func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} } func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } func (*ObjectFieldSelector) ProtoMessage() {} -func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} } +func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } func (m *ObjectReference) Reset() { *m = ObjectReference{} } func (*ObjectReference) ProtoMessage() {} -func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } +func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } func (*PersistentVolume) ProtoMessage() {} -func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } +func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } func (*PersistentVolumeClaim) ProtoMessage() {} -func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } +func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } func (m *PersistentVolumeClaimCondition) Reset() { *m = PersistentVolumeClaimCondition{} } func (*PersistentVolumeClaimCondition) ProtoMessage() {} func (*PersistentVolumeClaimCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{98} + return fileDescriptorGenerated, []int{99} } func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } func (*PersistentVolumeClaimList) ProtoMessage() {} func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{99} + return fileDescriptorGenerated, []int{100} } func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } func (*PersistentVolumeClaimSpec) ProtoMessage() {} func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{100} + return fileDescriptorGenerated, []int{101} } func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } func (*PersistentVolumeClaimStatus) ProtoMessage() {} func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{101} + return fileDescriptorGenerated, []int{102} } func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{102} + return fileDescriptorGenerated, []int{103} } func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } func (*PersistentVolumeList) ProtoMessage() {} -func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{103} } +func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{104} } func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } func (*PersistentVolumeSource) ProtoMessage() {} func (*PersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{104} + return fileDescriptorGenerated, []int{105} } func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } func (*PersistentVolumeSpec) ProtoMessage() {} -func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{105} } +func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} } func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } func (*PersistentVolumeStatus) ProtoMessage() {} func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{106} + return fileDescriptorGenerated, []int{107} } func (m *PhotonPersistentDiskVolumeSource) Reset() { *m = PhotonPersistentDiskVolumeSource{} } func (*PhotonPersistentDiskVolumeSource) ProtoMessage() {} func (*PhotonPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{107} + return fileDescriptorGenerated, []int{108} } func (m *Pod) Reset() { *m = Pod{} } func (*Pod) ProtoMessage() {} -func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } +func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } func (m *PodAffinity) Reset() { *m = PodAffinity{} } func (*PodAffinity) ProtoMessage() {} -func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } +func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } func (*PodAffinityTerm) ProtoMessage() {} -func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } +func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } func (*PodAntiAffinity) ProtoMessage() {} -func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } +func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } func (*PodAttachOptions) ProtoMessage() {} -func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } +func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } func (m *PodCondition) Reset() { *m = PodCondition{} } func (*PodCondition) ProtoMessage() {} -func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } +func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } func (m *PodDNSConfig) Reset() { *m = PodDNSConfig{} } func (*PodDNSConfig) ProtoMessage() {} -func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } +func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } func (m *PodDNSConfigOption) Reset() { *m = PodDNSConfigOption{} } func (*PodDNSConfigOption) ProtoMessage() {} -func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } +func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } func (*PodExecOptions) ProtoMessage() {} -func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } +func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } func (m *PodList) Reset() { *m = PodList{} } func (*PodList) ProtoMessage() {} -func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } +func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } func (*PodLogOptions) ProtoMessage() {} -func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } +func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} } func (*PodPortForwardOptions) ProtoMessage() {} -func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } +func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } func (*PodProxyOptions) ProtoMessage() {} -func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } +func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } func (*PodSecurityContext) ProtoMessage() {} -func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } +func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } func (m *PodSignature) Reset() { *m = PodSignature{} } func (*PodSignature) ProtoMessage() {} -func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } +func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } func (m *PodSpec) Reset() { *m = PodSpec{} } func (*PodSpec) ProtoMessage() {} -func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } func (m *PodStatus) Reset() { *m = PodStatus{} } func (*PodStatus) ProtoMessage() {} -func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } +func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } func (*PodStatusResult) ProtoMessage() {} -func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } +func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } func (m *PodTemplate) Reset() { *m = PodTemplate{} } func (*PodTemplate) ProtoMessage() {} -func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } +func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } func (*PodTemplateList) ProtoMessage() {} -func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } +func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } func (*PodTemplateSpec) ProtoMessage() {} -func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } func (*PortworxVolumeSource) ProtoMessage() {} -func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } +func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } func (*PreferredSchedulingTerm) ProtoMessage() {} func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{132} + return fileDescriptorGenerated, []int{133} } func (m *Probe) Reset() { *m = Probe{} } func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } func (*ProjectedVolumeSource) ProtoMessage() {} -func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } func (m *RBDPersistentVolumeSource) Reset() { *m = RBDPersistentVolumeSource{} } func (*RBDPersistentVolumeSource) ProtoMessage() {} func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{136} + return fileDescriptorGenerated, []int{137} } func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{140} + return fileDescriptorGenerated, []int{141} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{141} + return fileDescriptorGenerated, []int{142} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{142} + return fileDescriptorGenerated, []int{143} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{143} + return fileDescriptorGenerated, []int{144} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{151} + return fileDescriptorGenerated, []int{152} } func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } func (*ScaleIOVolumeSource) ProtoMessage() {} -func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } +func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } func (*SessionAffinityConfig) ProtoMessage() {} -func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } +func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } func (*StorageOSPersistentVolumeSource) ProtoMessage() {} func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{171} + return fileDescriptorGenerated, []int{172} } func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } func (*StorageOSVolumeSource) ProtoMessage() {} -func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } +func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} } func (m *VolumeDevice) Reset() { *m = VolumeDevice{} } func (*VolumeDevice) ProtoMessage() {} -func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} } +func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} } func (m *VolumeNodeAffinity) Reset() { *m = VolumeNodeAffinity{} } func (*VolumeNodeAffinity) ProtoMessage() {} -func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} } +func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } +func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{183} + return fileDescriptorGenerated, []int{184} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{184} + return fileDescriptorGenerated, []int{185} } func init() { @@ -1059,6 +1066,7 @@ func init() { proto.RegisterType((*ConfigMapEnvSource)(nil), "k8s.io.api.core.v1.ConfigMapEnvSource") proto.RegisterType((*ConfigMapKeySelector)(nil), "k8s.io.api.core.v1.ConfigMapKeySelector") proto.RegisterType((*ConfigMapList)(nil), "k8s.io.api.core.v1.ConfigMapList") + proto.RegisterType((*ConfigMapNodeConfigSource)(nil), "k8s.io.api.core.v1.ConfigMapNodeConfigSource") proto.RegisterType((*ConfigMapProjection)(nil), "k8s.io.api.core.v1.ConfigMapProjection") proto.RegisterType((*ConfigMapVolumeSource)(nil), "k8s.io.api.core.v1.ConfigMapVolumeSource") proto.RegisterType((*Container)(nil), "k8s.io.api.core.v1.Container") @@ -2148,6 +2156,44 @@ func (m *ConfigMapList) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *ConfigMapNodeConfigSource) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConfigMapNodeConfigSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i += copy(dAtA[i:], m.Namespace) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i += copy(dAtA[i:], m.Name) + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID))) + i += copy(dAtA[i:], m.UID) + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceVersion))) + i += copy(dAtA[i:], m.ResourceVersion) + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.KubeletConfigKey))) + i += copy(dAtA[i:], m.KubeletConfigKey) + return i, nil +} + func (m *ConfigMapProjection) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5020,11 +5066,11 @@ func (m *NodeConfigSource) MarshalTo(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.ConfigMapRef != nil { - dAtA[i] = 0xa + if m.ConfigMap != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapRef.Size())) - n84, err := m.ConfigMapRef.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) + n84, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } @@ -10786,6 +10832,22 @@ func (m *ConfigMapList) Size() (n int) { return n } +func (m *ConfigMapNodeConfigSource) Size() (n int) { + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KubeletConfigKey) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *ConfigMapProjection) Size() (n int) { var l int _ = l @@ -11826,8 +11888,8 @@ func (m *NodeCondition) Size() (n int) { func (m *NodeConfigSource) Size() (n int) { var l int _ = l - if m.ConfigMapRef != nil { - l = m.ConfigMapRef.Size() + if m.ConfigMap != nil { + l = m.ConfigMap.Size() n += 1 + l + sovGenerated(uint64(l)) } return n @@ -14095,6 +14157,20 @@ func (this *ConfigMapList) String() string { }, "") return s } +func (this *ConfigMapNodeConfigSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapNodeConfigSource{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `KubeletConfigKey:` + fmt.Sprintf("%v", this.KubeletConfigKey) + `,`, + `}`, + }, "") + return s +} func (this *ConfigMapProjection) String() string { if this == nil { return "nil" @@ -14950,7 +15026,7 @@ func (this *NodeConfigSource) String() string { return "nil" } s := strings.Join([]string{`&NodeConfigSource{`, - `ConfigMapRef:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMapRef), "ObjectReference", "ObjectReference", 1) + `,`, + `ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapNodeConfigSource", "ConfigMapNodeConfigSource", 1) + `,`, `}`, }, "") return s @@ -19718,6 +19794,201 @@ func (m *ConfigMapList) Unmarshal(dAtA []byte) error { } return nil } +func (m *ConfigMapNodeConfigSource) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConfigMapNodeConfigSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConfigMapNodeConfigSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubeletConfigKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.KubeletConfigKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ConfigMapProjection) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -29784,9 +30055,9 @@ func (m *NodeConfigSource) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: NodeConfigSource: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConfigMapRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMap", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -29810,10 +30081,10 @@ func (m *NodeConfigSource) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ConfigMapRef == nil { - m.ConfigMapRef = &ObjectReference{} + if m.ConfigMap == nil { + m.ConfigMap = &ConfigMapNodeConfigSource{} } - if err := m.ConfigMapRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ConfigMap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -48907,769 +49178,772 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 12209 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6f, 0x70, 0x24, 0x49, - 0x56, 0x18, 0x7e, 0xd5, 0xdd, 0xfa, 0xd3, 0x4f, 0xff, 0x73, 0x34, 0xb3, 0x1a, 0xed, 0xce, 0xf4, - 0x6c, 0xed, 0xdd, 0xec, 0xec, 0xed, 0xae, 0xc4, 0xce, 0xee, 0xde, 0x0e, 0xb7, 0x77, 0x0b, 0x92, - 0x5a, 0x9a, 0xd1, 0xce, 0x48, 0xd3, 0x9b, 0xad, 0x99, 0xb9, 0x3b, 0x96, 0xe3, 0x4a, 0xdd, 0x29, - 0xa9, 0x56, 0xa5, 0xaa, 0xde, 0xaa, 0x6a, 0xcd, 0x68, 0x03, 0x22, 0x7e, 0xbf, 0x03, 0x63, 0x63, - 0xf8, 0x70, 0x61, 0x08, 0x1b, 0x03, 0x81, 0x23, 0x6c, 0x1c, 0x70, 0xc6, 0x76, 0x04, 0x06, 0x03, - 0x3e, 0xb0, 0x8d, 0xb1, 0x3f, 0xe0, 0x2f, 0x18, 0xfb, 0xcb, 0x11, 0x41, 0x58, 0x06, 0x41, 0xd8, - 0xc1, 0x07, 0x3b, 0x1c, 0x26, 0xc2, 0x11, 0xc8, 0x84, 0x71, 0xe4, 0xdf, 0xca, 0xac, 0xae, 0xea, - 0x6e, 0xcd, 0x6a, 0xb4, 0xcb, 0xc5, 0x7d, 0xeb, 0xce, 0xf7, 0xf2, 0x65, 0x56, 0xfe, 0x79, 0xf9, - 0xf2, 0xe5, 0xfb, 0x03, 0x6f, 0xee, 0xde, 0x88, 0xe6, 0xdc, 0x60, 0x7e, 0xb7, 0xbd, 0x49, 0x42, - 0x9f, 0xc4, 0x24, 0x9a, 0xdf, 0x27, 0x7e, 0x33, 0x08, 0xe7, 0x05, 0xc0, 0x69, 0xb9, 0xf3, 0x8d, - 0x20, 0x24, 0xf3, 0xfb, 0xaf, 0xcc, 0x6f, 0x13, 0x9f, 0x84, 0x4e, 0x4c, 0x9a, 0x73, 0xad, 0x30, - 0x88, 0x03, 0x84, 0x38, 0xce, 0x9c, 0xd3, 0x72, 0xe7, 0x28, 0xce, 0xdc, 0xfe, 0x2b, 0xb3, 0x2f, - 0x6f, 0xbb, 0xf1, 0x4e, 0x7b, 0x73, 0xae, 0x11, 0xec, 0xcd, 0x6f, 0x07, 0xdb, 0xc1, 0x3c, 0x43, - 0xdd, 0x6c, 0x6f, 0xb1, 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x49, 0xcc, 0xae, 0x25, 0xcd, 0x90, 0x47, - 0x31, 0xf1, 0x23, 0x37, 0xf0, 0xa3, 0x97, 0x9d, 0x96, 0x1b, 0x91, 0x70, 0x9f, 0x84, 0xf3, 0xad, - 0xdd, 0x6d, 0x0a, 0x8b, 0x4c, 0x84, 0xf9, 0xfd, 0x57, 0x36, 0x49, 0xec, 0x74, 0xf4, 0x68, 0xf6, - 0xb5, 0x84, 0xdc, 0x9e, 0xd3, 0xd8, 0x71, 0x7d, 0x12, 0x1e, 0x48, 0x1a, 0xf3, 0x21, 0x89, 0x82, - 0x76, 0xd8, 0x20, 0x27, 0xaa, 0x15, 0xcd, 0xef, 0x91, 0xd8, 0xc9, 0xf8, 0xfa, 0xd9, 0xf9, 0xbc, - 0x5a, 0x61, 0xdb, 0x8f, 0xdd, 0xbd, 0xce, 0x66, 0x3e, 0xd3, 0xab, 0x42, 0xd4, 0xd8, 0x21, 0x7b, - 0x4e, 0x47, 0xbd, 0x57, 0xf3, 0xea, 0xb5, 0x63, 0xd7, 0x9b, 0x77, 0xfd, 0x38, 0x8a, 0xc3, 0x74, - 0x25, 0xfb, 0x9b, 0x16, 0x5c, 0x59, 0x78, 0x50, 0x5f, 0xf6, 0x9c, 0x28, 0x76, 0x1b, 0x8b, 0x5e, - 0xd0, 0xd8, 0xad, 0xc7, 0x41, 0x48, 0xee, 0x07, 0x5e, 0x7b, 0x8f, 0xd4, 0xd9, 0x40, 0xa0, 0x97, - 0x60, 0x78, 0x9f, 0xfd, 0x5f, 0xad, 0xce, 0x58, 0x57, 0xac, 0x6b, 0xe5, 0xc5, 0xc9, 0xdf, 0x39, - 0xac, 0x7c, 0xe2, 0xe8, 0xb0, 0x32, 0x7c, 0x5f, 0x94, 0x63, 0x85, 0x81, 0xae, 0xc2, 0xe0, 0x56, - 0xb4, 0x71, 0xd0, 0x22, 0x33, 0x05, 0x86, 0x3b, 0x2e, 0x70, 0x07, 0x57, 0xea, 0xb4, 0x14, 0x0b, - 0x28, 0x9a, 0x87, 0x72, 0xcb, 0x09, 0x63, 0x37, 0x76, 0x03, 0x7f, 0xa6, 0x78, 0xc5, 0xba, 0x36, - 0xb0, 0x38, 0x25, 0x50, 0xcb, 0x35, 0x09, 0xc0, 0x09, 0x0e, 0xed, 0x46, 0x48, 0x9c, 0xe6, 0x5d, - 0xdf, 0x3b, 0x98, 0x29, 0x5d, 0xb1, 0xae, 0x0d, 0x27, 0xdd, 0xc0, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, - 0xa7, 0x0a, 0x30, 0xbc, 0xb0, 0xb5, 0xe5, 0xfa, 0x6e, 0x7c, 0x80, 0xee, 0xc3, 0xa8, 0x1f, 0x34, - 0x89, 0xfc, 0xcf, 0xbe, 0x62, 0xe4, 0xfa, 0x95, 0xb9, 0xce, 0x95, 0x39, 0xb7, 0xae, 0xe1, 0x2d, - 0x4e, 0x1e, 0x1d, 0x56, 0x46, 0xf5, 0x12, 0x6c, 0xd0, 0x41, 0x18, 0x46, 0x5a, 0x41, 0x53, 0x91, - 0x2d, 0x30, 0xb2, 0x95, 0x2c, 0xb2, 0xb5, 0x04, 0x6d, 0x71, 0xe2, 0xe8, 0xb0, 0x32, 0xa2, 0x15, - 0x60, 0x9d, 0x08, 0xda, 0x84, 0x09, 0xfa, 0xd7, 0x8f, 0x5d, 0x45, 0xb7, 0xc8, 0xe8, 0x3e, 0x97, - 0x47, 0x57, 0x43, 0x5d, 0x3c, 0x77, 0x74, 0x58, 0x99, 0x48, 0x15, 0xe2, 0x34, 0x41, 0xfb, 0x03, - 0x18, 0x5f, 0x88, 0x63, 0xa7, 0xb1, 0x43, 0x9a, 0x7c, 0x06, 0xd1, 0x6b, 0x50, 0xf2, 0x9d, 0x3d, - 0x22, 0xe6, 0xf7, 0x8a, 0x18, 0xd8, 0xd2, 0xba, 0xb3, 0x47, 0x8e, 0x0f, 0x2b, 0x93, 0xf7, 0x7c, - 0xf7, 0xfd, 0xb6, 0x58, 0x15, 0xb4, 0x0c, 0x33, 0x6c, 0x74, 0x1d, 0xa0, 0x49, 0xf6, 0xdd, 0x06, - 0xa9, 0x39, 0xf1, 0x8e, 0x98, 0x6f, 0x24, 0xea, 0x42, 0x55, 0x41, 0xb0, 0x86, 0x65, 0x3f, 0x82, - 0xf2, 0xc2, 0x7e, 0xe0, 0x36, 0x6b, 0x41, 0x33, 0x42, 0xbb, 0x30, 0xd1, 0x0a, 0xc9, 0x16, 0x09, - 0x55, 0xd1, 0x8c, 0x75, 0xa5, 0x78, 0x6d, 0xe4, 0xfa, 0xb5, 0xcc, 0x8f, 0x35, 0x51, 0x97, 0xfd, - 0x38, 0x3c, 0x58, 0x7c, 0x4a, 0xb4, 0x37, 0x91, 0x82, 0xe2, 0x34, 0x65, 0xfb, 0xdf, 0x15, 0xe0, - 0xfc, 0xc2, 0x07, 0xed, 0x90, 0x54, 0xdd, 0x68, 0x37, 0xbd, 0xc2, 0x9b, 0x6e, 0xb4, 0xbb, 0x9e, - 0x8c, 0x80, 0x5a, 0x5a, 0x55, 0x51, 0x8e, 0x15, 0x06, 0x7a, 0x19, 0x86, 0xe8, 0xef, 0x7b, 0x78, - 0x55, 0x7c, 0xf2, 0x39, 0x81, 0x3c, 0x52, 0x75, 0x62, 0xa7, 0xca, 0x41, 0x58, 0xe2, 0xa0, 0x35, - 0x18, 0x69, 0xb0, 0x0d, 0xb9, 0xbd, 0x16, 0x34, 0x09, 0x9b, 0xcc, 0xf2, 0xe2, 0x8b, 0x14, 0x7d, - 0x29, 0x29, 0x3e, 0x3e, 0xac, 0xcc, 0xf0, 0xbe, 0x09, 0x12, 0x1a, 0x0c, 0xeb, 0xf5, 0x91, 0xad, - 0xf6, 0x57, 0x89, 0x51, 0x82, 0x8c, 0xbd, 0x75, 0x4d, 0xdb, 0x2a, 0x03, 0x6c, 0xab, 0x8c, 0x66, - 0x6f, 0x13, 0xf4, 0x0a, 0x94, 0x76, 0x5d, 0xbf, 0x39, 0x33, 0xc8, 0x68, 0x5d, 0xa2, 0x73, 0x7e, - 0xdb, 0xf5, 0x9b, 0xc7, 0x87, 0x95, 0x29, 0xa3, 0x3b, 0xb4, 0x10, 0x33, 0x54, 0xfb, 0xcf, 0x2c, - 0xa8, 0x30, 0xd8, 0x8a, 0xeb, 0x91, 0x1a, 0x09, 0x23, 0x37, 0x8a, 0x89, 0x1f, 0x1b, 0x03, 0x7a, - 0x1d, 0x20, 0x22, 0x8d, 0x90, 0xc4, 0xda, 0x90, 0xaa, 0x85, 0x51, 0x57, 0x10, 0xac, 0x61, 0x51, - 0x86, 0x10, 0xed, 0x38, 0x21, 0x5b, 0x5f, 0x62, 0x60, 0x15, 0x43, 0xa8, 0x4b, 0x00, 0x4e, 0x70, - 0x0c, 0x86, 0x50, 0xec, 0xc5, 0x10, 0xd0, 0xe7, 0x61, 0x22, 0x69, 0x2c, 0x6a, 0x39, 0x0d, 0x39, - 0x80, 0x6c, 0xcb, 0xd4, 0x4d, 0x10, 0x4e, 0xe3, 0xda, 0xff, 0xc8, 0x12, 0x8b, 0x87, 0x7e, 0xf5, - 0xc7, 0xfc, 0x5b, 0xed, 0x5f, 0xb7, 0x60, 0x68, 0xd1, 0xf5, 0x9b, 0xae, 0xbf, 0x8d, 0xbe, 0x02, - 0xc3, 0xf4, 0x6c, 0x6a, 0x3a, 0xb1, 0x23, 0xf8, 0xde, 0x77, 0x68, 0x7b, 0x4b, 0x1d, 0x15, 0x73, - 0xad, 0xdd, 0x6d, 0x5a, 0x10, 0xcd, 0x51, 0x6c, 0xba, 0xdb, 0xee, 0x6e, 0xbe, 0x47, 0x1a, 0xf1, - 0x1a, 0x89, 0x9d, 0xe4, 0x73, 0x92, 0x32, 0xac, 0xa8, 0xa2, 0xdb, 0x30, 0x18, 0x3b, 0xe1, 0x36, - 0x89, 0x05, 0x03, 0xcc, 0x64, 0x54, 0xbc, 0x26, 0xa6, 0x3b, 0x92, 0xf8, 0x0d, 0x92, 0x1c, 0x0b, - 0x1b, 0xac, 0x2a, 0x16, 0x24, 0xec, 0xbf, 0x39, 0x08, 0x17, 0x97, 0xea, 0xab, 0x39, 0xeb, 0xea, - 0x2a, 0x0c, 0x36, 0x43, 0x77, 0x9f, 0x84, 0x62, 0x9c, 0x15, 0x95, 0x2a, 0x2b, 0xc5, 0x02, 0x8a, - 0x6e, 0xc0, 0x28, 0x3f, 0x90, 0x6e, 0x39, 0x7e, 0xd3, 0x93, 0x43, 0x3c, 0x2d, 0xb0, 0x47, 0xef, - 0x6b, 0x30, 0x6c, 0x60, 0x9e, 0x70, 0x51, 0x5d, 0x4d, 0x6d, 0xc6, 0xbc, 0xc3, 0xee, 0x47, 0x2c, - 0x98, 0xe4, 0xcd, 0x2c, 0xc4, 0x71, 0xe8, 0x6e, 0xb6, 0x63, 0x12, 0xcd, 0x0c, 0x30, 0x4e, 0xb7, - 0x94, 0x35, 0x5a, 0xb9, 0x23, 0x30, 0x77, 0x3f, 0x45, 0x85, 0x33, 0xc1, 0x19, 0xd1, 0xee, 0x64, - 0x1a, 0x8c, 0x3b, 0x9a, 0x45, 0x3f, 0x68, 0xc1, 0x6c, 0x23, 0xf0, 0xe3, 0x30, 0xf0, 0x3c, 0x12, - 0xd6, 0xda, 0x9b, 0x9e, 0x1b, 0xed, 0xf0, 0x75, 0x8a, 0xc9, 0x16, 0xe3, 0x04, 0x39, 0x73, 0xa8, - 0x90, 0xc4, 0x1c, 0x5e, 0x3e, 0x3a, 0xac, 0xcc, 0x2e, 0xe5, 0x92, 0xc2, 0x5d, 0x9a, 0x41, 0xbb, - 0x80, 0xe8, 0x51, 0x5a, 0x8f, 0x9d, 0x6d, 0x92, 0x34, 0x3e, 0xd4, 0x7f, 0xe3, 0x17, 0x8e, 0x0e, - 0x2b, 0x68, 0xbd, 0x83, 0x04, 0xce, 0x20, 0x8b, 0xde, 0x87, 0x69, 0x5a, 0xda, 0xf1, 0xad, 0xc3, - 0xfd, 0x37, 0x37, 0x73, 0x74, 0x58, 0x99, 0x5e, 0xcf, 0x20, 0x82, 0x33, 0x49, 0xcf, 0x2e, 0xc1, - 0xf9, 0xcc, 0xa9, 0x42, 0x93, 0x50, 0xdc, 0x25, 0x5c, 0x04, 0x29, 0x63, 0xfa, 0x13, 0x4d, 0xc3, - 0xc0, 0xbe, 0xe3, 0xb5, 0xc5, 0x2a, 0xc5, 0xfc, 0xcf, 0x67, 0x0b, 0x37, 0x2c, 0xbb, 0x01, 0xa3, - 0x4b, 0x4e, 0xcb, 0xd9, 0x74, 0x3d, 0x37, 0x76, 0x49, 0x84, 0x9e, 0x87, 0xa2, 0xd3, 0x6c, 0xb2, - 0x23, 0xb2, 0xbc, 0x78, 0xfe, 0xe8, 0xb0, 0x52, 0x5c, 0x68, 0x52, 0x5e, 0x0d, 0x0a, 0xeb, 0x00, - 0x53, 0x0c, 0xf4, 0x69, 0x28, 0x35, 0xc3, 0xa0, 0x35, 0x53, 0x60, 0x98, 0x74, 0xa8, 0x4a, 0xd5, - 0x30, 0x68, 0xa5, 0x50, 0x19, 0x8e, 0xfd, 0x5b, 0x05, 0x78, 0x66, 0x89, 0xb4, 0x76, 0x56, 0xea, - 0x39, 0x9b, 0xee, 0x1a, 0x0c, 0xef, 0x05, 0xbe, 0x1b, 0x07, 0x61, 0x24, 0x9a, 0x66, 0xa7, 0xc9, - 0x9a, 0x28, 0xc3, 0x0a, 0x8a, 0xae, 0x40, 0xa9, 0x95, 0x48, 0x02, 0xa3, 0x52, 0x8a, 0x60, 0x32, - 0x00, 0x83, 0x50, 0x8c, 0x76, 0x44, 0x42, 0x71, 0x0a, 0x2a, 0x8c, 0x7b, 0x11, 0x09, 0x31, 0x83, - 0x24, 0xec, 0x94, 0x32, 0x5a, 0xb1, 0xad, 0x52, 0xec, 0x94, 0x42, 0xb0, 0x86, 0x85, 0x6a, 0x50, - 0x8e, 0xd4, 0xa4, 0x0e, 0xf4, 0x3f, 0xa9, 0x63, 0x8c, 0xdf, 0xaa, 0x99, 0x4c, 0x88, 0x18, 0x6c, - 0x60, 0xb0, 0x27, 0xbf, 0xfd, 0x8d, 0x02, 0x20, 0x3e, 0x84, 0x7f, 0xc5, 0x06, 0xee, 0x5e, 0xe7, - 0xc0, 0x65, 0x4a, 0x5e, 0x77, 0x82, 0x86, 0xe3, 0xa5, 0x59, 0xf8, 0x69, 0x8d, 0xde, 0x4f, 0x5a, - 0x80, 0x96, 0x5c, 0xbf, 0x49, 0xc2, 0x33, 0xb8, 0x76, 0x9c, 0xec, 0x20, 0xbd, 0x03, 0xe3, 0x4b, - 0x9e, 0x4b, 0xfc, 0x78, 0xb5, 0xb6, 0x14, 0xf8, 0x5b, 0xee, 0x36, 0xfa, 0x2c, 0x8c, 0xd3, 0x5b, - 0x58, 0xd0, 0x8e, 0xeb, 0xa4, 0x11, 0xf8, 0x4c, 0x60, 0xa5, 0x77, 0x17, 0x74, 0x74, 0x58, 0x19, - 0xdf, 0x30, 0x20, 0x38, 0x85, 0x69, 0xff, 0x01, 0xfd, 0xd0, 0x60, 0xaf, 0x15, 0xf8, 0xc4, 0x8f, - 0x97, 0x02, 0xbf, 0xc9, 0x2f, 0x36, 0x9f, 0x85, 0x52, 0x4c, 0x3b, 0xce, 0x3f, 0xf2, 0xaa, 0x9c, - 0x5a, 0xda, 0xdd, 0xe3, 0xc3, 0xca, 0x85, 0xce, 0x1a, 0xec, 0x83, 0x58, 0x1d, 0xf4, 0x9d, 0x30, - 0x18, 0xc5, 0x4e, 0xdc, 0x8e, 0xc4, 0x67, 0x3f, 0x2b, 0x3f, 0xbb, 0xce, 0x4a, 0x8f, 0x0f, 0x2b, - 0x13, 0xaa, 0x1a, 0x2f, 0xc2, 0xa2, 0x02, 0x7a, 0x01, 0x86, 0xf6, 0x48, 0x14, 0x39, 0xdb, 0x52, - 0x26, 0x9d, 0x10, 0x75, 0x87, 0xd6, 0x78, 0x31, 0x96, 0x70, 0xf4, 0x1c, 0x0c, 0x90, 0x30, 0x0c, - 0x42, 0xb1, 0xaa, 0xc6, 0x04, 0xe2, 0xc0, 0x32, 0x2d, 0xc4, 0x1c, 0x66, 0xff, 0x07, 0x0b, 0x26, - 0x54, 0x5f, 0x79, 0x5b, 0x67, 0x20, 0x7c, 0x7c, 0x09, 0xa0, 0x21, 0x3f, 0x30, 0x62, 0xfc, 0x6e, - 0xe4, 0xfa, 0xd5, 0xcc, 0x23, 0xb5, 0x63, 0x18, 0x13, 0xca, 0xaa, 0x28, 0xc2, 0x1a, 0x35, 0xfb, - 0x5f, 0x5a, 0x70, 0x2e, 0xf5, 0x45, 0x77, 0xdc, 0x28, 0x46, 0xef, 0x76, 0x7c, 0xd5, 0x5c, 0x7f, - 0x5f, 0x45, 0x6b, 0xb3, 0x6f, 0x52, 0x6b, 0x4e, 0x96, 0x68, 0x5f, 0x74, 0x0b, 0x06, 0xdc, 0x98, - 0xec, 0xc9, 0x8f, 0x79, 0xae, 0xeb, 0xc7, 0xf0, 0x5e, 0x25, 0x33, 0xb2, 0x4a, 0x6b, 0x62, 0x4e, - 0xc0, 0xfe, 0xf1, 0x22, 0x94, 0xf9, 0xb2, 0x5d, 0x73, 0x5a, 0x67, 0x30, 0x17, 0xab, 0x50, 0x62, - 0xd4, 0x79, 0xc7, 0x9f, 0xcf, 0xee, 0xb8, 0xe8, 0xce, 0x1c, 0xbd, 0x59, 0x70, 0xe1, 0x45, 0x31, - 0x33, 0x5a, 0x84, 0x19, 0x09, 0xe4, 0x00, 0x6c, 0xba, 0xbe, 0x13, 0x1e, 0xd0, 0xb2, 0x99, 0x22, - 0x23, 0xf8, 0x72, 0x77, 0x82, 0x8b, 0x0a, 0x9f, 0x93, 0x55, 0x7d, 0x4d, 0x00, 0x58, 0x23, 0x3a, - 0xfb, 0x06, 0x94, 0x15, 0xf2, 0x49, 0x4e, 0xe5, 0xd9, 0xcf, 0xc3, 0x44, 0xaa, 0xad, 0x5e, 0xd5, - 0x47, 0xf5, 0x43, 0xfd, 0x1b, 0x8c, 0x0b, 0x88, 0x5e, 0x2f, 0xfb, 0xfb, 0x82, 0xdd, 0x7d, 0x00, - 0xd3, 0x5e, 0x06, 0x97, 0x15, 0x53, 0xd5, 0x3f, 0x57, 0x7e, 0x46, 0x7c, 0xf6, 0x74, 0x16, 0x14, - 0x67, 0xb6, 0x41, 0x0f, 0xaa, 0xa0, 0x45, 0xd7, 0xbc, 0xe3, 0xb1, 0xfe, 0x8a, 0xfb, 0xe2, 0x5d, - 0x51, 0x86, 0x15, 0x94, 0xb2, 0xb0, 0x69, 0xd5, 0xf9, 0xdb, 0xe4, 0xa0, 0x4e, 0x3c, 0xd2, 0x88, - 0x83, 0xf0, 0x23, 0xed, 0xfe, 0x25, 0x3e, 0xfa, 0x9c, 0x03, 0x8e, 0x08, 0x02, 0xc5, 0xdb, 0xe4, - 0x80, 0x4f, 0x85, 0xfe, 0x75, 0xc5, 0xae, 0x5f, 0xf7, 0x4b, 0x16, 0x8c, 0xa9, 0xaf, 0x3b, 0x83, - 0xad, 0xbe, 0x68, 0x6e, 0xf5, 0x4b, 0x5d, 0x17, 0x78, 0xce, 0x26, 0xff, 0x4b, 0xc6, 0xa4, 0x04, - 0x4e, 0x2d, 0x0c, 0xe8, 0xd0, 0xd0, 0x53, 0xe5, 0xa3, 0x9c, 0x90, 0x7e, 0xbe, 0xeb, 0x36, 0x39, - 0xd8, 0x08, 0xa8, 0x80, 0x93, 0xfd, 0x5d, 0xc6, 0xac, 0x95, 0xba, 0xce, 0xda, 0xaf, 0x14, 0xe0, - 0xbc, 0x1a, 0x01, 0x43, 0x84, 0xf8, 0xab, 0x3e, 0x06, 0xaf, 0xc0, 0x48, 0x93, 0x6c, 0x39, 0x6d, - 0x2f, 0x56, 0xaa, 0xa3, 0x01, 0xae, 0x3e, 0xac, 0x26, 0xc5, 0x58, 0xc7, 0x39, 0xc1, 0xb0, 0xfd, - 0xdc, 0x08, 0x3b, 0x1d, 0x62, 0x87, 0xae, 0x60, 0x2a, 0x5f, 0x6a, 0x0a, 0xc0, 0x51, 0x5d, 0x01, - 0x28, 0x94, 0x7d, 0xcf, 0xc1, 0x80, 0xbb, 0x47, 0xa5, 0x85, 0x82, 0x29, 0x04, 0xac, 0xd2, 0x42, - 0xcc, 0x61, 0xe8, 0x53, 0x30, 0xd4, 0x08, 0xf6, 0xf6, 0x1c, 0xbf, 0xc9, 0x98, 0x76, 0x79, 0x71, - 0x84, 0x0a, 0x14, 0x4b, 0xbc, 0x08, 0x4b, 0x18, 0x7a, 0x06, 0x4a, 0x4e, 0xb8, 0x1d, 0xcd, 0x94, - 0x18, 0xce, 0x30, 0x6d, 0x69, 0x21, 0xdc, 0x8e, 0x30, 0x2b, 0xa5, 0x92, 0xec, 0xc3, 0x20, 0xdc, - 0x75, 0xfd, 0xed, 0xaa, 0x1b, 0x32, 0xb1, 0x54, 0x93, 0x64, 0x1f, 0x28, 0x08, 0xd6, 0xb0, 0xd0, - 0x0a, 0x0c, 0xb4, 0x82, 0x30, 0x8e, 0x66, 0x06, 0xd9, 0x70, 0x3f, 0x9b, 0xb3, 0x95, 0xf8, 0xd7, - 0xd6, 0x82, 0x30, 0x4e, 0x3e, 0x80, 0xfe, 0x8b, 0x30, 0xaf, 0x8e, 0xbe, 0x13, 0x8a, 0xc4, 0xdf, - 0x9f, 0x19, 0x62, 0x54, 0x66, 0xb3, 0xa8, 0x2c, 0xfb, 0xfb, 0xf7, 0x9d, 0x30, 0xe1, 0x33, 0xcb, - 0xfe, 0x3e, 0xa6, 0x75, 0xd0, 0x17, 0xa1, 0x2c, 0x1f, 0x0f, 0x22, 0x71, 0xb5, 0xcc, 0x5c, 0x62, - 0x58, 0x20, 0x61, 0xf2, 0x7e, 0xdb, 0x0d, 0xc9, 0x1e, 0xf1, 0xe3, 0x28, 0x51, 0xff, 0x48, 0x68, - 0x84, 0x13, 0x6a, 0xe8, 0x8b, 0x52, 0x9f, 0xb1, 0x16, 0xb4, 0xfd, 0x38, 0x9a, 0x29, 0xb3, 0xee, - 0x65, 0x6a, 0x9a, 0xef, 0x27, 0x78, 0x69, 0x85, 0x07, 0xaf, 0x8c, 0x0d, 0x52, 0x08, 0xc3, 0x98, - 0xe7, 0xee, 0x13, 0x9f, 0x44, 0x51, 0x2d, 0x0c, 0x36, 0xc9, 0x0c, 0xb0, 0x9e, 0x5f, 0xcc, 0x56, - 0xc0, 0x06, 0x9b, 0x64, 0x71, 0xea, 0xe8, 0xb0, 0x32, 0x76, 0x47, 0xaf, 0x83, 0x4d, 0x12, 0xe8, - 0x1e, 0x8c, 0x53, 0x11, 0xda, 0x4d, 0x88, 0x8e, 0xf4, 0x22, 0xca, 0xe4, 0x67, 0x6c, 0x54, 0xc2, - 0x29, 0x22, 0xe8, 0x6d, 0x28, 0x7b, 0xee, 0x16, 0x69, 0x1c, 0x34, 0x3c, 0x32, 0x33, 0xca, 0x28, - 0x66, 0x6e, 0xab, 0x3b, 0x12, 0x89, 0x5f, 0x51, 0xd4, 0x5f, 0x9c, 0x54, 0x47, 0xf7, 0xe1, 0x42, - 0x4c, 0xc2, 0x3d, 0xd7, 0x77, 0xe8, 0x76, 0x10, 0x12, 0x2f, 0x53, 0x63, 0x8f, 0xb1, 0xf5, 0x76, - 0x59, 0x0c, 0xdd, 0x85, 0x8d, 0x4c, 0x2c, 0x9c, 0x53, 0x1b, 0xdd, 0x85, 0x09, 0xb6, 0x13, 0x6a, - 0x6d, 0xcf, 0xab, 0x05, 0x9e, 0xdb, 0x38, 0x98, 0x19, 0x67, 0x04, 0x3f, 0x25, 0xf5, 0xd4, 0xab, - 0x26, 0x98, 0xde, 0xc9, 0x93, 0x7f, 0x38, 0x5d, 0x1b, 0x6d, 0x32, 0xbd, 0x65, 0x3b, 0x74, 0xe3, - 0x03, 0xba, 0x7e, 0xc9, 0xa3, 0x78, 0x66, 0xa2, 0xeb, 0x0d, 0x57, 0x47, 0x55, 0xca, 0x4d, 0xbd, - 0x10, 0xa7, 0x09, 0xd2, 0xad, 0x1d, 0xc5, 0x4d, 0xd7, 0x9f, 0x99, 0x64, 0x1c, 0x43, 0xed, 0x8c, - 0x3a, 0x2d, 0xc4, 0x1c, 0xc6, 0x74, 0x96, 0xf4, 0xc7, 0x5d, 0xca, 0x41, 0xa7, 0x18, 0x62, 0xa2, - 0xb3, 0x94, 0x00, 0x9c, 0xe0, 0xd0, 0x63, 0x39, 0x8e, 0x0f, 0x66, 0x10, 0x43, 0x55, 0xdb, 0x65, - 0x63, 0xe3, 0x8b, 0x98, 0x96, 0xa3, 0x3b, 0x30, 0x44, 0xfc, 0xfd, 0x95, 0x30, 0xd8, 0x9b, 0x39, - 0x97, 0xbf, 0x67, 0x97, 0x39, 0x0a, 0x67, 0xe8, 0xc9, 0x15, 0x45, 0x14, 0x63, 0x49, 0x02, 0x3d, - 0x82, 0x99, 0x8c, 0x19, 0xe1, 0x13, 0x30, 0xcd, 0x26, 0xe0, 0x73, 0xa2, 0xee, 0xcc, 0x46, 0x0e, - 0xde, 0x71, 0x17, 0x18, 0xce, 0xa5, 0x8e, 0xbe, 0x17, 0xc6, 0xf8, 0x86, 0xe2, 0x0f, 0x1e, 0xd1, - 0xcc, 0x79, 0xf6, 0x35, 0x57, 0xf2, 0x37, 0x27, 0x47, 0x5c, 0x3c, 0x2f, 0x3a, 0x34, 0xa6, 0x97, - 0x46, 0xd8, 0xa4, 0x66, 0x6f, 0xc2, 0xb8, 0xe2, 0x5b, 0x6c, 0xe9, 0xa0, 0x0a, 0x0c, 0x50, 0x86, - 0x2c, 0x75, 0x0a, 0x65, 0x3a, 0x53, 0x4c, 0x51, 0x8d, 0x79, 0x39, 0x9b, 0x29, 0xf7, 0x03, 0xb2, - 0x78, 0x10, 0x13, 0x7e, 0x2f, 0x2c, 0x6a, 0x33, 0x25, 0x01, 0x38, 0xc1, 0xb1, 0xff, 0x2f, 0x97, - 0x7b, 0x12, 0xe6, 0xd8, 0xc7, 0x71, 0xf0, 0x12, 0x0c, 0xef, 0x04, 0x51, 0x4c, 0xb1, 0x59, 0x1b, - 0x03, 0x89, 0xa4, 0x73, 0x4b, 0x94, 0x63, 0x85, 0x81, 0xde, 0x84, 0xb1, 0x86, 0xde, 0x80, 0x38, - 0xcb, 0xd4, 0x10, 0x18, 0xad, 0x63, 0x13, 0x17, 0xdd, 0x80, 0x61, 0xf6, 0x5c, 0xd9, 0x08, 0x3c, - 0x71, 0x03, 0x95, 0x07, 0xf2, 0x70, 0x4d, 0x94, 0x1f, 0x6b, 0xbf, 0xb1, 0xc2, 0x46, 0x57, 0x61, - 0x90, 0x76, 0x61, 0xb5, 0x26, 0x4e, 0x11, 0xa5, 0x15, 0xb8, 0xc5, 0x4a, 0xb1, 0x80, 0xda, 0x7f, - 0xab, 0xa0, 0x8d, 0x32, 0xbd, 0x53, 0x11, 0x54, 0x83, 0xa1, 0x87, 0x8e, 0x1b, 0xbb, 0xfe, 0xb6, - 0x10, 0x17, 0x5e, 0xe8, 0x7a, 0xa4, 0xb0, 0x4a, 0x0f, 0x78, 0x05, 0x7e, 0xe8, 0x89, 0x3f, 0x58, - 0x92, 0xa1, 0x14, 0xc3, 0xb6, 0xef, 0x53, 0x8a, 0x85, 0x7e, 0x29, 0x62, 0x5e, 0x81, 0x53, 0x14, - 0x7f, 0xb0, 0x24, 0x83, 0xde, 0x05, 0x90, 0xcb, 0x92, 0x34, 0xc5, 0x33, 0xe1, 0x4b, 0xbd, 0x89, - 0x6e, 0xa8, 0x3a, 0x8b, 0xe3, 0xf4, 0x48, 0x4d, 0xfe, 0x63, 0x8d, 0x9e, 0x1d, 0x33, 0xb1, 0xaa, - 0xb3, 0x33, 0xe8, 0x7b, 0x28, 0x27, 0x70, 0xc2, 0x98, 0x34, 0x17, 0x62, 0x31, 0x38, 0x9f, 0xee, - 0x4f, 0x2a, 0xde, 0x70, 0xf7, 0x88, 0xce, 0x35, 0x04, 0x11, 0x9c, 0xd0, 0xb3, 0x7f, 0xad, 0x08, - 0x33, 0x79, 0xdd, 0xa5, 0x8b, 0x8e, 0x3c, 0x72, 0xe3, 0x25, 0x2a, 0x0d, 0x59, 0xe6, 0xa2, 0x5b, - 0x16, 0xe5, 0x58, 0x61, 0xd0, 0xd9, 0x8f, 0xdc, 0x6d, 0x79, 0xa9, 0x19, 0x48, 0x66, 0xbf, 0xce, - 0x4a, 0xb1, 0x80, 0x52, 0xbc, 0x90, 0x38, 0x91, 0x78, 0x87, 0xd6, 0x56, 0x09, 0x66, 0xa5, 0x58, - 0x40, 0x75, 0x8d, 0x49, 0xa9, 0x87, 0xc6, 0xc4, 0x18, 0xa2, 0x81, 0xd3, 0x1d, 0x22, 0xf4, 0x65, - 0x80, 0x2d, 0xd7, 0x77, 0xa3, 0x1d, 0x46, 0x7d, 0xf0, 0xc4, 0xd4, 0x95, 0x2c, 0xb5, 0xa2, 0xa8, - 0x60, 0x8d, 0x22, 0x7a, 0x1d, 0x46, 0xd4, 0x06, 0x5c, 0xad, 0x32, 0xa5, 0xbc, 0xf6, 0xc8, 0x99, - 0x70, 0xa3, 0x2a, 0xd6, 0xf1, 0xec, 0xf7, 0xd2, 0xeb, 0x45, 0xec, 0x00, 0x6d, 0x7c, 0xad, 0x7e, - 0xc7, 0xb7, 0xd0, 0x7d, 0x7c, 0xed, 0xdf, 0x2e, 0xc2, 0x84, 0xd1, 0x58, 0x3b, 0xea, 0x83, 0x67, - 0xdd, 0xa4, 0xe7, 0x9c, 0x13, 0x13, 0xb1, 0xff, 0xec, 0xde, 0x5b, 0x45, 0x3f, 0x0b, 0xe9, 0x0e, - 0xe0, 0xf5, 0xd1, 0x97, 0xa1, 0xec, 0x39, 0x11, 0xd3, 0xbe, 0x10, 0xb1, 0xef, 0xfa, 0x21, 0x96, - 0xdc, 0x23, 0x9c, 0x28, 0xd6, 0x8e, 0x1a, 0x4e, 0x3b, 0x21, 0x49, 0x0f, 0x64, 0x2a, 0xfb, 0x48, - 0x43, 0x07, 0xd5, 0x09, 0x2a, 0x20, 0x1d, 0x60, 0x0e, 0x43, 0x37, 0x60, 0x34, 0x24, 0x6c, 0x55, - 0x2c, 0x51, 0x51, 0x8e, 0x2d, 0xb3, 0x81, 0x44, 0xe6, 0xc3, 0x1a, 0x0c, 0x1b, 0x98, 0x89, 0x28, - 0x3f, 0xd8, 0x45, 0x94, 0x7f, 0x01, 0x86, 0xd8, 0x0f, 0xb5, 0x02, 0xd4, 0x6c, 0xac, 0xf2, 0x62, - 0x2c, 0xe1, 0xe9, 0x05, 0x33, 0xdc, 0xe7, 0x82, 0xf9, 0x34, 0x8c, 0x57, 0x1d, 0xb2, 0x17, 0xf8, - 0xcb, 0x7e, 0xb3, 0x15, 0xb8, 0x7e, 0x8c, 0x66, 0xa0, 0xc4, 0x4e, 0x07, 0xbe, 0xb7, 0x4b, 0x94, - 0x02, 0x2e, 0x51, 0xc1, 0xdc, 0xde, 0x86, 0xf3, 0xd5, 0xe0, 0xa1, 0xff, 0xd0, 0x09, 0x9b, 0x0b, - 0xb5, 0x55, 0xed, 0x9e, 0xbb, 0x2e, 0xef, 0x59, 0xdc, 0x70, 0x20, 0x93, 0xa7, 0x6a, 0x35, 0xf9, - 0x59, 0xbb, 0xe2, 0x7a, 0x24, 0xe7, 0x3e, 0xfd, 0x77, 0x0a, 0x46, 0x4b, 0x09, 0xbe, 0x52, 0xd2, - 0x5b, 0xb9, 0x4a, 0xfa, 0x77, 0x60, 0x78, 0xcb, 0x25, 0x5e, 0x13, 0x93, 0x2d, 0xb1, 0xc4, 0x9e, - 0xcf, 0x7f, 0x0b, 0x5d, 0xa1, 0x98, 0x52, 0x7f, 0xc2, 0x6f, 0x69, 0x2b, 0xa2, 0x32, 0x56, 0x64, - 0xd0, 0x2e, 0x4c, 0xca, 0x6b, 0x80, 0x84, 0x8a, 0x05, 0xf7, 0x42, 0xb7, 0xbb, 0x85, 0x49, 0x7c, - 0xfa, 0xe8, 0xb0, 0x32, 0x89, 0x53, 0x64, 0x70, 0x07, 0x61, 0x7a, 0x2d, 0xdb, 0xa3, 0xac, 0xb5, - 0xc4, 0x86, 0x9f, 0x5d, 0xcb, 0xd8, 0x0d, 0x93, 0x95, 0xda, 0x3f, 0x63, 0xc1, 0x53, 0x1d, 0x23, - 0x23, 0x6e, 0xda, 0xa7, 0x3c, 0x0b, 0xe9, 0x9b, 0x6f, 0xa1, 0xf7, 0xcd, 0xd7, 0xfe, 0xc7, 0x16, - 0x4c, 0x2f, 0xef, 0xb5, 0xe2, 0x83, 0xaa, 0x6b, 0x3e, 0x24, 0xbc, 0x01, 0x83, 0x7b, 0xa4, 0xe9, - 0xb6, 0xf7, 0xc4, 0xcc, 0x55, 0x24, 0xfb, 0x59, 0x63, 0xa5, 0xc7, 0x87, 0x95, 0xb1, 0x7a, 0x1c, - 0x84, 0xce, 0x36, 0xe1, 0x05, 0x58, 0xa0, 0x33, 0x26, 0xee, 0x7e, 0x40, 0xee, 0xb8, 0x7b, 0xae, - 0x7c, 0xdb, 0xee, 0xaa, 0xfd, 0x99, 0x93, 0x03, 0x3a, 0xf7, 0x4e, 0xdb, 0xf1, 0x63, 0x37, 0x3e, - 0x10, 0x6f, 0x24, 0x92, 0x08, 0x4e, 0xe8, 0xd9, 0xdf, 0xb4, 0x60, 0x42, 0xae, 0xfb, 0x85, 0x66, - 0x33, 0x24, 0x51, 0x84, 0x66, 0xa1, 0xe0, 0xb6, 0x44, 0x2f, 0x41, 0xf4, 0xb2, 0xb0, 0x5a, 0xc3, - 0x05, 0xb7, 0x85, 0x6a, 0x50, 0xe6, 0x4f, 0xe4, 0xc9, 0xe2, 0xea, 0xeb, 0xa1, 0x9d, 0xf5, 0x60, - 0x43, 0xd6, 0xc4, 0x09, 0x11, 0x29, 0xc1, 0x31, 0x9e, 0x59, 0x34, 0x1f, 0x58, 0x6e, 0x89, 0x72, - 0xac, 0x30, 0xd0, 0x35, 0x18, 0xf6, 0x83, 0x26, 0xb7, 0x58, 0xe0, 0xa7, 0x1f, 0x5b, 0xb2, 0xeb, - 0xa2, 0x0c, 0x2b, 0xa8, 0xfd, 0x63, 0x16, 0x8c, 0xca, 0x2f, 0xeb, 0x53, 0x98, 0xa4, 0x5b, 0x2b, - 0x11, 0x24, 0x93, 0xad, 0x45, 0x85, 0x41, 0x06, 0x31, 0x64, 0xc0, 0xe2, 0x49, 0x64, 0x40, 0xfb, - 0xa7, 0x0b, 0x30, 0x2e, 0xbb, 0x53, 0x6f, 0x6f, 0x46, 0x24, 0x46, 0x1b, 0x50, 0x76, 0xf8, 0x90, - 0x13, 0xb9, 0x62, 0x9f, 0xcb, 0xbe, 0x7c, 0x18, 0xf3, 0x93, 0x1c, 0xcb, 0x0b, 0xb2, 0x36, 0x4e, - 0x08, 0x21, 0x0f, 0xa6, 0xfc, 0x20, 0x66, 0x2c, 0x5a, 0xc1, 0xbb, 0x29, 0xf1, 0xd3, 0xd4, 0x2f, - 0x0a, 0xea, 0x53, 0xeb, 0x69, 0x2a, 0xb8, 0x93, 0x30, 0x5a, 0x96, 0x0a, 0x8f, 0x62, 0xfe, 0x75, - 0x43, 0x9f, 0x85, 0x6c, 0x7d, 0x87, 0xfd, 0x9b, 0x16, 0x94, 0x25, 0xda, 0x59, 0xbc, 0xd7, 0xac, - 0xc1, 0x50, 0xc4, 0x26, 0x41, 0x0e, 0x8d, 0xdd, 0xad, 0xe3, 0x7c, 0xbe, 0x92, 0x93, 0x87, 0xff, - 0x8f, 0xb0, 0xa4, 0xc1, 0x34, 0xb6, 0xaa, 0xfb, 0x1f, 0x13, 0x8d, 0xad, 0xea, 0x4f, 0xce, 0x09, - 0xf3, 0xdf, 0x58, 0x9f, 0xb5, 0x6b, 0x2d, 0x15, 0x90, 0x5a, 0x21, 0xd9, 0x72, 0x1f, 0xa5, 0x05, - 0xa4, 0x1a, 0x2b, 0xc5, 0x02, 0x8a, 0xde, 0x85, 0xd1, 0x86, 0x54, 0x74, 0x26, 0x6c, 0xe0, 0x6a, - 0x57, 0xb5, 0xb1, 0x7a, 0x61, 0xe0, 0xd6, 0x8c, 0x4b, 0x5a, 0x7d, 0x6c, 0x50, 0x33, 0x5f, 0xd1, - 0x8b, 0xbd, 0x5e, 0xd1, 0x13, 0xba, 0xb9, 0xef, 0xc0, 0xf6, 0xcf, 0x5a, 0x30, 0xc8, 0xd5, 0x65, - 0xfd, 0xe9, 0x17, 0xb5, 0x07, 0x97, 0x64, 0xec, 0xee, 0xd3, 0x42, 0xf1, 0x80, 0x82, 0xd6, 0xa0, - 0xcc, 0x7e, 0x30, 0xb5, 0x41, 0x31, 0xdf, 0x8c, 0x93, 0xb7, 0xaa, 0x77, 0xf0, 0xbe, 0xac, 0x86, - 0x13, 0x0a, 0xf6, 0x4f, 0x14, 0x29, 0xab, 0x4a, 0x50, 0x8d, 0x13, 0xdc, 0x7a, 0x72, 0x27, 0x78, - 0xe1, 0x49, 0x9d, 0xe0, 0xdb, 0x30, 0xd1, 0xd0, 0x9e, 0x67, 0x92, 0x99, 0xbc, 0xd6, 0x75, 0x91, - 0x68, 0x2f, 0x39, 0x5c, 0x65, 0xb4, 0x64, 0x12, 0xc1, 0x69, 0xaa, 0xe8, 0x7b, 0x60, 0x94, 0xcf, - 0xb3, 0x68, 0xa5, 0xc4, 0x5a, 0xf9, 0x54, 0xfe, 0x7a, 0xd1, 0x9b, 0x60, 0x2b, 0xb1, 0xae, 0x55, - 0xc7, 0x06, 0x31, 0xfb, 0xd7, 0x86, 0x61, 0x60, 0x79, 0x9f, 0xf8, 0xf1, 0x19, 0x30, 0xa4, 0x06, - 0x8c, 0xbb, 0xfe, 0x7e, 0xe0, 0xed, 0x93, 0x26, 0x87, 0x9f, 0xe4, 0x70, 0xbd, 0x20, 0x48, 0x8f, - 0xaf, 0x1a, 0x24, 0x70, 0x8a, 0xe4, 0x93, 0xb8, 0x61, 0xde, 0x84, 0x41, 0x3e, 0xf7, 0xe2, 0x7a, - 0x99, 0xa9, 0x0c, 0x66, 0x83, 0x28, 0x76, 0x41, 0x72, 0xfb, 0xe5, 0xda, 0x67, 0x51, 0x1d, 0xbd, - 0x07, 0xe3, 0x5b, 0x6e, 0x18, 0xc5, 0xf4, 0x6a, 0x18, 0xc5, 0xce, 0x5e, 0xeb, 0x31, 0x6e, 0x94, - 0x6a, 0x1c, 0x56, 0x0c, 0x4a, 0x38, 0x45, 0x19, 0x6d, 0xc3, 0x18, 0xbd, 0xe4, 0x24, 0x4d, 0x0d, - 0x9d, 0xb8, 0x29, 0xa5, 0x32, 0xba, 0xa3, 0x13, 0xc2, 0x26, 0x5d, 0xca, 0x4c, 0x1a, 0xec, 0x52, - 0x34, 0xcc, 0x24, 0x0a, 0xc5, 0x4c, 0xf8, 0x6d, 0x88, 0xc3, 0x28, 0x4f, 0x62, 0x86, 0x17, 0x65, - 0x93, 0x27, 0x69, 0xe6, 0x15, 0x5f, 0x81, 0x32, 0xa1, 0x43, 0x48, 0x09, 0x0b, 0xc5, 0xf8, 0x7c, - 0x7f, 0x7d, 0x5d, 0x73, 0x1b, 0x61, 0x60, 0xde, 0xe5, 0x97, 0x25, 0x25, 0x9c, 0x10, 0x45, 0x4b, - 0x30, 0x18, 0x91, 0xd0, 0x25, 0x91, 0x50, 0x91, 0x77, 0x99, 0x46, 0x86, 0xc6, 0xed, 0x7d, 0xf9, - 0x6f, 0x2c, 0xaa, 0xd2, 0xe5, 0xe5, 0xb0, 0xdb, 0x10, 0xd3, 0x8a, 0x6b, 0xcb, 0x6b, 0x81, 0x95, - 0x62, 0x01, 0x45, 0x6f, 0xc3, 0x50, 0x48, 0x3c, 0xa6, 0x2c, 0x1a, 0xeb, 0x7f, 0x91, 0x73, 0xdd, - 0x13, 0xaf, 0x87, 0x25, 0x01, 0x74, 0x1b, 0x50, 0x48, 0xa8, 0x0c, 0xe1, 0xfa, 0xdb, 0xca, 0x1c, - 0x41, 0xe8, 0xba, 0x9f, 0x16, 0xed, 0x9f, 0xc3, 0x09, 0x86, 0xb4, 0x04, 0xc4, 0x19, 0xd5, 0xd0, - 0x4d, 0x98, 0x52, 0xa5, 0xab, 0x7e, 0x14, 0x3b, 0x7e, 0x83, 0x30, 0x35, 0x77, 0x39, 0x91, 0x8a, - 0x70, 0x1a, 0x01, 0x77, 0xd6, 0xb1, 0xbf, 0x4e, 0xc5, 0x19, 0x3a, 0x5a, 0x67, 0x20, 0x0b, 0xbc, - 0x65, 0xca, 0x02, 0x17, 0x73, 0x67, 0x2e, 0x47, 0x0e, 0x38, 0xb2, 0x60, 0x44, 0x9b, 0xd9, 0x64, - 0xcd, 0x5a, 0x5d, 0xd6, 0x6c, 0x1b, 0x26, 0xe9, 0x4a, 0xbf, 0xbb, 0xc9, 0x5c, 0x5f, 0x9a, 0x6c, - 0x61, 0x16, 0x1e, 0x6f, 0x61, 0x2a, 0xa3, 0xd1, 0x3b, 0x29, 0x82, 0xb8, 0xa3, 0x09, 0xf4, 0x86, - 0xd4, 0x9c, 0x14, 0x0d, 0x33, 0x23, 0xae, 0x15, 0x39, 0x3e, 0xac, 0x4c, 0x6a, 0x1f, 0xa2, 0x6b, - 0x4a, 0xec, 0xaf, 0xc8, 0x6f, 0xe4, 0xcc, 0x66, 0x1e, 0xca, 0x0d, 0xb5, 0x58, 0x2c, 0xd3, 0xf0, - 0x59, 0x2d, 0x07, 0x9c, 0xe0, 0xd0, 0x3d, 0x4a, 0xaf, 0x20, 0x69, 0xcb, 0x38, 0x7a, 0x41, 0xc1, - 0x0c, 0x62, 0xbf, 0x0a, 0xb0, 0xfc, 0x88, 0x34, 0xf8, 0x52, 0xd7, 0x1f, 0x20, 0xad, 0xfc, 0x07, - 0x48, 0xfb, 0x3f, 0x59, 0x30, 0xbe, 0xb2, 0x64, 0x5c, 0x13, 0xe7, 0x00, 0xf8, 0xdd, 0xe8, 0xc1, - 0x83, 0x75, 0xa9, 0x5b, 0xe7, 0xea, 0x51, 0x55, 0x8a, 0x35, 0x0c, 0x74, 0x11, 0x8a, 0x5e, 0xdb, - 0x17, 0x57, 0x96, 0xa1, 0xa3, 0xc3, 0x4a, 0xf1, 0x4e, 0xdb, 0xc7, 0xb4, 0x4c, 0x33, 0x46, 0x2b, - 0xf6, 0x6d, 0x8c, 0xd6, 0xd3, 0xa5, 0x05, 0x55, 0x60, 0xe0, 0xe1, 0x43, 0xb7, 0xc9, 0x0d, 0x87, - 0x85, 0xde, 0xff, 0xc1, 0x83, 0xd5, 0x6a, 0x84, 0x79, 0xb9, 0xfd, 0xb5, 0x22, 0xcc, 0xae, 0x78, - 0xe4, 0xd1, 0x87, 0x34, 0x9e, 0xee, 0xd7, 0x94, 0xee, 0x64, 0xf2, 0xe2, 0x49, 0xed, 0x06, 0x7b, - 0x8f, 0xc7, 0x16, 0x0c, 0xf1, 0xc7, 0x6c, 0x69, 0x4a, 0xfd, 0x66, 0x56, 0xeb, 0xf9, 0x03, 0x32, - 0xc7, 0x1f, 0xc5, 0x85, 0x09, 0xb5, 0x3a, 0x69, 0x45, 0x29, 0x96, 0xc4, 0x67, 0x3f, 0x0b, 0xa3, - 0x3a, 0xe6, 0x89, 0x2c, 0x78, 0xff, 0xff, 0x22, 0x4c, 0xd2, 0x1e, 0x3c, 0xd1, 0x89, 0xb8, 0xd7, - 0x39, 0x11, 0xa7, 0x6d, 0xc5, 0xd9, 0x7b, 0x36, 0xde, 0x4d, 0xcf, 0xc6, 0x2b, 0x79, 0xb3, 0x71, - 0xd6, 0x73, 0xf0, 0x83, 0x16, 0x9c, 0x5b, 0xf1, 0x82, 0xc6, 0x6e, 0xca, 0xc0, 0xf4, 0x75, 0x18, - 0xa1, 0x7c, 0x3c, 0x32, 0x3c, 0x37, 0x0c, 0x5f, 0x1e, 0x01, 0xc2, 0x3a, 0x9e, 0x56, 0xed, 0xde, - 0xbd, 0xd5, 0x6a, 0x96, 0x0b, 0x90, 0x00, 0x61, 0x1d, 0xcf, 0xfe, 0x5d, 0x0b, 0x2e, 0xdd, 0x5c, - 0x5a, 0x4e, 0x96, 0x62, 0x87, 0x17, 0x12, 0xbd, 0x05, 0x36, 0xb5, 0xae, 0x24, 0xb7, 0xc0, 0x2a, - 0xeb, 0x85, 0x80, 0x7e, 0x5c, 0x3c, 0xec, 0x7e, 0xc1, 0x82, 0x73, 0x37, 0xdd, 0x98, 0x1e, 0xcb, - 0x69, 0x7f, 0x18, 0x7a, 0x2e, 0x47, 0x6e, 0x1c, 0x84, 0x07, 0x69, 0x7f, 0x18, 0xac, 0x20, 0x58, - 0xc3, 0xe2, 0x2d, 0xef, 0xbb, 0x11, 0xed, 0x69, 0xc1, 0x54, 0x45, 0x61, 0x51, 0x8e, 0x15, 0x06, - 0xfd, 0xb0, 0xa6, 0x1b, 0xb2, 0xab, 0xc4, 0x81, 0xe0, 0xb0, 0xea, 0xc3, 0xaa, 0x12, 0x80, 0x13, - 0x1c, 0xfb, 0x67, 0x2c, 0x38, 0x7f, 0xd3, 0x6b, 0x47, 0x31, 0x09, 0xb7, 0x22, 0xa3, 0xb3, 0xaf, - 0x42, 0x99, 0xc8, 0xeb, 0xba, 0xe8, 0xab, 0x12, 0x30, 0xd5, 0x3d, 0x9e, 0x3b, 0xe3, 0x28, 0xbc, - 0x3e, 0xac, 0xb5, 0x4f, 0x66, 0x65, 0xfc, 0xcb, 0x05, 0x18, 0xbb, 0xb5, 0xb1, 0x51, 0xbb, 0x49, - 0x62, 0x71, 0x8a, 0xf5, 0x56, 0x35, 0x63, 0x4d, 0x63, 0xd6, 0xed, 0x52, 0xd4, 0x8e, 0x5d, 0x6f, - 0x8e, 0x7b, 0x7f, 0xce, 0xad, 0xfa, 0xf1, 0xdd, 0xb0, 0x1e, 0x87, 0xae, 0xbf, 0x9d, 0xa9, 0x63, - 0x93, 0x67, 0x6d, 0x31, 0xef, 0xac, 0x45, 0xaf, 0xc2, 0x20, 0x73, 0x3f, 0x95, 0xd7, 0x93, 0xa7, - 0xd5, 0x9d, 0x82, 0x95, 0x1e, 0x1f, 0x56, 0xca, 0xf7, 0xf0, 0x2a, 0xff, 0x83, 0x05, 0x2a, 0xba, - 0x07, 0x23, 0x3b, 0x71, 0xdc, 0xba, 0x45, 0x9c, 0x26, 0x09, 0x25, 0x77, 0xb8, 0x9c, 0xc5, 0x1d, - 0xe8, 0x20, 0x70, 0xb4, 0x64, 0x43, 0x25, 0x65, 0x11, 0xd6, 0xe9, 0xd8, 0x75, 0x80, 0x04, 0x76, - 0x4a, 0xfa, 0x05, 0xfb, 0x8f, 0x2d, 0x18, 0xe2, 0x9e, 0x40, 0x21, 0xfa, 0x1c, 0x94, 0xc8, 0x23, - 0xd2, 0x10, 0x92, 0x63, 0x66, 0x87, 0x13, 0xc1, 0x83, 0x6b, 0xcb, 0xe9, 0x7f, 0xcc, 0x6a, 0xa1, - 0x5b, 0x30, 0x44, 0x7b, 0x7b, 0x53, 0xb9, 0x45, 0x3d, 0x9b, 0xf7, 0xc5, 0x6a, 0xda, 0xb9, 0xac, - 0x22, 0x8a, 0xb0, 0xac, 0xce, 0x34, 0xbf, 0x8d, 0x56, 0x9d, 0x32, 0xb0, 0xb8, 0xdb, 0x39, 0xbb, - 0xb1, 0x54, 0xe3, 0x48, 0x82, 0x1a, 0xd7, 0xfc, 0xca, 0x42, 0x9c, 0x10, 0xb1, 0x37, 0xa0, 0x4c, - 0x27, 0x75, 0xc1, 0x73, 0x9d, 0xee, 0x4a, 0xe7, 0x17, 0xa1, 0x2c, 0x15, 0xc0, 0x91, 0x70, 0x26, - 0x61, 0x54, 0xa5, 0x7e, 0x38, 0xc2, 0x09, 0xdc, 0xde, 0x82, 0x69, 0xf6, 0xf2, 0xef, 0xc4, 0x3b, - 0xc6, 0x1e, 0xeb, 0xbd, 0x98, 0x5f, 0x12, 0x17, 0x31, 0x3e, 0x33, 0x33, 0x9a, 0xf5, 0xfb, 0xa8, - 0xa4, 0x98, 0x5c, 0xca, 0xec, 0x3f, 0x2d, 0xc1, 0xd3, 0xab, 0xf5, 0x7c, 0x27, 0xb1, 0x1b, 0x30, - 0xca, 0xc5, 0x34, 0xba, 0xb4, 0x1d, 0x4f, 0xb4, 0xab, 0xde, 0xc5, 0x36, 0x34, 0x18, 0x36, 0x30, - 0xd1, 0x25, 0x28, 0xba, 0xef, 0xfb, 0x69, 0x43, 0xd2, 0xd5, 0x77, 0xd6, 0x31, 0x2d, 0xa7, 0x60, - 0x2a, 0xf1, 0x71, 0x56, 0xaa, 0xc0, 0x4a, 0xea, 0x7b, 0x0b, 0xc6, 0xdd, 0xa8, 0x11, 0xb9, 0xab, - 0x3e, 0xe5, 0x33, 0x89, 0x83, 0x61, 0xa2, 0x24, 0xa0, 0x9d, 0x56, 0x50, 0x9c, 0xc2, 0xd6, 0xf8, - 0xfa, 0x40, 0xdf, 0x52, 0x63, 0x4f, 0xef, 0x0a, 0x2a, 0x10, 0xb7, 0xd8, 0xd7, 0x45, 0xcc, 0xa8, - 0x4d, 0x08, 0xc4, 0xfc, 0x83, 0x23, 0x2c, 0x61, 0xf4, 0x06, 0xd6, 0xd8, 0x71, 0x5a, 0x0b, 0xed, - 0x78, 0xa7, 0xea, 0x46, 0x8d, 0x60, 0x9f, 0x84, 0x07, 0xec, 0xf2, 0x3c, 0x9c, 0xdc, 0xc0, 0x14, - 0x60, 0xe9, 0xd6, 0x42, 0x8d, 0x62, 0xe2, 0xce, 0x3a, 0xa6, 0x54, 0x08, 0xa7, 0x21, 0x15, 0x2e, - 0xc0, 0x84, 0x6c, 0xa6, 0x4e, 0x22, 0x76, 0x46, 0x8c, 0xb0, 0x8e, 0x29, 0xd7, 0x5f, 0x51, 0xac, - 0xba, 0x95, 0xc6, 0x47, 0x6f, 0xc0, 0x98, 0xeb, 0xbb, 0xb1, 0xeb, 0xc4, 0x41, 0xc8, 0x4e, 0x58, - 0x7e, 0x4f, 0x66, 0x96, 0x6c, 0xab, 0x3a, 0x00, 0x9b, 0x78, 0xf6, 0x9f, 0x94, 0x60, 0x8a, 0x4d, - 0xdb, 0xb7, 0x57, 0xd8, 0xc7, 0x66, 0x85, 0xdd, 0xeb, 0x5c, 0x61, 0xa7, 0x21, 0xee, 0x7e, 0x94, - 0xcb, 0xec, 0x3d, 0x28, 0x2b, 0x5b, 0x60, 0x69, 0xce, 0x6e, 0xe5, 0x98, 0xb3, 0xf7, 0x96, 0x3e, - 0xe4, 0x33, 0x6e, 0x31, 0xf3, 0x19, 0xf7, 0xef, 0x5a, 0x90, 0x98, 0x44, 0xa2, 0x5b, 0x50, 0x6e, - 0x05, 0xcc, 0xec, 0x20, 0x94, 0xb6, 0x3c, 0x4f, 0x67, 0x1e, 0x54, 0xfc, 0x50, 0xe4, 0xe3, 0x57, - 0x93, 0x35, 0x70, 0x52, 0x19, 0x2d, 0xc2, 0x50, 0x2b, 0x24, 0xf5, 0x98, 0xb9, 0x1d, 0xf6, 0xa4, - 0xc3, 0xd7, 0x08, 0xc7, 0xc7, 0xb2, 0xa2, 0xfd, 0x2b, 0x16, 0x00, 0x7f, 0x29, 0x75, 0xfc, 0x6d, - 0x72, 0x06, 0xda, 0xdf, 0x2a, 0x94, 0xa2, 0x16, 0x69, 0x74, 0x33, 0x08, 0x49, 0xfa, 0x53, 0x6f, - 0x91, 0x46, 0x32, 0xe0, 0xf4, 0x1f, 0x66, 0xb5, 0xed, 0xbf, 0x06, 0x30, 0x9e, 0xa0, 0xad, 0xc6, - 0x64, 0x0f, 0xbd, 0x6c, 0x38, 0x75, 0x5d, 0x4c, 0x39, 0x75, 0x95, 0x19, 0xb6, 0xa6, 0x68, 0x7c, - 0x0f, 0x8a, 0x7b, 0xce, 0x23, 0xa1, 0x49, 0x7a, 0xb1, 0x7b, 0x37, 0x28, 0xfd, 0xb9, 0x35, 0xe7, - 0x11, 0xbf, 0x33, 0xbd, 0x28, 0x17, 0xc8, 0x9a, 0xf3, 0xe8, 0x98, 0x9b, 0x7d, 0x30, 0x26, 0x75, - 0xc7, 0x8d, 0xe2, 0xaf, 0xfe, 0x97, 0xe4, 0x3f, 0x5b, 0x76, 0xb4, 0x11, 0xd6, 0x96, 0xeb, 0x8b, - 0x77, 0xc3, 0xbe, 0xda, 0x72, 0xfd, 0x74, 0x5b, 0xae, 0xdf, 0x47, 0x5b, 0xae, 0x8f, 0x3e, 0x80, - 0x21, 0xf1, 0x46, 0xcf, 0x6c, 0xbd, 0x4d, 0x2d, 0x55, 0x5e, 0x7b, 0xe2, 0x89, 0x9f, 0xb7, 0x39, - 0x2f, 0xef, 0x84, 0xa2, 0xb4, 0x67, 0xbb, 0xb2, 0x41, 0xf4, 0xb7, 0x2d, 0x18, 0x17, 0xbf, 0x31, - 0x79, 0xbf, 0x4d, 0xa2, 0x58, 0xc8, 0x9e, 0x9f, 0xe9, 0xbf, 0x0f, 0xa2, 0x22, 0xef, 0xca, 0x67, - 0x24, 0x9b, 0x35, 0x81, 0x3d, 0x7b, 0x94, 0xea, 0x05, 0xfa, 0xa7, 0x16, 0x4c, 0xef, 0x39, 0x8f, - 0x78, 0x8b, 0xbc, 0x0c, 0x3b, 0xb1, 0x1b, 0x08, 0xdb, 0xf5, 0xcf, 0xf5, 0x37, 0xfd, 0x1d, 0xd5, - 0x79, 0x27, 0xa5, 0x99, 0xeb, 0x74, 0x16, 0x4a, 0xcf, 0xae, 0x66, 0xf6, 0x6b, 0x76, 0x0b, 0x86, - 0xe5, 0x7a, 0xcb, 0xb8, 0x79, 0x57, 0x75, 0xc1, 0xfa, 0xc4, 0x26, 0x12, 0xba, 0x67, 0x15, 0x6d, - 0x47, 0xac, 0xb5, 0x27, 0xda, 0xce, 0x7b, 0x30, 0xaa, 0xaf, 0xb1, 0x27, 0xda, 0xd6, 0xfb, 0x70, - 0x2e, 0x63, 0x2d, 0x3d, 0xd1, 0x26, 0x1f, 0xc2, 0xc5, 0xdc, 0xf5, 0xf1, 0x24, 0x1b, 0xb6, 0x7f, - 0xd9, 0xd2, 0xf9, 0xe0, 0x19, 0xa8, 0xe0, 0x97, 0x4c, 0x15, 0xfc, 0xe5, 0xee, 0x3b, 0x27, 0x47, - 0x0f, 0xff, 0xae, 0xde, 0x69, 0xca, 0xd5, 0xd1, 0xdb, 0x30, 0xe8, 0xd1, 0x12, 0x69, 0x1c, 0x62, - 0xf7, 0xde, 0x91, 0x89, 0x2c, 0xc5, 0xca, 0x23, 0x2c, 0x28, 0xd8, 0xbf, 0x6e, 0x41, 0xe9, 0x0c, - 0x46, 0x02, 0x9b, 0x23, 0xf1, 0x72, 0x2e, 0x69, 0x11, 0x46, 0x6a, 0x0e, 0x3b, 0x0f, 0x97, 0x65, - 0xa8, 0xac, 0x9c, 0x81, 0xf9, 0x3e, 0x38, 0x77, 0x27, 0x70, 0x9a, 0x8b, 0x8e, 0xe7, 0xf8, 0x0d, - 0x12, 0xae, 0xfa, 0xdb, 0x3d, 0xad, 0x94, 0x74, 0x9b, 0xa2, 0x42, 0x2f, 0x9b, 0x22, 0x7b, 0x07, - 0x90, 0xde, 0x80, 0xb0, 0xe3, 0xc4, 0x30, 0xe4, 0xf2, 0xa6, 0xc4, 0xf0, 0x3f, 0x9f, 0x2d, 0xdd, - 0x75, 0xf4, 0x4c, 0xb3, 0x50, 0xe4, 0x05, 0x58, 0x12, 0xb2, 0x6f, 0x40, 0xa6, 0xef, 0x56, 0x6f, - 0xb5, 0x81, 0xfd, 0x3a, 0x4c, 0xb1, 0x9a, 0x27, 0xbb, 0xd2, 0xda, 0x3f, 0x62, 0xc1, 0xc4, 0x7a, - 0x2a, 0x1e, 0xc0, 0x55, 0xf6, 0xd6, 0x97, 0xa1, 0xf7, 0xad, 0xb3, 0x52, 0x2c, 0xa0, 0xa7, 0xae, - 0x5f, 0xfa, 0x4b, 0x0b, 0xca, 0x2a, 0x92, 0xcd, 0x19, 0x08, 0x55, 0x4b, 0x86, 0x50, 0x95, 0xa9, - 0xf7, 0x50, 0xdd, 0xc9, 0x93, 0xa9, 0xd0, 0x6d, 0xe5, 0xd9, 0xde, 0x45, 0xe5, 0x91, 0x90, 0xe1, - 0x7e, 0xd0, 0xe3, 0xa6, 0xfb, 0xbb, 0xf4, 0x75, 0x67, 0x66, 0x42, 0x0a, 0xf7, 0x63, 0x62, 0x26, - 0xa4, 0xfa, 0x93, 0xb3, 0xfb, 0x6a, 0x5a, 0x97, 0x19, 0x57, 0xfa, 0x2e, 0x66, 0xf6, 0xed, 0x78, - 0xee, 0x07, 0x44, 0x05, 0x94, 0xa8, 0x08, 0x33, 0x6e, 0x51, 0x7a, 0x7c, 0x58, 0x19, 0x53, 0xff, - 0x78, 0xd4, 0xa1, 0xa4, 0x8a, 0x7d, 0x0b, 0x26, 0x52, 0x03, 0x86, 0x5e, 0x87, 0x81, 0xd6, 0x8e, - 0x13, 0x91, 0x94, 0x69, 0xe4, 0x40, 0x8d, 0x16, 0x1e, 0x1f, 0x56, 0xc6, 0x55, 0x05, 0x56, 0x82, - 0x39, 0xb6, 0xfd, 0x3f, 0x2d, 0x28, 0xad, 0x07, 0xcd, 0xb3, 0x58, 0x4c, 0x6f, 0x19, 0x8b, 0xe9, - 0x99, 0xbc, 0x98, 0x6d, 0xb9, 0xeb, 0x68, 0x25, 0xb5, 0x8e, 0x2e, 0xe7, 0x52, 0xe8, 0xbe, 0x84, - 0xf6, 0x60, 0x84, 0x45, 0x82, 0x13, 0xa6, 0x9a, 0xaf, 0x1a, 0xf2, 0x7d, 0x25, 0x25, 0xdf, 0x4f, - 0x68, 0xa8, 0x9a, 0x94, 0xff, 0x02, 0x0c, 0x09, 0x73, 0xc1, 0xb4, 0x81, 0xbb, 0xc0, 0xc5, 0x12, - 0x6e, 0xff, 0x6c, 0x11, 0x8c, 0xc8, 0x73, 0xe8, 0x37, 0x2d, 0x98, 0x0b, 0xb9, 0xc7, 0x60, 0xb3, - 0xda, 0x0e, 0x5d, 0x7f, 0xbb, 0xde, 0xd8, 0x21, 0xcd, 0xb6, 0xe7, 0xfa, 0xdb, 0xab, 0xdb, 0x7e, - 0xa0, 0x8a, 0x97, 0x1f, 0x91, 0x46, 0x9b, 0xe9, 0xfc, 0x7b, 0x84, 0xb9, 0x53, 0xe6, 0x38, 0xd7, - 0x8f, 0x0e, 0x2b, 0x73, 0xf8, 0x44, 0xb4, 0xf1, 0x09, 0xfb, 0x82, 0x7e, 0xd7, 0x82, 0x79, 0x1e, - 0x90, 0xad, 0xff, 0xfe, 0x77, 0xb9, 0x0d, 0xd5, 0x24, 0xa9, 0x84, 0xc8, 0x06, 0x09, 0xf7, 0x16, - 0xdf, 0x10, 0x03, 0x3a, 0x5f, 0x3b, 0x59, 0x5b, 0xf8, 0xa4, 0x9d, 0xb3, 0xff, 0x4d, 0x11, 0xc6, - 0xe8, 0x28, 0x26, 0x71, 0x3c, 0x5e, 0x37, 0x96, 0xc4, 0xb3, 0xa9, 0x25, 0x31, 0x65, 0x20, 0x9f, - 0x4e, 0x08, 0x8f, 0x08, 0xa6, 0x3c, 0x27, 0x8a, 0x6f, 0x11, 0x27, 0x8c, 0x37, 0x89, 0xc3, 0xcd, - 0x54, 0x8a, 0x27, 0x36, 0xa9, 0x51, 0xea, 0x97, 0x3b, 0x69, 0x62, 0xb8, 0x93, 0x3e, 0xda, 0x07, - 0xc4, 0x6c, 0x6d, 0x42, 0xc7, 0x8f, 0xf8, 0xb7, 0xb8, 0xe2, 0x3d, 0xe0, 0x64, 0xad, 0xce, 0x8a, - 0x56, 0xd1, 0x9d, 0x0e, 0x6a, 0x38, 0xa3, 0x05, 0xcd, 0x86, 0x6a, 0xa0, 0x5f, 0x1b, 0xaa, 0xc1, - 0x1e, 0x5e, 0x24, 0x7b, 0x30, 0x29, 0x66, 0x65, 0xcb, 0xdd, 0x16, 0x87, 0xf4, 0x17, 0x53, 0x36, - 0x96, 0x56, 0xff, 0x86, 0x32, 0x3d, 0x0c, 0x2c, 0xed, 0xef, 0x87, 0x73, 0xb4, 0x39, 0xd3, 0xe7, - 0x21, 0x42, 0x04, 0x26, 0x76, 0xdb, 0x9b, 0xc4, 0x23, 0xb1, 0x2c, 0x13, 0x8d, 0x66, 0x8a, 0x9d, - 0x66, 0xed, 0x44, 0x39, 0x75, 0xdb, 0x24, 0x81, 0xd3, 0x34, 0xed, 0x9f, 0xb7, 0x80, 0x59, 0x6b, - 0x9f, 0xc1, 0xf1, 0xf7, 0x79, 0xf3, 0xf8, 0x9b, 0xc9, 0xe3, 0x40, 0x39, 0x27, 0xdf, 0x6b, 0x7c, - 0x5a, 0x6a, 0x61, 0xf0, 0xe8, 0x40, 0xbc, 0xfa, 0xf6, 0x21, 0x71, 0xfd, 0x1f, 0x8b, 0x6f, 0x48, - 0xe5, 0x40, 0x8d, 0x7e, 0x00, 0x86, 0x1b, 0x4e, 0xcb, 0x69, 0xf0, 0x90, 0x9f, 0xb9, 0xda, 0x07, - 0xa3, 0xd2, 0xdc, 0x92, 0xa8, 0xc1, 0x6f, 0xd3, 0xdf, 0x21, 0xbf, 0x52, 0x16, 0xf7, 0xbc, 0x41, - 0xab, 0x26, 0x67, 0x77, 0x61, 0xcc, 0x20, 0xf6, 0x44, 0xaf, 0x5e, 0x3f, 0xc0, 0x8f, 0x0b, 0x15, - 0x8f, 0x63, 0x0f, 0xa6, 0x7c, 0xed, 0x3f, 0x65, 0x8e, 0x52, 0x9c, 0xfe, 0x64, 0xaf, 0x03, 0x81, - 0x71, 0x52, 0xcd, 0x1a, 0x3d, 0x45, 0x06, 0x77, 0x52, 0xb6, 0xff, 0xbe, 0x05, 0x4f, 0xe9, 0x88, - 0x9a, 0x6f, 0x7b, 0x2f, 0x7d, 0x66, 0x15, 0x86, 0x83, 0x16, 0x09, 0x9d, 0x38, 0x08, 0x05, 0x07, - 0xbc, 0x26, 0x07, 0xfd, 0xae, 0x28, 0x3f, 0x16, 0xb1, 0xd7, 0x24, 0x75, 0x59, 0x8e, 0x55, 0x4d, - 0x64, 0xc3, 0x20, 0x1b, 0x8c, 0x48, 0xc4, 0x1d, 0x60, 0x66, 0x72, 0xec, 0x69, 0x2f, 0xc2, 0x02, - 0x62, 0xff, 0xa9, 0xc5, 0x17, 0x96, 0xde, 0x75, 0xf4, 0x3e, 0x4c, 0xee, 0x39, 0x71, 0x63, 0x67, - 0xf9, 0x51, 0x2b, 0xe4, 0x6a, 0x5c, 0x39, 0x4e, 0x2f, 0xf6, 0x1a, 0x27, 0xed, 0x23, 0x13, 0x63, - 0xaa, 0xb5, 0x14, 0x31, 0xdc, 0x41, 0x1e, 0x6d, 0xc2, 0x08, 0x2b, 0x63, 0x56, 0xbb, 0x51, 0xb7, - 0x63, 0x2e, 0xaf, 0x35, 0xf5, 0x3a, 0xba, 0x96, 0xd0, 0xc1, 0x3a, 0x51, 0xfb, 0xab, 0x45, 0xbe, - 0xdb, 0x99, 0xe4, 0xf8, 0x02, 0x0c, 0xb5, 0x82, 0xe6, 0xd2, 0x6a, 0x15, 0x8b, 0x59, 0x50, 0x2c, - 0xb1, 0xc6, 0x8b, 0xb1, 0x84, 0xa3, 0x37, 0x01, 0xc8, 0xa3, 0x98, 0x84, 0xbe, 0xe3, 0x29, 0xe3, - 0x06, 0x65, 0xce, 0x57, 0x0d, 0xd6, 0x83, 0xf8, 0x5e, 0x44, 0xbe, 0x6f, 0x59, 0xa1, 0x60, 0x0d, - 0x1d, 0x5d, 0x07, 0x68, 0x85, 0xc1, 0xbe, 0xdb, 0x64, 0x6e, 0x60, 0x45, 0xf3, 0xe9, 0xbf, 0xa6, - 0x20, 0x58, 0xc3, 0x42, 0x6f, 0xc2, 0x58, 0xdb, 0x8f, 0xf8, 0x69, 0xeb, 0x6c, 0x8a, 0xc8, 0x65, - 0xc3, 0xc9, 0x2b, 0xfc, 0x3d, 0x1d, 0x88, 0x4d, 0x5c, 0xb4, 0x00, 0x83, 0xb1, 0xc3, 0xde, 0xee, - 0x07, 0xf2, 0x6d, 0xf0, 0x36, 0x28, 0x86, 0x1e, 0x70, 0x92, 0x56, 0xc0, 0xa2, 0x22, 0xfa, 0x92, - 0xe4, 0xf7, 0x9c, 0xff, 0x0b, 0xe3, 0xd7, 0xdc, 0x3d, 0xa2, 0x9f, 0x15, 0x3a, 0xc3, 0x17, 0x46, - 0xb5, 0x06, 0x2d, 0xfb, 0x87, 0xca, 0x00, 0x89, 0x68, 0x89, 0x3e, 0xe8, 0xe0, 0x47, 0x2f, 0x75, - 0x17, 0x46, 0x4f, 0x8f, 0x19, 0xa1, 0x1f, 0xb6, 0x60, 0xc4, 0xf1, 0xbc, 0xa0, 0xe1, 0xc4, 0x6c, - 0x94, 0x0b, 0xdd, 0xf9, 0xa1, 0x68, 0x7f, 0x21, 0xa9, 0xc1, 0xbb, 0xf0, 0xaa, 0x5c, 0x78, 0x1a, - 0xa4, 0x67, 0x2f, 0xf4, 0x86, 0xd1, 0x77, 0xc8, 0x1b, 0x07, 0x5f, 0x1e, 0xb3, 0xe9, 0x1b, 0x47, - 0x99, 0xb1, 0x7e, 0xed, 0xb2, 0x81, 0xee, 0x19, 0x21, 0xbe, 0x4a, 0xf9, 0xb1, 0x02, 0x0c, 0x09, - 0xab, 0x57, 0x74, 0x2f, 0x54, 0xd3, 0x9d, 0x80, 0x06, 0xf2, 0x03, 0x6a, 0x68, 0xa2, 0x7c, 0x0f, - 0x07, 0xa0, 0xf7, 0x60, 0xa2, 0x69, 0x9e, 0xed, 0x62, 0x35, 0x3d, 0x9f, 0x47, 0x37, 0x25, 0x0a, - 0x24, 0xa7, 0x79, 0x0a, 0x80, 0xd3, 0x84, 0x51, 0x8d, 0xbb, 0x63, 0xad, 0xfa, 0x5b, 0x81, 0x30, - 0xa2, 0xb6, 0x73, 0xe7, 0xf2, 0x20, 0x8a, 0xc9, 0x1e, 0xc5, 0x4c, 0x0e, 0xed, 0x75, 0x51, 0x17, - 0x2b, 0x2a, 0xe8, 0x6d, 0x18, 0x64, 0xfe, 0x9c, 0xd1, 0xcc, 0x70, 0xbe, 0xd2, 0xcb, 0x0c, 0x45, - 0x90, 0x6c, 0x2a, 0xf6, 0x37, 0xc2, 0x82, 0x02, 0xba, 0x25, 0xe3, 0x95, 0x44, 0xab, 0xfe, 0xbd, - 0x88, 0xb0, 0x78, 0x25, 0xe5, 0xc5, 0x4f, 0x26, 0xa1, 0x48, 0x78, 0x79, 0x66, 0x68, 0x69, 0xa3, - 0x26, 0x15, 0x8e, 0xc4, 0x7f, 0x19, 0xb1, 0x7a, 0x06, 0xf2, 0xbb, 0x67, 0x46, 0xb5, 0x4e, 0x86, - 0xf3, 0xbe, 0x49, 0x02, 0xa7, 0x69, 0x9e, 0xe9, 0x59, 0x3d, 0xeb, 0xc3, 0x64, 0x7a, 0x63, 0x3d, - 0x51, 0xd9, 0xe0, 0x8f, 0x4b, 0x30, 0x6e, 0x2e, 0x04, 0x34, 0x0f, 0x65, 0x41, 0x44, 0x45, 0x57, - 0x54, 0x6b, 0x7b, 0x4d, 0x02, 0x70, 0x82, 0xc3, 0xa2, 0x4b, 0xb2, 0xea, 0x9a, 0xd1, 0x5b, 0x12, - 0x5d, 0x52, 0x41, 0xb0, 0x86, 0x45, 0x25, 0xf6, 0xcd, 0x20, 0x88, 0xd5, 0x51, 0xa0, 0x56, 0xcb, - 0x22, 0x2b, 0xc5, 0x02, 0x4a, 0x8f, 0x80, 0x5d, 0x12, 0xfa, 0xc4, 0xbb, 0x4f, 0x42, 0xf6, 0xee, - 0x5a, 0x32, 0x0d, 0xb1, 0x6e, 0xeb, 0x40, 0x6c, 0xe2, 0xd2, 0xb3, 0x2d, 0x88, 0xd8, 0xf2, 0x13, - 0xf7, 0x82, 0xc4, 0x88, 0xb0, 0xce, 0xfd, 0x99, 0x25, 0x1c, 0x7d, 0x11, 0x9e, 0x52, 0xee, 0xc7, - 0x98, 0xab, 0x41, 0x65, 0x8b, 0x83, 0xc6, 0x35, 0xfe, 0xa9, 0xa5, 0x6c, 0x34, 0x9c, 0x57, 0x1f, - 0xbd, 0x05, 0xe3, 0x42, 0xde, 0x96, 0x14, 0x87, 0xcc, 0x97, 0xf9, 0xdb, 0x06, 0x14, 0xa7, 0xb0, - 0x51, 0x15, 0x26, 0x69, 0x09, 0x13, 0x79, 0x25, 0x05, 0xee, 0x46, 0xad, 0x04, 0x8b, 0xdb, 0x29, - 0x38, 0xee, 0xa8, 0x81, 0x16, 0x60, 0x82, 0x0b, 0x44, 0xf4, 0x02, 0xcb, 0xe6, 0x41, 0xf8, 0x36, - 0xa8, 0x8d, 0x70, 0xd7, 0x04, 0xe3, 0x34, 0x3e, 0xba, 0x01, 0xa3, 0x4e, 0xd8, 0xd8, 0x71, 0x63, - 0xd2, 0x88, 0xdb, 0x21, 0x77, 0x7a, 0xd0, 0x4c, 0x1b, 0x16, 0x34, 0x18, 0x36, 0x30, 0xed, 0x0f, - 0xe0, 0x5c, 0x86, 0x5b, 0x14, 0x5d, 0x38, 0x4e, 0xcb, 0x95, 0xdf, 0x94, 0x32, 0x07, 0x5c, 0xa8, - 0xad, 0xca, 0xaf, 0xd1, 0xb0, 0xe8, 0xea, 0x64, 0xee, 0x53, 0x5a, 0x58, 0x79, 0xb5, 0x3a, 0x57, - 0x24, 0x00, 0x27, 0x38, 0xf6, 0xff, 0x2a, 0xc0, 0x44, 0x86, 0x6a, 0x97, 0x85, 0x36, 0x4f, 0xdd, - 0x18, 0x92, 0x48, 0xe6, 0xb4, 0x19, 0x5f, 0x05, 0x03, 0x4f, 0x35, 0x93, 0x84, 0x02, 0x4f, 0x70, - 0x94, 0xb6, 0xb8, 0x98, 0x6b, 0x64, 0xb6, 0x08, 0xc5, 0xb6, 0xdb, 0x14, 0x0b, 0x58, 0x9e, 0xd7, - 0xc5, 0x7b, 0xab, 0xd5, 0xe3, 0xc3, 0xca, 0xb3, 0x79, 0x19, 0x1a, 0xe2, 0x83, 0x16, 0x89, 0xe6, - 0xe8, 0xee, 0xa1, 0x95, 0x53, 0x23, 0x36, 0xd0, 0xd7, 0x88, 0x2d, 0xc0, 0x84, 0x64, 0x01, 0xe6, - 0x92, 0x56, 0x33, 0x8f, 0x4d, 0x30, 0x4e, 0xe3, 0x9b, 0x83, 0x3e, 0xd4, 0xc7, 0xa0, 0xff, 0x44, - 0x01, 0x26, 0xd3, 0x26, 0x58, 0x67, 0xa0, 0x10, 0x7c, 0xdb, 0x50, 0x08, 0x66, 0x27, 0x0a, 0x48, - 0x1b, 0x86, 0xe5, 0x29, 0x07, 0x71, 0x4a, 0x39, 0xf8, 0xe9, 0xbe, 0xa8, 0x75, 0x57, 0x14, 0xfe, - 0x83, 0x02, 0x9c, 0x4f, 0x57, 0x59, 0xf2, 0x1c, 0x77, 0xef, 0x0c, 0xc6, 0xe6, 0xae, 0x31, 0x36, - 0x2f, 0xf7, 0xf3, 0x35, 0xac, 0x6b, 0xb9, 0x03, 0xf4, 0x20, 0x35, 0x40, 0xf3, 0xfd, 0x93, 0xec, - 0x3e, 0x4a, 0xdf, 0x2c, 0xc2, 0xe5, 0xcc, 0x7a, 0x89, 0x3e, 0x6d, 0xc5, 0xd0, 0xa7, 0x5d, 0x4f, - 0xe9, 0xd3, 0xec, 0xee, 0xb5, 0x4f, 0x47, 0xc1, 0x26, 0xfc, 0xd5, 0x58, 0xf8, 0xb1, 0xc7, 0x54, - 0xae, 0x19, 0xfe, 0x6a, 0x8a, 0x10, 0x36, 0xe9, 0x7e, 0x2b, 0x29, 0xd5, 0xfe, 0xbd, 0x05, 0x17, - 0x33, 0xe7, 0xe6, 0x0c, 0x14, 0x4f, 0xeb, 0xa6, 0xe2, 0xe9, 0x85, 0xbe, 0x57, 0x6b, 0x8e, 0x26, - 0xea, 0x4f, 0x8a, 0x39, 0xdf, 0xc2, 0xae, 0xd5, 0x77, 0x61, 0xc4, 0x69, 0x34, 0x48, 0x14, 0xad, - 0x05, 0x4d, 0x15, 0x8e, 0xeb, 0x65, 0x76, 0x3b, 0x4a, 0x8a, 0x8f, 0x0f, 0x2b, 0xb3, 0x69, 0x12, - 0x09, 0x18, 0xeb, 0x14, 0xcc, 0x08, 0x82, 0x85, 0x53, 0x8d, 0x20, 0x78, 0x1d, 0x60, 0x5f, 0xc9, - 0xd8, 0xe9, 0xab, 0xb9, 0x26, 0x7d, 0x6b, 0x58, 0xe8, 0x7b, 0x61, 0x38, 0x12, 0xc7, 0xb8, 0x58, - 0x8a, 0xaf, 0xf6, 0x39, 0x57, 0xce, 0x26, 0xf1, 0x4c, 0xc7, 0x68, 0xa5, 0xc5, 0x50, 0x24, 0xd1, - 0x77, 0xc3, 0x64, 0xc4, 0xe3, 0x6e, 0x2c, 0x79, 0x4e, 0xc4, 0xac, 0xec, 0xc5, 0x2a, 0x64, 0xde, - 0xce, 0xf5, 0x14, 0x0c, 0x77, 0x60, 0xa3, 0x15, 0xf9, 0x51, 0x2c, 0x48, 0x08, 0x5f, 0x98, 0x57, - 0x93, 0x0f, 0x12, 0x89, 0x55, 0xa6, 0xd3, 0xc3, 0xcf, 0x06, 0x5e, 0xab, 0x69, 0xff, 0x44, 0x09, - 0x9e, 0xee, 0xc2, 0xc4, 0xd0, 0x82, 0xf9, 0x4a, 0xf6, 0x62, 0xfa, 0xce, 0x3a, 0x9b, 0x59, 0xd9, - 0xb8, 0xc4, 0xa6, 0xd6, 0x4a, 0xe1, 0x43, 0xaf, 0x95, 0x1f, 0xb5, 0x34, 0x6d, 0x02, 0xb7, 0xe5, - 0xfa, 0xfc, 0x09, 0x99, 0xf3, 0x29, 0xaa, 0x17, 0xb6, 0x32, 0xee, 0xe8, 0xd7, 0xfb, 0xee, 0x4e, - 0xdf, 0x97, 0xf6, 0xb3, 0xd5, 0xa9, 0x7e, 0xd5, 0x82, 0x67, 0x33, 0xfb, 0x6b, 0xbc, 0xea, 0xcf, - 0x43, 0xb9, 0x41, 0x0b, 0x35, 0xcf, 0x9d, 0xc4, 0xa5, 0x51, 0x02, 0x70, 0x82, 0x63, 0x3c, 0xde, - 0x17, 0x7a, 0x3e, 0xde, 0xff, 0x6b, 0x0b, 0x3a, 0x16, 0xf0, 0x19, 0x70, 0xd2, 0x55, 0x93, 0x93, - 0x7e, 0xb2, 0x9f, 0xb9, 0xcc, 0x61, 0xa2, 0x7f, 0x30, 0x01, 0x17, 0x72, 0x4c, 0xf5, 0xf7, 0x61, - 0x6a, 0xbb, 0x41, 0x4c, 0x9f, 0x28, 0xf1, 0x31, 0x99, 0xee, 0x63, 0x5d, 0x1d, 0xa8, 0x58, 0x46, - 0x8c, 0xa9, 0x0e, 0x14, 0xdc, 0xd9, 0x04, 0xfa, 0xaa, 0x05, 0xd3, 0xce, 0xc3, 0xa8, 0x23, 0xef, - 0x99, 0x58, 0x33, 0xaf, 0x65, 0xea, 0x16, 0x7a, 0xe4, 0x49, 0xe3, 0x29, 0x42, 0xb2, 0xb0, 0x70, - 0x66, 0x5b, 0x08, 0x8b, 0x08, 0x8a, 0x54, 0xde, 0xee, 0xe2, 0xb5, 0x97, 0xe5, 0x53, 0xc1, 0x79, - 0xaa, 0x84, 0x60, 0x45, 0x07, 0xdd, 0x87, 0xf2, 0xb6, 0x74, 0x74, 0x12, 0x3c, 0x3b, 0xf3, 0x10, - 0xcc, 0xf4, 0x86, 0xe2, 0xc6, 0xbd, 0x0a, 0x84, 0x13, 0x52, 0xe8, 0x2d, 0x28, 0xfa, 0x5b, 0x51, - 0xb7, 0xdc, 0x1a, 0x29, 0x63, 0x17, 0xee, 0x11, 0xbb, 0xbe, 0x52, 0xc7, 0xb4, 0x22, 0xba, 0x05, - 0xc5, 0x70, 0xb3, 0x29, 0xd4, 0x61, 0x99, 0x72, 0x29, 0x5e, 0xac, 0x66, 0x2f, 0x12, 0x4e, 0x09, - 0x2f, 0x56, 0x31, 0x25, 0x81, 0x6a, 0x30, 0xc0, 0xac, 0xda, 0x85, 0xd6, 0x2b, 0x53, 0x20, 0xed, - 0xe2, 0x1d, 0xc2, 0xdd, 0x66, 0x19, 0x02, 0xe6, 0x84, 0xd0, 0xdb, 0x30, 0xd8, 0x60, 0xe9, 0x27, - 0x44, 0xd0, 0xde, 0xec, 0x78, 0x2a, 0x1d, 0x09, 0x2a, 0xf8, 0x13, 0x03, 0x2f, 0xc7, 0x82, 0x02, - 0xda, 0x80, 0xc1, 0x06, 0x69, 0xed, 0x6c, 0x45, 0xec, 0xe2, 0x6d, 0x0a, 0xf8, 0x09, 0xad, 0x2e, - 0xd9, 0x56, 0x04, 0x55, 0x86, 0x81, 0x05, 0x2d, 0xf4, 0x59, 0x28, 0x6c, 0x35, 0x84, 0xa9, 0x7b, - 0xa6, 0xde, 0xcb, 0x74, 0x65, 0x5e, 0x1c, 0x3c, 0x3a, 0xac, 0x14, 0x56, 0x96, 0x70, 0x61, 0xab, - 0x81, 0xd6, 0x61, 0x68, 0x8b, 0x3b, 0x3f, 0x8a, 0x08, 0x03, 0xcf, 0x67, 0xfb, 0x65, 0x76, 0xf8, - 0x47, 0x72, 0x13, 0x6d, 0x01, 0xc0, 0x92, 0x08, 0x0b, 0x3e, 0xa8, 0x9c, 0x38, 0x45, 0x14, 0xde, - 0xb9, 0x93, 0x39, 0xde, 0x72, 0xb7, 0xea, 0xc4, 0x15, 0x14, 0x6b, 0x14, 0xd1, 0x57, 0xa0, 0xec, - 0xc8, 0x3c, 0x5b, 0x22, 0x4a, 0xc1, 0xab, 0x99, 0xdb, 0xb1, 0x7b, 0x0a, 0x32, 0xbe, 0x96, 0x15, - 0x12, 0x4e, 0x88, 0xa2, 0x5d, 0x18, 0xdb, 0x8f, 0x5a, 0x3b, 0x44, 0x6e, 0x5f, 0x16, 0xb4, 0x20, - 0xe7, 0xb8, 0xba, 0x2f, 0x10, 0xdd, 0x30, 0x6e, 0x3b, 0x5e, 0x07, 0xc7, 0x61, 0x96, 0xfd, 0xf7, - 0x75, 0x62, 0xd8, 0xa4, 0x4d, 0x87, 0xff, 0xfd, 0x76, 0xb0, 0x79, 0x10, 0x13, 0x11, 0xb6, 0x37, - 0x73, 0xf8, 0xdf, 0xe1, 0x28, 0x9d, 0xc3, 0x2f, 0x00, 0x58, 0x12, 0xa1, 0x1b, 0xdc, 0x91, 0x39, - 0xec, 0x58, 0xb8, 0xde, 0x9c, 0x0d, 0x9e, 0x99, 0xe8, 0x4e, 0x1b, 0x14, 0xc6, 0x19, 0x13, 0x52, - 0x8c, 0x23, 0xb6, 0x76, 0x82, 0x38, 0xf0, 0x53, 0xdc, 0x78, 0x2a, 0x9f, 0x23, 0xd6, 0x32, 0xf0, - 0x3b, 0x39, 0x62, 0x16, 0x16, 0xce, 0x6c, 0x0b, 0x35, 0x61, 0xbc, 0x15, 0x84, 0xf1, 0xc3, 0x20, - 0x94, 0xeb, 0x0b, 0x75, 0xb9, 0xe4, 0x1b, 0x98, 0xa2, 0x45, 0x16, 0x46, 0xda, 0x84, 0xe0, 0x14, - 0x4d, 0xf4, 0x05, 0x18, 0x8a, 0x1a, 0x8e, 0x47, 0x56, 0xef, 0xce, 0x9c, 0xcb, 0x3f, 0x6a, 0xea, - 0x1c, 0x25, 0x67, 0x75, 0xb1, 0xc9, 0x11, 0x28, 0x58, 0x92, 0x43, 0x2b, 0x30, 0xc0, 0x62, 0xc1, - 0xb3, 0x88, 0xc3, 0x39, 0xd1, 0x70, 0x3a, 0x8c, 0x09, 0x39, 0x47, 0x62, 0xc5, 0x98, 0x57, 0xa7, - 0x7b, 0x40, 0xc8, 0xba, 0x41, 0x34, 0x73, 0x3e, 0x7f, 0x0f, 0x08, 0x11, 0xf9, 0x6e, 0xbd, 0xdb, - 0x1e, 0x50, 0x48, 0x38, 0x21, 0x4a, 0xf9, 0x31, 0xe5, 0xa1, 0x17, 0xf2, 0xf9, 0x71, 0x3e, 0x07, - 0x65, 0xfc, 0x98, 0xf2, 0x4f, 0x4a, 0xc2, 0xfe, 0xc3, 0xa1, 0x4e, 0xf9, 0x84, 0xdd, 0x8e, 0x7e, - 0xc8, 0xea, 0x78, 0xee, 0xfa, 0x4c, 0xbf, 0xca, 0x9a, 0x53, 0x94, 0x4c, 0xbf, 0x6a, 0xc1, 0x85, - 0x56, 0xe6, 0x87, 0x88, 0xc3, 0xbe, 0x3f, 0x9d, 0x0f, 0xff, 0x74, 0x15, 0x15, 0x3c, 0x1b, 0x8e, - 0x73, 0x5a, 0x4a, 0x4b, 0xff, 0xc5, 0x0f, 0x2d, 0xfd, 0xaf, 0xc1, 0x30, 0x13, 0x28, 0x93, 0xd0, - 0x4b, 0x7d, 0x59, 0xa8, 0x30, 0xb1, 0x61, 0x49, 0x54, 0xc4, 0x8a, 0x04, 0xfa, 0x31, 0x0b, 0x2e, - 0xa5, 0xbb, 0x8e, 0x09, 0x03, 0x8b, 0x18, 0xda, 0xfc, 0x62, 0xb6, 0x22, 0xbe, 0xff, 0x52, 0xad, - 0x1b, 0xf2, 0x71, 0x2f, 0x04, 0xdc, 0xbd, 0x31, 0x54, 0xcd, 0xb8, 0x19, 0x0e, 0x9a, 0xda, 0xf0, - 0x3e, 0x6e, 0x87, 0xaf, 0xc1, 0xe8, 0x5e, 0xd0, 0xf6, 0x63, 0x61, 0x42, 0x22, 0x9c, 0xd3, 0xd8, - 0x9b, 0xed, 0x9a, 0x56, 0x8e, 0x0d, 0xac, 0xd4, 0x9d, 0x72, 0xf8, 0x71, 0xef, 0x94, 0xe8, 0xdd, - 0x54, 0xce, 0xd9, 0x72, 0xbe, 0x6c, 0x21, 0xae, 0xdf, 0x27, 0xc8, 0x3c, 0x7b, 0xb6, 0xf7, 0xa0, - 0xaf, 0x5b, 0x19, 0x02, 0x3c, 0xbf, 0x19, 0x7f, 0xce, 0xbc, 0x19, 0x5f, 0x4d, 0xdf, 0x8c, 0x3b, - 0x34, 0xa1, 0xc6, 0xa5, 0xb8, 0xff, 0x80, 0xbf, 0xfd, 0x46, 0xd0, 0xb2, 0x3d, 0xb8, 0xd2, 0xeb, - 0x58, 0x62, 0xb6, 0x44, 0x4d, 0xf5, 0xee, 0x95, 0xd8, 0x12, 0x35, 0x57, 0xab, 0x98, 0x41, 0xfa, - 0x0d, 0xb1, 0x60, 0xff, 0x77, 0x0b, 0x8a, 0xb5, 0xa0, 0x79, 0x06, 0x9a, 0xdd, 0xcf, 0x1b, 0x9a, - 0xdd, 0xa7, 0x73, 0x72, 0x01, 0xe7, 0xea, 0x71, 0x97, 0x53, 0x7a, 0xdc, 0x4b, 0x79, 0x04, 0xba, - 0x6b, 0x6d, 0x7f, 0xae, 0x08, 0x7a, 0xe6, 0x62, 0xf4, 0x6f, 0x1f, 0xc7, 0x28, 0xb5, 0xd8, 0x2d, - 0x99, 0xb1, 0xa0, 0xcc, 0x4c, 0x90, 0xa4, 0xbf, 0xd5, 0x5f, 0x31, 0xdb, 0xd4, 0x07, 0xc4, 0xdd, - 0xde, 0x89, 0x49, 0x33, 0xfd, 0x39, 0x67, 0x67, 0x9b, 0xfa, 0x5f, 0x2d, 0x98, 0x48, 0xb5, 0x8e, - 0x3c, 0x18, 0xf3, 0x74, 0xb5, 0x9c, 0x58, 0xa7, 0x8f, 0xa5, 0xd1, 0xe3, 0x19, 0x40, 0xf4, 0x22, - 0x6c, 0x12, 0x47, 0x73, 0x00, 0xea, 0xd9, 0x4c, 0x6a, 0xbb, 0x98, 0xd4, 0xaf, 0xde, 0xd5, 0x22, - 0xac, 0x61, 0xa0, 0xd7, 0x61, 0x24, 0x0e, 0x5a, 0x81, 0x17, 0x6c, 0x1f, 0xdc, 0x26, 0x32, 0xa8, - 0x87, 0xb2, 0x72, 0xda, 0x48, 0x40, 0x58, 0xc7, 0xb3, 0x7f, 0xa1, 0x08, 0xe9, 0x6c, 0xd7, 0xdf, - 0x5e, 0x93, 0x1f, 0xcf, 0x35, 0xf9, 0x4d, 0x0b, 0x26, 0x69, 0xeb, 0xcc, 0xe2, 0x42, 0x1e, 0xb6, - 0x2a, 0xf1, 0x88, 0xd5, 0x25, 0xf1, 0xc8, 0x55, 0xca, 0xbb, 0x9a, 0x41, 0x3b, 0x16, 0xda, 0x32, - 0x8d, 0x39, 0xd1, 0x52, 0x2c, 0xa0, 0x02, 0x8f, 0x84, 0xa1, 0x70, 0x89, 0xd1, 0xf1, 0x48, 0x18, - 0x62, 0x01, 0x95, 0x79, 0x49, 0x4a, 0x39, 0x79, 0x49, 0x58, 0x88, 0x32, 0xf1, 0xca, 0x2f, 0xc4, - 0x1e, 0x2d, 0x44, 0x99, 0x7c, 0xfe, 0x4f, 0x70, 0xec, 0x5f, 0x2e, 0xc2, 0x68, 0x2d, 0x68, 0x26, - 0x0f, 0x57, 0xaf, 0x19, 0x0f, 0x57, 0x57, 0x52, 0x0f, 0x57, 0x93, 0x3a, 0xee, 0xb7, 0x9f, 0xa9, - 0x3e, 0xaa, 0x67, 0xaa, 0x7f, 0x65, 0xb1, 0x59, 0xab, 0xae, 0xd7, 0x45, 0x66, 0xcf, 0x57, 0x60, - 0x84, 0x31, 0x24, 0xe6, 0x83, 0x25, 0x5f, 0x73, 0x58, 0xc8, 0xf1, 0xf5, 0xa4, 0x18, 0xeb, 0x38, - 0xe8, 0x1a, 0x0c, 0x47, 0xc4, 0x09, 0x1b, 0x3b, 0x8a, 0xc7, 0x89, 0xb7, 0x0e, 0x5e, 0x86, 0x15, - 0x14, 0xbd, 0x93, 0x44, 0xc7, 0x2a, 0xe6, 0xe7, 0xa8, 0xd4, 0xfb, 0xc3, 0xb7, 0x48, 0x7e, 0x48, - 0x2c, 0xfb, 0x01, 0xa0, 0x4e, 0xfc, 0x3e, 0xe2, 0xe0, 0x54, 0xcc, 0x38, 0x38, 0xe5, 0x8e, 0x18, - 0x38, 0x7f, 0x61, 0xc1, 0x78, 0x2d, 0x68, 0xd2, 0xad, 0xfb, 0xad, 0xb4, 0x4f, 0xf5, 0xd0, 0x80, - 0x83, 0x5d, 0x42, 0x03, 0xfe, 0x43, 0x0b, 0x86, 0x6a, 0x41, 0xf3, 0x0c, 0x74, 0xec, 0x9f, 0x33, - 0x75, 0xec, 0x4f, 0xe5, 0x2c, 0x89, 0x1c, 0xb5, 0xfa, 0xaf, 0x16, 0x61, 0x8c, 0xf6, 0x33, 0xd8, - 0x96, 0xb3, 0x64, 0x8c, 0x88, 0xd5, 0xc7, 0x88, 0x50, 0x31, 0x37, 0xf0, 0xbc, 0xe0, 0x61, 0x7a, - 0xc6, 0x56, 0x58, 0x29, 0x16, 0x50, 0xf4, 0x12, 0x0c, 0xb7, 0x42, 0xb2, 0xef, 0x06, 0x42, 0x7e, - 0xd4, 0x5e, 0x2c, 0x6a, 0xa2, 0x1c, 0x2b, 0x0c, 0x7a, 0xef, 0x8a, 0x5c, 0xbf, 0x41, 0x64, 0x82, - 0xdc, 0x12, 0xcb, 0x40, 0xc4, 0x63, 0xfe, 0x6a, 0xe5, 0xd8, 0xc0, 0x42, 0x0f, 0xa0, 0xcc, 0xfe, - 0x33, 0x8e, 0x72, 0xf2, 0x8c, 0x29, 0x22, 0xd0, 0xbe, 0x20, 0x80, 0x13, 0x5a, 0xe8, 0x3a, 0x40, - 0x2c, 0xe3, 0xc2, 0x46, 0x22, 0x9c, 0x89, 0x92, 0xb5, 0x55, 0xc4, 0xd8, 0x08, 0x6b, 0x58, 0xe8, - 0x45, 0x28, 0xc7, 0x8e, 0xeb, 0xdd, 0x71, 0x7d, 0x12, 0x31, 0x45, 0x73, 0x51, 0xc6, 0xd1, 0x17, - 0x85, 0x38, 0x81, 0x53, 0x59, 0x87, 0xf9, 0xfa, 0xf2, 0x7c, 0x4b, 0xc3, 0x0c, 0x9b, 0xc9, 0x3a, - 0x77, 0x54, 0x29, 0xd6, 0x30, 0xec, 0x1b, 0x70, 0xbe, 0x16, 0x34, 0x6b, 0x41, 0x18, 0xaf, 0x04, - 0xe1, 0x43, 0x27, 0x6c, 0xca, 0xf9, 0xab, 0xc8, 0x90, 0xee, 0x94, 0xf7, 0x0c, 0xf0, 0x9d, 0x69, - 0x04, 0x6b, 0x7f, 0x95, 0x49, 0x3b, 0x27, 0xf4, 0x8b, 0xf8, 0xdf, 0x05, 0xc6, 0x28, 0x52, 0x49, - 0xc0, 0xd0, 0x97, 0x61, 0x3c, 0x22, 0x77, 0x5c, 0xbf, 0xfd, 0x48, 0xde, 0x8f, 0xbb, 0x38, 0x9d, - 0xd4, 0x97, 0x75, 0x4c, 0xae, 0x65, 0x33, 0xcb, 0x70, 0x8a, 0x1a, 0x1d, 0xc2, 0xb0, 0xed, 0x2f, - 0x44, 0xf7, 0x22, 0x12, 0x8a, 0x24, 0x54, 0x6c, 0x08, 0xb1, 0x2c, 0xc4, 0x09, 0x9c, 0x2e, 0x19, - 0xf6, 0x67, 0x3d, 0xf0, 0x71, 0x10, 0xc4, 0x72, 0x91, 0xb1, 0x34, 0x26, 0x5a, 0x39, 0x36, 0xb0, - 0xd0, 0x0a, 0xa0, 0xa8, 0xdd, 0x6a, 0x79, 0xec, 0x01, 0xdc, 0xf1, 0x6e, 0x86, 0x41, 0xbb, 0xc5, - 0x1f, 0x1f, 0x8b, 0x3c, 0x3d, 0x7c, 0xbd, 0x03, 0x8a, 0x33, 0x6a, 0x50, 0xc6, 0xb0, 0x15, 0xb1, - 0xdf, 0x6c, 0xe1, 0x15, 0x85, 0xe6, 0xbb, 0xce, 0x8a, 0xb0, 0x84, 0xd1, 0x79, 0x66, 0xcd, 0x73, - 0xcc, 0xc1, 0x64, 0x9e, 0xb1, 0x2a, 0xc5, 0x1a, 0x86, 0xfd, 0x03, 0xec, 0x80, 0x61, 0xb9, 0x86, - 0xe2, 0x76, 0x48, 0xd0, 0x1e, 0x8c, 0xb5, 0xd8, 0xd1, 0x2f, 0x22, 0xe1, 0x8a, 0x01, 0x7f, 0xad, - 0xcf, 0x9b, 0xe2, 0x43, 0xba, 0x79, 0x95, 0x26, 0x87, 0x89, 0xe0, 0x35, 0x9d, 0x1c, 0x36, 0xa9, - 0xdb, 0x3f, 0x37, 0xc9, 0xf8, 0x58, 0x9d, 0x5f, 0xff, 0x86, 0x84, 0xc5, 0xab, 0x90, 0x75, 0x67, - 0xf3, 0xf5, 0x10, 0xc9, 0x91, 0x23, 0xac, 0x66, 0xb1, 0xac, 0x8b, 0xde, 0x61, 0xaf, 0xbc, 0x9c, - 0x79, 0xf4, 0x4a, 0x5a, 0xca, 0xb1, 0x8c, 0x07, 0x5d, 0x51, 0x11, 0x6b, 0x44, 0xd0, 0x1d, 0x18, - 0x13, 0xa9, 0x69, 0x84, 0xa2, 0xa9, 0x68, 0x28, 0x12, 0xc6, 0xb0, 0x0e, 0x3c, 0x4e, 0x17, 0x60, - 0xb3, 0x32, 0xda, 0x86, 0x4b, 0x5a, 0x9e, 0xb6, 0x9b, 0xa1, 0xc3, 0x5e, 0xfe, 0x5c, 0xb6, 0xfa, - 0x35, 0x5e, 0xf4, 0xec, 0xd1, 0x61, 0xe5, 0xd2, 0x46, 0x37, 0x44, 0xdc, 0x9d, 0x0e, 0xba, 0x0b, - 0xe7, 0x9d, 0x46, 0xec, 0xee, 0x93, 0x2a, 0x71, 0x9a, 0x9e, 0xeb, 0x2b, 0x66, 0xc7, 0x17, 0xd0, - 0xc5, 0xa3, 0xc3, 0xca, 0xf9, 0x85, 0x2c, 0x04, 0x9c, 0x5d, 0x0f, 0x7d, 0x0e, 0xca, 0x4d, 0x3f, - 0x12, 0x63, 0x30, 0x68, 0xa4, 0x20, 0x2c, 0x57, 0xd7, 0xeb, 0xea, 0xfb, 0x93, 0x3f, 0x38, 0xa9, - 0x80, 0xb6, 0xb9, 0xb2, 0x49, 0xdd, 0xed, 0x86, 0xf2, 0x13, 0x26, 0x8b, 0x25, 0x61, 0xb8, 0x96, - 0x70, 0x2d, 0xab, 0x32, 0xf2, 0x34, 0xbc, 0x4e, 0x0c, 0xc2, 0xe8, 0x6d, 0x40, 0x54, 0xf8, 0x71, - 0x1b, 0x64, 0xa1, 0xc1, 0x02, 0x12, 0x33, 0xdd, 0xdc, 0xb0, 0x61, 0xca, 0x8f, 0xea, 0x1d, 0x18, - 0x38, 0xa3, 0x16, 0xba, 0x45, 0x39, 0x90, 0x5e, 0x2a, 0x8c, 0x55, 0xa5, 0xc0, 0x3c, 0x53, 0x25, - 0xad, 0x90, 0x34, 0x9c, 0x98, 0x34, 0x4d, 0x8a, 0x38, 0x55, 0x8f, 0x9e, 0x4f, 0x2a, 0x37, 0x09, - 0x98, 0x51, 0x07, 0x3a, 0xf3, 0x93, 0xd0, 0xbb, 0xe6, 0x4e, 0x10, 0xc5, 0xeb, 0x24, 0x7e, 0x18, - 0x84, 0xbb, 0x22, 0xc8, 0x53, 0x12, 0x6f, 0x30, 0x01, 0x61, 0x1d, 0x8f, 0xca, 0x96, 0xec, 0x99, - 0x75, 0xb5, 0xca, 0x5e, 0xbd, 0x86, 0x93, 0x7d, 0x72, 0x8b, 0x17, 0x63, 0x09, 0x97, 0xa8, 0xab, - 0xb5, 0x25, 0xf6, 0x82, 0x95, 0x42, 0x5d, 0xad, 0x2d, 0x61, 0x09, 0x47, 0xa4, 0x33, 0xbd, 0xe3, - 0x78, 0xbe, 0xa6, 0xb0, 0x93, 0x8f, 0xf7, 0x99, 0xe1, 0xd1, 0x87, 0x49, 0x95, 0x58, 0x92, 0x47, - 0xbf, 0x8a, 0x66, 0x26, 0xd8, 0x22, 0xe9, 0x3f, 0x74, 0x96, 0xd2, 0xbd, 0xae, 0xa6, 0x28, 0xe1, - 0x0e, 0xda, 0x46, 0x1c, 0x88, 0xc9, 0x9e, 0xb9, 0x65, 0xe6, 0xa1, 0x1c, 0xb5, 0x37, 0x9b, 0xc1, - 0x9e, 0xe3, 0xfa, 0xec, 0xc1, 0x49, 0x13, 0x5c, 0xea, 0x12, 0x80, 0x13, 0x1c, 0xb4, 0x02, 0xc3, - 0x8e, 0x54, 0xac, 0xa2, 0x7c, 0xc7, 0x70, 0xa5, 0x4e, 0x65, 0x62, 0xb9, 0x52, 0xa5, 0xaa, 0xba, - 0xe8, 0x4d, 0x18, 0x13, 0xee, 0x44, 0xdc, 0x5d, 0x9e, 0x3d, 0x08, 0x69, 0x96, 0xe7, 0x75, 0x1d, - 0x88, 0x4d, 0x5c, 0xf4, 0xbd, 0x30, 0x4e, 0xa9, 0x24, 0x8c, 0x6d, 0x66, 0xba, 0x1f, 0x8e, 0xa8, - 0xe5, 0x0c, 0xd0, 0x2b, 0xe3, 0x14, 0x31, 0xd4, 0x84, 0x67, 0x9c, 0x76, 0x1c, 0x30, 0xe5, 0xb4, - 0xb9, 0xfe, 0x37, 0x82, 0x5d, 0xe2, 0xb3, 0x77, 0xa1, 0xe1, 0xc5, 0x2b, 0x47, 0x87, 0x95, 0x67, - 0x16, 0xba, 0xe0, 0xe1, 0xae, 0x54, 0xd0, 0x3d, 0x18, 0x89, 0x03, 0x8f, 0xd9, 0x80, 0x53, 0x19, - 0xe0, 0x42, 0x7e, 0x1c, 0x95, 0x0d, 0x85, 0xa6, 0x2b, 0x66, 0x54, 0x55, 0xac, 0xd3, 0x41, 0x1b, - 0x7c, 0x8f, 0xb1, 0x08, 0x93, 0x24, 0x9a, 0x79, 0x2a, 0x7f, 0x60, 0x54, 0x20, 0x4a, 0x73, 0x0b, - 0x8a, 0x9a, 0x58, 0x27, 0x83, 0x6e, 0xc2, 0x54, 0x2b, 0x74, 0x03, 0xb6, 0xb0, 0xd5, 0xc3, 0xc0, - 0x8c, 0x19, 0x26, 0xbe, 0x96, 0x46, 0xc0, 0x9d, 0x75, 0xe8, 0xc5, 0x4d, 0x16, 0xce, 0x5c, 0xe4, - 0x39, 0x87, 0xb8, 0x30, 0xcb, 0xcb, 0xb0, 0x82, 0xa2, 0x35, 0xc6, 0x97, 0xf9, 0x15, 0x6b, 0x66, - 0x36, 0xdf, 0xa1, 0x5e, 0xbf, 0x8a, 0x71, 0x41, 0x47, 0xfd, 0xc5, 0x09, 0x05, 0x7a, 0x6e, 0x44, - 0x3b, 0x4e, 0x48, 0x6a, 0x61, 0xd0, 0x20, 0xbc, 0x33, 0xdc, 0xfc, 0xfc, 0x69, 0x1e, 0x08, 0x8f, - 0x9e, 0x1b, 0xf5, 0x2c, 0x04, 0x9c, 0x5d, 0x6f, 0xf6, 0xbb, 0x60, 0xaa, 0x83, 0x93, 0x9f, 0x28, - 0x3a, 0xf2, 0x9f, 0x0f, 0x40, 0x59, 0x29, 0x7e, 0xd1, 0xbc, 0xa9, 0xcf, 0xbf, 0x98, 0xd6, 0xe7, - 0x0f, 0x53, 0xf9, 0x53, 0x57, 0xe1, 0x6f, 0x18, 0x86, 0x5f, 0x85, 0xfc, 0x5c, 0x44, 0xba, 0xd6, - 0xa3, 0xa7, 0x6f, 0x96, 0x76, 0x8f, 0x2f, 0xf6, 0xfd, 0x30, 0x50, 0xea, 0xaa, 0x1a, 0xe8, 0x33, - 0x15, 0x28, 0xbd, 0xea, 0xb6, 0x82, 0xe6, 0x6a, 0x2d, 0x9d, 0x1b, 0xaf, 0x46, 0x0b, 0x31, 0x87, - 0xb1, 0xcb, 0x0a, 0x15, 0x3b, 0xd8, 0x65, 0x65, 0xe8, 0x31, 0x2f, 0x2b, 0x92, 0x00, 0x4e, 0x68, - 0x21, 0x0f, 0xa6, 0x1a, 0x66, 0x5a, 0x43, 0xe5, 0x8f, 0xf5, 0x5c, 0xcf, 0x04, 0x83, 0x6d, 0x2d, - 0x87, 0xd4, 0x52, 0x9a, 0x0a, 0xee, 0x24, 0x8c, 0xde, 0x84, 0xe1, 0xf7, 0x83, 0x88, 0x6d, 0x0b, - 0x71, 0xf6, 0x4a, 0x0f, 0x98, 0xe1, 0x77, 0xee, 0xd6, 0x59, 0xf9, 0xf1, 0x61, 0x65, 0xa4, 0x16, - 0x34, 0xe5, 0x5f, 0xac, 0x2a, 0xa0, 0x47, 0x70, 0xde, 0xe0, 0x58, 0xaa, 0xbb, 0xd0, 0x7f, 0x77, - 0x2f, 0x89, 0xe6, 0xce, 0xaf, 0x66, 0x51, 0xc2, 0xd9, 0x0d, 0x50, 0x36, 0xe0, 0x07, 0x22, 0x25, - 0xa8, 0x3c, 0xdf, 0xd9, 0x31, 0x5e, 0xd6, 0xbd, 0x96, 0x53, 0x08, 0xb8, 0xb3, 0x8e, 0xfd, 0x0d, - 0xae, 0x27, 0x17, 0xda, 0x34, 0x12, 0xb5, 0xbd, 0xb3, 0xc8, 0x38, 0xb3, 0x6c, 0x28, 0xfa, 0x1e, - 0xfb, 0x2d, 0xe6, 0xb7, 0x2d, 0xf6, 0x16, 0xb3, 0x41, 0xf6, 0x5a, 0x9e, 0x13, 0x9f, 0x85, 0xe7, - 0xc5, 0x3b, 0x30, 0x1c, 0x8b, 0xd6, 0xba, 0x25, 0xc9, 0xd1, 0x3a, 0xc5, 0xde, 0xa3, 0xd4, 0xc9, - 0x2f, 0x4b, 0xb1, 0x22, 0x63, 0xff, 0x73, 0x3e, 0x03, 0x12, 0x72, 0x06, 0x4a, 0x97, 0xaa, 0xa9, - 0x74, 0xa9, 0xf4, 0xf8, 0x82, 0x1c, 0xe5, 0xcb, 0x3f, 0x33, 0xfb, 0xcd, 0x2e, 0x59, 0x1f, 0xf7, - 0x47, 0x40, 0xfb, 0xa7, 0x2c, 0x98, 0xce, 0xb2, 0x9a, 0xa1, 0xd2, 0x1a, 0xbf, 0xe2, 0xa9, 0x47, - 0x51, 0x35, 0x82, 0xf7, 0x45, 0x39, 0x56, 0x18, 0x7d, 0xc7, 0x9f, 0x3f, 0x59, 0x90, 0xaa, 0xbb, - 0x30, 0x56, 0x0b, 0x89, 0x76, 0x06, 0xbc, 0xc5, 0x5d, 0xa9, 0x78, 0x7f, 0x5e, 0x3a, 0xb1, 0x1b, - 0x95, 0xfd, 0x8b, 0x05, 0x98, 0xe6, 0xaf, 0x1a, 0x0b, 0xfb, 0x81, 0xdb, 0xac, 0x05, 0x4d, 0x91, - 0x3b, 0xe0, 0x4b, 0x30, 0xda, 0xd2, 0xee, 0xe5, 0xdd, 0xc2, 0xe4, 0xe8, 0xf7, 0xf7, 0xe4, 0x7e, - 0xa4, 0x97, 0x62, 0x83, 0x16, 0x6a, 0xc2, 0x28, 0xd9, 0x77, 0x1b, 0x4a, 0x35, 0x5e, 0x38, 0xf1, - 0xd9, 0xa0, 0x5a, 0x59, 0xd6, 0xe8, 0x60, 0x83, 0xea, 0x13, 0x48, 0x27, 0x65, 0xff, 0xb4, 0x05, - 0x4f, 0xe5, 0x04, 0xd5, 0xa1, 0xcd, 0x3d, 0x64, 0xef, 0x47, 0x22, 0x33, 0x8d, 0x6a, 0x8e, 0xbf, - 0x2a, 0x61, 0x01, 0x45, 0x5f, 0x00, 0xe0, 0xaf, 0x42, 0xf4, 0xba, 0x20, 0x3e, 0xbd, 0xbf, 0x60, - 0x13, 0x5a, 0x90, 0x00, 0x59, 0x1f, 0x6b, 0xb4, 0xec, 0x9f, 0x2f, 0xc2, 0x00, 0x7b, 0x85, 0x40, - 0x2b, 0x30, 0xb4, 0xc3, 0x43, 0xc8, 0xf6, 0x13, 0xad, 0x36, 0xb9, 0x77, 0xf1, 0x02, 0x2c, 0x2b, - 0xa3, 0x35, 0x38, 0xc7, 0x43, 0xf0, 0x7a, 0x55, 0xe2, 0x39, 0x07, 0xf2, 0xfa, 0xce, 0xb3, 0xb9, - 0xa8, 0x80, 0x07, 0xab, 0x9d, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x0b, 0xc6, 0x63, 0x77, 0x8f, 0x04, - 0xed, 0x58, 0x52, 0xe2, 0xc1, 0x77, 0x95, 0xb0, 0xbf, 0x61, 0x40, 0x71, 0x0a, 0x9b, 0x5e, 0x44, - 0x5a, 0x1d, 0x8a, 0x0a, 0x2d, 0x3f, 0xba, 0xa9, 0x9c, 0x30, 0x71, 0x99, 0xb9, 0x4c, 0x9b, 0x19, - 0x07, 0x6d, 0xec, 0x84, 0x24, 0xda, 0x09, 0xbc, 0xa6, 0x48, 0x06, 0x9c, 0x98, 0xcb, 0xa4, 0xe0, - 0xb8, 0xa3, 0x06, 0xa5, 0xb2, 0xe5, 0xb8, 0x5e, 0x3b, 0x24, 0x09, 0x95, 0x41, 0x93, 0xca, 0x4a, - 0x0a, 0x8e, 0x3b, 0x6a, 0xd0, 0x75, 0x74, 0x5e, 0x64, 0xe7, 0x95, 0x6e, 0xd8, 0xca, 0x06, 0x6a, - 0x48, 0xba, 0xb6, 0x74, 0x89, 0x43, 0x22, 0xac, 0x44, 0x54, 0x7e, 0x5f, 0x2d, 0xf7, 0xa3, 0x70, - 0x6a, 0x91, 0x54, 0x1e, 0x27, 0x47, 0xec, 0x1f, 0x5a, 0x70, 0x2e, 0xc3, 0xd6, 0x92, 0xb3, 0xaa, - 0x6d, 0x37, 0x8a, 0x55, 0xc6, 0x0a, 0x8d, 0x55, 0xf1, 0x72, 0xac, 0x30, 0xe8, 0x7e, 0xe0, 0xcc, - 0x30, 0xcd, 0x00, 0x85, 0x2d, 0x93, 0x80, 0x9e, 0x8c, 0x01, 0xa2, 0x2b, 0x50, 0x6a, 0x47, 0x24, - 0x94, 0xc9, 0x55, 0x25, 0xff, 0x66, 0xaa, 0x52, 0x06, 0xa1, 0xa2, 0xe9, 0xb6, 0xd2, 0x52, 0x6a, - 0xa2, 0x29, 0x57, 0x3d, 0x72, 0x98, 0xfd, 0xb5, 0x22, 0x5c, 0xcc, 0xb5, 0xa5, 0xa6, 0x5d, 0xda, - 0x0b, 0x7c, 0x37, 0x0e, 0xd4, 0x0b, 0x17, 0x8f, 0x61, 0x41, 0x5a, 0x3b, 0x6b, 0xa2, 0x1c, 0x2b, - 0x0c, 0x74, 0x55, 0xe6, 0x89, 0x4e, 0xe7, 0xe4, 0x58, 0xac, 0x1a, 0xa9, 0xa2, 0xfb, 0xcd, 0x77, - 0xf4, 0x1c, 0x94, 0x5a, 0x81, 0x4a, 0xe2, 0xaf, 0x66, 0x96, 0x76, 0x37, 0x08, 0x3c, 0xcc, 0x80, - 0xe8, 0x53, 0x62, 0x1c, 0x52, 0x4f, 0x3a, 0xd8, 0x69, 0x06, 0x91, 0x36, 0x18, 0x2f, 0xc0, 0xd0, - 0x2e, 0x39, 0x08, 0x5d, 0x7f, 0x3b, 0xfd, 0xd4, 0x77, 0x9b, 0x17, 0x63, 0x09, 0x37, 0x43, 0xd2, - 0x0f, 0x9d, 0x76, 0xa2, 0xa2, 0xe1, 0x9e, 0x47, 0xdb, 0x8f, 0x16, 0x61, 0x02, 0x2f, 0x56, 0xbf, - 0x3d, 0x11, 0xf7, 0x3a, 0x27, 0xe2, 0xb4, 0x13, 0x15, 0xf5, 0x9e, 0x8d, 0x5f, 0xb5, 0x60, 0x82, - 0x85, 0x6d, 0x15, 0x31, 0x18, 0xdc, 0xc0, 0x3f, 0x03, 0xd1, 0xed, 0x39, 0x18, 0x08, 0x69, 0xa3, - 0xe9, 0xec, 0x23, 0xac, 0x27, 0x98, 0xc3, 0xd0, 0x33, 0x50, 0x62, 0x5d, 0xa0, 0x93, 0x37, 0xca, - 0x03, 0xb7, 0x57, 0x9d, 0xd8, 0xc1, 0xac, 0x94, 0x39, 0x16, 0x63, 0xd2, 0xf2, 0x5c, 0xde, 0xe9, - 0x44, 0xd5, 0xff, 0xf1, 0x70, 0x2c, 0xce, 0xec, 0xda, 0x87, 0x73, 0x2c, 0xce, 0x26, 0xd9, 0xfd, - 0x5a, 0xf4, 0x3f, 0x0a, 0x70, 0x39, 0xb3, 0x5e, 0xdf, 0x8e, 0xc5, 0xdd, 0x6b, 0x9f, 0x8e, 0xc5, - 0x46, 0xb6, 0x21, 0x45, 0xf1, 0x0c, 0x0d, 0x29, 0x4a, 0xfd, 0x4a, 0x8e, 0x03, 0x7d, 0xf8, 0xfb, - 0x66, 0x0e, 0xd9, 0xc7, 0xc4, 0xdf, 0x37, 0xb3, 0x6f, 0x39, 0xd7, 0xba, 0xbf, 0x2c, 0xe4, 0x7c, - 0x0b, 0xbb, 0xe0, 0x5d, 0xa3, 0x7c, 0x86, 0x01, 0x23, 0x21, 0x09, 0x8f, 0x72, 0x1e, 0xc3, 0xcb, - 0xb0, 0x82, 0x22, 0x57, 0xf3, 0x9c, 0x2d, 0xe4, 0xe7, 0xa6, 0xcb, 0x6d, 0x6a, 0xce, 0x7c, 0x99, - 0x51, 0x43, 0x90, 0xe1, 0x45, 0xbb, 0xa6, 0x5d, 0xca, 0x8b, 0xfd, 0x5f, 0xca, 0x47, 0xb3, 0x2f, - 0xe4, 0x68, 0x01, 0x26, 0xf6, 0x5c, 0x9f, 0xe5, 0x1a, 0x37, 0x45, 0x51, 0x15, 0x48, 0x62, 0xcd, - 0x04, 0xe3, 0x34, 0xfe, 0xec, 0x9b, 0x30, 0xf6, 0xf8, 0xea, 0xc8, 0x6f, 0x16, 0xe1, 0xe9, 0x2e, - 0xdb, 0x9e, 0xf3, 0x7a, 0x63, 0x0e, 0x34, 0x5e, 0xdf, 0x31, 0x0f, 0x35, 0x98, 0xde, 0x6a, 0x7b, - 0xde, 0x01, 0xb3, 0x55, 0x24, 0x4d, 0x89, 0x21, 0x64, 0x45, 0x99, 0x41, 0x7e, 0x7a, 0x25, 0x03, - 0x07, 0x67, 0xd6, 0x44, 0x6f, 0x03, 0x0a, 0x44, 0x62, 0xcc, 0x9b, 0xc4, 0x17, 0xfa, 0x6e, 0x36, - 0xf0, 0xc5, 0x64, 0x33, 0xde, 0xed, 0xc0, 0xc0, 0x19, 0xb5, 0xa8, 0xd0, 0x4f, 0x4f, 0xa5, 0x03, - 0xd5, 0xad, 0x94, 0xd0, 0x8f, 0x75, 0x20, 0x36, 0x71, 0xd1, 0x4d, 0x98, 0x72, 0xf6, 0x1d, 0x97, - 0x87, 0x45, 0x93, 0x04, 0xb8, 0xd4, 0xaf, 0x94, 0x60, 0x0b, 0x69, 0x04, 0xdc, 0x59, 0x27, 0xe5, - 0xba, 0x3b, 0x98, 0xef, 0xba, 0xdb, 0x9d, 0x2f, 0xf6, 0xd2, 0xe9, 0xda, 0xff, 0xd9, 0xa2, 0xc7, - 0x57, 0x46, 0x72, 0x6b, 0x3a, 0x0e, 0x4a, 0x37, 0xa9, 0x79, 0xd1, 0xaa, 0x71, 0x58, 0xd2, 0x81, - 0xd8, 0xc4, 0xe5, 0x0b, 0x22, 0x4a, 0x1c, 0x3a, 0x0c, 0xd1, 0x5d, 0xb8, 0xc9, 0x2b, 0x0c, 0xf4, - 0x45, 0x18, 0x6a, 0xba, 0xfb, 0x6e, 0x14, 0x84, 0x62, 0xb3, 0x9c, 0xd0, 0x2c, 0x3e, 0xe1, 0x83, - 0x55, 0x4e, 0x06, 0x4b, 0x7a, 0xf6, 0x8f, 0x16, 0x60, 0x4c, 0xb6, 0xf8, 0x4e, 0x3b, 0x88, 0x9d, - 0x33, 0x38, 0x96, 0x6f, 0x1a, 0xc7, 0xf2, 0xa7, 0xba, 0xc5, 0x0a, 0x60, 0x5d, 0xca, 0x3d, 0x8e, - 0xef, 0xa6, 0x8e, 0xe3, 0xe7, 0x7b, 0x93, 0xea, 0x7e, 0x0c, 0xff, 0x0b, 0x0b, 0xa6, 0x0c, 0xfc, - 0x33, 0x38, 0x0d, 0x56, 0xcc, 0xd3, 0xe0, 0xd9, 0x9e, 0xdf, 0x90, 0x73, 0x0a, 0x7c, 0xbd, 0x90, - 0xea, 0x3b, 0xe3, 0xfe, 0xef, 0x43, 0x69, 0xc7, 0x09, 0x9b, 0xdd, 0x22, 0x89, 0x76, 0x54, 0x9a, - 0xbb, 0xe5, 0x84, 0x4d, 0xce, 0xc3, 0x5f, 0x52, 0xe9, 0xf4, 0x9c, 0xb0, 0xd9, 0xd3, 0x7f, 0x89, - 0x35, 0x85, 0x6e, 0xc0, 0x60, 0xd4, 0x08, 0x5a, 0xca, 0xba, 0xf0, 0x0a, 0x4f, 0xb5, 0x47, 0x4b, - 0x8e, 0x0f, 0x2b, 0xc8, 0x6c, 0x8e, 0x16, 0x63, 0x81, 0x3f, 0xbb, 0x0d, 0x65, 0xd5, 0xf4, 0x13, - 0xf5, 0x0d, 0xf9, 0x8f, 0x45, 0x38, 0x97, 0xb1, 0x2e, 0x50, 0x64, 0x8c, 0xd6, 0x2b, 0x7d, 0x2e, - 0xa7, 0x0f, 0x39, 0x5e, 0x11, 0xbb, 0xb1, 0x34, 0xc5, 0xfc, 0xf7, 0xdd, 0xe8, 0xbd, 0x88, 0xa4, - 0x1b, 0xa5, 0x45, 0xbd, 0x1b, 0xa5, 0x8d, 0x9d, 0xd9, 0x50, 0xd3, 0x86, 0x54, 0x4f, 0x9f, 0xe8, - 0x9c, 0xfe, 0x59, 0x11, 0xa6, 0xb3, 0x42, 0x8c, 0xa0, 0xef, 0x4f, 0xe5, 0xc5, 0x78, 0xad, 0xdf, - 0xe0, 0x24, 0x3c, 0x59, 0x86, 0xc8, 0xf2, 0x3a, 0x67, 0x66, 0xca, 0xe8, 0x39, 0xcc, 0xa2, 0x4d, - 0xe6, 0x50, 0x18, 0xf2, 0x7c, 0x26, 0x72, 0x8b, 0x7f, 0xa6, 0xef, 0x0e, 0x88, 0x44, 0x28, 0x51, - 0xca, 0xa1, 0x50, 0x16, 0xf7, 0x76, 0x28, 0x94, 0x2d, 0xcf, 0xba, 0x30, 0xa2, 0x7d, 0xcd, 0x13, - 0x9d, 0xf1, 0x5d, 0x7a, 0xa2, 0x68, 0xfd, 0x7e, 0xa2, 0xb3, 0xfe, 0xd3, 0x16, 0xa4, 0x6c, 0xfa, - 0x94, 0x4a, 0xca, 0xca, 0x55, 0x49, 0x5d, 0x81, 0x52, 0x18, 0x78, 0x24, 0x9d, 0xaa, 0x02, 0x07, - 0x1e, 0xc1, 0x0c, 0xa2, 0x92, 0xec, 0x17, 0x73, 0x93, 0xec, 0x3f, 0x07, 0x03, 0x1e, 0xd9, 0x27, - 0x52, 0x1b, 0xa1, 0x78, 0xf2, 0x1d, 0x5a, 0x88, 0x39, 0xcc, 0xfe, 0xd5, 0x12, 0x5c, 0xea, 0xea, - 0x92, 0x4b, 0xaf, 0x2c, 0xdb, 0x4e, 0x4c, 0x1e, 0x3a, 0x07, 0xe9, 0x20, 0xb7, 0x37, 0x79, 0x31, - 0x96, 0x70, 0x66, 0x81, 0xcc, 0xc3, 0xe3, 0xa5, 0x14, 0x78, 0x22, 0x2a, 0x9e, 0x80, 0x3e, 0x81, - 0x0c, 0xd7, 0xd7, 0x01, 0xa2, 0xc8, 0x5b, 0xf6, 0xa9, 0x04, 0xd6, 0x14, 0xa6, 0xcd, 0x49, 0x18, - 0xc5, 0xfa, 0x1d, 0x01, 0xc1, 0x1a, 0x16, 0xaa, 0xc2, 0x64, 0x2b, 0x0c, 0x62, 0xae, 0x0f, 0xad, - 0x72, 0x23, 0x99, 0x01, 0xd3, 0x1b, 0xb2, 0x96, 0x82, 0xe3, 0x8e, 0x1a, 0xe8, 0x75, 0x18, 0x11, - 0x1e, 0x92, 0xb5, 0x20, 0xf0, 0x84, 0xaa, 0x46, 0x99, 0x5c, 0xd4, 0x13, 0x10, 0xd6, 0xf1, 0xb4, - 0x6a, 0x4c, 0xc9, 0x3a, 0x94, 0x59, 0x8d, 0x2b, 0x5a, 0x35, 0xbc, 0x54, 0xb8, 0xa1, 0xe1, 0xbe, - 0xc2, 0x0d, 0x25, 0xca, 0xab, 0x72, 0xdf, 0xef, 0x4a, 0xd0, 0x53, 0xdd, 0xf3, 0x4b, 0x25, 0x38, - 0x27, 0x16, 0xce, 0x93, 0x5e, 0x2e, 0x4f, 0x28, 0x0f, 0xf7, 0xb7, 0xd7, 0xcc, 0x59, 0xaf, 0x99, - 0x6f, 0x14, 0x61, 0x90, 0x4f, 0xc5, 0x19, 0xc8, 0xf0, 0x2b, 0x42, 0xe9, 0xd7, 0x25, 0xd0, 0x0e, - 0xef, 0xcb, 0x5c, 0xd5, 0x89, 0x1d, 0x7e, 0x7e, 0x29, 0x36, 0x9a, 0xa8, 0x07, 0xd1, 0x9c, 0xc1, - 0x68, 0x67, 0x53, 0x5a, 0x2d, 0xe0, 0x34, 0x34, 0xb6, 0xfb, 0x65, 0x80, 0x88, 0xe5, 0x82, 0xa6, - 0x34, 0x44, 0xc8, 0xa6, 0x4f, 0x77, 0x69, 0xbd, 0xae, 0x90, 0x79, 0x1f, 0x92, 0x25, 0xa8, 0x00, - 0x58, 0xa3, 0x38, 0xfb, 0x06, 0x94, 0x15, 0x72, 0x2f, 0x15, 0xc0, 0xa8, 0x7e, 0xea, 0x7d, 0x1e, - 0x26, 0x52, 0x6d, 0x9d, 0x48, 0x83, 0xf0, 0x6b, 0x16, 0x4c, 0xf0, 0x2e, 0x2f, 0xfb, 0xfb, 0x62, - 0xb3, 0x7f, 0x00, 0xd3, 0x5e, 0xc6, 0xa6, 0x13, 0x33, 0xda, 0xff, 0x26, 0x55, 0x1a, 0x83, 0x2c, - 0x28, 0xce, 0x6c, 0x03, 0x5d, 0x83, 0x61, 0xee, 0xb2, 0xe3, 0x78, 0xc2, 0xcd, 0x62, 0x94, 0xc7, - 0xb6, 0xe7, 0x65, 0x58, 0x41, 0xed, 0xdf, 0xb7, 0x60, 0x8a, 0xf7, 0xfc, 0x36, 0x39, 0x50, 0xb7, - 0xe3, 0x8f, 0xb2, 0xef, 0x22, 0x74, 0x7f, 0x21, 0x27, 0x74, 0xbf, 0xfe, 0x69, 0xc5, 0xae, 0x9f, - 0xf6, 0x8b, 0x16, 0x88, 0x15, 0x78, 0x06, 0xf7, 0xc0, 0xef, 0x32, 0xef, 0x81, 0xb3, 0xf9, 0x8b, - 0x3a, 0xe7, 0x02, 0xf8, 0x17, 0x16, 0x4c, 0x72, 0x84, 0xe4, 0x21, 0xf2, 0x23, 0x9d, 0x87, 0x7e, - 0xf2, 0x49, 0xa9, 0x04, 0xb2, 0xd9, 0x1f, 0x65, 0x4c, 0x56, 0xa9, 0xeb, 0x64, 0x35, 0xe5, 0x06, - 0x3a, 0x41, 0x9e, 0xb4, 0x13, 0x07, 0xd3, 0xb5, 0xff, 0xd4, 0x02, 0xc4, 0x9b, 0x31, 0xce, 0x65, - 0x7a, 0xda, 0xb1, 0x52, 0x4d, 0x13, 0x94, 0xb0, 0x1a, 0x05, 0xc1, 0x1a, 0xd6, 0xa9, 0x0c, 0x4f, - 0xea, 0x35, 0xb9, 0xd8, 0xfb, 0x35, 0xf9, 0x04, 0x23, 0xfa, 0x8d, 0x12, 0xa4, 0x6d, 0xb4, 0xd1, - 0x7d, 0x18, 0x6d, 0x38, 0x2d, 0x67, 0xd3, 0xf5, 0xdc, 0xd8, 0x25, 0x51, 0x37, 0x33, 0x94, 0x25, - 0x0d, 0x4f, 0xbc, 0x13, 0x6a, 0x25, 0xd8, 0xa0, 0x83, 0xe6, 0x00, 0x5a, 0xa1, 0xbb, 0xef, 0x7a, - 0x64, 0x9b, 0x5d, 0x85, 0x99, 0x63, 0x17, 0xb7, 0xad, 0x90, 0xa5, 0x58, 0xc3, 0xc8, 0x70, 0x04, - 0x2a, 0x3e, 0x39, 0x47, 0xa0, 0xd2, 0x09, 0x1d, 0x81, 0x06, 0xfa, 0x72, 0x04, 0xc2, 0x70, 0x41, - 0x9e, 0xdd, 0xf4, 0xff, 0x8a, 0xeb, 0x11, 0x21, 0xb0, 0x71, 0x77, 0xaf, 0xd9, 0xa3, 0xc3, 0xca, - 0x05, 0x9c, 0x89, 0x81, 0x73, 0x6a, 0xa2, 0x2f, 0xc0, 0x8c, 0xe3, 0x79, 0xc1, 0x43, 0x35, 0x6a, - 0xcb, 0x51, 0xc3, 0xf1, 0xb8, 0xba, 0x77, 0x88, 0x51, 0x7d, 0xe6, 0xe8, 0xb0, 0x32, 0xb3, 0x90, - 0x83, 0x83, 0x73, 0x6b, 0xa7, 0xfc, 0x88, 0x86, 0x7b, 0xfa, 0x11, 0xed, 0xc2, 0xb9, 0x3a, 0x09, - 0x5d, 0x96, 0xc5, 0xad, 0x99, 0x6c, 0xc9, 0x0d, 0x28, 0x87, 0x29, 0x26, 0xd4, 0x57, 0x0c, 0x18, - 0x2d, 0x4e, 0xa8, 0x64, 0x3a, 0x09, 0x21, 0xfb, 0xcf, 0x2d, 0x18, 0x12, 0x76, 0xe2, 0x67, 0x20, - 0xfb, 0x2c, 0x18, 0xfa, 0xcb, 0x4a, 0x36, 0xa3, 0x66, 0x9d, 0xc9, 0xd5, 0x5c, 0xae, 0xa6, 0x34, - 0x97, 0xcf, 0x76, 0x23, 0xd2, 0x5d, 0x67, 0xf9, 0x93, 0x45, 0x18, 0x37, 0x6d, 0xe4, 0xcf, 0x60, - 0x08, 0xd6, 0x61, 0x28, 0x12, 0x0e, 0x19, 0x85, 0x7c, 0xc3, 0xd9, 0xf4, 0x24, 0x26, 0x56, 0x31, - 0xc2, 0x05, 0x43, 0x12, 0xc9, 0xf4, 0xf4, 0x28, 0x3e, 0x41, 0x4f, 0x8f, 0x5e, 0x6e, 0x0a, 0xa5, - 0xd3, 0x70, 0x53, 0xb0, 0x7f, 0x83, 0x1d, 0x16, 0x7a, 0xf9, 0x19, 0xc8, 0x11, 0x37, 0xcd, 0x63, - 0xc5, 0xee, 0xb2, 0xb2, 0x44, 0xa7, 0x72, 0xe4, 0x89, 0x7f, 0x62, 0xc1, 0x88, 0x40, 0x3c, 0x83, - 0x6e, 0x7f, 0xb7, 0xd9, 0xed, 0xa7, 0xbb, 0x74, 0x3b, 0xa7, 0xbf, 0x7f, 0xaf, 0xa0, 0xfa, 0x5b, - 0x0b, 0xc2, 0xb8, 0x8f, 0xd3, 0xff, 0x06, 0x0c, 0xd3, 0xdb, 0x63, 0xd0, 0x08, 0x3c, 0x71, 0xf8, - 0x3f, 0x93, 0x78, 0x08, 0xf3, 0xf2, 0x63, 0xed, 0x37, 0x56, 0xd8, 0xcc, 0x81, 0x35, 0x08, 0x63, - 0x71, 0xe0, 0x26, 0x0e, 0xac, 0x41, 0x18, 0x63, 0x06, 0x41, 0x4d, 0x80, 0xd8, 0x09, 0xb7, 0x49, - 0x4c, 0xcb, 0x44, 0xb0, 0x81, 0xfc, 0x5d, 0xd8, 0x8e, 0x5d, 0x6f, 0xce, 0xf5, 0xe3, 0x28, 0x0e, - 0xe7, 0x56, 0xfd, 0xf8, 0x6e, 0xc8, 0xef, 0x12, 0x9a, 0xcb, 0xaf, 0xa2, 0x85, 0x35, 0xba, 0xd2, - 0x87, 0x8c, 0xb5, 0x31, 0x60, 0x3e, 0x2c, 0xae, 0x8b, 0x72, 0xac, 0x30, 0xec, 0x37, 0x18, 0x4f, - 0x66, 0x03, 0x74, 0x32, 0x6f, 0xdc, 0xdf, 0x1d, 0x56, 0x43, 0xcb, 0x5e, 0x15, 0xaa, 0xba, 0xcf, - 0x6f, 0x77, 0x16, 0x48, 0x1b, 0xd6, 0xfd, 0x11, 0x12, 0xc7, 0x60, 0xf4, 0x3d, 0x1d, 0xef, 0xcd, - 0x2f, 0xf7, 0xe0, 0xa5, 0x27, 0x78, 0x61, 0x66, 0x01, 0x6e, 0x59, 0x20, 0xd0, 0xd5, 0x9a, 0xb8, - 0x5d, 0x6a, 0x01, 0x6e, 0x05, 0x00, 0x27, 0x38, 0x68, 0x5e, 0xdc, 0x44, 0x4b, 0x46, 0xf6, 0x28, - 0x79, 0x13, 0x95, 0x9f, 0xaf, 0x5d, 0x45, 0x5f, 0x81, 0x11, 0x95, 0x45, 0xaa, 0xc6, 0x93, 0xf1, - 0x88, 0xd0, 0x0b, 0xcb, 0x49, 0x31, 0xd6, 0x71, 0xd0, 0x06, 0x4c, 0x44, 0x3c, 0x9f, 0x96, 0x8a, - 0xb0, 0xc5, 0xf5, 0x0c, 0x9f, 0x96, 0xef, 0xd4, 0x75, 0x13, 0x7c, 0xcc, 0x8a, 0xf8, 0x66, 0x95, - 0x8e, 0x60, 0x69, 0x12, 0xe8, 0x2d, 0x18, 0xf7, 0xf4, 0xbc, 0xc2, 0x35, 0xa1, 0x86, 0x50, 0x66, - 0x9c, 0x46, 0xd6, 0xe1, 0x1a, 0x4e, 0x61, 0x53, 0xa1, 0x41, 0x2f, 0x11, 0x51, 0xe1, 0x1c, 0x7f, - 0x9b, 0x44, 0x22, 0x07, 0x0e, 0x13, 0x1a, 0xee, 0xe4, 0xe0, 0xe0, 0xdc, 0xda, 0xe8, 0x06, 0x8c, - 0xca, 0xcf, 0xd7, 0xdc, 0x1c, 0x13, 0x63, 0x61, 0x0d, 0x86, 0x0d, 0x4c, 0xf4, 0x10, 0xce, 0xcb, - 0xff, 0x1b, 0xa1, 0xb3, 0xb5, 0xe5, 0x36, 0x84, 0x97, 0x29, 0xf7, 0x98, 0x58, 0x90, 0x2e, 0x18, - 0xcb, 0x59, 0x48, 0xc7, 0x87, 0x95, 0x2b, 0x62, 0xd4, 0x32, 0xe1, 0x6c, 0x12, 0xb3, 0xe9, 0xa3, - 0x35, 0x38, 0xb7, 0x43, 0x1c, 0x2f, 0xde, 0x59, 0xda, 0x21, 0x8d, 0x5d, 0xb9, 0x89, 0x98, 0xf3, - 0xa4, 0x66, 0x62, 0x7b, 0xab, 0x13, 0x05, 0x67, 0xd5, 0x43, 0xef, 0xc2, 0x4c, 0xab, 0xbd, 0xe9, - 0xb9, 0xd1, 0xce, 0x7a, 0x10, 0xb3, 0xa7, 0x71, 0x95, 0x84, 0x49, 0x78, 0x59, 0x2a, 0xc7, 0xd1, - 0x5a, 0x0e, 0x1e, 0xce, 0xa5, 0x80, 0x3e, 0x80, 0xf3, 0xa9, 0xc5, 0x20, 0x7c, 0xbe, 0xc6, 0xf3, - 0x63, 0x6c, 0xd6, 0xb3, 0x2a, 0x08, 0x1f, 0xae, 0x2c, 0x10, 0xce, 0x6e, 0xe2, 0xc3, 0x19, 0x4c, - 0xbc, 0x4f, 0x2b, 0x6b, 0xd2, 0x0d, 0xfa, 0x0a, 0x8c, 0xea, 0xab, 0x48, 0x1c, 0x30, 0x57, 0x7b, - 0xe5, 0xd0, 0x16, 0xb2, 0x91, 0x5a, 0x51, 0x3a, 0x0c, 0x1b, 0x14, 0x6d, 0x02, 0xd9, 0xdf, 0x87, - 0xee, 0xc0, 0x70, 0xc3, 0x73, 0x89, 0x1f, 0xaf, 0xd6, 0xba, 0x45, 0x13, 0x58, 0x12, 0x38, 0x62, - 0xc0, 0x44, 0x50, 0x42, 0x5e, 0x86, 0x15, 0x05, 0xfb, 0xb7, 0x0a, 0x50, 0xe9, 0x11, 0xe1, 0x32, - 0xa5, 0x33, 0xb4, 0xfa, 0xd2, 0x19, 0x2e, 0xc8, 0x94, 0x52, 0xeb, 0xa9, 0xfb, 0x6a, 0x2a, 0x5d, - 0x54, 0x72, 0x6b, 0x4d, 0xe3, 0xf7, 0x6d, 0x67, 0xa9, 0xab, 0x1d, 0x4b, 0x3d, 0x2d, 0x80, 0x8d, - 0xe7, 0x86, 0x81, 0xfe, 0x25, 0xfa, 0x5c, 0xd5, 0xb1, 0xfd, 0x1b, 0x05, 0x38, 0xaf, 0x86, 0xf0, - 0x5b, 0x77, 0xe0, 0xee, 0x75, 0x0e, 0xdc, 0x29, 0x28, 0xde, 0xed, 0xbb, 0x30, 0x58, 0x3f, 0x88, - 0x1a, 0xb1, 0xd7, 0x87, 0x00, 0xf4, 0x9c, 0x19, 0x55, 0x47, 0x1d, 0xd3, 0x46, 0x64, 0x9d, 0xbf, - 0x6e, 0xc1, 0xc4, 0xc6, 0x52, 0xad, 0x1e, 0x34, 0x76, 0x49, 0xbc, 0xc0, 0xd5, 0x4a, 0x58, 0xc8, - 0x3f, 0xd6, 0x63, 0xca, 0x35, 0x59, 0x12, 0xd3, 0x15, 0x28, 0xed, 0x04, 0x51, 0x9c, 0x7e, 0x95, - 0xbb, 0x15, 0x44, 0x31, 0x66, 0x10, 0xfb, 0x0f, 0x2c, 0x18, 0x60, 0x89, 0x10, 0x7b, 0x65, 0xe7, - 0xec, 0xe7, 0xbb, 0xd0, 0xeb, 0x30, 0x48, 0xb6, 0xb6, 0x48, 0x23, 0x16, 0xb3, 0x2a, 0xdd, 0xfa, - 0x06, 0x97, 0x59, 0x29, 0x3d, 0xf4, 0x59, 0x63, 0xfc, 0x2f, 0x16, 0xc8, 0xe8, 0x01, 0x94, 0x63, - 0x77, 0x8f, 0x2c, 0x34, 0x9b, 0xe2, 0x5d, 0xe3, 0x31, 0xbc, 0x28, 0x37, 0x24, 0x01, 0x9c, 0xd0, - 0xb2, 0xbf, 0x56, 0x00, 0x48, 0x5c, 0x93, 0x7b, 0x7d, 0xe2, 0x62, 0x47, 0x02, 0xd2, 0xab, 0x19, - 0x09, 0x48, 0x51, 0x42, 0x30, 0x23, 0xfd, 0xa8, 0x1a, 0xa6, 0x62, 0x5f, 0xc3, 0x54, 0x3a, 0xc9, - 0x30, 0x2d, 0xc1, 0x54, 0xe2, 0x5a, 0x6d, 0xc6, 0x99, 0x60, 0x11, 0xef, 0x37, 0xd2, 0x40, 0xdc, - 0x89, 0x6f, 0xff, 0xb0, 0x05, 0xc2, 0x3d, 0xa1, 0x8f, 0xc5, 0xfc, 0x25, 0x99, 0xbe, 0xcf, 0x08, - 0x94, 0x7b, 0x25, 0xdf, 0x5f, 0x43, 0x84, 0xc7, 0x55, 0x87, 0x87, 0x11, 0x14, 0xd7, 0xa0, 0x65, - 0x37, 0x41, 0x40, 0xab, 0x84, 0x29, 0x19, 0x7a, 0xf7, 0xe6, 0x3a, 0x40, 0x93, 0xe1, 0x6a, 0xe9, - 0xc0, 0x14, 0xab, 0xaa, 0x2a, 0x08, 0xd6, 0xb0, 0xec, 0x1f, 0x2f, 0xc0, 0x88, 0x0c, 0xcc, 0x4a, - 0xef, 0xf1, 0xbd, 0x5b, 0x39, 0x51, 0x56, 0x06, 0x96, 0x3f, 0x8f, 0x12, 0x56, 0xc1, 0xfb, 0xf5, - 0xfc, 0x79, 0x12, 0x80, 0x13, 0x1c, 0xf4, 0x02, 0x0c, 0x45, 0xed, 0x4d, 0x86, 0x9e, 0x32, 0xba, - 0xaf, 0xf3, 0x62, 0x2c, 0xe1, 0xe8, 0x0b, 0x30, 0xc9, 0xeb, 0x85, 0x41, 0xcb, 0xd9, 0xe6, 0x1a, - 0xa7, 0x01, 0xe5, 0x05, 0x37, 0xb9, 0x96, 0x82, 0x1d, 0x1f, 0x56, 0xa6, 0xd3, 0x65, 0x4c, 0x57, - 0xd9, 0x41, 0xc5, 0xfe, 0x0a, 0xa0, 0xce, 0x58, 0xb3, 0xe8, 0x6d, 0x6e, 0x56, 0xe1, 0x86, 0xa4, - 0xd9, 0x77, 0xca, 0xf8, 0x51, 0x69, 0x3c, 0x41, 0x6b, 0x61, 0x55, 0x9f, 0xee, 0xbc, 0xc9, 0xb4, - 0x0b, 0x0f, 0xba, 0x05, 0x83, 0x9c, 0xa9, 0x0a, 0xf2, 0x5d, 0xde, 0xb8, 0x34, 0xc7, 0x1f, 0x16, - 0x08, 0x5f, 0xf0, 0x65, 0x51, 0x1f, 0xbd, 0x0b, 0x23, 0xcd, 0xe0, 0xa1, 0xff, 0xd0, 0x09, 0x9b, - 0x0b, 0xb5, 0x55, 0xb1, 0x2e, 0x33, 0x65, 0xb3, 0x6a, 0x82, 0xa6, 0x3b, 0x13, 0x31, 0x7d, 0x6e, - 0x02, 0xc2, 0x3a, 0x39, 0xb4, 0xc1, 0xe2, 0x67, 0xf1, 0x7c, 0xdd, 0xdd, 0xec, 0xe0, 0x54, 0x8a, - 0x6f, 0x8d, 0xf2, 0x98, 0x08, 0xb2, 0x25, 0xb2, 0x7d, 0x27, 0x84, 0xec, 0xaf, 0x9e, 0x03, 0x63, - 0x3f, 0x18, 0x79, 0x1f, 0xac, 0x53, 0xca, 0xfb, 0x80, 0x61, 0x98, 0xec, 0xb5, 0xe2, 0x83, 0xaa, - 0x1b, 0x76, 0x4b, 0x1c, 0xb4, 0x2c, 0x70, 0x3a, 0x69, 0x4a, 0x08, 0x56, 0x74, 0xb2, 0x93, 0x73, - 0x14, 0x3f, 0xc2, 0xe4, 0x1c, 0xa5, 0x33, 0x4c, 0xce, 0xb1, 0x0e, 0x43, 0xdb, 0x6e, 0x8c, 0x49, - 0x2b, 0x10, 0x02, 0x45, 0xe6, 0x4a, 0xb8, 0xc9, 0x51, 0x3a, 0x43, 0xc3, 0x0b, 0x00, 0x96, 0x44, - 0xd0, 0xdb, 0x6a, 0x0f, 0x0c, 0xe6, 0xcb, 0xe3, 0x9d, 0xcf, 0x21, 0x99, 0xbb, 0x40, 0x24, 0xe3, - 0x18, 0x7a, 0xdc, 0x64, 0x1c, 0x2b, 0x32, 0x85, 0xc6, 0x70, 0xbe, 0xd9, 0x28, 0xcb, 0x90, 0xd1, - 0x23, 0x71, 0x86, 0x91, 0x6c, 0xa4, 0x7c, 0x7a, 0xc9, 0x46, 0x7e, 0xd8, 0x82, 0xf3, 0xad, 0xac, - 0xbc, 0x3b, 0x22, 0x05, 0xc6, 0xeb, 0x7d, 0x27, 0x16, 0x32, 0x1a, 0x64, 0x17, 0xb3, 0x4c, 0x34, - 0x9c, 0xdd, 0x1c, 0x1d, 0xe8, 0x70, 0xb3, 0x29, 0xf2, 0x66, 0x3c, 0x97, 0x93, 0xb5, 0xa4, 0x4b, - 0xae, 0x92, 0x8d, 0x8c, 0x5c, 0x19, 0x9f, 0xcc, 0xcb, 0x95, 0xd1, 0x77, 0x86, 0x8c, 0x24, 0x5f, - 0xc9, 0xd8, 0x87, 0xce, 0x57, 0xf2, 0xb6, 0xca, 0x57, 0xd2, 0x25, 0xea, 0x10, 0xcf, 0x46, 0xd2, - 0x33, 0x4b, 0x89, 0x96, 0x69, 0x64, 0xe2, 0x74, 0x32, 0x8d, 0x18, 0xcc, 0x9e, 0x27, 0xbb, 0x78, - 0xb1, 0x07, 0xb3, 0x37, 0xe8, 0x76, 0x67, 0xf7, 0x3c, 0xab, 0xca, 0xd4, 0x63, 0x65, 0x55, 0xb9, - 0xaf, 0x67, 0x29, 0x41, 0x3d, 0xd2, 0x70, 0x50, 0xa4, 0x3e, 0x73, 0x93, 0xdc, 0xd7, 0x8f, 0xa0, - 0x73, 0xf9, 0x74, 0xd5, 0x49, 0xd3, 0x49, 0x37, 0xeb, 0x10, 0xea, 0xcc, 0x79, 0x32, 0x7d, 0x36, - 0x39, 0x4f, 0xce, 0x9f, 0x7a, 0xce, 0x93, 0x0b, 0x67, 0x90, 0xf3, 0xe4, 0xa9, 0x8f, 0x34, 0xe7, - 0xc9, 0xcc, 0x13, 0xc8, 0x79, 0xb2, 0x9e, 0xe4, 0x3c, 0xb9, 0x98, 0x3f, 0x25, 0x19, 0x76, 0x72, - 0x39, 0x99, 0x4e, 0xee, 0x43, 0xb9, 0x25, 0xbd, 0xbc, 0x45, 0x58, 0xa4, 0xec, 0x64, 0x8b, 0x59, - 0xae, 0xe0, 0x7c, 0x4a, 0x14, 0x08, 0x27, 0xa4, 0x28, 0xdd, 0x24, 0xf3, 0xc9, 0xd3, 0x5d, 0x54, - 0x6f, 0x59, 0x4a, 0x8d, 0xfc, 0x7c, 0x27, 0xf6, 0xdf, 0x28, 0xc0, 0xe5, 0xee, 0xeb, 0x3a, 0xd1, - 0x88, 0xd4, 0x12, 0x0d, 0x7e, 0x4a, 0x23, 0xc2, 0xaf, 0x19, 0x09, 0x56, 0xdf, 0xa1, 0x30, 0x6e, - 0xc2, 0x94, 0x32, 0x90, 0xf3, 0xdc, 0xc6, 0x81, 0x96, 0x84, 0x51, 0x39, 0xeb, 0xd4, 0xd3, 0x08, - 0xb8, 0xb3, 0x0e, 0x5a, 0x80, 0x09, 0xa3, 0x70, 0xb5, 0x2a, 0xae, 0x13, 0x4a, 0x05, 0x53, 0x37, - 0xc1, 0x38, 0x8d, 0x6f, 0x7f, 0xdd, 0x82, 0xa7, 0x72, 0xc2, 0x81, 0xf7, 0x1d, 0xe9, 0x61, 0x0b, - 0x26, 0x5a, 0x66, 0xd5, 0x1e, 0x01, 0x61, 0x8c, 0xa0, 0xe3, 0xaa, 0xaf, 0x29, 0x00, 0x4e, 0x13, - 0x5d, 0xbc, 0xf6, 0x3b, 0x7f, 0x74, 0xf9, 0x13, 0xbf, 0xf7, 0x47, 0x97, 0x3f, 0xf1, 0xfb, 0x7f, - 0x74, 0xf9, 0x13, 0xff, 0xdf, 0xd1, 0x65, 0xeb, 0x77, 0x8e, 0x2e, 0x5b, 0xbf, 0x77, 0x74, 0xd9, - 0xfa, 0xfd, 0xa3, 0xcb, 0xd6, 0x1f, 0x1e, 0x5d, 0xb6, 0xbe, 0xf6, 0xc7, 0x97, 0x3f, 0xf1, 0xa5, - 0xc2, 0xfe, 0x2b, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x64, 0x10, 0x79, 0xf1, 0xa3, 0xdc, 0x00, - 0x00, + // 12262 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x5d, 0x6c, 0x24, 0x57, + 0x76, 0x18, 0xbc, 0xd5, 0xdd, 0xfc, 0xe9, 0xc3, 0xff, 0x3b, 0x1c, 0x89, 0x43, 0x49, 0xd3, 0xa3, + 0xd2, 0xee, 0x68, 0xb4, 0x92, 0x48, 0x6b, 0x24, 0xad, 0xe4, 0xd5, 0xae, 0x6c, 0x92, 0x4d, 0xce, + 0xb4, 0x66, 0xc8, 0x69, 0xdd, 0xe6, 0x8c, 0x76, 0xd7, 0xf2, 0x7a, 0x8b, 0xdd, 0x97, 0x64, 0x89, + 0xc5, 0xaa, 0x56, 0x55, 0x35, 0x67, 0x28, 0xd8, 0xc0, 0xf7, 0xad, 0x1d, 0x27, 0x8e, 0xfd, 0xb0, + 0x88, 0x8d, 0xc4, 0xb1, 0x0d, 0x07, 0x48, 0x1c, 0xd8, 0x1b, 0x27, 0x01, 0x1c, 0x3b, 0xb6, 0xb3, + 0xeb, 0x24, 0x8e, 0x93, 0x07, 0xe7, 0xc5, 0x71, 0xf2, 0xb2, 0x06, 0x8c, 0x30, 0x36, 0x6d, 0x24, + 0xf0, 0x43, 0x82, 0x20, 0x06, 0x02, 0x98, 0x31, 0xe2, 0xe0, 0xfe, 0xd6, 0xbd, 0xd5, 0x55, 0xdd, + 0xcd, 0x11, 0x87, 0x92, 0x8d, 0x7d, 0xeb, 0xbe, 0xe7, 0xdc, 0x73, 0x6f, 0xdd, 0xdf, 0x73, 0xce, + 0x3d, 0x3f, 0xf0, 0xc6, 0xde, 0xeb, 0xd1, 0x82, 0x1b, 0x2c, 0xee, 0x75, 0xb6, 0x48, 0xe8, 0x93, + 0x98, 0x44, 0x8b, 0x07, 0xc4, 0x6f, 0x05, 0xe1, 0xa2, 0x00, 0x38, 0x6d, 0x77, 0xb1, 0x19, 0x84, + 0x64, 0xf1, 0xe0, 0xa5, 0xc5, 0x1d, 0xe2, 0x93, 0xd0, 0x89, 0x49, 0x6b, 0xa1, 0x1d, 0x06, 0x71, + 0x80, 0x10, 0xc7, 0x59, 0x70, 0xda, 0xee, 0x02, 0xc5, 0x59, 0x38, 0x78, 0x69, 0xfe, 0xc5, 0x1d, + 0x37, 0xde, 0xed, 0x6c, 0x2d, 0x34, 0x83, 0xfd, 0xc5, 0x9d, 0x60, 0x27, 0x58, 0x64, 0xa8, 0x5b, + 0x9d, 0x6d, 0xf6, 0x8f, 0xfd, 0x61, 0xbf, 0x38, 0x89, 0xf9, 0xf5, 0xa4, 0x19, 0xf2, 0x20, 0x26, + 0x7e, 0xe4, 0x06, 0x7e, 0xf4, 0xa2, 0xd3, 0x76, 0x23, 0x12, 0x1e, 0x90, 0x70, 0xb1, 0xbd, 0xb7, + 0x43, 0x61, 0x91, 0x89, 0xb0, 0x78, 0xf0, 0xd2, 0x16, 0x89, 0x9d, 0xae, 0x1e, 0xcd, 0xbf, 0x92, + 0x90, 0xdb, 0x77, 0x9a, 0xbb, 0xae, 0x4f, 0xc2, 0x43, 0x49, 0x63, 0x31, 0x24, 0x51, 0xd0, 0x09, + 0x9b, 0xe4, 0x54, 0xb5, 0xa2, 0xc5, 0x7d, 0x12, 0x3b, 0x19, 0x5f, 0x3f, 0xbf, 0x98, 0x57, 0x2b, + 0xec, 0xf8, 0xb1, 0xbb, 0xdf, 0xdd, 0xcc, 0x67, 0xfa, 0x55, 0x88, 0x9a, 0xbb, 0x64, 0xdf, 0xe9, + 0xaa, 0xf7, 0x72, 0x5e, 0xbd, 0x4e, 0xec, 0x7a, 0x8b, 0xae, 0x1f, 0x47, 0x71, 0x98, 0xae, 0x64, + 0x7f, 0xcb, 0x82, 0x2b, 0x4b, 0xef, 0x34, 0x56, 0x3d, 0x27, 0x8a, 0xdd, 0xe6, 0xb2, 0x17, 0x34, + 0xf7, 0x1a, 0x71, 0x10, 0x92, 0x7b, 0x81, 0xd7, 0xd9, 0x27, 0x0d, 0x36, 0x10, 0xe8, 0x05, 0x18, + 0x3d, 0x60, 0xff, 0x6b, 0xd5, 0x39, 0xeb, 0x8a, 0x75, 0xad, 0xbc, 0x3c, 0xfd, 0xdb, 0x47, 0x95, + 0x4f, 0x1c, 0x1f, 0x55, 0x46, 0xef, 0x89, 0x72, 0xac, 0x30, 0xd0, 0x55, 0x18, 0xde, 0x8e, 0x36, + 0x0f, 0xdb, 0x64, 0xae, 0xc0, 0x70, 0x27, 0x05, 0xee, 0xf0, 0x5a, 0x83, 0x96, 0x62, 0x01, 0x45, + 0x8b, 0x50, 0x6e, 0x3b, 0x61, 0xec, 0xc6, 0x6e, 0xe0, 0xcf, 0x15, 0xaf, 0x58, 0xd7, 0x86, 0x96, + 0x67, 0x04, 0x6a, 0xb9, 0x2e, 0x01, 0x38, 0xc1, 0xa1, 0xdd, 0x08, 0x89, 0xd3, 0xba, 0xe3, 0x7b, + 0x87, 0x73, 0xa5, 0x2b, 0xd6, 0xb5, 0xd1, 0xa4, 0x1b, 0x58, 0x94, 0x63, 0x85, 0x61, 0xff, 0x54, + 0x01, 0x46, 0x97, 0xb6, 0xb7, 0x5d, 0xdf, 0x8d, 0x0f, 0xd1, 0x3d, 0x18, 0xf7, 0x83, 0x16, 0x91, + 0xff, 0xd9, 0x57, 0x8c, 0x5d, 0xbf, 0xb2, 0xd0, 0xbd, 0x32, 0x17, 0x36, 0x34, 0xbc, 0xe5, 0xe9, + 0xe3, 0xa3, 0xca, 0xb8, 0x5e, 0x82, 0x0d, 0x3a, 0x08, 0xc3, 0x58, 0x3b, 0x68, 0x29, 0xb2, 0x05, + 0x46, 0xb6, 0x92, 0x45, 0xb6, 0x9e, 0xa0, 0x2d, 0x4f, 0x1d, 0x1f, 0x55, 0xc6, 0xb4, 0x02, 0xac, + 0x13, 0x41, 0x5b, 0x30, 0x45, 0xff, 0xfa, 0xb1, 0xab, 0xe8, 0x16, 0x19, 0xdd, 0x67, 0xf2, 0xe8, + 0x6a, 0xa8, 0xcb, 0x17, 0x8e, 0x8f, 0x2a, 0x53, 0xa9, 0x42, 0x9c, 0x26, 0x68, 0x7f, 0x00, 0x93, + 0x4b, 0x71, 0xec, 0x34, 0x77, 0x49, 0x8b, 0xcf, 0x20, 0x7a, 0x05, 0x4a, 0xbe, 0xb3, 0x4f, 0xc4, + 0xfc, 0x5e, 0x11, 0x03, 0x5b, 0xda, 0x70, 0xf6, 0xc9, 0xc9, 0x51, 0x65, 0xfa, 0xae, 0xef, 0xbe, + 0xdf, 0x11, 0xab, 0x82, 0x96, 0x61, 0x86, 0x8d, 0xae, 0x03, 0xb4, 0xc8, 0x81, 0xdb, 0x24, 0x75, + 0x27, 0xde, 0x15, 0xf3, 0x8d, 0x44, 0x5d, 0xa8, 0x2a, 0x08, 0xd6, 0xb0, 0xec, 0x07, 0x50, 0x5e, + 0x3a, 0x08, 0xdc, 0x56, 0x3d, 0x68, 0x45, 0x68, 0x0f, 0xa6, 0xda, 0x21, 0xd9, 0x26, 0xa1, 0x2a, + 0x9a, 0xb3, 0xae, 0x14, 0xaf, 0x8d, 0x5d, 0xbf, 0x96, 0xf9, 0xb1, 0x26, 0xea, 0xaa, 0x1f, 0x87, + 0x87, 0xcb, 0x8f, 0x8b, 0xf6, 0xa6, 0x52, 0x50, 0x9c, 0xa6, 0x6c, 0xff, 0xbb, 0x02, 0x5c, 0x5c, + 0xfa, 0xa0, 0x13, 0x92, 0xaa, 0x1b, 0xed, 0xa5, 0x57, 0x78, 0xcb, 0x8d, 0xf6, 0x36, 0x92, 0x11, + 0x50, 0x4b, 0xab, 0x2a, 0xca, 0xb1, 0xc2, 0x40, 0x2f, 0xc2, 0x08, 0xfd, 0x7d, 0x17, 0xd7, 0xc4, + 0x27, 0x5f, 0x10, 0xc8, 0x63, 0x55, 0x27, 0x76, 0xaa, 0x1c, 0x84, 0x25, 0x0e, 0x5a, 0x87, 0xb1, + 0x26, 0xdb, 0x90, 0x3b, 0xeb, 0x41, 0x8b, 0xb0, 0xc9, 0x2c, 0x2f, 0x3f, 0x4f, 0xd1, 0x57, 0x92, + 0xe2, 0x93, 0xa3, 0xca, 0x1c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a, 0x7f, + 0x95, 0x18, 0x25, 0xc8, 0xd8, 0x5b, 0xd7, 0xb4, 0xad, 0x32, 0xc4, 0xb6, 0xca, 0x78, 0xf6, 0x36, + 0x41, 0x2f, 0x41, 0x69, 0xcf, 0xf5, 0x5b, 0x73, 0xc3, 0x8c, 0xd6, 0x53, 0x74, 0xce, 0x6f, 0xb9, + 0x7e, 0xeb, 0xe4, 0xa8, 0x32, 0x63, 0x74, 0x87, 0x16, 0x62, 0x86, 0x6a, 0xff, 0xa9, 0x05, 0x15, + 0x06, 0x5b, 0x73, 0x3d, 0x52, 0x27, 0x61, 0xe4, 0x46, 0x31, 0xf1, 0x63, 0x63, 0x40, 0xaf, 0x03, + 0x44, 0xa4, 0x19, 0x92, 0x58, 0x1b, 0x52, 0xb5, 0x30, 0x1a, 0x0a, 0x82, 0x35, 0x2c, 0x7a, 0x20, + 0x44, 0xbb, 0x4e, 0xc8, 0xd6, 0x97, 0x18, 0x58, 0x75, 0x20, 0x34, 0x24, 0x00, 0x27, 0x38, 0xc6, + 0x81, 0x50, 0xec, 0x77, 0x20, 0xa0, 0xcf, 0xc3, 0x54, 0xd2, 0x58, 0xd4, 0x76, 0x9a, 0x72, 0x00, + 0xd9, 0x96, 0x69, 0x98, 0x20, 0x9c, 0xc6, 0xb5, 0xff, 0x91, 0x25, 0x16, 0x0f, 0xfd, 0xea, 0x8f, + 0xf9, 0xb7, 0xda, 0xbf, 0x6e, 0xc1, 0xc8, 0xb2, 0xeb, 0xb7, 0x5c, 0x7f, 0x07, 0x7d, 0x05, 0x46, + 0xe9, 0xdd, 0xd4, 0x72, 0x62, 0x47, 0x9c, 0x7b, 0xdf, 0xa1, 0xed, 0x2d, 0x75, 0x55, 0x2c, 0xb4, + 0xf7, 0x76, 0x68, 0x41, 0xb4, 0x40, 0xb1, 0xe9, 0x6e, 0xbb, 0xb3, 0xf5, 0x1e, 0x69, 0xc6, 0xeb, + 0x24, 0x76, 0x92, 0xcf, 0x49, 0xca, 0xb0, 0xa2, 0x8a, 0x6e, 0xc1, 0x70, 0xec, 0x84, 0x3b, 0x24, + 0x16, 0x07, 0x60, 0xe6, 0x41, 0xc5, 0x6b, 0x62, 0xba, 0x23, 0x89, 0xdf, 0x24, 0xc9, 0xb5, 0xb0, + 0xc9, 0xaa, 0x62, 0x41, 0xc2, 0xfe, 0x9b, 0xc3, 0x70, 0x69, 0xa5, 0x51, 0xcb, 0x59, 0x57, 0x57, + 0x61, 0xb8, 0x15, 0xba, 0x07, 0x24, 0x14, 0xe3, 0xac, 0xa8, 0x54, 0x59, 0x29, 0x16, 0x50, 0xf4, + 0x3a, 0x8c, 0xf3, 0x0b, 0xe9, 0xa6, 0xe3, 0xb7, 0x3c, 0x39, 0xc4, 0xb3, 0x02, 0x7b, 0xfc, 0x9e, + 0x06, 0xc3, 0x06, 0xe6, 0x29, 0x17, 0xd5, 0xd5, 0xd4, 0x66, 0xcc, 0xbb, 0xec, 0x7e, 0xc4, 0x82, + 0x69, 0xde, 0xcc, 0x52, 0x1c, 0x87, 0xee, 0x56, 0x27, 0x26, 0xd1, 0xdc, 0x10, 0x3b, 0xe9, 0x56, + 0xb2, 0x46, 0x2b, 0x77, 0x04, 0x16, 0xee, 0xa5, 0xa8, 0xf0, 0x43, 0x70, 0x4e, 0xb4, 0x3b, 0x9d, + 0x06, 0xe3, 0xae, 0x66, 0xd1, 0x0f, 0x5a, 0x30, 0xdf, 0x0c, 0xfc, 0x38, 0x0c, 0x3c, 0x8f, 0x84, + 0xf5, 0xce, 0x96, 0xe7, 0x46, 0xbb, 0x7c, 0x9d, 0x62, 0xb2, 0xcd, 0x4e, 0x82, 0x9c, 0x39, 0x54, + 0x48, 0x62, 0x0e, 0x2f, 0x1f, 0x1f, 0x55, 0xe6, 0x57, 0x72, 0x49, 0xe1, 0x1e, 0xcd, 0xa0, 0x3d, + 0x40, 0xf4, 0x2a, 0x6d, 0xc4, 0xce, 0x0e, 0x49, 0x1a, 0x1f, 0x19, 0xbc, 0xf1, 0xc7, 0x8e, 0x8f, + 0x2a, 0x68, 0xa3, 0x8b, 0x04, 0xce, 0x20, 0x8b, 0xde, 0x87, 0x59, 0x5a, 0xda, 0xf5, 0xad, 0xa3, + 0x83, 0x37, 0x37, 0x77, 0x7c, 0x54, 0x99, 0xdd, 0xc8, 0x20, 0x82, 0x33, 0x49, 0xcf, 0xaf, 0xc0, + 0xc5, 0xcc, 0xa9, 0x42, 0xd3, 0x50, 0xdc, 0x23, 0x9c, 0x05, 0x29, 0x63, 0xfa, 0x13, 0xcd, 0xc2, + 0xd0, 0x81, 0xe3, 0x75, 0xc4, 0x2a, 0xc5, 0xfc, 0xcf, 0x67, 0x0b, 0xaf, 0x5b, 0x76, 0x13, 0xc6, + 0x57, 0x9c, 0xb6, 0xb3, 0xe5, 0x7a, 0x6e, 0xec, 0x92, 0x08, 0x3d, 0x0b, 0x45, 0xa7, 0xd5, 0x62, + 0x57, 0x64, 0x79, 0xf9, 0xe2, 0xf1, 0x51, 0xa5, 0xb8, 0xd4, 0xa2, 0x67, 0x35, 0x28, 0xac, 0x43, + 0x4c, 0x31, 0xd0, 0xa7, 0xa1, 0xd4, 0x0a, 0x83, 0xf6, 0x5c, 0x81, 0x61, 0xd2, 0xa1, 0x2a, 0x55, + 0xc3, 0xa0, 0x9d, 0x42, 0x65, 0x38, 0xf6, 0x6f, 0x16, 0xe0, 0xc9, 0x15, 0xd2, 0xde, 0x5d, 0x6b, + 0xe4, 0x6c, 0xba, 0x6b, 0x30, 0xba, 0x1f, 0xf8, 0x6e, 0x1c, 0x84, 0x91, 0x68, 0x9a, 0xdd, 0x26, + 0xeb, 0xa2, 0x0c, 0x2b, 0x28, 0xba, 0x02, 0xa5, 0x76, 0xc2, 0x09, 0x8c, 0x4b, 0x2e, 0x82, 0xf1, + 0x00, 0x0c, 0x42, 0x31, 0x3a, 0x11, 0x09, 0xc5, 0x2d, 0xa8, 0x30, 0xee, 0x46, 0x24, 0xc4, 0x0c, + 0x92, 0x1c, 0xa7, 0xf4, 0xa0, 0x15, 0xdb, 0x2a, 0x75, 0x9c, 0x52, 0x08, 0xd6, 0xb0, 0x50, 0x1d, + 0xca, 0x91, 0x9a, 0xd4, 0xa1, 0xc1, 0x27, 0x75, 0x82, 0x9d, 0xb7, 0x6a, 0x26, 0x13, 0x22, 0xc6, + 0x31, 0x30, 0xdc, 0xf7, 0xbc, 0xfd, 0x66, 0x01, 0x10, 0x1f, 0xc2, 0xbf, 0x64, 0x03, 0x77, 0xb7, + 0x7b, 0xe0, 0x32, 0x39, 0xaf, 0xdb, 0x41, 0xd3, 0xf1, 0xd2, 0x47, 0xf8, 0x59, 0x8d, 0xde, 0x4f, + 0x5a, 0x80, 0x56, 0x5c, 0xbf, 0x45, 0xc2, 0x73, 0x10, 0x3b, 0x4e, 0x77, 0x91, 0xde, 0x86, 0xc9, + 0x15, 0xcf, 0x25, 0x7e, 0x5c, 0xab, 0xaf, 0x04, 0xfe, 0xb6, 0xbb, 0x83, 0x3e, 0x0b, 0x93, 0x54, + 0x0a, 0x0b, 0x3a, 0x71, 0x83, 0x34, 0x03, 0x9f, 0x31, 0xac, 0x54, 0x76, 0x41, 0xc7, 0x47, 0x95, + 0xc9, 0x4d, 0x03, 0x82, 0x53, 0x98, 0xf6, 0xef, 0xd3, 0x0f, 0x0d, 0xf6, 0xdb, 0x81, 0x4f, 0xfc, + 0x78, 0x25, 0xf0, 0x5b, 0x5c, 0xb0, 0xf9, 0x2c, 0x94, 0x62, 0xda, 0x71, 0xfe, 0x91, 0x57, 0xe5, + 0xd4, 0xd2, 0xee, 0x9e, 0x1c, 0x55, 0x1e, 0xeb, 0xae, 0xc1, 0x3e, 0x88, 0xd5, 0x41, 0xdf, 0x09, + 0xc3, 0x51, 0xec, 0xc4, 0x9d, 0x48, 0x7c, 0xf6, 0xd3, 0xf2, 0xb3, 0x1b, 0xac, 0xf4, 0xe4, 0xa8, + 0x32, 0xa5, 0xaa, 0xf1, 0x22, 0x2c, 0x2a, 0xa0, 0xe7, 0x60, 0x64, 0x9f, 0x44, 0x91, 0xb3, 0x23, + 0x79, 0xd2, 0x29, 0x51, 0x77, 0x64, 0x9d, 0x17, 0x63, 0x09, 0x47, 0xcf, 0xc0, 0x10, 0x09, 0xc3, + 0x20, 0x14, 0xab, 0x6a, 0x42, 0x20, 0x0e, 0xad, 0xd2, 0x42, 0xcc, 0x61, 0xf6, 0x7f, 0xb0, 0x60, + 0x4a, 0xf5, 0x95, 0xb7, 0x75, 0x0e, 0xcc, 0xc7, 0x97, 0x00, 0x9a, 0xf2, 0x03, 0x23, 0x76, 0xde, + 0x8d, 0x5d, 0xbf, 0x9a, 0x79, 0xa5, 0x76, 0x0d, 0x63, 0x42, 0x59, 0x15, 0x45, 0x58, 0xa3, 0x66, + 0xff, 0x4b, 0x0b, 0x2e, 0xa4, 0xbe, 0xe8, 0xb6, 0x1b, 0xc5, 0xe8, 0xdd, 0xae, 0xaf, 0x5a, 0x18, + 0xec, 0xab, 0x68, 0x6d, 0xf6, 0x4d, 0x6a, 0xcd, 0xc9, 0x12, 0xed, 0x8b, 0x6e, 0xc2, 0x90, 0x1b, + 0x93, 0x7d, 0xf9, 0x31, 0xcf, 0xf4, 0xfc, 0x18, 0xde, 0xab, 0x64, 0x46, 0x6a, 0xb4, 0x26, 0xe6, + 0x04, 0xec, 0x1f, 0x2f, 0x42, 0x99, 0x2f, 0xdb, 0x75, 0xa7, 0x7d, 0x0e, 0x73, 0x51, 0x83, 0x12, + 0xa3, 0xce, 0x3b, 0xfe, 0x6c, 0x76, 0xc7, 0x45, 0x77, 0x16, 0xa8, 0x64, 0xc1, 0x99, 0x17, 0x75, + 0x98, 0xd1, 0x22, 0xcc, 0x48, 0x20, 0x07, 0x60, 0xcb, 0xf5, 0x9d, 0xf0, 0x90, 0x96, 0xcd, 0x15, + 0x19, 0xc1, 0x17, 0x7b, 0x13, 0x5c, 0x56, 0xf8, 0x9c, 0xac, 0xea, 0x6b, 0x02, 0xc0, 0x1a, 0xd1, + 0xf9, 0xd7, 0xa0, 0xac, 0x90, 0x4f, 0x73, 0x2b, 0xcf, 0x7f, 0x1e, 0xa6, 0x52, 0x6d, 0xf5, 0xab, + 0x3e, 0xae, 0x5f, 0xea, 0xdf, 0x60, 0xa7, 0x80, 0xe8, 0xf5, 0xaa, 0x7f, 0x20, 0x8e, 0xbb, 0x0f, + 0x60, 0xd6, 0xcb, 0x38, 0x65, 0xc5, 0x54, 0x0d, 0x7e, 0x2a, 0x3f, 0x29, 0x3e, 0x7b, 0x36, 0x0b, + 0x8a, 0x33, 0xdb, 0xa0, 0x17, 0x55, 0xd0, 0xa6, 0x6b, 0xde, 0xf1, 0x58, 0x7f, 0x85, 0xbc, 0x78, + 0x47, 0x94, 0x61, 0x05, 0xa5, 0x47, 0xd8, 0xac, 0xea, 0xfc, 0x2d, 0x72, 0xd8, 0x20, 0x1e, 0x69, + 0xc6, 0x41, 0xf8, 0x91, 0x76, 0xff, 0x29, 0x3e, 0xfa, 0xfc, 0x04, 0x1c, 0x13, 0x04, 0x8a, 0xb7, + 0xc8, 0x21, 0x9f, 0x0a, 0xfd, 0xeb, 0x8a, 0x3d, 0xbf, 0xee, 0x97, 0x2c, 0x98, 0x50, 0x5f, 0x77, + 0x0e, 0x5b, 0x7d, 0xd9, 0xdc, 0xea, 0x4f, 0xf5, 0x5c, 0xe0, 0x39, 0x9b, 0xfc, 0x9b, 0x05, 0xb8, + 0xa4, 0x70, 0x28, 0x83, 0xca, 0xff, 0x88, 0x55, 0xb5, 0x08, 0x65, 0x5f, 0xc9, 0xbb, 0x96, 0x29, + 0x68, 0x26, 0xd2, 0x6e, 0x82, 0x43, 0xf9, 0x0c, 0x3f, 0x11, 0x4a, 0xc7, 0x75, 0x45, 0x90, 0x50, + 0xfa, 0x2c, 0x43, 0xb1, 0xe3, 0xb6, 0xc4, 0x9d, 0xf1, 0x1d, 0x72, 0xb4, 0xef, 0xd6, 0xaa, 0x27, + 0x47, 0x95, 0xa7, 0xf3, 0x94, 0x90, 0xf4, 0xb2, 0x8a, 0x16, 0xee, 0xd6, 0xaa, 0x98, 0x56, 0x46, + 0x4b, 0x30, 0x25, 0xf5, 0xac, 0xf7, 0x28, 0xd3, 0x19, 0xf8, 0xe2, 0x6a, 0x51, 0xda, 0x1c, 0x6c, + 0x82, 0x71, 0x1a, 0x1f, 0x55, 0x61, 0x7a, 0xaf, 0xb3, 0x45, 0x3c, 0x12, 0xf3, 0x0f, 0xbe, 0x45, + 0xb8, 0xae, 0xa3, 0x9c, 0x08, 0x43, 0xb7, 0x52, 0x70, 0xdc, 0x55, 0xc3, 0xfe, 0x0b, 0x76, 0xc4, + 0x8b, 0xd1, 0xab, 0x87, 0x01, 0x5d, 0x58, 0x94, 0xfa, 0x47, 0xb9, 0x9c, 0x07, 0x59, 0x15, 0xb7, + 0xc8, 0xe1, 0x66, 0x40, 0xd9, 0xc3, 0xec, 0x55, 0x61, 0xac, 0xf9, 0x52, 0xcf, 0x35, 0xff, 0x2b, + 0x05, 0xb8, 0xa8, 0x46, 0xc0, 0x60, 0xc0, 0xfe, 0xb2, 0x8f, 0xc1, 0x4b, 0x30, 0xd6, 0x22, 0xdb, + 0x4e, 0xc7, 0x8b, 0x95, 0xe2, 0x6d, 0x88, 0x2b, 0x5f, 0xab, 0x49, 0x31, 0xd6, 0x71, 0x4e, 0x31, + 0x6c, 0x3f, 0x37, 0xc6, 0xee, 0xd6, 0xd8, 0xa1, 0x6b, 0x5c, 0xed, 0x1a, 0x2b, 0x77, 0xd7, 0x3c, + 0x03, 0x43, 0xee, 0x3e, 0xe5, 0xb5, 0x0a, 0x26, 0x0b, 0x55, 0xa3, 0x85, 0x98, 0xc3, 0xd0, 0xa7, + 0x60, 0xa4, 0x19, 0xec, 0xef, 0x3b, 0x7e, 0x8b, 0x5d, 0x79, 0xe5, 0xe5, 0x31, 0xca, 0x8e, 0xad, + 0xf0, 0x22, 0x2c, 0x61, 0xe8, 0x49, 0x28, 0x39, 0xe1, 0x4e, 0x34, 0x57, 0x62, 0x38, 0xa3, 0xb4, + 0xa5, 0xa5, 0x70, 0x27, 0xc2, 0xac, 0x94, 0xca, 0x01, 0xf7, 0x83, 0x70, 0xcf, 0xf5, 0x77, 0xaa, + 0x6e, 0x28, 0xb6, 0x84, 0xba, 0x0b, 0xdf, 0x51, 0x10, 0xac, 0x61, 0xa1, 0x35, 0x18, 0x6a, 0x07, + 0x61, 0x1c, 0xcd, 0x0d, 0xb3, 0xe1, 0x7e, 0x3a, 0xe7, 0x20, 0xe2, 0x5f, 0x5b, 0x0f, 0xc2, 0x38, + 0xf9, 0x00, 0xfa, 0x2f, 0xc2, 0xbc, 0x3a, 0xfa, 0x4e, 0x28, 0x12, 0xff, 0x60, 0x6e, 0x84, 0x51, + 0x99, 0xcf, 0xa2, 0xb2, 0xea, 0x1f, 0xdc, 0x73, 0xc2, 0xe4, 0x94, 0x5e, 0xf5, 0x0f, 0x30, 0xad, + 0x83, 0xbe, 0x08, 0x65, 0xb9, 0xc5, 0x23, 0x21, 0x98, 0x67, 0x2e, 0x31, 0x79, 0x30, 0x60, 0xf2, + 0x7e, 0xc7, 0x0d, 0xc9, 0x3e, 0xf1, 0xe3, 0x28, 0x39, 0xd3, 0x24, 0x34, 0xc2, 0x09, 0x35, 0xf4, + 0x45, 0xa9, 0x0d, 0x5a, 0x0f, 0x3a, 0x7e, 0x1c, 0xcd, 0x95, 0x59, 0xf7, 0x32, 0xf5, 0xf4, 0xf7, + 0x12, 0xbc, 0xb4, 0xba, 0x88, 0x57, 0xc6, 0x06, 0x29, 0x84, 0x61, 0xc2, 0x73, 0x0f, 0x88, 0x4f, + 0xa2, 0xa8, 0x1e, 0x06, 0x5b, 0x64, 0x0e, 0x58, 0xcf, 0x2f, 0x65, 0xab, 0xaf, 0x83, 0x2d, 0xb2, + 0x3c, 0x73, 0x7c, 0x54, 0x99, 0xb8, 0xad, 0xd7, 0xc1, 0x26, 0x09, 0x74, 0x17, 0x26, 0xa9, 0x00, + 0xe2, 0x26, 0x44, 0xc7, 0xfa, 0x11, 0x65, 0xd2, 0x07, 0x36, 0x2a, 0xe1, 0x14, 0x11, 0xf4, 0x16, + 0x94, 0x3d, 0x77, 0x9b, 0x34, 0x0f, 0x9b, 0x1e, 0x99, 0x1b, 0x67, 0x14, 0x33, 0xb7, 0xd5, 0x6d, + 0x89, 0xc4, 0x05, 0x3c, 0xf5, 0x17, 0x27, 0xd5, 0xd1, 0x3d, 0x78, 0x2c, 0x26, 0xe1, 0xbe, 0xeb, + 0x3b, 0x74, 0x3b, 0x08, 0x79, 0x81, 0x3d, 0x02, 0x4c, 0xb0, 0xf5, 0x76, 0x59, 0x0c, 0xdd, 0x63, + 0x9b, 0x99, 0x58, 0x38, 0xa7, 0x36, 0xba, 0x03, 0x53, 0x6c, 0x27, 0xd4, 0x3b, 0x9e, 0x57, 0x0f, + 0x3c, 0xb7, 0x79, 0x38, 0x37, 0xc9, 0x08, 0x7e, 0x4a, 0xde, 0x0b, 0x35, 0x13, 0x7c, 0x72, 0x54, + 0x81, 0xe4, 0x1f, 0x4e, 0xd7, 0x46, 0x5b, 0x4c, 0xeb, 0xdb, 0x09, 0xdd, 0xf8, 0x90, 0xae, 0x5f, + 0xf2, 0x20, 0x9e, 0x9b, 0xea, 0xa9, 0x1f, 0xd0, 0x51, 0x95, 0x6a, 0x58, 0x2f, 0xc4, 0x69, 0x82, + 0x74, 0x6b, 0x47, 0x71, 0xcb, 0xf5, 0xe7, 0xa6, 0xd9, 0x89, 0xa1, 0x76, 0x46, 0x83, 0x16, 0x62, + 0x0e, 0x63, 0x1a, 0x5f, 0xfa, 0xe3, 0x0e, 0x3d, 0x41, 0x67, 0x18, 0x62, 0xa2, 0xf1, 0x95, 0x00, + 0x9c, 0xe0, 0x50, 0xa6, 0x26, 0x8e, 0x0f, 0xe7, 0x10, 0x43, 0x55, 0xdb, 0x65, 0x73, 0xf3, 0x8b, + 0x98, 0x96, 0xa3, 0xdb, 0x30, 0x42, 0xfc, 0x83, 0xb5, 0x30, 0xd8, 0x9f, 0xbb, 0x90, 0xbf, 0x67, + 0x57, 0x39, 0x0a, 0x3f, 0xd0, 0x13, 0x01, 0x4f, 0x14, 0x63, 0x49, 0x02, 0x3d, 0x80, 0xb9, 0x8c, + 0x19, 0xe1, 0x13, 0x30, 0xcb, 0x26, 0xe0, 0x73, 0xa2, 0xee, 0xdc, 0x66, 0x0e, 0xde, 0x49, 0x0f, + 0x18, 0xce, 0xa5, 0x8e, 0xbe, 0x17, 0x26, 0xf8, 0x86, 0xe2, 0xcf, 0x45, 0xd1, 0xdc, 0x45, 0xf6, + 0x35, 0x57, 0xf2, 0x37, 0x27, 0x47, 0x5c, 0xbe, 0x28, 0x3a, 0x34, 0xa1, 0x97, 0x46, 0xd8, 0xa4, + 0x66, 0x6f, 0xc1, 0xa4, 0x3a, 0xb7, 0xd8, 0xd2, 0x41, 0x15, 0x18, 0x62, 0xdc, 0x8e, 0xd0, 0xc8, + 0x94, 0xe9, 0x4c, 0x31, 0x4e, 0x08, 0xf3, 0x72, 0x36, 0x53, 0xee, 0x07, 0x64, 0xf9, 0x30, 0x26, + 0x5c, 0xaa, 0x2e, 0x6a, 0x33, 0x25, 0x01, 0x38, 0xc1, 0xb1, 0xff, 0x2f, 0xe7, 0x1a, 0x93, 0xc3, + 0x71, 0x80, 0xeb, 0xe0, 0x05, 0x18, 0xdd, 0x0d, 0xa2, 0x98, 0x62, 0xb3, 0x36, 0x86, 0x12, 0x3e, + 0xf1, 0xa6, 0x28, 0xc7, 0x0a, 0x03, 0xbd, 0x01, 0x13, 0x4d, 0xbd, 0x01, 0x71, 0x97, 0xa9, 0x21, + 0x30, 0x5a, 0xc7, 0x26, 0x2e, 0x7a, 0x1d, 0x46, 0xd9, 0x63, 0x6f, 0x33, 0xf0, 0x04, 0x93, 0x25, + 0x2f, 0xe4, 0xd1, 0xba, 0x28, 0x3f, 0xd1, 0x7e, 0x63, 0x85, 0x8d, 0xae, 0xc2, 0x30, 0xed, 0x42, + 0xad, 0x2e, 0x6e, 0x11, 0xa5, 0x53, 0xb9, 0xc9, 0x4a, 0xb1, 0x80, 0xda, 0x7f, 0xab, 0xa0, 0x8d, + 0x32, 0x95, 0x48, 0x09, 0xaa, 0xc3, 0xc8, 0x7d, 0xc7, 0x8d, 0x5d, 0x7f, 0x47, 0xb0, 0x0b, 0xcf, + 0xf5, 0xbc, 0x52, 0x58, 0xa5, 0x77, 0x78, 0x05, 0x7e, 0xe9, 0x89, 0x3f, 0x58, 0x92, 0xa1, 0x14, + 0xc3, 0x8e, 0xef, 0x53, 0x8a, 0x85, 0x41, 0x29, 0x62, 0x5e, 0x81, 0x53, 0x14, 0x7f, 0xb0, 0x24, + 0x83, 0xde, 0x05, 0x90, 0xcb, 0x92, 0xb4, 0xc4, 0x23, 0xeb, 0x0b, 0xfd, 0x89, 0x6e, 0xaa, 0x3a, + 0xcb, 0x93, 0xf4, 0x4a, 0x4d, 0xfe, 0x63, 0x8d, 0x9e, 0x1d, 0x33, 0xb6, 0xaa, 0xbb, 0x33, 0xe8, + 0x7b, 0xe8, 0x49, 0xe0, 0x84, 0x31, 0x69, 0x2d, 0xc5, 0x62, 0x70, 0x3e, 0x3d, 0x98, 0x4c, 0xb1, + 0xe9, 0xee, 0x13, 0xfd, 0xd4, 0x10, 0x44, 0x70, 0x42, 0xcf, 0xfe, 0xb5, 0x22, 0xcc, 0xe5, 0x75, + 0x97, 0x2e, 0x3a, 0xf2, 0xc0, 0x8d, 0x57, 0x28, 0x37, 0x64, 0x99, 0x8b, 0x6e, 0x55, 0x94, 0x63, + 0x85, 0x41, 0x67, 0x3f, 0x72, 0x77, 0xa4, 0x48, 0x38, 0x94, 0xcc, 0x7e, 0x83, 0x95, 0x62, 0x01, + 0xa5, 0x78, 0x21, 0x71, 0x22, 0xf1, 0x8a, 0xaf, 0xad, 0x12, 0xcc, 0x4a, 0xb1, 0x80, 0xea, 0xfa, + 0xa6, 0x52, 0x1f, 0x7d, 0x93, 0x31, 0x44, 0x43, 0x67, 0x3b, 0x44, 0xe8, 0xcb, 0x00, 0xdb, 0xae, + 0xef, 0x46, 0xbb, 0x8c, 0xfa, 0xf0, 0xa9, 0xa9, 0x2b, 0x5e, 0x6a, 0x4d, 0x51, 0xc1, 0x1a, 0x45, + 0xf4, 0x2a, 0x8c, 0xa9, 0x0d, 0x58, 0xab, 0xb2, 0x27, 0x0d, 0xed, 0x89, 0x38, 0x39, 0x8d, 0xaa, + 0x58, 0xc7, 0xb3, 0xdf, 0x4b, 0xaf, 0x17, 0xb1, 0x03, 0xb4, 0xf1, 0xb5, 0x06, 0x1d, 0xdf, 0x42, + 0xef, 0xf1, 0xb5, 0x7f, 0xab, 0x08, 0x53, 0x46, 0x63, 0x9d, 0x68, 0x80, 0x33, 0xeb, 0x06, 0xbd, + 0xe7, 0x9c, 0x98, 0x88, 0xfd, 0x67, 0xf7, 0xdf, 0x2a, 0xfa, 0x5d, 0x48, 0x77, 0x00, 0xaf, 0x8f, + 0xbe, 0x0c, 0x65, 0xcf, 0x89, 0x98, 0xee, 0x8a, 0x88, 0x7d, 0x37, 0x08, 0xb1, 0x44, 0x8e, 0x70, + 0xa2, 0x58, 0xbb, 0x6a, 0x38, 0xed, 0x84, 0x24, 0xbd, 0x90, 0x29, 0xef, 0x23, 0xcd, 0x44, 0x54, + 0x27, 0x28, 0x83, 0x74, 0x88, 0x39, 0x0c, 0xbd, 0x0e, 0xe3, 0x21, 0x61, 0xab, 0x62, 0x85, 0xb2, + 0x72, 0x6c, 0x99, 0x0d, 0x25, 0x3c, 0x1f, 0xd6, 0x60, 0xd8, 0xc0, 0x4c, 0x58, 0xf9, 0xe1, 0x1e, + 0xac, 0xfc, 0x73, 0x30, 0xc2, 0x7e, 0xa8, 0x15, 0xa0, 0x66, 0xa3, 0xc6, 0x8b, 0xb1, 0x84, 0xa7, + 0x17, 0xcc, 0xe8, 0x80, 0x0b, 0xe6, 0xd3, 0x30, 0x59, 0x75, 0xc8, 0x7e, 0xe0, 0xaf, 0xfa, 0xad, + 0x76, 0xe0, 0xfa, 0x31, 0x9a, 0x83, 0x12, 0xbb, 0x1d, 0xf8, 0xde, 0x2e, 0x51, 0x0a, 0xb8, 0x44, + 0x19, 0x73, 0x7b, 0x07, 0x2e, 0x56, 0x83, 0xfb, 0xfe, 0x7d, 0x27, 0x6c, 0x2d, 0xd5, 0x6b, 0x9a, + 0x9c, 0xbb, 0x21, 0xe5, 0x2c, 0x6e, 0x76, 0x91, 0x79, 0xa6, 0x6a, 0x35, 0xf9, 0x5d, 0xbb, 0xe6, + 0x7a, 0x24, 0x47, 0x1b, 0xf1, 0x77, 0x0a, 0x46, 0x4b, 0x09, 0xbe, 0x7a, 0xe2, 0xb0, 0x72, 0x9f, + 0x38, 0xde, 0x86, 0xd1, 0x6d, 0x97, 0x78, 0x2d, 0x4c, 0xb6, 0xc5, 0x12, 0x7b, 0x36, 0xff, 0x25, + 0x79, 0x8d, 0x62, 0x4a, 0xed, 0x13, 0x97, 0xd2, 0xd6, 0x44, 0x65, 0xac, 0xc8, 0xa0, 0x3d, 0x98, + 0x96, 0x62, 0x80, 0x84, 0x8a, 0x05, 0xf7, 0x5c, 0x2f, 0xd9, 0xc2, 0x24, 0x3e, 0x7b, 0x7c, 0x54, + 0x99, 0xc6, 0x29, 0x32, 0xb8, 0x8b, 0x30, 0x15, 0xcb, 0xf6, 0xe9, 0xd1, 0x5a, 0x62, 0xc3, 0xcf, + 0xc4, 0x32, 0x26, 0x61, 0xb2, 0x52, 0xfb, 0x67, 0x2c, 0x78, 0xbc, 0x6b, 0x64, 0x84, 0xa4, 0x7d, + 0xc6, 0xb3, 0x90, 0x96, 0x7c, 0x0b, 0xfd, 0x25, 0x5f, 0xfb, 0x1f, 0x5b, 0x30, 0xbb, 0xba, 0xdf, + 0x8e, 0x0f, 0xab, 0xae, 0xf9, 0x0c, 0xf3, 0x1a, 0x0c, 0xef, 0x93, 0x96, 0xdb, 0xd9, 0x17, 0x33, + 0x57, 0x91, 0xc7, 0xcf, 0x3a, 0x2b, 0x3d, 0x39, 0xaa, 0x4c, 0x34, 0xe2, 0x20, 0x74, 0x76, 0x08, + 0x2f, 0xc0, 0x02, 0x9d, 0x1d, 0xe2, 0xee, 0x07, 0xe4, 0xb6, 0xbb, 0xef, 0x4a, 0xcb, 0x80, 0x9e, + 0xba, 0xb3, 0x05, 0x39, 0xa0, 0x0b, 0x6f, 0x77, 0x1c, 0x3f, 0x76, 0xe3, 0x43, 0xf1, 0xc2, 0x24, + 0x89, 0xe0, 0x84, 0x9e, 0xfd, 0x2d, 0x0b, 0xa6, 0xe4, 0xba, 0x5f, 0x6a, 0xb5, 0x42, 0x12, 0x45, + 0x68, 0x1e, 0x0a, 0x6e, 0x5b, 0xf4, 0x12, 0x44, 0x2f, 0x0b, 0xb5, 0x3a, 0x2e, 0xb8, 0x6d, 0x54, + 0x87, 0x32, 0x37, 0x30, 0x48, 0x16, 0xd7, 0x40, 0x66, 0x0a, 0xac, 0x07, 0x9b, 0xb2, 0x26, 0x4e, + 0x88, 0x48, 0x0e, 0x8e, 0x9d, 0x99, 0x45, 0xf3, 0x79, 0xea, 0xa6, 0x28, 0xc7, 0x0a, 0x03, 0x5d, + 0x83, 0x51, 0x3f, 0x68, 0x71, 0x7b, 0x0f, 0x7e, 0xfb, 0xb1, 0x25, 0xbb, 0x21, 0xca, 0xb0, 0x82, + 0xda, 0x3f, 0x66, 0xc1, 0xb8, 0xfc, 0xb2, 0x01, 0x99, 0x49, 0xba, 0xb5, 0x12, 0x46, 0x32, 0xd9, + 0x5a, 0x94, 0x19, 0x64, 0x10, 0x83, 0x07, 0x2c, 0x9e, 0x86, 0x07, 0xb4, 0x7f, 0xba, 0x00, 0x93, + 0xb2, 0x3b, 0x8d, 0xce, 0x56, 0x44, 0x62, 0xb4, 0x09, 0x65, 0x87, 0x0f, 0x39, 0x91, 0x2b, 0xf6, + 0x99, 0x6c, 0xe1, 0xc3, 0x98, 0x9f, 0xe4, 0x5a, 0x5e, 0x92, 0xb5, 0x71, 0x42, 0x08, 0x79, 0x30, + 0xe3, 0x07, 0x31, 0x3b, 0xa2, 0x15, 0xbc, 0xd7, 0x13, 0x48, 0x9a, 0xfa, 0x25, 0x41, 0x7d, 0x66, + 0x23, 0x4d, 0x05, 0x77, 0x13, 0x46, 0xab, 0x52, 0xe1, 0x51, 0xcc, 0x17, 0x37, 0xf4, 0x59, 0xc8, + 0xd6, 0x77, 0xd8, 0xbf, 0x61, 0x41, 0x59, 0xa2, 0x9d, 0xc7, 0x6b, 0xd7, 0x3a, 0x8c, 0x44, 0x6c, + 0x12, 0xe4, 0xd0, 0xd8, 0xbd, 0x3a, 0xce, 0xe7, 0x2b, 0xb9, 0x79, 0xf8, 0xff, 0x08, 0x4b, 0x1a, + 0x4c, 0xdf, 0xad, 0xba, 0xff, 0x31, 0xd1, 0x77, 0xab, 0xfe, 0xe4, 0xdc, 0x30, 0xff, 0x8d, 0xf5, + 0x59, 0x13, 0x6b, 0x29, 0x83, 0xd4, 0x0e, 0xc9, 0xb6, 0xfb, 0x20, 0xcd, 0x20, 0xd5, 0x59, 0x29, + 0x16, 0x50, 0xf4, 0x2e, 0x8c, 0x37, 0xa5, 0xa2, 0x33, 0x39, 0x06, 0xae, 0xf6, 0x54, 0xba, 0xab, + 0xf7, 0x19, 0x6e, 0x0b, 0xba, 0xa2, 0xd5, 0xc7, 0x06, 0x35, 0xd3, 0x06, 0xa1, 0xd8, 0xcf, 0x06, + 0x21, 0xa1, 0x9b, 0xfb, 0x8a, 0x6e, 0xff, 0xac, 0x05, 0xc3, 0x5c, 0x5d, 0x36, 0x98, 0x7e, 0x51, + 0x7b, 0xae, 0x4a, 0xc6, 0xee, 0x1e, 0x2d, 0x14, 0xcf, 0x4f, 0x68, 0x1d, 0xca, 0xec, 0x07, 0x53, + 0x1b, 0x14, 0xf3, 0x8d, 0x60, 0x79, 0xab, 0x7a, 0x07, 0xef, 0xc9, 0x6a, 0x38, 0xa1, 0x60, 0xff, + 0x44, 0x91, 0x1e, 0x55, 0x09, 0xaa, 0x71, 0x83, 0x5b, 0x8f, 0xee, 0x06, 0x2f, 0x3c, 0xaa, 0x1b, + 0x7c, 0x07, 0xa6, 0x9a, 0xda, 0xe3, 0x56, 0x32, 0x93, 0xd7, 0x7a, 0x2e, 0x12, 0xed, 0x1d, 0x8c, + 0xab, 0x8c, 0x56, 0x4c, 0x22, 0x38, 0x4d, 0x15, 0x7d, 0x0f, 0x8c, 0xf3, 0x79, 0x16, 0xad, 0x94, + 0x58, 0x2b, 0x9f, 0xca, 0x5f, 0x2f, 0x7a, 0x13, 0x6c, 0x25, 0x36, 0xb4, 0xea, 0xd8, 0x20, 0x66, + 0xff, 0xda, 0x28, 0x0c, 0xad, 0x1e, 0x10, 0x3f, 0x3e, 0x87, 0x03, 0xa9, 0x09, 0x93, 0xae, 0x7f, + 0x10, 0x78, 0x07, 0xa4, 0xc5, 0xe1, 0xa7, 0xb9, 0x5c, 0x1f, 0x13, 0xa4, 0x27, 0x6b, 0x06, 0x09, + 0x9c, 0x22, 0xf9, 0x28, 0x24, 0xcc, 0x1b, 0x30, 0xcc, 0xe7, 0x5e, 0x88, 0x97, 0x99, 0xca, 0x60, + 0x36, 0x88, 0x62, 0x17, 0x24, 0xd2, 0x2f, 0xd7, 0x3e, 0x8b, 0xea, 0xe8, 0x3d, 0x98, 0xdc, 0x76, + 0xc3, 0x28, 0xa6, 0xa2, 0x61, 0x14, 0x3b, 0xfb, 0xed, 0x87, 0x90, 0x28, 0xd5, 0x38, 0xac, 0x19, + 0x94, 0x70, 0x8a, 0x32, 0xda, 0x81, 0x09, 0x2a, 0xe4, 0x24, 0x4d, 0x8d, 0x9c, 0xba, 0x29, 0xa5, + 0x32, 0xba, 0xad, 0x13, 0xc2, 0x26, 0x5d, 0x7a, 0x98, 0x34, 0x99, 0x50, 0x34, 0xca, 0x38, 0x0a, + 0x75, 0x98, 0x70, 0x69, 0x88, 0xc3, 0xe8, 0x99, 0xc4, 0xcc, 0x56, 0xca, 0xe6, 0x99, 0xa4, 0x19, + 0xa7, 0x7c, 0x05, 0xca, 0x84, 0x0e, 0x21, 0x25, 0x2c, 0x14, 0xe3, 0x8b, 0x83, 0xf5, 0x75, 0xdd, + 0x6d, 0x86, 0x81, 0x29, 0xcb, 0xaf, 0x4a, 0x4a, 0x38, 0x21, 0x8a, 0x56, 0x60, 0x38, 0x22, 0xa1, + 0x4b, 0x22, 0xa1, 0x22, 0xef, 0x31, 0x8d, 0x0c, 0x8d, 0x5b, 0x4b, 0xf3, 0xdf, 0x58, 0x54, 0xa5, + 0xcb, 0xcb, 0x61, 0xd2, 0x10, 0xd3, 0x8a, 0x6b, 0xcb, 0x6b, 0x89, 0x95, 0x62, 0x01, 0x45, 0x6f, + 0xc1, 0x48, 0x48, 0x3c, 0xa6, 0x2c, 0x9a, 0x18, 0x7c, 0x91, 0x73, 0xdd, 0x13, 0xaf, 0x87, 0x25, + 0x01, 0x74, 0x0b, 0x50, 0x48, 0x28, 0x0f, 0xe1, 0xfa, 0x3b, 0xca, 0x98, 0x43, 0xe8, 0xba, 0x9f, + 0x10, 0xed, 0x5f, 0xc0, 0x09, 0x86, 0xb4, 0xa3, 0xc4, 0x19, 0xd5, 0xd0, 0x0d, 0x98, 0x51, 0xa5, + 0x35, 0x3f, 0x8a, 0x1d, 0xbf, 0x49, 0x98, 0x9a, 0xbb, 0x9c, 0x70, 0x45, 0x38, 0x8d, 0x80, 0xbb, + 0xeb, 0xd8, 0x5f, 0xa7, 0xec, 0x0c, 0x1d, 0xad, 0x73, 0xe0, 0x05, 0xde, 0x34, 0x79, 0x81, 0x4b, + 0xb9, 0x33, 0x97, 0xc3, 0x07, 0x1c, 0x5b, 0x30, 0xa6, 0xcd, 0x6c, 0xb2, 0x66, 0xad, 0x1e, 0x6b, + 0xb6, 0x03, 0xd3, 0x74, 0xa5, 0xdf, 0xd9, 0x62, 0x8e, 0x43, 0x2d, 0xb6, 0x30, 0x0b, 0x0f, 0xb7, + 0x30, 0xd5, 0x2b, 0xf3, 0xed, 0x14, 0x41, 0xdc, 0xd5, 0x04, 0x7a, 0x4d, 0x6a, 0x4e, 0x8a, 0x86, + 0x91, 0x16, 0xd7, 0x8a, 0x9c, 0x1c, 0x55, 0xa6, 0xb5, 0x0f, 0xd1, 0x35, 0x25, 0xf6, 0x57, 0xe4, + 0x37, 0xaa, 0xd7, 0xfc, 0xa6, 0x5a, 0x2c, 0xa9, 0xd7, 0x7c, 0xb5, 0x1c, 0x70, 0x82, 0x43, 0xf7, + 0x28, 0x15, 0x41, 0xd2, 0xaf, 0xf9, 0x54, 0x40, 0xc1, 0x0c, 0x62, 0xbf, 0x0c, 0xb0, 0xfa, 0x80, + 0x34, 0xf9, 0x52, 0xd7, 0x1f, 0x20, 0xad, 0xfc, 0x07, 0x48, 0xfb, 0x3f, 0x59, 0x30, 0xb9, 0xb6, + 0x62, 0x88, 0x89, 0x0b, 0x00, 0x5c, 0x36, 0x7a, 0xe7, 0x9d, 0x0d, 0xa9, 0x5b, 0xe7, 0xea, 0x51, + 0x55, 0x8a, 0x35, 0x0c, 0x74, 0x09, 0x8a, 0x5e, 0xc7, 0x17, 0x22, 0xcb, 0xc8, 0xf1, 0x51, 0xa5, + 0x78, 0xbb, 0xe3, 0x63, 0x5a, 0xa6, 0x99, 0xf2, 0x15, 0x07, 0x36, 0xe5, 0xeb, 0xeb, 0x10, 0x84, + 0x2a, 0x30, 0x74, 0xff, 0xbe, 0xdb, 0xe2, 0x66, 0xd7, 0x42, 0xef, 0xff, 0xce, 0x3b, 0xb5, 0x6a, + 0x84, 0x79, 0xb9, 0xfd, 0xb5, 0x22, 0xcc, 0xaf, 0x79, 0xe4, 0xc1, 0x87, 0x34, 0x3d, 0x1f, 0xd4, + 0x10, 0xf1, 0x74, 0xfc, 0xe2, 0x69, 0xad, 0x2e, 0xfb, 0x8f, 0xc7, 0x36, 0x8c, 0xf0, 0xc7, 0x6c, + 0x69, 0x88, 0xfe, 0x46, 0x56, 0xeb, 0xf9, 0x03, 0xb2, 0xc0, 0x1f, 0xc5, 0x85, 0x01, 0xba, 0xba, + 0x69, 0x45, 0x29, 0x96, 0xc4, 0xe7, 0x3f, 0x0b, 0xe3, 0x3a, 0xe6, 0xa9, 0xec, 0x9f, 0xff, 0xff, + 0x22, 0x4c, 0xd3, 0x1e, 0x3c, 0xd2, 0x89, 0xb8, 0xdb, 0x3d, 0x11, 0x67, 0x6d, 0x03, 0xdb, 0x7f, + 0x36, 0xde, 0x4d, 0xcf, 0xc6, 0x4b, 0x79, 0xb3, 0x71, 0xde, 0x73, 0xf0, 0x83, 0x16, 0x5c, 0x58, + 0xf3, 0x82, 0xe6, 0x5e, 0xca, 0x3c, 0xf7, 0x55, 0x18, 0xa3, 0xe7, 0x78, 0x64, 0xf8, 0xbd, 0x18, + 0x9e, 0x50, 0x02, 0x84, 0x75, 0x3c, 0xad, 0xda, 0xdd, 0xbb, 0xb5, 0x6a, 0x96, 0x03, 0x95, 0x00, + 0x61, 0x1d, 0xcf, 0xfe, 0x1d, 0x0b, 0x9e, 0xba, 0xb1, 0xb2, 0x9a, 0x2c, 0xc5, 0x2e, 0x1f, 0x2e, + 0x2a, 0x05, 0xb6, 0xb4, 0xae, 0x24, 0x52, 0x60, 0x95, 0xf5, 0x42, 0x40, 0x3f, 0x2e, 0xfe, 0x89, + 0xbf, 0x60, 0xc1, 0x85, 0x1b, 0x6e, 0x4c, 0xaf, 0xe5, 0xb4, 0x37, 0x11, 0xbd, 0x97, 0x23, 0x37, + 0x0e, 0xc2, 0xc3, 0xb4, 0x37, 0x11, 0x56, 0x10, 0xac, 0x61, 0xf1, 0x96, 0x0f, 0x5c, 0x66, 0x46, + 0x55, 0x30, 0x55, 0x51, 0x58, 0x94, 0x63, 0x85, 0x41, 0x3f, 0xac, 0xe5, 0x86, 0x4c, 0x94, 0x38, + 0x14, 0x27, 0xac, 0xfa, 0xb0, 0xaa, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x19, 0x0b, 0x2e, 0xde, 0xf0, + 0x3a, 0x51, 0x4c, 0xc2, 0xed, 0xc8, 0xe8, 0xec, 0xcb, 0x50, 0x26, 0x52, 0x5c, 0x17, 0x7d, 0x55, + 0x0c, 0xa6, 0x92, 0xe3, 0xb9, 0x2b, 0x93, 0xc2, 0x1b, 0xc0, 0xd6, 0xfd, 0x74, 0x36, 0xda, 0xbf, + 0x5c, 0x80, 0x89, 0x9b, 0x9b, 0x9b, 0xf5, 0x1b, 0x24, 0x16, 0xb7, 0x58, 0x7f, 0x55, 0x33, 0xd6, + 0x34, 0x66, 0xbd, 0x84, 0xa2, 0x4e, 0xec, 0x7a, 0x0b, 0xdc, 0x77, 0x76, 0xa1, 0xe6, 0xc7, 0x77, + 0xc2, 0x46, 0x1c, 0xba, 0xfe, 0x4e, 0xa6, 0x8e, 0x4d, 0xde, 0xb5, 0xc5, 0xbc, 0xbb, 0x16, 0xbd, + 0x0c, 0xc3, 0xcc, 0x79, 0x57, 0x8a, 0x27, 0x4f, 0x28, 0x99, 0x82, 0x95, 0x9e, 0x1c, 0x55, 0xca, + 0x77, 0x71, 0x8d, 0xff, 0xc1, 0x02, 0x15, 0xdd, 0x85, 0xb1, 0xdd, 0x38, 0x6e, 0xdf, 0x24, 0x4e, + 0x8b, 0x84, 0xf2, 0x74, 0xb8, 0x9c, 0x75, 0x3a, 0xd0, 0x41, 0xe0, 0x68, 0xc9, 0x86, 0x4a, 0xca, + 0x22, 0xac, 0xd3, 0xb1, 0x1b, 0x00, 0x09, 0xec, 0x8c, 0xf4, 0x0b, 0xf6, 0x1f, 0x59, 0x30, 0xc2, + 0xfd, 0xa8, 0x42, 0xf4, 0x39, 0x28, 0x91, 0x07, 0xa4, 0x29, 0x38, 0xc7, 0xcc, 0x0e, 0x27, 0x8c, + 0x07, 0xd7, 0x96, 0xd3, 0xff, 0x98, 0xd5, 0x42, 0x37, 0x61, 0x84, 0xf6, 0xf6, 0x86, 0x72, 0x2a, + 0x7b, 0x3a, 0xef, 0x8b, 0xd5, 0xb4, 0x73, 0x5e, 0x45, 0x14, 0x61, 0x59, 0x9d, 0x69, 0x7e, 0x9b, + 0xed, 0x06, 0x3d, 0xc0, 0xe2, 0x5e, 0xf7, 0xec, 0xe6, 0x4a, 0x9d, 0x23, 0x09, 0x6a, 0x5c, 0xf3, + 0x2b, 0x0b, 0x71, 0x42, 0xc4, 0xde, 0x84, 0x32, 0x9d, 0xd4, 0x25, 0xcf, 0x75, 0x7a, 0x2b, 0x9d, + 0x9f, 0x87, 0xb2, 0x54, 0x00, 0x47, 0xc2, 0x15, 0x87, 0x51, 0x95, 0xfa, 0xe1, 0x08, 0x27, 0x70, + 0x7b, 0x1b, 0x66, 0xd9, 0xcb, 0xbf, 0x13, 0xef, 0x1a, 0x7b, 0xac, 0xff, 0x62, 0x7e, 0x41, 0x08, + 0x62, 0x7c, 0x66, 0xe6, 0x34, 0xdf, 0x81, 0x71, 0x49, 0x31, 0x11, 0xca, 0xec, 0x3f, 0x29, 0xc1, + 0x13, 0xb5, 0x46, 0xbe, 0x8b, 0xdd, 0xeb, 0x30, 0xce, 0xd9, 0x34, 0xba, 0xb4, 0x1d, 0x4f, 0xb4, + 0xab, 0xde, 0xc5, 0x36, 0x35, 0x18, 0x36, 0x30, 0xd1, 0x53, 0x50, 0x74, 0xdf, 0xf7, 0xd3, 0x66, + 0xb8, 0xb5, 0xb7, 0x37, 0x30, 0x2d, 0xa7, 0x60, 0xca, 0xf1, 0xf1, 0xa3, 0x54, 0x81, 0x15, 0xd7, + 0xf7, 0x26, 0x4c, 0xba, 0x51, 0x33, 0x72, 0x6b, 0x3e, 0x3d, 0x67, 0x12, 0xf7, 0xcc, 0x44, 0x49, + 0x40, 0x3b, 0xad, 0xa0, 0x38, 0x85, 0xad, 0x9d, 0xeb, 0x43, 0x03, 0x73, 0x8d, 0x7d, 0x7d, 0x53, + 0x28, 0x43, 0xdc, 0x66, 0x5f, 0x17, 0x31, 0xa3, 0x36, 0xc1, 0x10, 0xf3, 0x0f, 0x8e, 0xb0, 0x84, + 0x51, 0x09, 0xac, 0xb9, 0xeb, 0xb4, 0x97, 0x3a, 0xf1, 0x6e, 0xd5, 0x8d, 0x9a, 0xc1, 0x01, 0x09, + 0x0f, 0x99, 0xf0, 0x3c, 0x9a, 0x48, 0x60, 0x0a, 0xb0, 0x72, 0x73, 0xa9, 0x4e, 0x31, 0x71, 0x77, + 0x1d, 0x93, 0x2b, 0x84, 0xb3, 0xe0, 0x0a, 0x97, 0x60, 0x4a, 0x36, 0xd3, 0x20, 0x11, 0xbb, 0x23, + 0xc6, 0x58, 0xc7, 0x94, 0xa9, 0xad, 0x28, 0x56, 0xdd, 0x4a, 0xe3, 0xa3, 0xd7, 0x60, 0xc2, 0xf5, + 0xdd, 0xd8, 0x75, 0xe2, 0x20, 0x64, 0x37, 0x2c, 0x97, 0x93, 0x99, 0x25, 0x5b, 0x4d, 0x07, 0x60, + 0x13, 0xcf, 0xfe, 0xe3, 0x12, 0xcc, 0xb0, 0x69, 0xfb, 0xf6, 0x0a, 0xfb, 0xd8, 0xac, 0xb0, 0xbb, + 0xdd, 0x2b, 0xec, 0x2c, 0xd8, 0xdd, 0x8f, 0x72, 0x99, 0xbd, 0x07, 0x65, 0x65, 0x0b, 0x2c, 0x9d, + 0x01, 0xac, 0x1c, 0x67, 0x80, 0xfe, 0xdc, 0x87, 0x7c, 0xc6, 0x2d, 0x66, 0x3e, 0xe3, 0xfe, 0x5d, + 0x0b, 0x12, 0x93, 0x48, 0x74, 0x13, 0xca, 0xed, 0x80, 0x99, 0x1d, 0x84, 0xd2, 0x96, 0xe7, 0x89, + 0xcc, 0x8b, 0x8a, 0x5f, 0x8a, 0x7c, 0xfc, 0xea, 0xb2, 0x06, 0x4e, 0x2a, 0xa3, 0x65, 0x18, 0x69, + 0x87, 0xa4, 0x11, 0x33, 0xa7, 0xcd, 0xbe, 0x74, 0xf8, 0x1a, 0xe1, 0xf8, 0x58, 0x56, 0xb4, 0x7f, + 0xc5, 0x02, 0xe0, 0x2f, 0xa5, 0x8e, 0xbf, 0x43, 0xce, 0x41, 0xfb, 0x5b, 0x85, 0x52, 0xd4, 0x26, + 0xcd, 0x5e, 0x06, 0x21, 0x49, 0x7f, 0x1a, 0x6d, 0xd2, 0x4c, 0x06, 0x9c, 0xfe, 0xc3, 0xac, 0xb6, + 0xfd, 0xd7, 0x00, 0x26, 0x13, 0xb4, 0x5a, 0x4c, 0xf6, 0xd1, 0x8b, 0x86, 0x4b, 0xdc, 0xa5, 0x94, + 0x4b, 0x5c, 0x99, 0x61, 0x6b, 0x8a, 0xc6, 0xf7, 0xa0, 0xb8, 0xef, 0x3c, 0x10, 0x9a, 0xa4, 0xe7, + 0x7b, 0x77, 0x83, 0xd2, 0x5f, 0x58, 0x77, 0x1e, 0x70, 0x99, 0xe9, 0x79, 0xb9, 0x40, 0xd6, 0x9d, + 0x07, 0x27, 0xdc, 0xec, 0x83, 0x1d, 0x52, 0xb7, 0xdd, 0x28, 0xfe, 0xea, 0x7f, 0x49, 0xfe, 0xb3, + 0x65, 0x47, 0x1b, 0x61, 0x6d, 0xb9, 0xbe, 0x78, 0x37, 0x1c, 0xa8, 0x2d, 0xd7, 0x4f, 0xb7, 0xe5, + 0xfa, 0x03, 0xb4, 0xe5, 0xfa, 0xe8, 0x03, 0x18, 0x11, 0x6f, 0xf4, 0xcc, 0xd6, 0xdb, 0xd4, 0x52, + 0xe5, 0xb5, 0x27, 0x9e, 0xf8, 0x79, 0x9b, 0x8b, 0x52, 0x26, 0x14, 0xa5, 0x7d, 0xdb, 0x95, 0x0d, + 0xa2, 0xbf, 0x6d, 0xc1, 0xa4, 0xf8, 0x8d, 0xc9, 0xfb, 0x1d, 0x12, 0xc5, 0x82, 0xf7, 0xfc, 0xcc, + 0xe0, 0x7d, 0x10, 0x15, 0x79, 0x57, 0x3e, 0x23, 0x8f, 0x59, 0x13, 0xd8, 0xb7, 0x47, 0xa9, 0x5e, + 0xa0, 0x7f, 0x6a, 0xc1, 0xec, 0xbe, 0xf3, 0x80, 0xb7, 0xc8, 0xcb, 0xb0, 0x13, 0xbb, 0x81, 0xb0, + 0x5d, 0xff, 0xdc, 0x60, 0xd3, 0xdf, 0x55, 0x9d, 0x77, 0x52, 0x9a, 0xb9, 0xce, 0x66, 0xa1, 0xf4, + 0xed, 0x6a, 0x66, 0xbf, 0xe6, 0xb7, 0x61, 0x54, 0xae, 0xb7, 0x0c, 0xc9, 0xbb, 0xaa, 0x33, 0xd6, + 0xa7, 0x36, 0x91, 0xd0, 0xfd, 0xd2, 0x68, 0x3b, 0x62, 0xad, 0x3d, 0xd2, 0x76, 0xde, 0x83, 0x71, + 0x7d, 0x8d, 0x3d, 0xd2, 0xb6, 0xde, 0x87, 0x0b, 0x19, 0x6b, 0xe9, 0x91, 0x36, 0x79, 0x1f, 0x2e, + 0xe5, 0xae, 0x8f, 0x47, 0xd9, 0xb0, 0xfd, 0xcb, 0x96, 0x7e, 0x0e, 0x9e, 0x83, 0x0a, 0x7e, 0xc5, + 0x54, 0xc1, 0x5f, 0xee, 0xbd, 0x73, 0x72, 0xf4, 0xf0, 0xef, 0xea, 0x9d, 0xa6, 0xa7, 0x3a, 0x7a, + 0x0b, 0x86, 0x3d, 0x5a, 0x22, 0x8d, 0x43, 0xec, 0xfe, 0x3b, 0x32, 0xe1, 0xa5, 0x58, 0x79, 0x84, + 0x05, 0x05, 0xfb, 0xd7, 0x2d, 0x28, 0x9d, 0xc3, 0x48, 0x60, 0x73, 0x24, 0x5e, 0xcc, 0x25, 0x2d, + 0x82, 0x70, 0x2d, 0x60, 0xe7, 0xfe, 0xaa, 0x0c, 0x34, 0x96, 0x33, 0x30, 0xdf, 0x07, 0x17, 0x6e, + 0x07, 0x4e, 0x6b, 0xd9, 0xf1, 0x1c, 0xbf, 0x49, 0xc2, 0x9a, 0xbf, 0xd3, 0xd7, 0x4a, 0x49, 0xb7, + 0x29, 0x2a, 0xf4, 0xb3, 0x29, 0xb2, 0x77, 0x01, 0xe9, 0x0d, 0x08, 0x3b, 0x4e, 0x0c, 0x23, 0x2e, + 0x6f, 0x4a, 0x0c, 0xff, 0xb3, 0xd9, 0xdc, 0x5d, 0x57, 0xcf, 0x34, 0x0b, 0x45, 0x5e, 0x80, 0x25, + 0x21, 0xfb, 0x75, 0xc8, 0xf4, 0xdd, 0xea, 0xaf, 0x36, 0xb0, 0x5f, 0x85, 0x19, 0x56, 0xf3, 0x74, + 0x22, 0xad, 0xfd, 0x23, 0x16, 0x4c, 0x6d, 0xa4, 0xa2, 0x29, 0x5c, 0x65, 0x6f, 0x7d, 0x19, 0x7a, + 0xdf, 0x06, 0x2b, 0xc5, 0x02, 0x7a, 0xe6, 0xfa, 0xa5, 0xbf, 0xb0, 0x20, 0x71, 0x95, 0x3c, 0x07, + 0xa6, 0x6a, 0xc5, 0x60, 0xaa, 0x32, 0xf5, 0x1e, 0xaa, 0x3b, 0x79, 0x3c, 0x15, 0xba, 0xa5, 0xe2, + 0x02, 0xf4, 0x50, 0x79, 0x24, 0x64, 0xb8, 0x17, 0xf9, 0xa4, 0x19, 0x3c, 0x40, 0x46, 0x0a, 0x60, + 0x66, 0x42, 0x0a, 0xf7, 0x63, 0x62, 0x26, 0xa4, 0xfa, 0x93, 0xb3, 0xfb, 0xea, 0x5a, 0x97, 0xd9, + 0xa9, 0xf4, 0x5d, 0xcc, 0xec, 0xdb, 0xf1, 0xdc, 0x0f, 0x88, 0x0a, 0xc7, 0x51, 0x11, 0x66, 0xdc, + 0xa2, 0xf4, 0xe4, 0xa8, 0x32, 0xa1, 0xfe, 0xf1, 0x98, 0x4d, 0x49, 0x15, 0xfb, 0x26, 0x4c, 0xa5, + 0x06, 0x0c, 0xbd, 0x0a, 0x43, 0xed, 0x5d, 0x27, 0x22, 0x29, 0xd3, 0xc8, 0xa1, 0x3a, 0x2d, 0x3c, + 0x39, 0xaa, 0x4c, 0xaa, 0x0a, 0xac, 0x04, 0x73, 0x6c, 0xfb, 0x7f, 0x5a, 0x50, 0xda, 0x08, 0x5a, + 0xe7, 0xb1, 0x98, 0xde, 0x34, 0x16, 0xd3, 0x93, 0x79, 0x11, 0xef, 0x72, 0xd7, 0xd1, 0x5a, 0x6a, + 0x1d, 0x5d, 0xce, 0xa5, 0xd0, 0x7b, 0x09, 0xed, 0xc3, 0x18, 0x8b, 0xa3, 0x27, 0x4c, 0x35, 0x5f, + 0x36, 0xf8, 0xfb, 0x4a, 0x8a, 0xbf, 0x9f, 0xd2, 0x50, 0x35, 0x2e, 0xff, 0x39, 0x18, 0x11, 0xe6, + 0x82, 0x69, 0x03, 0x77, 0x81, 0x8b, 0x25, 0xdc, 0xfe, 0xd9, 0x22, 0x18, 0x71, 0xfb, 0xd0, 0x6f, + 0x58, 0xb0, 0x10, 0x72, 0x8f, 0xc1, 0x56, 0xb5, 0x13, 0xba, 0xfe, 0x4e, 0xa3, 0xb9, 0x4b, 0x5a, + 0x1d, 0xcf, 0xf5, 0x77, 0x6a, 0x3b, 0x7e, 0xa0, 0x8a, 0x57, 0x1f, 0x90, 0x66, 0x87, 0xe9, 0xfc, + 0xfb, 0x04, 0x09, 0x54, 0xe6, 0x38, 0xd7, 0x8f, 0x8f, 0x2a, 0x0b, 0xf8, 0x54, 0xb4, 0xf1, 0x29, + 0xfb, 0x82, 0x7e, 0xc7, 0x82, 0x45, 0x1e, 0xce, 0x6e, 0xf0, 0xfe, 0xf7, 0x90, 0x86, 0xea, 0x92, + 0x54, 0x42, 0x64, 0x93, 0x84, 0xfb, 0xcb, 0xaf, 0x89, 0x01, 0x5d, 0xac, 0x9f, 0xae, 0x2d, 0x7c, + 0xda, 0xce, 0xd9, 0xff, 0xa6, 0x08, 0x13, 0xc2, 0x59, 0x5d, 0x44, 0x41, 0x79, 0xd5, 0x58, 0x12, + 0x4f, 0xa7, 0x96, 0xc4, 0x8c, 0x81, 0x7c, 0x36, 0x01, 0x50, 0x22, 0x98, 0xf1, 0x9c, 0x28, 0xbe, + 0x49, 0x9c, 0x30, 0xde, 0x22, 0x0e, 0x37, 0x53, 0x29, 0x9e, 0xda, 0xa4, 0x46, 0xa9, 0x5f, 0x6e, + 0xa7, 0x89, 0xe1, 0x6e, 0xfa, 0xe8, 0x00, 0x10, 0xb3, 0xb5, 0x09, 0x1d, 0x3f, 0xe2, 0xdf, 0xe2, + 0x8a, 0xf7, 0x80, 0xd3, 0xb5, 0x3a, 0x2f, 0x5a, 0x45, 0xb7, 0xbb, 0xa8, 0xe1, 0x8c, 0x16, 0x34, + 0x1b, 0xaa, 0xa1, 0x41, 0x6d, 0xa8, 0x86, 0xfb, 0x78, 0x91, 0xf8, 0x30, 0xdd, 0x15, 0x6f, 0xe0, + 0x4b, 0x50, 0x56, 0xb6, 0x6e, 0xe2, 0xd0, 0xe9, 0x1d, 0xb6, 0x23, 0x4d, 0x81, 0xab, 0x48, 0x12, + 0x3b, 0xcb, 0x84, 0x9c, 0xfd, 0xfd, 0x70, 0x81, 0x62, 0x9b, 0x4e, 0x0f, 0x11, 0x22, 0x30, 0x25, + 0xdc, 0xfa, 0x65, 0x99, 0xd8, 0xba, 0x99, 0x7c, 0xa7, 0x59, 0x3b, 0xd1, 0x4e, 0xdd, 0x32, 0x49, + 0xe0, 0x34, 0x4d, 0xfb, 0xe7, 0x2d, 0x60, 0xe6, 0xda, 0xe7, 0x70, 0xff, 0x7d, 0xde, 0xbc, 0xff, + 0xe6, 0xf2, 0x8e, 0xa0, 0x9c, 0xab, 0xef, 0x15, 0x3e, 0x2f, 0xf5, 0x30, 0x78, 0x70, 0x28, 0x9e, + 0x7d, 0x07, 0x60, 0xb9, 0xfe, 0x8f, 0xc5, 0x77, 0xa4, 0xf2, 0xa0, 0x46, 0x3f, 0x00, 0xa3, 0x4d, + 0xa7, 0xed, 0x34, 0x79, 0xc4, 0xd4, 0x5c, 0xf5, 0x83, 0x51, 0x69, 0x61, 0x45, 0xd4, 0xe0, 0xe2, + 0xb4, 0x0c, 0x0f, 0x31, 0x2a, 0x8b, 0xfb, 0x8a, 0xd0, 0xaa, 0xc9, 0xf9, 0x3d, 0x98, 0x30, 0x88, + 0x3d, 0x52, 0xd9, 0xeb, 0x07, 0xf8, 0x7d, 0xa1, 0xc2, 0x99, 0xec, 0xc3, 0x8c, 0xaf, 0xfd, 0xa7, + 0xa7, 0xa3, 0xe4, 0xa7, 0x3f, 0xd9, 0xef, 0x46, 0x60, 0x47, 0xa9, 0x66, 0x8e, 0x9e, 0x22, 0x83, + 0xbb, 0x29, 0xdb, 0x7f, 0xdf, 0x82, 0xc7, 0x75, 0x44, 0xcd, 0xb9, 0xbd, 0x9f, 0x42, 0xb3, 0x0a, + 0xa3, 0x41, 0x9b, 0x84, 0x4e, 0x1c, 0x84, 0xe2, 0x08, 0xbc, 0x26, 0x07, 0xfd, 0x8e, 0x28, 0x3f, + 0x11, 0xa1, 0xeb, 0x24, 0x75, 0x59, 0x8e, 0x55, 0x4d, 0x64, 0xc3, 0x30, 0x1b, 0x8c, 0x48, 0x04, + 0x1e, 0x60, 0x76, 0x72, 0xec, 0x6d, 0x2f, 0xc2, 0x02, 0x62, 0xff, 0x89, 0xc5, 0x17, 0x96, 0xde, + 0x75, 0xf4, 0x3e, 0x4c, 0xef, 0x3b, 0x71, 0x73, 0x77, 0xf5, 0x41, 0x3b, 0xe4, 0x7a, 0x5c, 0x39, + 0x4e, 0xcf, 0xf7, 0x1b, 0x27, 0xed, 0x23, 0x13, 0x6b, 0xaa, 0xf5, 0x14, 0x31, 0xdc, 0x45, 0x1e, + 0x6d, 0xc1, 0x18, 0x2b, 0x63, 0x66, 0xbb, 0x51, 0xaf, 0x7b, 0x2e, 0xaf, 0x35, 0xf5, 0x3c, 0xba, + 0x9e, 0xd0, 0xc1, 0x3a, 0x51, 0xfb, 0xab, 0x45, 0xbe, 0xdb, 0x19, 0xeb, 0xf8, 0x1c, 0x8c, 0xb4, + 0x83, 0xd6, 0x4a, 0xad, 0x8a, 0xc5, 0x2c, 0xa8, 0x33, 0xb1, 0xce, 0x8b, 0xb1, 0x84, 0xa3, 0x37, + 0x00, 0xc8, 0x83, 0x98, 0x84, 0xbe, 0xe3, 0x29, 0xeb, 0x06, 0x65, 0xcf, 0x57, 0x0d, 0x36, 0x82, + 0xf8, 0x6e, 0x44, 0xbe, 0x6f, 0x55, 0xa1, 0x60, 0x0d, 0x1d, 0x5d, 0x07, 0x68, 0x87, 0xc1, 0x81, + 0xdb, 0x62, 0x7e, 0x60, 0x45, 0xf3, 0xed, 0xbf, 0xae, 0x20, 0x58, 0xc3, 0x42, 0x6f, 0xc0, 0x44, + 0xc7, 0x8f, 0xf8, 0x75, 0xeb, 0x6c, 0x89, 0xc0, 0x6f, 0xa3, 0xc9, 0x33, 0xfc, 0x5d, 0x1d, 0x88, + 0x4d, 0x5c, 0xb4, 0x04, 0xc3, 0xb1, 0xc3, 0x1e, 0xef, 0x87, 0xf2, 0x8d, 0xf0, 0x36, 0x29, 0x86, + 0x1e, 0xaf, 0x93, 0x56, 0xc0, 0xa2, 0x22, 0xfa, 0x92, 0x34, 0xaa, 0xe7, 0xc7, 0xb7, 0xb0, 0x7e, + 0xcd, 0xdd, 0x23, 0xc6, 0x51, 0xaf, 0x99, 0xd4, 0x0b, 0xab, 0x5a, 0x83, 0x96, 0xfd, 0x43, 0x65, + 0x80, 0x84, 0xb7, 0x44, 0x1f, 0x74, 0x9d, 0x47, 0x2f, 0xf4, 0xe6, 0x46, 0xcf, 0xee, 0x30, 0x42, + 0x3f, 0x6c, 0xc1, 0x98, 0xe3, 0x79, 0x41, 0xd3, 0x89, 0xd9, 0x28, 0x17, 0x7a, 0x9f, 0x87, 0xa2, + 0xfd, 0xa5, 0xa4, 0x06, 0xef, 0xc2, 0xcb, 0x72, 0xe1, 0x69, 0x90, 0xbe, 0xbd, 0xd0, 0x1b, 0x46, + 0xdf, 0x21, 0x45, 0x0e, 0xbe, 0x3c, 0xe6, 0xd3, 0x22, 0x47, 0x99, 0x1d, 0xfd, 0x9a, 0xb4, 0x81, + 0xee, 0x1a, 0x11, 0xd2, 0x4a, 0xf9, 0xc1, 0x02, 0x0c, 0x16, 0xab, 0x5f, 0x70, 0x34, 0x54, 0xd7, + 0xbd, 0x80, 0x86, 0xf2, 0x23, 0x6a, 0x68, 0xbc, 0x7c, 0x1f, 0x0f, 0xa0, 0xf7, 0x60, 0xaa, 0x65, + 0xde, 0xed, 0x62, 0x35, 0x3d, 0x9b, 0x47, 0x37, 0xc5, 0x0a, 0x24, 0xb7, 0x79, 0x0a, 0x80, 0xd3, + 0x84, 0x51, 0x9d, 0xfb, 0x63, 0xd5, 0xfc, 0xed, 0x40, 0x58, 0x51, 0xdb, 0xb9, 0x73, 0x79, 0x18, + 0xc5, 0x64, 0x9f, 0x62, 0x26, 0x97, 0xf6, 0x86, 0xa8, 0x8b, 0x15, 0x15, 0xf4, 0x16, 0x0c, 0x33, + 0x87, 0xce, 0x68, 0x6e, 0x34, 0x5f, 0xeb, 0x65, 0xc6, 0x22, 0x48, 0x36, 0x15, 0xfb, 0x1b, 0x61, + 0x41, 0x01, 0xdd, 0x94, 0x01, 0x4b, 0xa2, 0x9a, 0x7f, 0x37, 0x22, 0x2c, 0x60, 0x49, 0x79, 0xf9, + 0x93, 0x49, 0x2c, 0x12, 0x5e, 0x9e, 0x19, 0x99, 0xdb, 0xa8, 0x49, 0x99, 0x23, 0xf1, 0x5f, 0x06, + 0xfc, 0x9e, 0x83, 0xfc, 0xee, 0x99, 0x41, 0xc1, 0x93, 0xe1, 0xbc, 0x67, 0x92, 0xc0, 0x69, 0x9a, + 0xe7, 0x7a, 0x57, 0xcf, 0xfb, 0x30, 0x9d, 0xde, 0x58, 0x8f, 0x94, 0x37, 0xf8, 0xa3, 0x12, 0x4c, + 0x9a, 0x0b, 0x01, 0x2d, 0x42, 0x59, 0x10, 0x51, 0xc1, 0x29, 0xd5, 0xda, 0x5e, 0x97, 0x00, 0x9c, + 0xe0, 0xb0, 0xe0, 0x9c, 0xac, 0xba, 0x66, 0xf5, 0x96, 0x04, 0xe7, 0x54, 0x10, 0xac, 0x61, 0x51, + 0x96, 0x7d, 0x2b, 0x08, 0x62, 0x75, 0x15, 0xa8, 0xd5, 0xb2, 0xcc, 0x4a, 0xb1, 0x80, 0xd2, 0x2b, + 0x60, 0x8f, 0x84, 0x3e, 0xf1, 0xcc, 0x50, 0x5a, 0xea, 0x0a, 0xb8, 0xa5, 0x03, 0xb1, 0x89, 0x4b, + 0xef, 0xb6, 0x20, 0x62, 0xcb, 0x4f, 0x08, 0x06, 0x89, 0x15, 0x61, 0x83, 0x3b, 0x34, 0x4b, 0x38, + 0xfa, 0x22, 0x3c, 0xae, 0xfc, 0x8f, 0x31, 0xd7, 0x83, 0xca, 0x16, 0x87, 0x0d, 0x39, 0xfe, 0xf1, + 0x95, 0x6c, 0x34, 0x9c, 0x57, 0x1f, 0xbd, 0x09, 0x93, 0x82, 0xdf, 0x96, 0x14, 0x47, 0xcc, 0xa7, + 0xf9, 0x5b, 0x06, 0x14, 0xa7, 0xb0, 0x65, 0x30, 0x30, 0xc6, 0xf2, 0x4a, 0x0a, 0xa3, 0xdd, 0xc1, + 0xc0, 0x74, 0x38, 0xee, 0xaa, 0x81, 0x96, 0x60, 0x8a, 0x33, 0x44, 0x54, 0x82, 0x65, 0xf3, 0x20, + 0x9c, 0x1b, 0xd4, 0x46, 0xb8, 0x63, 0x82, 0x71, 0x1a, 0x1f, 0xbd, 0x0e, 0xe3, 0x4e, 0xd8, 0xdc, + 0x75, 0x63, 0xd2, 0x8c, 0x3b, 0x21, 0xf7, 0x7a, 0xd0, 0x6c, 0x1b, 0x96, 0x34, 0x18, 0x36, 0x30, + 0xed, 0x0f, 0xe0, 0x42, 0x86, 0x5f, 0x14, 0x5d, 0x38, 0x4e, 0xdb, 0x95, 0xdf, 0x94, 0xb2, 0x07, + 0x5c, 0xaa, 0xd7, 0xe4, 0xd7, 0x68, 0x58, 0x74, 0x75, 0x32, 0xff, 0x29, 0x2d, 0x2a, 0xbf, 0x5a, + 0x9d, 0x6b, 0x12, 0x80, 0x13, 0x1c, 0xfb, 0x7f, 0x15, 0x60, 0x2a, 0x43, 0xb7, 0xcb, 0x22, 0xc3, + 0xa7, 0x24, 0x86, 0x24, 0x10, 0xbc, 0x19, 0x5b, 0xae, 0x70, 0x8a, 0xd8, 0x72, 0xc5, 0x7e, 0xb1, + 0xe5, 0x4a, 0x1f, 0x26, 0xb6, 0x9c, 0x39, 0x62, 0x43, 0x03, 0x8d, 0x58, 0x46, 0x3c, 0xba, 0xe1, + 0x53, 0xc6, 0xa3, 0x33, 0x06, 0x7d, 0x64, 0x80, 0x41, 0xff, 0x89, 0x02, 0x4c, 0xa7, 0x6d, 0xb0, + 0xce, 0x41, 0x23, 0xf8, 0x96, 0xa1, 0x11, 0xcc, 0xce, 0xb3, 0x90, 0xb6, 0x0c, 0xcb, 0xd3, 0x0e, + 0xe2, 0x94, 0x76, 0xf0, 0xd3, 0x03, 0x51, 0xeb, 0xad, 0x29, 0xfc, 0x07, 0x05, 0xb8, 0x98, 0xae, + 0xb2, 0xe2, 0x39, 0xee, 0xfe, 0x39, 0x8c, 0xcd, 0x1d, 0x63, 0x6c, 0x5e, 0x1c, 0xe4, 0x6b, 0x58, + 0xd7, 0x72, 0x07, 0xe8, 0x9d, 0xd4, 0x00, 0x2d, 0x0e, 0x4e, 0xb2, 0xf7, 0x28, 0x7d, 0xab, 0x08, + 0x97, 0x33, 0xeb, 0x25, 0x0a, 0xb5, 0x35, 0x43, 0xa1, 0x76, 0x3d, 0xa5, 0x50, 0xb3, 0x7b, 0xd7, + 0x3e, 0x1b, 0x0d, 0x9b, 0x70, 0x58, 0x63, 0xf1, 0xc7, 0x1e, 0x52, 0xbb, 0x66, 0x38, 0xac, 0x29, + 0x42, 0xd8, 0xa4, 0xfb, 0x57, 0x49, 0xab, 0xf6, 0xef, 0x2d, 0xb8, 0x94, 0x39, 0x37, 0xe7, 0xa0, + 0x78, 0xda, 0x30, 0x15, 0x4f, 0xcf, 0x0d, 0xbc, 0x5a, 0x73, 0x34, 0x51, 0x7f, 0x5c, 0xcc, 0xf9, + 0x16, 0x26, 0x56, 0xdf, 0x81, 0x31, 0xa7, 0xd9, 0x24, 0x51, 0xb4, 0x1e, 0xb4, 0x54, 0x3c, 0xae, + 0x17, 0x99, 0x74, 0x94, 0x14, 0x9f, 0x1c, 0x55, 0xe6, 0xd3, 0x24, 0x12, 0x30, 0xd6, 0x29, 0x98, + 0x21, 0x04, 0x0b, 0x67, 0x1a, 0x42, 0xf0, 0x3a, 0xc0, 0x81, 0xe2, 0xb1, 0xd3, 0xa2, 0xb9, 0xc6, + 0x7d, 0x6b, 0x58, 0xe8, 0x7b, 0x61, 0x34, 0x12, 0xd7, 0xb8, 0x58, 0x8a, 0x2f, 0x0f, 0x38, 0x57, + 0xce, 0x16, 0xf1, 0x4c, 0xcf, 0x68, 0xa5, 0xc5, 0x50, 0x24, 0xd1, 0x77, 0xc3, 0x74, 0xc4, 0x03, + 0x6f, 0xac, 0x78, 0x4e, 0xc4, 0xcc, 0xec, 0xc5, 0x2a, 0x64, 0xee, 0xce, 0x8d, 0x14, 0x0c, 0x77, + 0x61, 0xa3, 0x35, 0xf9, 0x51, 0x2c, 0x4a, 0x08, 0x5f, 0x98, 0x57, 0x93, 0x0f, 0x12, 0x79, 0x69, + 0x66, 0xd3, 0xc3, 0xcf, 0x06, 0x5e, 0xab, 0x69, 0xff, 0x44, 0x09, 0x9e, 0xe8, 0x71, 0x88, 0xa1, + 0x25, 0xf3, 0x99, 0xec, 0xf9, 0xb4, 0xcc, 0x3a, 0x9f, 0x59, 0xd9, 0x10, 0x62, 0x53, 0x6b, 0xa5, + 0xf0, 0xa1, 0xd7, 0xca, 0x8f, 0x5a, 0x9a, 0x36, 0x81, 0x1b, 0x73, 0x7d, 0xfe, 0x94, 0x87, 0xf3, + 0x19, 0xaa, 0x17, 0xb6, 0x33, 0x64, 0xf4, 0xeb, 0x03, 0x77, 0x67, 0x60, 0xa1, 0xfd, 0x7c, 0x75, + 0xaa, 0x5f, 0xb5, 0xe0, 0xe9, 0xcc, 0xfe, 0x1a, 0xcf, 0xfa, 0x8b, 0x50, 0x6e, 0xd2, 0x42, 0xcd, + 0x75, 0x27, 0xf1, 0x69, 0x94, 0x00, 0x9c, 0xe0, 0x18, 0xaf, 0xf7, 0x85, 0xbe, 0xaf, 0xf7, 0xff, + 0xda, 0x82, 0xae, 0x05, 0x7c, 0x0e, 0x27, 0x69, 0xcd, 0x3c, 0x49, 0x3f, 0x39, 0xc8, 0x5c, 0xe6, + 0x1c, 0xa2, 0xbf, 0x3f, 0x05, 0x8f, 0xe5, 0xd8, 0xea, 0x1f, 0xc0, 0xcc, 0x4e, 0x93, 0x98, 0x4e, + 0x51, 0xe2, 0x63, 0x32, 0xfd, 0xc7, 0x7a, 0x7a, 0x50, 0xb1, 0x84, 0x22, 0x33, 0x5d, 0x28, 0xb8, + 0xbb, 0x09, 0xf4, 0x55, 0x0b, 0x66, 0x9d, 0xfb, 0x51, 0x57, 0xda, 0x38, 0xb1, 0x66, 0x5e, 0xc9, + 0xd4, 0x2d, 0xf4, 0x49, 0x33, 0xc7, 0x33, 0xac, 0x64, 0x61, 0xe1, 0xcc, 0xb6, 0x10, 0x16, 0x21, + 0x14, 0x29, 0xbf, 0xdd, 0xc3, 0x6d, 0x2f, 0xcb, 0xa9, 0x82, 0x9f, 0xa9, 0x12, 0x82, 0x15, 0x1d, + 0x74, 0x0f, 0xca, 0x3b, 0xd2, 0xd3, 0x49, 0x9c, 0xd9, 0x99, 0x97, 0x60, 0xa6, 0x3b, 0x14, 0x7f, + 0xba, 0x52, 0x20, 0x9c, 0x90, 0x42, 0x6f, 0x42, 0xd1, 0xdf, 0x8e, 0x7a, 0xa5, 0x26, 0x49, 0x59, + 0xbb, 0x70, 0x97, 0xd8, 0x8d, 0xb5, 0x06, 0xa6, 0x15, 0xd1, 0x4d, 0x28, 0x86, 0x5b, 0x2d, 0xa1, + 0x0e, 0xcb, 0xe4, 0x4b, 0xf1, 0x72, 0x35, 0x7b, 0x91, 0x70, 0x4a, 0x78, 0xb9, 0x8a, 0x29, 0x09, + 0x54, 0x87, 0x21, 0x66, 0xd6, 0x2e, 0xb4, 0x5e, 0x99, 0x0c, 0x69, 0x0f, 0xf7, 0x10, 0xee, 0x37, + 0xcb, 0x10, 0x30, 0x27, 0x84, 0xde, 0x82, 0xe1, 0x26, 0xcb, 0xde, 0x21, 0xa2, 0xf6, 0x66, 0x07, + 0x54, 0xe9, 0xca, 0xef, 0xc1, 0x9f, 0x18, 0x78, 0x39, 0x16, 0x14, 0xd0, 0x26, 0x0c, 0x37, 0x49, + 0x7b, 0x77, 0x3b, 0x62, 0x82, 0xb7, 0xc9, 0xe0, 0x27, 0xb4, 0x7a, 0x24, 0xab, 0x11, 0x54, 0x19, + 0x06, 0x16, 0xb4, 0xd0, 0x67, 0xa1, 0xb0, 0xdd, 0x14, 0xb6, 0xee, 0x99, 0x7a, 0x2f, 0xd3, 0x97, + 0x79, 0x79, 0xf8, 0xf8, 0xa8, 0x52, 0x58, 0x5b, 0xc1, 0x85, 0xed, 0x26, 0xda, 0x80, 0x91, 0x6d, + 0xee, 0xfd, 0x28, 0x42, 0x0c, 0x3c, 0x9b, 0xed, 0x98, 0xd9, 0xe5, 0x20, 0xc9, 0x6d, 0xb4, 0x05, + 0x00, 0x4b, 0x22, 0x2c, 0xfa, 0xa0, 0xf2, 0xe2, 0x14, 0x61, 0x78, 0x17, 0x4e, 0xe7, 0x79, 0xcb, + 0xfd, 0xaa, 0x13, 0x5f, 0x50, 0xac, 0x51, 0x44, 0x5f, 0x81, 0xb2, 0x23, 0xd3, 0x94, 0x89, 0x30, + 0x05, 0x2f, 0x67, 0x6e, 0xc7, 0xde, 0x19, 0xdc, 0xf8, 0x5a, 0x56, 0x48, 0x38, 0x21, 0x8a, 0xf6, + 0x60, 0xe2, 0x20, 0x6a, 0xef, 0x12, 0xb9, 0x7d, 0x59, 0xd4, 0x82, 0x9c, 0xeb, 0xea, 0x9e, 0x40, + 0x74, 0xc3, 0xb8, 0xe3, 0x78, 0x5d, 0x27, 0x0e, 0x33, 0xed, 0xbf, 0xa7, 0x13, 0xc3, 0x26, 0x6d, + 0x3a, 0xfc, 0xef, 0x77, 0x82, 0xad, 0xc3, 0x98, 0x88, 0xb8, 0xbd, 0x99, 0xc3, 0xff, 0x36, 0x47, + 0xe9, 0x1e, 0x7e, 0x01, 0xc0, 0x92, 0x08, 0xdd, 0xe0, 0x8e, 0x4c, 0x01, 0xc8, 0xe2, 0xf5, 0xe6, + 0x6c, 0xf0, 0xcc, 0x3c, 0x81, 0xda, 0xa0, 0xb0, 0x93, 0x31, 0x21, 0xc5, 0x4e, 0xc4, 0xf6, 0x6e, + 0x10, 0x07, 0x7e, 0xea, 0x34, 0x9e, 0xc9, 0x3f, 0x11, 0xeb, 0x19, 0xf8, 0xdd, 0x27, 0x62, 0x16, + 0x16, 0xce, 0x6c, 0x0b, 0xb5, 0x60, 0xb2, 0x1d, 0x84, 0xf1, 0xfd, 0x20, 0x94, 0xeb, 0x0b, 0xf5, + 0x10, 0xf2, 0x0d, 0x4c, 0xd1, 0x22, 0x8b, 0x23, 0x6d, 0x42, 0x70, 0x8a, 0x26, 0xfa, 0x02, 0x8c, + 0x44, 0x4d, 0xc7, 0x23, 0xb5, 0x3b, 0x73, 0x17, 0xf2, 0xaf, 0x9a, 0x06, 0x47, 0xc9, 0x59, 0x5d, + 0x6c, 0x72, 0x04, 0x0a, 0x96, 0xe4, 0xd0, 0x1a, 0x0c, 0xb1, 0x60, 0xf0, 0x2c, 0xe4, 0x70, 0x4e, + 0x38, 0x9c, 0x2e, 0x6b, 0x42, 0x7e, 0x22, 0xb1, 0x62, 0xcc, 0xab, 0xd3, 0x3d, 0x20, 0x78, 0xdd, + 0x20, 0x9a, 0xbb, 0x98, 0xbf, 0x07, 0x04, 0x8b, 0x7c, 0xa7, 0xd1, 0x6b, 0x0f, 0x28, 0x24, 0x9c, + 0x10, 0xa5, 0xe7, 0x31, 0x3d, 0x43, 0x1f, 0xeb, 0x61, 0xe0, 0x90, 0x7b, 0x82, 0xb2, 0xf3, 0x98, + 0x9e, 0x9f, 0x94, 0x84, 0xfd, 0x07, 0x23, 0xdd, 0xfc, 0x09, 0x93, 0x8e, 0x7e, 0xc8, 0xea, 0x7a, + 0xee, 0xfa, 0xcc, 0xa0, 0xca, 0x9a, 0x33, 0xe4, 0x4c, 0xbf, 0x6a, 0xc1, 0x63, 0xed, 0xcc, 0x0f, + 0x11, 0x97, 0xfd, 0x60, 0x3a, 0x1f, 0xfe, 0xe9, 0x2a, 0x2c, 0x78, 0x36, 0x1c, 0xe7, 0xb4, 0x94, + 0xe6, 0xfe, 0x8b, 0x1f, 0x9a, 0xfb, 0x5f, 0x87, 0x51, 0xc6, 0x50, 0x26, 0xb1, 0x97, 0x06, 0x8a, + 0xe5, 0xc2, 0xd8, 0x86, 0x15, 0x51, 0x11, 0x2b, 0x12, 0xe8, 0xc7, 0x2c, 0x78, 0x2a, 0xdd, 0x75, + 0x4c, 0x18, 0x58, 0x04, 0xd1, 0xe6, 0x82, 0xd9, 0x9a, 0xf8, 0xfe, 0xa7, 0xea, 0xbd, 0x90, 0x4f, + 0xfa, 0x21, 0xe0, 0xde, 0x8d, 0xa1, 0x6a, 0x86, 0x64, 0x38, 0x6c, 0x6a, 0xc3, 0x07, 0x90, 0x0e, + 0x5f, 0x81, 0xf1, 0xfd, 0xa0, 0xe3, 0xc7, 0xc2, 0x84, 0x44, 0x78, 0xa7, 0xb1, 0x37, 0xdb, 0x75, + 0xad, 0x1c, 0x1b, 0x58, 0x29, 0x99, 0x72, 0xf4, 0x61, 0x65, 0x4a, 0xf4, 0x6e, 0x2a, 0x65, 0x6f, + 0x39, 0x9f, 0xb7, 0x10, 0xe2, 0xf7, 0x29, 0x12, 0xf7, 0x9e, 0xaf, 0x1c, 0xf4, 0x75, 0x2b, 0x83, + 0x81, 0xe7, 0x92, 0xf1, 0xe7, 0x4c, 0xc9, 0xf8, 0x6a, 0x5a, 0x32, 0xee, 0xd2, 0x84, 0x1a, 0x42, + 0xf1, 0xe0, 0x11, 0x7f, 0x07, 0x0d, 0xa1, 0x65, 0x7b, 0x70, 0xa5, 0xdf, 0xb5, 0xc4, 0x6c, 0x89, + 0x5a, 0xea, 0xdd, 0x2b, 0xb1, 0x25, 0x6a, 0xd5, 0xaa, 0x98, 0x41, 0x06, 0x8d, 0xb1, 0x60, 0xff, + 0x77, 0x0b, 0x8a, 0xf5, 0xa0, 0x75, 0x0e, 0x9a, 0xdd, 0xcf, 0x1b, 0x9a, 0xdd, 0x27, 0x72, 0x52, + 0x29, 0xe7, 0xea, 0x71, 0x57, 0x53, 0x7a, 0xdc, 0xa7, 0xf2, 0x08, 0xf4, 0xd6, 0xda, 0xfe, 0x5c, + 0x11, 0xf4, 0xc4, 0xcf, 0xe8, 0xdf, 0x3e, 0x8c, 0x55, 0x6a, 0xb1, 0x57, 0x2e, 0x68, 0x41, 0x99, + 0x99, 0x20, 0x49, 0x87, 0xab, 0xbf, 0x64, 0xc6, 0xa9, 0xef, 0x10, 0x77, 0x67, 0x37, 0x26, 0xad, + 0xf4, 0xe7, 0x9c, 0x9f, 0x71, 0xea, 0x7f, 0xb5, 0x60, 0x2a, 0xd5, 0x3a, 0xf2, 0x60, 0xc2, 0xd3, + 0xd5, 0x72, 0x62, 0x9d, 0x3e, 0x94, 0x46, 0x8f, 0xa7, 0x00, 0xd1, 0x8b, 0xb0, 0x49, 0x1c, 0x2d, + 0x00, 0xa8, 0x67, 0x33, 0xa9, 0xed, 0x62, 0x5c, 0xbf, 0x7a, 0x57, 0x8b, 0xb0, 0x86, 0x81, 0x5e, + 0x85, 0xb1, 0x38, 0x68, 0x07, 0x5e, 0xb0, 0x73, 0x78, 0x8b, 0xc8, 0xa8, 0x1e, 0xca, 0xca, 0x69, + 0x33, 0x01, 0x61, 0x1d, 0xcf, 0xfe, 0x85, 0x22, 0xa4, 0x93, 0x85, 0x7f, 0x7b, 0x4d, 0x7e, 0x3c, + 0xd7, 0xe4, 0xb7, 0x2c, 0x98, 0xa6, 0xad, 0x33, 0x8b, 0x0b, 0x79, 0xd9, 0xaa, 0xcc, 0x23, 0x56, + 0x8f, 0xcc, 0x23, 0x57, 0xe9, 0xd9, 0xd5, 0x0a, 0x3a, 0xb1, 0xd0, 0x96, 0x69, 0x87, 0x13, 0x2d, + 0xc5, 0x02, 0x2a, 0xf0, 0x48, 0x18, 0x0a, 0x9f, 0x18, 0x1d, 0x8f, 0x84, 0x21, 0x16, 0x50, 0x99, + 0x98, 0xa4, 0x94, 0x93, 0x98, 0x84, 0xc5, 0x28, 0x13, 0xaf, 0xfc, 0x82, 0xed, 0xd1, 0x62, 0x94, + 0xc9, 0xe7, 0xff, 0x04, 0xc7, 0xfe, 0xe5, 0x22, 0x8c, 0xd7, 0x83, 0x56, 0xf2, 0x70, 0xf5, 0x8a, + 0xf1, 0x70, 0x75, 0x25, 0xf5, 0x70, 0x35, 0xad, 0xe3, 0x7e, 0xfb, 0x99, 0xea, 0xa3, 0x7a, 0xa6, + 0xfa, 0x57, 0x16, 0x9b, 0xb5, 0xea, 0x46, 0x43, 0x24, 0x46, 0x7d, 0x09, 0xc6, 0xd8, 0x81, 0xc4, + 0x9c, 0xb0, 0xe4, 0x6b, 0x0e, 0x8b, 0x39, 0xbe, 0x91, 0x14, 0x63, 0x1d, 0x07, 0x5d, 0x83, 0xd1, + 0x88, 0x38, 0x61, 0x73, 0x57, 0x9d, 0x71, 0xe2, 0xad, 0x83, 0x97, 0x61, 0x05, 0x45, 0x6f, 0x27, + 0xe1, 0xb1, 0x8a, 0xf9, 0x29, 0x3e, 0xf5, 0xfe, 0xf0, 0x2d, 0x92, 0x1f, 0x13, 0xcb, 0x7e, 0x07, + 0x50, 0x37, 0xfe, 0x00, 0x81, 0x70, 0x2a, 0x66, 0x20, 0x9c, 0x72, 0x57, 0x10, 0x9c, 0x3f, 0xb7, + 0x60, 0xb2, 0x1e, 0xb4, 0xe8, 0xd6, 0xfd, 0xab, 0xb4, 0x4f, 0xf5, 0xd8, 0x80, 0xc3, 0x3d, 0x62, + 0x03, 0xfe, 0x43, 0x0b, 0x46, 0xea, 0x41, 0xeb, 0x1c, 0x74, 0xec, 0x9f, 0x33, 0x75, 0xec, 0x8f, + 0xe7, 0x2c, 0x89, 0x1c, 0xb5, 0xfa, 0xaf, 0x16, 0x61, 0x82, 0xf6, 0x33, 0xd8, 0x91, 0xb3, 0x64, + 0x8c, 0x88, 0x35, 0xc0, 0x88, 0x50, 0x36, 0x37, 0xf0, 0xbc, 0xe0, 0x7e, 0x7a, 0xc6, 0xd6, 0x58, + 0x29, 0x16, 0x50, 0xf4, 0x02, 0x8c, 0xb6, 0x43, 0x72, 0xe0, 0x06, 0x82, 0x7f, 0xd4, 0x5e, 0x2c, + 0xea, 0xa2, 0x1c, 0x2b, 0x0c, 0x2a, 0x77, 0x45, 0xae, 0xdf, 0x24, 0x32, 0xbf, 0x70, 0x89, 0xa5, + 0x20, 0xe2, 0x41, 0x7f, 0xb5, 0x72, 0x6c, 0x60, 0xa1, 0x77, 0xa0, 0xcc, 0xfe, 0xb3, 0x13, 0xe5, + 0xf4, 0x29, 0x53, 0x44, 0xa4, 0x7d, 0x41, 0x00, 0x27, 0xb4, 0xd0, 0x75, 0x80, 0x58, 0x06, 0x86, + 0x8d, 0x44, 0x3c, 0x13, 0xc5, 0x6b, 0xab, 0x90, 0xb1, 0x11, 0xd6, 0xb0, 0xd0, 0xf3, 0x50, 0x8e, + 0x1d, 0xd7, 0xbb, 0xed, 0xfa, 0x24, 0x62, 0x8a, 0xe6, 0xa2, 0x0c, 0xa4, 0x2f, 0x0a, 0x71, 0x02, + 0xa7, 0xbc, 0x0e, 0x73, 0xf6, 0xe5, 0x09, 0x97, 0x46, 0x19, 0x36, 0xe3, 0x75, 0x6e, 0xab, 0x52, + 0xac, 0x61, 0xd8, 0xaf, 0xc3, 0xc5, 0x7a, 0xd0, 0xaa, 0x07, 0x61, 0xbc, 0x16, 0x84, 0xf7, 0x9d, + 0xb0, 0x25, 0xe7, 0xaf, 0x22, 0x63, 0xba, 0xd3, 0xb3, 0x67, 0x88, 0xef, 0x4c, 0x23, 0x5a, 0xfb, + 0xcb, 0x8c, 0xdb, 0x39, 0xa5, 0x5f, 0xc4, 0xff, 0x2e, 0xb0, 0x83, 0x22, 0x95, 0x05, 0x0c, 0x7d, + 0x19, 0x26, 0x23, 0x72, 0xdb, 0xf5, 0x3b, 0x0f, 0xa4, 0x7c, 0xdc, 0xc3, 0xe9, 0xa4, 0xb1, 0xaa, + 0x63, 0x72, 0x2d, 0x9b, 0x59, 0x86, 0x53, 0xd4, 0xe8, 0x10, 0x86, 0x1d, 0x7f, 0x29, 0xba, 0x1b, + 0x91, 0x50, 0x64, 0xa1, 0x62, 0x43, 0x88, 0x65, 0x21, 0x4e, 0xe0, 0x74, 0xc9, 0xb0, 0x3f, 0x1b, + 0x81, 0x8f, 0x83, 0x20, 0x96, 0x8b, 0x8c, 0xe5, 0x31, 0xd1, 0xca, 0xb1, 0x81, 0x85, 0xd6, 0x00, + 0x45, 0x9d, 0x76, 0xdb, 0x63, 0x0f, 0xe0, 0x8e, 0x77, 0x23, 0x0c, 0x3a, 0x6d, 0xfe, 0xf8, 0x58, + 0xe4, 0xd9, 0xf5, 0x1b, 0x5d, 0x50, 0x9c, 0x51, 0x83, 0x1e, 0x0c, 0xdb, 0x11, 0xfb, 0xcd, 0x16, + 0x5e, 0x51, 0x68, 0xbe, 0x1b, 0xac, 0x08, 0x4b, 0x18, 0x9d, 0x67, 0xd6, 0x3c, 0xc7, 0x1c, 0x4e, + 0xe6, 0x19, 0xab, 0x52, 0xac, 0x61, 0xd8, 0x3f, 0xc0, 0x2e, 0x18, 0x96, 0x6c, 0x28, 0xee, 0x84, + 0x04, 0xed, 0xc3, 0x44, 0x9b, 0x5d, 0xfd, 0x22, 0x14, 0xae, 0x18, 0xf0, 0x57, 0x06, 0x94, 0x14, + 0xef, 0xd3, 0xcd, 0xab, 0x34, 0x39, 0x8c, 0x05, 0xaf, 0xeb, 0xe4, 0xb0, 0x49, 0xdd, 0xfe, 0xb9, + 0x69, 0x76, 0x8e, 0x35, 0xb8, 0xf8, 0x37, 0x22, 0x2c, 0x5e, 0x05, 0xaf, 0x3b, 0x9f, 0xaf, 0x87, + 0x48, 0xae, 0x1c, 0x61, 0x35, 0x8b, 0x65, 0x5d, 0xf4, 0x36, 0x7b, 0xe5, 0xe5, 0x87, 0x47, 0xbf, + 0x9c, 0xaf, 0x1c, 0xcb, 0x78, 0xd0, 0x15, 0x15, 0xb1, 0x46, 0x04, 0xdd, 0x86, 0x09, 0x91, 0x9b, + 0x46, 0x28, 0x9a, 0x8a, 0x86, 0x22, 0x61, 0x02, 0xeb, 0xc0, 0x93, 0x74, 0x01, 0x36, 0x2b, 0xa3, + 0x1d, 0x78, 0x4a, 0x4b, 0xd4, 0x76, 0x23, 0x74, 0xd8, 0xcb, 0x9f, 0xcb, 0x56, 0xbf, 0x76, 0x16, + 0x3d, 0x7d, 0x7c, 0x54, 0x79, 0x6a, 0xb3, 0x17, 0x22, 0xee, 0x4d, 0x07, 0xdd, 0x81, 0x8b, 0x4e, + 0x33, 0x76, 0x0f, 0x48, 0x95, 0x38, 0x2d, 0xcf, 0xf5, 0xd5, 0x61, 0xc7, 0x17, 0xd0, 0xa5, 0xe3, + 0xa3, 0xca, 0xc5, 0xa5, 0x2c, 0x04, 0x9c, 0x5d, 0x0f, 0x7d, 0x0e, 0xca, 0x2d, 0x3f, 0x12, 0x63, + 0x30, 0x6c, 0xe4, 0x20, 0x2c, 0x57, 0x37, 0x1a, 0xea, 0xfb, 0x93, 0x3f, 0x38, 0xa9, 0x80, 0x76, + 0xb8, 0xb2, 0x49, 0xc9, 0x76, 0x23, 0xf9, 0xf9, 0xa6, 0xc5, 0x92, 0x30, 0x5c, 0x4b, 0xb8, 0x96, + 0x55, 0x19, 0x79, 0x1a, 0x5e, 0x27, 0x06, 0x61, 0xf4, 0x16, 0x20, 0xca, 0xfc, 0xb8, 0x4d, 0xb2, + 0xd4, 0x64, 0x11, 0x89, 0x99, 0x6e, 0x6e, 0xd4, 0x30, 0xe5, 0x47, 0x8d, 0x2e, 0x0c, 0x9c, 0x51, + 0x0b, 0xdd, 0xa4, 0x27, 0x90, 0x5e, 0x2a, 0x8c, 0x55, 0x25, 0xc3, 0x3c, 0x57, 0x25, 0xed, 0x90, + 0x34, 0x9d, 0x98, 0xb4, 0x4c, 0x8a, 0x38, 0x55, 0x8f, 0xde, 0x4f, 0x2a, 0x39, 0x09, 0x98, 0x61, + 0x07, 0xba, 0x13, 0x94, 0x50, 0x59, 0x73, 0x37, 0x88, 0xe2, 0x0d, 0x12, 0xdf, 0x0f, 0xc2, 0x3d, + 0x11, 0xe5, 0x29, 0x09, 0x38, 0x98, 0x80, 0xb0, 0x8e, 0x47, 0x79, 0x4b, 0xf6, 0xcc, 0x5a, 0xab, + 0xb2, 0x57, 0xaf, 0xd1, 0x64, 0x9f, 0xdc, 0xe4, 0xc5, 0x58, 0xc2, 0x25, 0x6a, 0xad, 0xbe, 0xc2, + 0x5e, 0xb0, 0x52, 0xa8, 0xb5, 0xfa, 0x0a, 0x96, 0x70, 0x44, 0xba, 0xf3, 0x3b, 0x4e, 0xe6, 0x6b, + 0x0a, 0xbb, 0xcf, 0xf1, 0x01, 0x53, 0x3c, 0xfa, 0x30, 0xad, 0x32, 0x4b, 0xf2, 0xf0, 0x57, 0xd1, + 0xdc, 0x14, 0x5b, 0x24, 0x83, 0xc7, 0xce, 0x52, 0xba, 0xd7, 0x5a, 0x8a, 0x12, 0xee, 0xa2, 0x6d, + 0x04, 0x82, 0x98, 0xee, 0x9b, 0x5c, 0x66, 0x11, 0xca, 0x51, 0x67, 0xab, 0x15, 0xec, 0x3b, 0xae, + 0xcf, 0x1e, 0x9c, 0x34, 0xc6, 0xa5, 0x21, 0x01, 0x38, 0xc1, 0x41, 0x6b, 0x30, 0xea, 0x48, 0xc5, + 0x2a, 0xca, 0xf7, 0x0c, 0x57, 0xea, 0x54, 0xc6, 0x96, 0x2b, 0x55, 0xaa, 0xaa, 0x8b, 0xde, 0x80, + 0x09, 0xe1, 0x4e, 0xc4, 0xfd, 0xe5, 0xd9, 0x83, 0x90, 0x66, 0x79, 0xde, 0xd0, 0x81, 0xd8, 0xc4, + 0x45, 0xdf, 0x0b, 0x93, 0x94, 0x4a, 0x72, 0xb0, 0xcd, 0xcd, 0x0e, 0x72, 0x22, 0x6a, 0x49, 0x03, + 0xf4, 0xca, 0x38, 0x45, 0x0c, 0xb5, 0xe0, 0x49, 0xa7, 0x13, 0x07, 0x4c, 0x39, 0x6d, 0xae, 0xff, + 0xcd, 0x60, 0x8f, 0xf8, 0xec, 0x5d, 0x68, 0x74, 0xf9, 0xca, 0xf1, 0x51, 0xe5, 0xc9, 0xa5, 0x1e, + 0x78, 0xb8, 0x27, 0x15, 0x74, 0x17, 0xc6, 0xe2, 0xc0, 0x63, 0x36, 0xe0, 0x94, 0x07, 0x78, 0x2c, + 0x3f, 0x90, 0xca, 0xa6, 0x42, 0xd3, 0x15, 0x33, 0xaa, 0x2a, 0xd6, 0xe9, 0xa0, 0x4d, 0xbe, 0xc7, + 0x58, 0x88, 0x49, 0x12, 0xcd, 0x3d, 0x9e, 0x3f, 0x30, 0x2a, 0x12, 0xa5, 0xb9, 0x05, 0x45, 0x4d, + 0xac, 0x93, 0x41, 0x37, 0x60, 0xa6, 0x1d, 0xba, 0x01, 0x5b, 0xd8, 0xea, 0x61, 0x60, 0xce, 0x8c, + 0x13, 0x5f, 0x4f, 0x23, 0xe0, 0xee, 0x3a, 0x54, 0x70, 0x93, 0x85, 0x73, 0x97, 0x78, 0xd2, 0x21, + 0xce, 0xcc, 0xf2, 0x32, 0xac, 0xa0, 0x68, 0x9d, 0x9d, 0xcb, 0x5c, 0xc4, 0x9a, 0x9b, 0xcf, 0xf7, + 0xa8, 0xd7, 0x45, 0x31, 0xce, 0xe8, 0xa8, 0xbf, 0x38, 0xa1, 0x40, 0xef, 0x8d, 0x68, 0xd7, 0x09, + 0x49, 0x3d, 0x0c, 0x9a, 0x84, 0x77, 0x86, 0x9b, 0x9f, 0x3f, 0xc1, 0x23, 0xe1, 0xd1, 0x7b, 0xa3, + 0x91, 0x85, 0x80, 0xb3, 0xeb, 0xcd, 0x7f, 0x17, 0xcc, 0x74, 0x9d, 0xe4, 0xa7, 0x0a, 0x8f, 0xfc, + 0x67, 0x43, 0x50, 0x56, 0x8a, 0x5f, 0xb4, 0x68, 0xea, 0xf3, 0x2f, 0xa5, 0xf5, 0xf9, 0xa3, 0x94, + 0xff, 0xd4, 0x55, 0xf8, 0x9b, 0x86, 0xe1, 0x57, 0x21, 0x3f, 0x19, 0x91, 0xae, 0xf5, 0xe8, 0xeb, + 0x9b, 0xa5, 0xc9, 0xf1, 0xc5, 0x81, 0x1f, 0x06, 0x4a, 0x3d, 0x55, 0x03, 0x03, 0xe6, 0x02, 0xa5, + 0xa2, 0x6e, 0x3b, 0x68, 0xd5, 0xea, 0xe9, 0xe4, 0x78, 0x75, 0x5a, 0x88, 0x39, 0x8c, 0x09, 0x2b, + 0x94, 0xed, 0x60, 0xc2, 0xca, 0xc8, 0x43, 0x0a, 0x2b, 0x92, 0x00, 0x4e, 0x68, 0x21, 0x0f, 0x66, + 0x9a, 0x66, 0x5e, 0x43, 0xe5, 0x8f, 0xf5, 0x4c, 0xdf, 0x0c, 0x83, 0x1d, 0x2d, 0x89, 0xd4, 0x4a, + 0x9a, 0x0a, 0xee, 0x26, 0x8c, 0xde, 0x80, 0xd1, 0xf7, 0x83, 0x88, 0x6d, 0x0b, 0x71, 0xf7, 0x4a, + 0x0f, 0x98, 0xd1, 0xb7, 0xef, 0x34, 0x58, 0xf9, 0xc9, 0x51, 0x65, 0xac, 0x1e, 0xb4, 0xe4, 0x5f, + 0xac, 0x2a, 0xa0, 0x07, 0x70, 0xd1, 0x38, 0xb1, 0x54, 0x77, 0x61, 0xf0, 0xee, 0x3e, 0x25, 0x9a, + 0xbb, 0x58, 0xcb, 0xa2, 0x84, 0xb3, 0x1b, 0xa0, 0xc7, 0x80, 0x1f, 0x88, 0x9c, 0xa0, 0xf2, 0x7e, + 0x67, 0xd7, 0x78, 0x59, 0xf7, 0x5a, 0x4e, 0x21, 0xe0, 0xee, 0x3a, 0xf6, 0x37, 0xb8, 0x9e, 0x5c, + 0x68, 0xd3, 0x48, 0xd4, 0xf1, 0xce, 0x23, 0xe5, 0xcc, 0xaa, 0xa1, 0xe8, 0x7b, 0xe8, 0xb7, 0x98, + 0xdf, 0xb2, 0xd8, 0x5b, 0xcc, 0x26, 0xd9, 0x6f, 0x7b, 0x4e, 0x7c, 0x1e, 0x9e, 0x17, 0x6f, 0xc3, + 0x68, 0x2c, 0x5a, 0xeb, 0x95, 0x25, 0x47, 0xeb, 0x14, 0x7b, 0x8f, 0x52, 0x37, 0xbf, 0x2c, 0xc5, + 0x8a, 0x8c, 0xfd, 0xcf, 0xf9, 0x0c, 0x48, 0xc8, 0x39, 0x28, 0x5d, 0xaa, 0xa6, 0xd2, 0xa5, 0xd2, + 0xe7, 0x0b, 0x72, 0x94, 0x2f, 0xff, 0xcc, 0xec, 0x37, 0x13, 0xb2, 0x3e, 0xee, 0x8f, 0x80, 0xf6, + 0x4f, 0x59, 0x30, 0x9b, 0x65, 0x35, 0x43, 0xb9, 0x35, 0x2e, 0xe2, 0xa9, 0x47, 0x51, 0x35, 0x82, + 0xf7, 0x44, 0x39, 0x56, 0x18, 0x03, 0x07, 0xa0, 0x3f, 0x5d, 0x94, 0xaa, 0x3b, 0x30, 0x51, 0x0f, + 0x89, 0x76, 0x07, 0xbc, 0xc9, 0x5d, 0xa9, 0x78, 0x7f, 0x5e, 0x38, 0xb5, 0x1b, 0x95, 0xfd, 0x8b, + 0x05, 0x98, 0xe5, 0xaf, 0x1a, 0x4b, 0x07, 0x81, 0xdb, 0xaa, 0x07, 0x2d, 0x91, 0x3c, 0xe0, 0x4b, + 0x30, 0xde, 0xd6, 0xe4, 0xf2, 0x5e, 0x71, 0x72, 0x74, 0xf9, 0x3d, 0x91, 0x8f, 0xf4, 0x52, 0x6c, + 0xd0, 0x42, 0x2d, 0x18, 0x27, 0x07, 0x6e, 0x53, 0xa9, 0xc6, 0x0b, 0xa7, 0xbe, 0x1b, 0x54, 0x2b, + 0xab, 0x1a, 0x1d, 0x6c, 0x50, 0x7d, 0x04, 0xf9, 0xa4, 0xec, 0x9f, 0xb6, 0xe0, 0xf1, 0x9c, 0xa8, + 0x3a, 0xb4, 0xb9, 0xfb, 0xec, 0xfd, 0x48, 0xa4, 0xa6, 0x51, 0xcd, 0xf1, 0x57, 0x25, 0x2c, 0xa0, + 0xe8, 0x0b, 0x00, 0xfc, 0x55, 0x88, 0x8a, 0x0b, 0xe2, 0xd3, 0x07, 0x0b, 0x36, 0xa1, 0x05, 0x09, + 0x90, 0xf5, 0xb1, 0x46, 0xcb, 0xfe, 0xf9, 0x22, 0x0c, 0xb1, 0x57, 0x08, 0xb4, 0x06, 0x23, 0xbb, + 0x3c, 0x86, 0xec, 0x20, 0xe1, 0x6a, 0x13, 0xb9, 0x8b, 0x17, 0x60, 0x59, 0x19, 0xad, 0xc3, 0x05, + 0x1e, 0x83, 0xd7, 0xab, 0x12, 0xcf, 0x39, 0x94, 0xe2, 0x3b, 0x4f, 0xe7, 0xa2, 0x02, 0x1e, 0xd4, + 0xba, 0x51, 0x70, 0x56, 0x3d, 0xf4, 0x26, 0x4c, 0xc6, 0xee, 0x3e, 0x09, 0x3a, 0xb1, 0xa4, 0xc4, + 0xa3, 0xef, 0x2a, 0x66, 0x7f, 0xd3, 0x80, 0xe2, 0x14, 0x36, 0x15, 0x44, 0xda, 0x5d, 0x8a, 0x0a, + 0x2d, 0x41, 0xba, 0xa9, 0x9c, 0x30, 0x71, 0x99, 0xb9, 0x4c, 0x87, 0x19, 0x07, 0x6d, 0xee, 0x86, + 0x24, 0xda, 0x0d, 0xbc, 0x96, 0xc8, 0x06, 0x9c, 0x98, 0xcb, 0xa4, 0xe0, 0xb8, 0xab, 0x06, 0xa5, + 0xb2, 0xed, 0xb8, 0x5e, 0x27, 0x24, 0x09, 0x95, 0x61, 0x93, 0xca, 0x5a, 0x0a, 0x8e, 0xbb, 0x6a, + 0xd0, 0x75, 0x74, 0x51, 0xa4, 0xe7, 0x95, 0x6e, 0xd8, 0xca, 0x06, 0x6a, 0x44, 0xba, 0xb6, 0xf4, + 0x88, 0x43, 0x22, 0xac, 0x44, 0x54, 0x82, 0x5f, 0x2d, 0xf9, 0xa3, 0x70, 0x6a, 0x91, 0x54, 0x1e, + 0x26, 0x49, 0xec, 0x1f, 0x58, 0x70, 0x21, 0xc3, 0xd6, 0x92, 0x1f, 0x55, 0x3b, 0x6e, 0x14, 0xab, + 0x94, 0x15, 0xda, 0x51, 0xc5, 0xcb, 0xb1, 0xc2, 0xa0, 0xfb, 0x81, 0x1f, 0x86, 0xe9, 0x03, 0x50, + 0xd8, 0x32, 0x09, 0xe8, 0xe9, 0x0e, 0x40, 0x74, 0x05, 0x4a, 0x9d, 0x88, 0x84, 0x32, 0xbb, 0xaa, + 0x3c, 0xbf, 0x99, 0xaa, 0x94, 0x41, 0x28, 0x6b, 0xba, 0xa3, 0xb4, 0x94, 0x1a, 0x6b, 0xca, 0x55, + 0x8f, 0x1c, 0x66, 0x7f, 0xad, 0x08, 0x97, 0x72, 0x6d, 0xa9, 0x69, 0x97, 0xf6, 0x03, 0xdf, 0x8d, + 0x03, 0xf5, 0xc2, 0xc5, 0x63, 0x58, 0x90, 0xf6, 0xee, 0xba, 0x28, 0xc7, 0x0a, 0x03, 0x5d, 0x95, + 0x89, 0xa2, 0xd3, 0x49, 0x39, 0x96, 0xab, 0x46, 0xae, 0xe8, 0x41, 0x13, 0x1e, 0x3d, 0x03, 0xa5, + 0x76, 0xa0, 0xb2, 0xf8, 0xab, 0x99, 0xa5, 0xdd, 0x0d, 0x02, 0x0f, 0x33, 0x20, 0xfa, 0x94, 0x18, + 0x87, 0xd4, 0x93, 0x0e, 0x76, 0x5a, 0x41, 0xa4, 0x0d, 0xc6, 0x73, 0x30, 0xb2, 0x47, 0x0e, 0x43, + 0xd7, 0xdf, 0x49, 0x3f, 0xf5, 0xdd, 0xe2, 0xc5, 0x58, 0xc2, 0xcd, 0x98, 0xf4, 0x23, 0x67, 0x9d, + 0xa9, 0x68, 0xb4, 0xef, 0xd5, 0xf6, 0xa3, 0x45, 0x98, 0xc2, 0xcb, 0xd5, 0x6f, 0x4f, 0xc4, 0xdd, + 0xee, 0x89, 0x38, 0xeb, 0x4c, 0x45, 0xfd, 0x67, 0xe3, 0x57, 0x2d, 0x98, 0x62, 0x71, 0x5b, 0x45, + 0x0c, 0x06, 0x37, 0xf0, 0xcf, 0x81, 0x75, 0x7b, 0x06, 0x86, 0x42, 0xda, 0x68, 0x3a, 0xfd, 0x08, + 0xeb, 0x09, 0xe6, 0x30, 0xf4, 0x24, 0x94, 0x58, 0x17, 0xe8, 0xe4, 0x8d, 0xf3, 0xc8, 0xed, 0x55, + 0x27, 0x76, 0x30, 0x2b, 0x65, 0x8e, 0xc5, 0x98, 0xb4, 0x3d, 0x97, 0x77, 0x3a, 0x51, 0xf5, 0x7f, + 0x3c, 0x1c, 0x8b, 0x33, 0xbb, 0xf6, 0xe1, 0x1c, 0x8b, 0xb3, 0x49, 0xf6, 0x16, 0x8b, 0xfe, 0x47, + 0x01, 0x2e, 0x67, 0xd6, 0x1b, 0xd8, 0xb1, 0xb8, 0x77, 0xed, 0xb3, 0xb1, 0xd8, 0xc8, 0x36, 0xa4, + 0x28, 0x9e, 0xa3, 0x21, 0x45, 0x69, 0x50, 0xce, 0x71, 0x68, 0x00, 0x7f, 0xdf, 0xcc, 0x21, 0xfb, + 0x98, 0xf8, 0xfb, 0x66, 0xf6, 0x2d, 0x47, 0xac, 0xfb, 0x8b, 0x42, 0xce, 0xb7, 0x30, 0x01, 0xef, + 0x1a, 0x3d, 0x67, 0x18, 0x30, 0x12, 0x9c, 0xf0, 0x38, 0x3f, 0x63, 0x78, 0x19, 0x56, 0x50, 0xe4, + 0x6a, 0x9e, 0xb3, 0x85, 0xfc, 0xe4, 0x74, 0xb9, 0x4d, 0x2d, 0x98, 0x2f, 0x33, 0x6a, 0x08, 0x32, + 0xbc, 0x68, 0xd7, 0x35, 0xa1, 0xbc, 0x38, 0xb8, 0x50, 0x3e, 0x9e, 0x2d, 0x90, 0xa3, 0x25, 0x98, + 0xda, 0x77, 0x7d, 0x96, 0x6c, 0xdc, 0x64, 0x45, 0x55, 0x20, 0x89, 0x75, 0x13, 0x8c, 0xd3, 0xf8, + 0xf3, 0x6f, 0xc0, 0xc4, 0xc3, 0xab, 0x23, 0xbf, 0x55, 0x84, 0x27, 0x7a, 0x6c, 0x7b, 0x7e, 0xd6, + 0x1b, 0x73, 0xa0, 0x9d, 0xf5, 0x5d, 0xf3, 0x50, 0x87, 0xd9, 0xed, 0x8e, 0xe7, 0x1d, 0x32, 0x5b, + 0x45, 0xd2, 0x92, 0x18, 0x82, 0x57, 0x94, 0x29, 0xe4, 0x67, 0xd7, 0x32, 0x70, 0x70, 0x66, 0x4d, + 0xf4, 0x16, 0xa0, 0x40, 0x64, 0xc6, 0xbc, 0x41, 0x7c, 0xa1, 0xef, 0x66, 0x03, 0x5f, 0x4c, 0x36, + 0xe3, 0x9d, 0x2e, 0x0c, 0x9c, 0x51, 0x8b, 0x32, 0xfd, 0xf4, 0x56, 0x3a, 0x54, 0xdd, 0x4a, 0x31, + 0xfd, 0x58, 0x07, 0x62, 0x13, 0x17, 0xdd, 0x80, 0x19, 0xe7, 0xc0, 0x71, 0x79, 0x58, 0x34, 0x49, + 0x80, 0x73, 0xfd, 0x4a, 0x09, 0xb6, 0x94, 0x46, 0xc0, 0xdd, 0x75, 0x52, 0xae, 0xbb, 0xc3, 0xf9, + 0xae, 0xbb, 0xbd, 0xcf, 0xc5, 0x7e, 0x3a, 0x5d, 0xfb, 0x3f, 0x5b, 0xf4, 0xfa, 0xca, 0xc8, 0x6e, + 0x4d, 0xc7, 0x41, 0xe9, 0x26, 0x35, 0x2f, 0x5a, 0x35, 0x0e, 0x2b, 0x3a, 0x10, 0x9b, 0xb8, 0x7c, + 0x41, 0x44, 0x89, 0x43, 0x87, 0xc1, 0xba, 0x0b, 0x37, 0x79, 0x85, 0x81, 0xbe, 0x08, 0x23, 0x2d, + 0xf7, 0xc0, 0x8d, 0x82, 0x50, 0x6c, 0x96, 0x53, 0x9a, 0xc5, 0x27, 0xe7, 0x60, 0x95, 0x93, 0xc1, + 0x92, 0x9e, 0xfd, 0xa3, 0x05, 0x98, 0x90, 0x2d, 0xbe, 0xdd, 0x09, 0x62, 0xe7, 0x1c, 0xae, 0xe5, + 0x1b, 0xc6, 0xb5, 0xfc, 0xa9, 0x5e, 0xb1, 0x02, 0x58, 0x97, 0x72, 0xaf, 0xe3, 0x3b, 0xa9, 0xeb, + 0xf8, 0xd9, 0xfe, 0xa4, 0x7a, 0x5f, 0xc3, 0xff, 0xc2, 0x82, 0x19, 0x03, 0xff, 0x1c, 0x6e, 0x83, + 0x35, 0xf3, 0x36, 0x78, 0xba, 0xef, 0x37, 0xe4, 0xdc, 0x02, 0x5f, 0x2f, 0xa4, 0xfa, 0xce, 0x4e, + 0xff, 0xf7, 0xa1, 0xb4, 0xeb, 0x84, 0xad, 0x5e, 0x91, 0x44, 0xbb, 0x2a, 0x2d, 0xdc, 0x74, 0xc2, + 0x16, 0x3f, 0xc3, 0x5f, 0x50, 0xf9, 0xf4, 0x9c, 0xb0, 0xd5, 0xd7, 0x7f, 0x89, 0x35, 0x85, 0x5e, + 0x87, 0xe1, 0xa8, 0x19, 0xb4, 0x95, 0x75, 0xe1, 0x15, 0x9e, 0x6b, 0x8f, 0x96, 0x9c, 0x1c, 0x55, + 0x90, 0xd9, 0x1c, 0x2d, 0xc6, 0x02, 0x7f, 0x7e, 0x07, 0xca, 0xaa, 0xe9, 0x47, 0xea, 0x1b, 0xf2, + 0x1f, 0x8b, 0x70, 0x21, 0x63, 0x5d, 0xa0, 0xc8, 0x18, 0xad, 0x97, 0x06, 0x5c, 0x4e, 0x1f, 0x72, + 0xbc, 0x22, 0x26, 0xb1, 0xb4, 0xc4, 0xfc, 0x0f, 0xdc, 0xe8, 0xdd, 0x88, 0xa4, 0x1b, 0xa5, 0x45, + 0xfd, 0x1b, 0xa5, 0x8d, 0x9d, 0xdb, 0x50, 0xd3, 0x86, 0x54, 0x4f, 0x1f, 0xe9, 0x9c, 0xfe, 0x69, + 0x11, 0x66, 0xb3, 0x42, 0x8c, 0xa0, 0xef, 0x4f, 0x25, 0xc6, 0x78, 0x65, 0xd0, 0xe0, 0x24, 0x3c, + 0x5b, 0x86, 0x48, 0xf3, 0xba, 0x60, 0xa6, 0xca, 0xe8, 0x3b, 0xcc, 0xa2, 0x4d, 0xe6, 0x50, 0x18, + 0xf2, 0x84, 0x26, 0x72, 0x8b, 0x7f, 0x66, 0xe0, 0x0e, 0x88, 0x4c, 0x28, 0x51, 0xca, 0xa1, 0x50, + 0x16, 0xf7, 0x77, 0x28, 0x94, 0x2d, 0xcf, 0xbb, 0x30, 0xa6, 0x7d, 0xcd, 0x23, 0x9d, 0xf1, 0x3d, + 0x7a, 0xa3, 0x68, 0xfd, 0x7e, 0xa4, 0xb3, 0xfe, 0xd3, 0x16, 0xa4, 0x6c, 0xfa, 0x94, 0x4a, 0xca, + 0xca, 0x55, 0x49, 0x5d, 0x81, 0x52, 0x18, 0x78, 0x24, 0x9d, 0xab, 0x02, 0x07, 0x1e, 0xc1, 0x0c, + 0xa2, 0xb2, 0xec, 0x17, 0x73, 0xb3, 0xec, 0x3f, 0x03, 0x43, 0x1e, 0x39, 0x20, 0x52, 0x1b, 0xa1, + 0xce, 0xe4, 0xdb, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0xab, 0x25, 0x78, 0xaa, 0xa7, 0x4b, 0x2e, 0x15, + 0x59, 0x76, 0x9c, 0x98, 0xdc, 0x77, 0x0e, 0xd3, 0x41, 0x6e, 0x6f, 0xf0, 0x62, 0x2c, 0xe1, 0xcc, + 0x02, 0x99, 0x87, 0xc7, 0x4b, 0x29, 0xf0, 0x44, 0x54, 0x3c, 0x01, 0x7d, 0x04, 0x29, 0xae, 0xaf, + 0x03, 0x44, 0x91, 0xb7, 0xea, 0x53, 0x0e, 0xac, 0x25, 0x4c, 0x9b, 0x93, 0x30, 0x8a, 0x8d, 0xdb, + 0x02, 0x82, 0x35, 0x2c, 0x54, 0x85, 0xe9, 0x76, 0x18, 0xc4, 0x5c, 0x1f, 0x5a, 0xe5, 0x46, 0x32, + 0x43, 0xa6, 0x37, 0x64, 0x3d, 0x05, 0xc7, 0x5d, 0x35, 0xd0, 0xab, 0x30, 0x26, 0x3c, 0x24, 0xeb, + 0x41, 0xe0, 0x09, 0x55, 0x8d, 0x32, 0xb9, 0x68, 0x24, 0x20, 0xac, 0xe3, 0x69, 0xd5, 0x98, 0x92, + 0x75, 0x24, 0xb3, 0x1a, 0x57, 0xb4, 0x6a, 0x78, 0xa9, 0x70, 0x43, 0xa3, 0x03, 0x85, 0x1b, 0x4a, + 0x94, 0x57, 0xe5, 0x81, 0xdf, 0x95, 0xa0, 0xaf, 0xba, 0xe7, 0x97, 0x4a, 0x70, 0x41, 0x2c, 0x9c, + 0x47, 0xbd, 0x5c, 0x1e, 0x51, 0x22, 0xee, 0x6f, 0xaf, 0x99, 0xf3, 0x5e, 0x33, 0xdf, 0x28, 0xc2, + 0x30, 0x9f, 0x8a, 0x73, 0xe0, 0xe1, 0xd7, 0x84, 0xd2, 0xaf, 0x47, 0xa0, 0x1d, 0xde, 0x97, 0x85, + 0xaa, 0x13, 0x3b, 0xfc, 0xfe, 0x52, 0xc7, 0x68, 0xa2, 0x1e, 0x44, 0x0b, 0xc6, 0x41, 0x3b, 0x9f, + 0xd2, 0x6a, 0x01, 0xa7, 0xa1, 0x1d, 0xbb, 0x5f, 0x06, 0x88, 0x58, 0x32, 0x68, 0x4a, 0x43, 0x84, + 0x6c, 0xfa, 0x74, 0x8f, 0xd6, 0x1b, 0x0a, 0x99, 0xf7, 0x21, 0x59, 0x82, 0x0a, 0x80, 0x35, 0x8a, + 0xf3, 0xaf, 0x41, 0x59, 0x21, 0xf7, 0x53, 0x01, 0x8c, 0xeb, 0xb7, 0xde, 0xe7, 0x61, 0x2a, 0xd5, + 0xd6, 0xa9, 0x34, 0x08, 0xbf, 0x66, 0xc1, 0x14, 0xef, 0xf2, 0xaa, 0x7f, 0x20, 0x36, 0xfb, 0x07, + 0x30, 0xeb, 0x65, 0x6c, 0x3a, 0x31, 0xa3, 0x83, 0x6f, 0x52, 0xa5, 0x31, 0xc8, 0x82, 0xe2, 0xcc, + 0x36, 0xd0, 0x35, 0x18, 0xe5, 0x2e, 0x3b, 0x8e, 0x27, 0xdc, 0x2c, 0xc6, 0x79, 0x6c, 0x7b, 0x5e, + 0x86, 0x15, 0xd4, 0xfe, 0x3d, 0x0b, 0x66, 0x78, 0xcf, 0x6f, 0x91, 0x43, 0x25, 0x1d, 0x7f, 0x94, + 0x7d, 0x17, 0xa1, 0xfb, 0x0b, 0x39, 0xa1, 0xfb, 0xf5, 0x4f, 0x2b, 0xf6, 0xfc, 0xb4, 0x5f, 0xb4, + 0x40, 0xac, 0xc0, 0x73, 0x90, 0x03, 0xbf, 0xcb, 0x94, 0x03, 0xe7, 0xf3, 0x17, 0x75, 0x8e, 0x00, + 0xf8, 0xe7, 0x16, 0x4c, 0x73, 0x84, 0xe4, 0x21, 0xf2, 0x23, 0x9d, 0x87, 0x41, 0x12, 0x4a, 0xa9, + 0x0c, 0xb2, 0xd9, 0x1f, 0x65, 0x4c, 0x56, 0xa9, 0xe7, 0x64, 0xb5, 0xe4, 0x06, 0x3a, 0x45, 0xa2, + 0xb4, 0x53, 0x07, 0xd3, 0xb5, 0xff, 0xc4, 0x02, 0xc4, 0x9b, 0x31, 0xee, 0x65, 0x7a, 0xdb, 0xb1, + 0x52, 0x4d, 0x13, 0x94, 0x1c, 0x35, 0x0a, 0x82, 0x35, 0xac, 0x33, 0x19, 0x9e, 0xd4, 0x6b, 0x72, + 0xb1, 0xff, 0x6b, 0xf2, 0x29, 0x46, 0xf4, 0x1b, 0x25, 0x48, 0xdb, 0x68, 0xa3, 0x7b, 0x30, 0xde, + 0x74, 0xda, 0xce, 0x96, 0xeb, 0xb9, 0xb1, 0x4b, 0xa2, 0x5e, 0x66, 0x28, 0x2b, 0x1a, 0x9e, 0x78, + 0x27, 0xd4, 0x4a, 0xb0, 0x41, 0x07, 0x2d, 0x00, 0xb4, 0x43, 0xf7, 0xc0, 0xf5, 0xc8, 0x0e, 0x13, + 0x85, 0x99, 0x63, 0x17, 0xb7, 0xad, 0x90, 0xa5, 0x58, 0xc3, 0xc8, 0x70, 0x04, 0x2a, 0x3e, 0x3a, + 0x47, 0xa0, 0xd2, 0x29, 0x1d, 0x81, 0x86, 0x06, 0x72, 0x04, 0xc2, 0xf0, 0x98, 0xbc, 0xbb, 0xe9, + 0xff, 0x35, 0xd7, 0x23, 0x82, 0x61, 0xe3, 0xee, 0x5e, 0xf3, 0xc7, 0x47, 0x95, 0xc7, 0x70, 0x26, + 0x06, 0xce, 0xa9, 0x89, 0xbe, 0x00, 0x73, 0x8e, 0xe7, 0x05, 0xf7, 0xd5, 0xa8, 0xad, 0x46, 0x4d, + 0xc7, 0xe3, 0xea, 0xde, 0x11, 0x46, 0xf5, 0xc9, 0xe3, 0xa3, 0xca, 0xdc, 0x52, 0x0e, 0x0e, 0xce, + 0xad, 0x9d, 0xf2, 0x23, 0x1a, 0xed, 0xeb, 0x47, 0xb4, 0x07, 0x17, 0x1a, 0x24, 0x74, 0x59, 0x1a, + 0xb7, 0x56, 0xb2, 0x25, 0x37, 0xa1, 0x1c, 0xa6, 0x0e, 0xa1, 0x81, 0x62, 0xc0, 0x68, 0x71, 0x42, + 0xe5, 0xa1, 0x93, 0x10, 0xb2, 0xff, 0xcc, 0x82, 0x11, 0x61, 0x27, 0x7e, 0x0e, 0xbc, 0xcf, 0x92, + 0xa1, 0xbf, 0xac, 0x64, 0x1f, 0xd4, 0xac, 0x33, 0xb9, 0x9a, 0xcb, 0x5a, 0x4a, 0x73, 0xf9, 0x74, + 0x2f, 0x22, 0xbd, 0x75, 0x96, 0x3f, 0x59, 0x84, 0x49, 0xd3, 0x46, 0xfe, 0x1c, 0x86, 0x60, 0x03, + 0x46, 0x22, 0xe1, 0x90, 0x51, 0xc8, 0x37, 0x9c, 0x4d, 0x4f, 0x62, 0x62, 0x15, 0x23, 0x5c, 0x30, + 0x24, 0x91, 0x4c, 0x4f, 0x8f, 0xe2, 0x23, 0xf4, 0xf4, 0xe8, 0xe7, 0xa6, 0x50, 0x3a, 0x0b, 0x37, + 0x05, 0xfb, 0x9b, 0xec, 0xb2, 0xd0, 0xcb, 0xcf, 0x81, 0x8f, 0xb8, 0x61, 0x5e, 0x2b, 0x76, 0x8f, + 0x95, 0x25, 0x3a, 0x95, 0xc3, 0x4f, 0xfc, 0x13, 0x0b, 0xc6, 0x04, 0xe2, 0x39, 0x74, 0xfb, 0xbb, + 0xcd, 0x6e, 0x3f, 0xd1, 0xa3, 0xdb, 0x39, 0xfd, 0xfd, 0x7b, 0x05, 0xd5, 0xdf, 0x7a, 0x10, 0xc6, + 0x03, 0xdc, 0xfe, 0xaf, 0xc3, 0x28, 0x95, 0x1e, 0x83, 0x66, 0xe0, 0x89, 0xcb, 0xff, 0xc9, 0xc4, + 0x43, 0x98, 0x97, 0x9f, 0x68, 0xbf, 0xb1, 0xc2, 0x66, 0x0e, 0xac, 0x41, 0x18, 0x8b, 0x0b, 0x37, + 0x71, 0x60, 0x0d, 0xc2, 0x18, 0x33, 0x08, 0x6a, 0x01, 0xc4, 0x4e, 0xb8, 0x43, 0x62, 0x5a, 0x26, + 0x82, 0x0d, 0xe4, 0xef, 0xc2, 0x4e, 0xec, 0x7a, 0x0b, 0xae, 0x1f, 0x47, 0x71, 0xb8, 0x50, 0xf3, + 0xe3, 0x3b, 0x21, 0x97, 0x25, 0x34, 0x97, 0x5f, 0x45, 0x0b, 0x6b, 0x74, 0xa5, 0x0f, 0x19, 0x6b, + 0x63, 0xc8, 0x7c, 0x58, 0xdc, 0x10, 0xe5, 0x58, 0x61, 0xd8, 0xaf, 0xb1, 0x33, 0x99, 0x0d, 0xd0, + 0xe9, 0xbc, 0x71, 0x7f, 0x67, 0x54, 0x0d, 0x2d, 0x7b, 0x55, 0xa8, 0xea, 0x3e, 0xbf, 0xbd, 0x8f, + 0x40, 0xda, 0xb0, 0xee, 0x8f, 0x90, 0x38, 0x06, 0xa3, 0xef, 0xe9, 0x7a, 0x6f, 0x7e, 0xb1, 0xcf, + 0x59, 0x7a, 0x8a, 0x17, 0x66, 0x16, 0xe0, 0x96, 0x05, 0x02, 0xad, 0xd5, 0x85, 0x74, 0xa9, 0x05, + 0xb8, 0x15, 0x00, 0x9c, 0xe0, 0xa0, 0x45, 0x21, 0x89, 0x96, 0x8c, 0xec, 0x51, 0x52, 0x12, 0x95, + 0x9f, 0xaf, 0x89, 0xa2, 0x2f, 0xc1, 0x98, 0xca, 0x22, 0x55, 0xe7, 0xc9, 0x78, 0x44, 0xe8, 0x85, + 0xd5, 0xa4, 0x18, 0xeb, 0x38, 0x68, 0x13, 0xa6, 0x22, 0x9e, 0x4f, 0x4b, 0x45, 0xd8, 0xe2, 0x7a, + 0x86, 0x4f, 0xcb, 0x77, 0xea, 0x86, 0x09, 0x3e, 0x61, 0x45, 0x7c, 0xb3, 0x4a, 0x47, 0xb0, 0x34, + 0x09, 0xf4, 0x26, 0x4c, 0x7a, 0x7a, 0x62, 0xe1, 0xba, 0x50, 0x43, 0x28, 0x33, 0x4e, 0x23, 0xed, + 0x70, 0x1d, 0xa7, 0xb0, 0x29, 0xd3, 0xa0, 0x97, 0x88, 0xa8, 0x70, 0x8e, 0xbf, 0x43, 0x22, 0x91, + 0x03, 0x87, 0x31, 0x0d, 0xb7, 0x73, 0x70, 0x70, 0x6e, 0x6d, 0xf4, 0x3a, 0x8c, 0xcb, 0xcf, 0xd7, + 0xdc, 0x1c, 0x13, 0x63, 0x61, 0x0d, 0x86, 0x0d, 0x4c, 0x74, 0x1f, 0x2e, 0xca, 0xff, 0x9b, 0xa1, + 0xb3, 0xbd, 0xed, 0x36, 0x85, 0x97, 0x29, 0xf7, 0x98, 0x58, 0x92, 0x2e, 0x18, 0xab, 0x59, 0x48, + 0x27, 0x47, 0x95, 0x2b, 0x62, 0xd4, 0x32, 0xe1, 0x6c, 0x12, 0xb3, 0xe9, 0xa3, 0x75, 0xb8, 0xb0, + 0x4b, 0x1c, 0x2f, 0xde, 0x5d, 0xd9, 0x25, 0xcd, 0x3d, 0xb9, 0x89, 0x98, 0xf3, 0xa4, 0x66, 0x62, + 0x7b, 0xb3, 0x1b, 0x05, 0x67, 0xd5, 0x43, 0xef, 0xc2, 0x5c, 0xbb, 0xb3, 0xe5, 0xb9, 0xd1, 0xee, + 0x46, 0x10, 0xb3, 0xa7, 0x71, 0x95, 0x84, 0x49, 0x78, 0x59, 0x2a, 0xc7, 0xd1, 0x7a, 0x0e, 0x1e, + 0xce, 0xa5, 0x80, 0x3e, 0x80, 0x8b, 0xa9, 0xc5, 0x20, 0x7c, 0xbe, 0x26, 0xf3, 0x63, 0x6c, 0x36, + 0xb2, 0x2a, 0x08, 0x1f, 0xae, 0x2c, 0x10, 0xce, 0x6e, 0xe2, 0xc3, 0x19, 0x4c, 0xbc, 0x4f, 0x2b, + 0x6b, 0xdc, 0x0d, 0xfa, 0x0a, 0x8c, 0xeb, 0xab, 0x48, 0x5c, 0x30, 0x57, 0xfb, 0x25, 0xd1, 0x16, + 0xbc, 0x91, 0x5a, 0x51, 0x3a, 0x0c, 0x1b, 0x14, 0x6d, 0x02, 0xd9, 0xdf, 0x87, 0x6e, 0xc3, 0x68, + 0xd3, 0x73, 0x89, 0x1f, 0xd7, 0xea, 0xbd, 0xa2, 0x09, 0xac, 0x08, 0x1c, 0x31, 0x60, 0x22, 0x28, + 0x21, 0x2f, 0xc3, 0x8a, 0x82, 0xfd, 0x9b, 0x05, 0xa8, 0xf4, 0x89, 0x70, 0x99, 0xd2, 0x19, 0x5a, + 0x03, 0xe9, 0x0c, 0x97, 0x64, 0x4a, 0xa9, 0x8d, 0x94, 0xbc, 0x9a, 0x4a, 0x17, 0x95, 0x48, 0xad, + 0x69, 0xfc, 0x81, 0xed, 0x2c, 0x75, 0xb5, 0x63, 0xa9, 0xaf, 0x05, 0xb0, 0xf1, 0xdc, 0x30, 0x34, + 0x38, 0x47, 0x9f, 0xab, 0x3a, 0xb6, 0xbf, 0x59, 0x80, 0x8b, 0x6a, 0x08, 0xff, 0xea, 0x0e, 0xdc, + 0xdd, 0xee, 0x81, 0x3b, 0x03, 0xc5, 0xbb, 0x7d, 0x07, 0x86, 0x1b, 0x87, 0x51, 0x33, 0xf6, 0x06, + 0x60, 0x80, 0x9e, 0x31, 0xa3, 0xea, 0xa8, 0x6b, 0xda, 0x88, 0xac, 0xf3, 0xd7, 0x2d, 0x98, 0xda, + 0x5c, 0xa9, 0x37, 0x82, 0xe6, 0x1e, 0x89, 0x97, 0xb8, 0x5a, 0x09, 0x0b, 0xfe, 0xc7, 0x7a, 0x48, + 0xbe, 0x26, 0x8b, 0x63, 0xba, 0x02, 0xa5, 0xdd, 0x20, 0x8a, 0xd3, 0xaf, 0x72, 0x37, 0x83, 0x28, + 0xc6, 0x0c, 0x62, 0xff, 0xbe, 0x05, 0x43, 0x2c, 0x11, 0x62, 0xbf, 0xec, 0x9c, 0x83, 0x7c, 0x17, + 0x7a, 0x15, 0x86, 0xc9, 0xf6, 0x36, 0x69, 0xc6, 0x62, 0x56, 0xa5, 0x5b, 0xdf, 0xf0, 0x2a, 0x2b, + 0xa5, 0x97, 0x3e, 0x6b, 0x8c, 0xff, 0xc5, 0x02, 0x19, 0xbd, 0x03, 0xe5, 0xd8, 0xdd, 0x27, 0x4b, + 0xad, 0x96, 0x78, 0xd7, 0x78, 0x08, 0x2f, 0xca, 0x4d, 0x49, 0x00, 0x27, 0xb4, 0xec, 0xaf, 0x15, + 0x00, 0x12, 0xd7, 0xe4, 0x7e, 0x9f, 0xb8, 0xdc, 0x95, 0x80, 0xf4, 0x6a, 0x46, 0x02, 0x52, 0x94, + 0x10, 0xcc, 0x48, 0x3f, 0xaa, 0x86, 0xa9, 0x38, 0xd0, 0x30, 0x95, 0x4e, 0x33, 0x4c, 0x2b, 0x30, + 0x93, 0xb8, 0x56, 0x9b, 0x71, 0x26, 0x58, 0xc4, 0xfb, 0xcd, 0x34, 0x10, 0x77, 0xe3, 0xdb, 0x3f, + 0x6c, 0x81, 0x70, 0x4f, 0x18, 0x60, 0x31, 0x7f, 0x49, 0xa6, 0xef, 0x33, 0x02, 0xe5, 0x5e, 0xc9, + 0xf7, 0xd7, 0x10, 0xe1, 0x71, 0xd5, 0xe5, 0x61, 0x04, 0xc5, 0x35, 0x68, 0xd9, 0x2d, 0x10, 0xd0, + 0x2a, 0x61, 0x4a, 0x86, 0xfe, 0xbd, 0xb9, 0x0e, 0xd0, 0x62, 0xb8, 0x5a, 0x3a, 0x30, 0x75, 0x54, + 0x55, 0x15, 0x04, 0x6b, 0x58, 0xf6, 0x8f, 0x17, 0x60, 0x4c, 0x06, 0x66, 0xa5, 0x72, 0x7c, 0xff, + 0x56, 0x4e, 0x95, 0x95, 0x81, 0xe5, 0xcf, 0xa3, 0x84, 0x55, 0xf0, 0x7e, 0x3d, 0x7f, 0x9e, 0x04, + 0xe0, 0x04, 0x07, 0x3d, 0x07, 0x23, 0x51, 0x67, 0x8b, 0xa1, 0xa7, 0x8c, 0xee, 0x1b, 0xbc, 0x18, + 0x4b, 0x38, 0xfa, 0x02, 0x4c, 0xf3, 0x7a, 0x61, 0xd0, 0x76, 0x76, 0xb8, 0xc6, 0x69, 0x48, 0x79, + 0xc1, 0x4d, 0xaf, 0xa7, 0x60, 0x27, 0x47, 0x95, 0xd9, 0x74, 0x19, 0xd3, 0x55, 0x76, 0x51, 0xb1, + 0xbf, 0x02, 0xa8, 0x3b, 0xd6, 0x2c, 0x7a, 0x8b, 0x9b, 0x55, 0xb8, 0x21, 0x69, 0x0d, 0x9c, 0x33, + 0x7e, 0x5c, 0x1a, 0x4f, 0xd0, 0x5a, 0x58, 0xd5, 0xa7, 0x3b, 0x6f, 0x3a, 0xed, 0xc2, 0x83, 0x6e, + 0xc2, 0x30, 0x3f, 0x54, 0x05, 0xf9, 0x1e, 0x6f, 0x5c, 0x9a, 0xe3, 0x0f, 0x0b, 0x84, 0x2f, 0xce, + 0x65, 0x51, 0x1f, 0xbd, 0x0b, 0x63, 0xad, 0xe0, 0xbe, 0x7f, 0xdf, 0x09, 0x5b, 0x4b, 0xf5, 0x9a, + 0x58, 0x97, 0x99, 0xbc, 0x59, 0x35, 0x41, 0xd3, 0x9d, 0x89, 0x98, 0x3e, 0x37, 0x01, 0x61, 0x9d, + 0x1c, 0xda, 0xd4, 0x73, 0x7f, 0xf7, 0xb0, 0x83, 0x53, 0xc9, 0xbd, 0x35, 0xca, 0xf9, 0x59, 0xbf, + 0xbf, 0x7a, 0x01, 0x8c, 0xfd, 0x60, 0xe4, 0x7d, 0xb0, 0xce, 0x28, 0xef, 0x03, 0x86, 0x51, 0xb2, + 0xdf, 0x8e, 0x0f, 0xab, 0x6e, 0xd8, 0x2b, 0x71, 0xd0, 0xaa, 0xc0, 0xe9, 0xa6, 0x29, 0x21, 0x58, + 0xd1, 0xc9, 0x4e, 0xce, 0x51, 0xfc, 0x08, 0x93, 0x73, 0x94, 0xce, 0x31, 0x39, 0xc7, 0x06, 0x8c, + 0xec, 0xb8, 0x31, 0x26, 0xed, 0x40, 0x30, 0x14, 0x99, 0x2b, 0xe1, 0x06, 0x47, 0xe9, 0x0e, 0x0d, + 0x2f, 0x00, 0x58, 0x12, 0x41, 0x6f, 0xa9, 0x3d, 0x30, 0x9c, 0xcf, 0x8f, 0x77, 0x3f, 0x87, 0x64, + 0xee, 0x02, 0x91, 0x8c, 0x63, 0xe4, 0x61, 0x93, 0x71, 0xac, 0xc9, 0x14, 0x1a, 0xa3, 0xf9, 0x66, + 0xa3, 0x2c, 0x43, 0x46, 0x9f, 0xc4, 0x19, 0x46, 0xb2, 0x91, 0xf2, 0xd9, 0x25, 0x1b, 0xf9, 0x61, + 0x0b, 0x2e, 0xb6, 0xb3, 0xf2, 0xee, 0x88, 0x14, 0x18, 0xaf, 0x0e, 0x9c, 0x58, 0xc8, 0x68, 0x90, + 0x09, 0x66, 0x99, 0x68, 0x38, 0xbb, 0x39, 0x3a, 0xd0, 0xe1, 0x56, 0x4b, 0xe4, 0xcd, 0x78, 0x26, + 0x27, 0x6b, 0x49, 0x8f, 0x5c, 0x25, 0x9b, 0x19, 0xb9, 0x32, 0x3e, 0x99, 0x97, 0x2b, 0x63, 0xe0, + 0x0c, 0x19, 0x49, 0xbe, 0x92, 0x89, 0x0f, 0x9d, 0xaf, 0xe4, 0x2d, 0x95, 0xaf, 0xa4, 0x47, 0xd4, + 0x21, 0x9e, 0x8d, 0xa4, 0x6f, 0x96, 0x12, 0x2d, 0xd3, 0xc8, 0xd4, 0xd9, 0x64, 0x1a, 0x31, 0x0e, + 0x7b, 0x9e, 0xec, 0xe2, 0xf9, 0x3e, 0x87, 0xbd, 0x41, 0xb7, 0xf7, 0x71, 0xcf, 0xb3, 0xaa, 0xcc, + 0x3c, 0x54, 0x56, 0x95, 0x7b, 0x7a, 0x96, 0x12, 0xd4, 0x27, 0x0d, 0x07, 0x45, 0x1a, 0x30, 0x37, + 0xc9, 0x3d, 0xfd, 0x0a, 0xba, 0x90, 0x4f, 0x57, 0xdd, 0x34, 0xdd, 0x74, 0xb3, 0x2e, 0xa1, 0xee, + 0x9c, 0x27, 0xb3, 0xe7, 0x93, 0xf3, 0xe4, 0xe2, 0x99, 0xe7, 0x3c, 0x79, 0xec, 0x1c, 0x72, 0x9e, + 0x3c, 0xfe, 0x91, 0xe6, 0x3c, 0x99, 0x7b, 0x04, 0x39, 0x4f, 0x36, 0x92, 0x9c, 0x27, 0x97, 0xf2, + 0xa7, 0x24, 0xc3, 0x4e, 0x2e, 0x27, 0xd3, 0xc9, 0x3d, 0x28, 0xb7, 0xa5, 0x97, 0xb7, 0x08, 0x8b, + 0x94, 0x9d, 0x6c, 0x31, 0xcb, 0x15, 0x9c, 0x4f, 0x89, 0x02, 0xe1, 0x84, 0x14, 0xa5, 0x9b, 0x64, + 0x3e, 0x79, 0xa2, 0x87, 0xea, 0x2d, 0x4b, 0xa9, 0x91, 0x9f, 0xef, 0xc4, 0xfe, 0x1b, 0x05, 0xb8, + 0xdc, 0x7b, 0x5d, 0x27, 0x1a, 0x91, 0x7a, 0xa2, 0xc1, 0x4f, 0x69, 0x44, 0xb8, 0x98, 0x91, 0x60, + 0x0d, 0x1c, 0x0a, 0xe3, 0x06, 0xcc, 0x28, 0x03, 0x39, 0xcf, 0x6d, 0x1e, 0x6a, 0x49, 0x18, 0x95, + 0xb3, 0x4e, 0x23, 0x8d, 0x80, 0xbb, 0xeb, 0xa0, 0x25, 0x98, 0x32, 0x0a, 0x6b, 0x55, 0x21, 0x4e, + 0x28, 0x15, 0x4c, 0xc3, 0x04, 0xe3, 0x34, 0xbe, 0xfd, 0x75, 0x0b, 0x1e, 0xcf, 0x09, 0x07, 0x3e, + 0x70, 0xa4, 0x87, 0x6d, 0x98, 0x6a, 0x9b, 0x55, 0xfb, 0x04, 0x84, 0x31, 0x82, 0x8e, 0xab, 0xbe, + 0xa6, 0x00, 0x38, 0x4d, 0x74, 0xf9, 0xda, 0x6f, 0xff, 0xe1, 0xe5, 0x4f, 0xfc, 0xee, 0x1f, 0x5e, + 0xfe, 0xc4, 0xef, 0xfd, 0xe1, 0xe5, 0x4f, 0xfc, 0x7f, 0xc7, 0x97, 0xad, 0xdf, 0x3e, 0xbe, 0x6c, + 0xfd, 0xee, 0xf1, 0x65, 0xeb, 0xf7, 0x8e, 0x2f, 0x5b, 0x7f, 0x70, 0x7c, 0xd9, 0xfa, 0xda, 0x1f, + 0x5d, 0xfe, 0xc4, 0x97, 0x0a, 0x07, 0x2f, 0xfd, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x72, 0x3b, + 0x4e, 0x60, 0xe2, 0xdd, 0x00, 0x00, } diff --git a/staging/src/k8s.io/api/core/v1/generated.proto b/staging/src/k8s.io/api/core/v1/generated.proto index 643d256d38..2ee9b7c4d9 100644 --- a/staging/src/k8s.io/api/core/v1/generated.proto +++ b/staging/src/k8s.io/api/core/v1/generated.proto @@ -439,6 +439,34 @@ message ConfigMapList { repeated ConfigMap items = 2; } +// ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node. +message ConfigMapNodeConfigSource { + // Namespace is the metadata.namespace of the referenced ConfigMap. + // This field is required in all cases. + optional string namespace = 1; + + // Name is the metadata.name of the referenced ConfigMap. + // This field is required in all cases. + optional string name = 2; + + // UID is the metadata.UID of the referenced ConfigMap. + // This field is currently reqired in Node.Spec. + // TODO(#61643): This field will be forbidden in Node.Spec when #61643 is resolved. + // TODO(#56896): This field will be required in Node.Status when #56896 is resolved. + // +optional + optional string uid = 3; + + // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. + // This field is forbidden in Node.Spec. + // TODO(#56896): This field will be required in Node.Status when #56896 is resolved. + // +optional + optional string resourceVersion = 4; + + // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure + // This field is required in all cases. + optional string kubeletConfigKey = 5; +} + // Adapts a ConfigMap into a projected volume. // // The contents of the target ConfigMap's Data field will be presented in a @@ -1815,7 +1843,8 @@ message NodeCondition { // NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil. message NodeConfigSource { - optional ObjectReference configMapRef = 1; + // ConfigMap is a reference to a Node's ConfigMap + optional ConfigMapNodeConfigSource configMap = 2; } // NodeDaemonEndpoints lists ports opened by daemons running on the Node. diff --git a/staging/src/k8s.io/api/core/v1/register.go b/staging/src/k8s.io/api/core/v1/register.go index 526e1320ad..1aac0cb41e 100644 --- a/staging/src/k8s.io/api/core/v1/register.go +++ b/staging/src/k8s.io/api/core/v1/register.go @@ -57,7 +57,6 @@ func addKnownTypes(scheme *runtime.Scheme) error { &Endpoints{}, &EndpointsList{}, &Node{}, - &NodeConfigSource{}, &NodeList{}, &NodeProxyOptions{}, &Binding{}, diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go index 7ccae7683b..d4c9260c55 100644 --- a/staging/src/k8s.io/api/core/v1/types.go +++ b/staging/src/k8s.io/api/core/v1/types.go @@ -3640,12 +3640,49 @@ type NodeSpec struct { DoNotUse_ExternalID string `json:"externalID,omitempty" protobuf:"bytes,2,opt,name=externalID"` } -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - // NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil. type NodeConfigSource struct { - metav1.TypeMeta `json:",inline"` - ConfigMapRef *ObjectReference `json:"configMapRef,omitempty" protobuf:"bytes,1,opt,name=configMapRef"` + // For historical context, regarding the below kind, apiVersion, and configMapRef deprecation tags: + // 1. kind/apiVersion were used by the kubelet to persist this struct to disk (they had no protobuf tags) + // 2. configMapRef and proto tag 1 were used by the API to refer to a configmap, + // but used a generic ObjectReference type that didn't really have the fields we needed + // All uses/persistence of the NodeConfigSource struct prior to 1.11 were gated by alpha feature flags, + // so there was no persisted data for these fields that needed to be migrated/handled. + + // +k8s:deprecated=kind + // +k8s:deprecated=apiVersion + // +k8s:deprecated=configMapRef,protobuf=1 + + // ConfigMap is a reference to a Node's ConfigMap + ConfigMap *ConfigMapNodeConfigSource `json:"configMap,omitempty" protobuf:"bytes,2,opt,name=configMap"` +} + +// ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node. +type ConfigMapNodeConfigSource struct { + // Namespace is the metadata.namespace of the referenced ConfigMap. + // This field is required in all cases. + Namespace string `json:"namespace" protobuf:"bytes,1,opt,name=namespace"` + + // Name is the metadata.name of the referenced ConfigMap. + // This field is required in all cases. + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + + // UID is the metadata.UID of the referenced ConfigMap. + // This field is currently reqired in Node.Spec. + // TODO(#61643): This field will be forbidden in Node.Spec when #61643 is resolved. + // TODO(#56896): This field will be required in Node.Status when #56896 is resolved. + // +optional + UID types.UID `json:"uid,omitempty" protobuf:"bytes,3,opt,name=uid"` + + // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. + // This field is forbidden in Node.Spec. + // TODO(#56896): This field will be required in Node.Status when #56896 is resolved. + // +optional + ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,4,opt,name=resourceVersion"` + + // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure + // This field is required in all cases. + KubeletConfigKey string `json:"kubeletConfigKey" protobuf:"bytes,5,opt,name=kubeletConfigKey"` } // DaemonEndpoint contains information about a single Daemon endpoint. diff --git a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go index 4177e499d9..2aa49d5b69 100644 --- a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -262,6 +262,19 @@ func (ConfigMapList) SwaggerDoc() map[string]string { return map_ConfigMapList } +var map_ConfigMapNodeConfigSource = map[string]string{ + "": "ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.", + "namespace": "Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.", + "name": "Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.", + "uid": "UID is the metadata.UID of the referenced ConfigMap. This field is currently reqired in Node.Spec.", + "resourceVersion": "ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec.", + "kubeletConfigKey": "KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.", +} + +func (ConfigMapNodeConfigSource) SwaggerDoc() map[string]string { + return map_ConfigMapNodeConfigSource +} + var map_ConfigMapProjection = map[string]string{ "": "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected 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. Note that this is identical to a configmap volume source without the default mode.", "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 '..'.", @@ -969,7 +982,8 @@ func (NodeCondition) SwaggerDoc() map[string]string { } var map_NodeConfigSource = map[string]string{ - "": "NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.", + "": "NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.", + "configMap": "ConfigMap is a reference to a Node's ConfigMap", } func (NodeConfigSource) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go index 47b6220523..d2d3978b82 100644 --- a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -631,6 +631,22 @@ func (in *ConfigMapList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigMapNodeConfigSource) DeepCopyInto(out *ConfigMapNodeConfigSource) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapNodeConfigSource. +func (in *ConfigMapNodeConfigSource) DeepCopy() *ConfigMapNodeConfigSource { + if in == nil { + return nil + } + out := new(ConfigMapNodeConfigSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConfigMapProjection) DeepCopyInto(out *ConfigMapProjection) { *out = *in @@ -2360,13 +2376,12 @@ func (in *NodeCondition) DeepCopy() *NodeCondition { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeConfigSource) DeepCopyInto(out *NodeConfigSource) { *out = *in - out.TypeMeta = in.TypeMeta - if in.ConfigMapRef != nil { - in, out := &in.ConfigMapRef, &out.ConfigMapRef + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap if *in == nil { *out = nil } else { - *out = new(ObjectReference) + *out = new(ConfigMapNodeConfigSource) **out = **in } } @@ -2383,14 +2398,6 @@ func (in *NodeConfigSource) DeepCopy() *NodeConfigSource { return out } -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeConfigSource) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeDaemonEndpoints) DeepCopyInto(out *NodeDaemonEndpoints) { *out = *in diff --git a/test/e2e_node/dynamic_kubelet_config_test.go b/test/e2e_node/dynamic_kubelet_config_test.go index b3af81a665..fe1b073dd8 100644 --- a/test/e2e_node/dynamic_kubelet_config_test.go +++ b/test/e2e_node/dynamic_kubelet_config_test.go @@ -84,10 +84,12 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube // were initially set via the locally provisioned configuration. // This is the same strategy several other e2e node tests use. setAndTestKubeletConfigState(f, &configState{desc: "reset to original values", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: originalConfigMap.UID, - Namespace: originalConfigMap.Namespace, - Name: originalConfigMap.Name}}, + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: originalConfigMap.UID, + Namespace: originalConfigMap.Namespace, + Name: originalConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionTrue, Message: fmt.Sprintf(status.CurRemoteMessageFmt, configMapAPIPath(originalConfigMap)), Reason: status.CurRemoteOkayReason}, @@ -123,8 +125,8 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube framework.ExpectNoError(err) states := []configState{ - // Node.Spec.ConfigSource is nil - {desc: "Node.Spec.ConfigSource is nil", + { + desc: "Node.Spec.ConfigSource is nil", configSource: nil, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionTrue, Message: status.CurLocalMessage, @@ -132,65 +134,107 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube expectConfig: nil, event: true, }, - // Node.Spec.ConfigSource has all nil subfields {desc: "Node.Spec.ConfigSource has all nil subfields", configSource: &apiv1.NodeConfigSource{}, apierr: "exactly one reference subfield must be non-nil", }, - - // Node.Spec.ConfigSource.ConfigMapRef is partial - {desc: "Node.Spec.ConfigSource.ConfigMapRef is partial", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: "foo", - Name: "bar"}}, // missing Namespace - apierr: "name, namespace, and UID must all be non-empty", + // Node.Spec.ConfigSource.ConfigMap is partial + {desc: "Node.Spec.ConfigSource.ConfigMap is partial", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: "foo", + Name: "bar", + KubeletConfigKey: "kubelet", + }}, // missing Namespace + apierr: "spec.configSource.configMap.namespace: Required value: namespace must be set in spec", }, - - // Node.Spec.ConfigSource's UID does not align with namespace/name - {desc: "Node.Spec.ConfigSource.ConfigMapRef.UID does not align with Namespace/Name", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{UID: "foo", - Namespace: correctConfigMap.Namespace, - Name: correctConfigMap.Name}}, + {desc: "Node.Spec.ConfigSource.ConfigMap.ResourceVersion is illegally specified", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: "foo", + Name: "bar", + Namespace: "baz", + ResourceVersion: "1", + KubeletConfigKey: "kubelet", + }}, + apierr: "spec.configSource.configMap.resourceVersion: Forbidden: resourceVersion must not be set in spec", + }, + {desc: "Node.Spec.ConfigSource.ConfigMap has invalid namespace", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: "foo", + Name: "bar", + Namespace: "../baz", + KubeletConfigKey: "kubelet", + }}, + apierr: "spec.configSource.configMap.namespace: Invalid value", + }, + {desc: "Node.Spec.ConfigSource.ConfigMap has invalid name", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: "foo", + Name: "../bar", + Namespace: "baz", + KubeletConfigKey: "kubelet", + }}, + apierr: "spec.configSource.configMap.name: Invalid value", + }, + {desc: "Node.Spec.ConfigSource.ConfigMap has invalid kubeletConfigKey", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: "foo", + Name: "bar", + Namespace: "baz", + KubeletConfigKey: "../qux", + }}, + apierr: "spec.configSource.configMap.kubeletConfigKey: Invalid value", + }, + { + desc: "Node.Spec.ConfigSource.ConfigMap.UID does not align with Namespace/Name", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: "foo", + Namespace: correctConfigMap.Namespace, + Name: correctConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionFalse, Message: "", Reason: fmt.Sprintf(status.FailSyncReasonFmt, fmt.Sprintf(status.FailSyncReasonUIDMismatchFmt, "foo", configMapAPIPath(correctConfigMap), correctConfigMap.UID))}, expectConfig: nil, event: false, }, - - // correct - {desc: "correct", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: correctConfigMap.UID, - Namespace: correctConfigMap.Namespace, - Name: correctConfigMap.Name}}, + { + desc: "correct", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: correctConfigMap.UID, + Namespace: correctConfigMap.Namespace, + Name: correctConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionTrue, Message: fmt.Sprintf(status.CurRemoteMessageFmt, configMapAPIPath(correctConfigMap)), Reason: status.CurRemoteOkayReason}, expectConfig: correctKC, event: true, }, - - // fail-parse - {desc: "fail-parse", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: failParseConfigMap.UID, - Namespace: failParseConfigMap.Namespace, - Name: failParseConfigMap.Name}}, + { + desc: "fail-parse", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: failParseConfigMap.UID, + Namespace: failParseConfigMap.Namespace, + Name: failParseConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionFalse, Message: status.LkgLocalMessage, Reason: fmt.Sprintf(status.CurFailLoadReasonFmt, configMapAPIPath(failParseConfigMap))}, expectConfig: nil, event: true, }, - - // fail-validate - {desc: "fail-validate", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: failValidateConfigMap.UID, - Namespace: failValidateConfigMap.Namespace, - Name: failValidateConfigMap.Name}}, + { + desc: "fail-validate", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: failValidateConfigMap.UID, + Namespace: failValidateConfigMap.Namespace, + Name: failValidateConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionFalse, Message: status.LkgLocalMessage, Reason: fmt.Sprintf(status.CurFailValidateReasonFmt, configMapAPIPath(failValidateConfigMap))}, @@ -229,10 +273,12 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube states := []configState{ // intended lkg {desc: "intended last-known-good", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: lkgConfigMap.UID, - Namespace: lkgConfigMap.Namespace, - Name: lkgConfigMap.Name}}, + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: lkgConfigMap.UID, + Namespace: lkgConfigMap.Namespace, + Name: lkgConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionTrue, Message: fmt.Sprintf(status.CurRemoteMessageFmt, configMapAPIPath(lkgConfigMap)), Reason: status.CurRemoteOkayReason}, @@ -242,10 +288,12 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube // bad config {desc: "bad config", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: badConfigMap.UID, - Namespace: badConfigMap.Namespace, - Name: badConfigMap.Name}}, + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: badConfigMap.UID, + Namespace: badConfigMap.Namespace, + Name: badConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionFalse, Message: fmt.Sprintf(status.LkgRemoteMessageFmt, configMapAPIPath(lkgConfigMap)), Reason: fmt.Sprintf(status.CurFailLoadReasonFmt, configMapAPIPath(badConfigMap))}, @@ -259,6 +307,55 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube }) }) + Context("When a remote config becomes the new last-known-good, and then Node.ConfigSource.ConfigMap.KubeletConfigKey is updated to use a new, bad config", func() { + It("the Kubelet should report a status and configz indicating that it rolled back to the new last-known-good", func() { + const badConfigKey = "bad" + var err error + // we base the "lkg" configmap off of the current configuration + lkgKC := originalKC.DeepCopy() + combinedConfigMap := newKubeletConfigMap("dynamic-kubelet-config-test-combined", lkgKC) + combinedConfigMap.Data[badConfigKey] = "{0xdeadbeef}" + combinedConfigMap, err = f.ClientSet.CoreV1().ConfigMaps("kube-system").Create(combinedConfigMap) + framework.ExpectNoError(err) + + states := []configState{ + // intended lkg + {desc: "intended last-known-good", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: combinedConfigMap.UID, + Namespace: combinedConfigMap.Namespace, + Name: combinedConfigMap.Name, + KubeletConfigKey: "kubelet", + }}, + expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionTrue, + Message: fmt.Sprintf(status.CurRemoteMessageFmt, configMapAPIPath(combinedConfigMap)), + Reason: status.CurRemoteOkayReason}, + expectConfig: lkgKC, + event: true, + }, + + // bad config + {desc: "bad config", + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: combinedConfigMap.UID, + Namespace: combinedConfigMap.Namespace, + Name: combinedConfigMap.Name, + KubeletConfigKey: badConfigKey, + }}, + expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionFalse, + // TODO(mtaufen): status should be more informative, and report the key being used + Message: fmt.Sprintf(status.LkgRemoteMessageFmt, configMapAPIPath(combinedConfigMap)), + Reason: fmt.Sprintf(status.CurFailLoadReasonFmt, configMapAPIPath(combinedConfigMap))}, + expectConfig: lkgKC, + event: true, + }, + } + + // wait 12 minutes after setting the first config to ensure it has time to pass the trial duration + testBothDirections(f, &states[0], states[1:], 12*time.Minute) + }) + }) + // This stress test will help turn up resource leaks across kubelet restarts that can, over time, // break our ability to dynamically update kubelet config Context("When changing the configuration 100 times", func() { @@ -280,10 +377,12 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube states := []configState{ {desc: "cm1", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: cm1.UID, - Namespace: cm1.Namespace, - Name: cm1.Name}}, + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: cm1.UID, + Namespace: cm1.Namespace, + Name: cm1.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionTrue, Message: fmt.Sprintf(status.CurRemoteMessageFmt, configMapAPIPath(cm1)), Reason: status.CurRemoteOkayReason}, @@ -292,10 +391,12 @@ var _ = framework.KubeDescribe("DynamicKubeletConfiguration [Feature:DynamicKube }, {desc: "cm2", - configSource: &apiv1.NodeConfigSource{ConfigMapRef: &apiv1.ObjectReference{ - UID: cm2.UID, - Namespace: cm2.Namespace, - Name: cm2.Name}}, + configSource: &apiv1.NodeConfigSource{ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + UID: cm2.UID, + Namespace: cm2.Namespace, + Name: cm2.Name, + KubeletConfigKey: "kubelet", + }}, expectConfigOk: &apiv1.NodeCondition{Type: apiv1.NodeKubeletConfigOk, Status: apiv1.ConditionTrue, Message: fmt.Sprintf(status.CurRemoteMessageFmt, configMapAPIPath(cm2)), Reason: status.CurRemoteOkayReason}, @@ -335,7 +436,7 @@ func testBothDirections(f *framework.Framework, first *configState, states []con } } -// setAndTestKubeletConfigState tests that after setting the config source, the ConfigOk condition +// setAndTestKubeletConfigState tests that after setting the config source, the KubeletConfigOk condition // and (if appropriate) configuration exposed via conifgz are as expected. // The configuration will be converted to the internal type prior to comparison. func setAndTestKubeletConfigState(f *framework.Framework, state *configState, expectEvent bool) { @@ -479,8 +580,8 @@ func checkEvent(f *framework.Framework, desc string, expect *apiv1.NodeConfigSou // ensure the message is what we expect (including the resource path) expectMessage := fmt.Sprintf(controller.EventMessageFmt, controller.LocalConfigMessage) if expect != nil { - if expect.ConfigMapRef != nil { - expectMessage = fmt.Sprintf(controller.EventMessageFmt, fmt.Sprintf("/api/v1/namespaces/%s/configmaps/%s", expect.ConfigMapRef.Namespace, expect.ConfigMapRef.Name)) + if expect.ConfigMap != nil { + expectMessage = fmt.Sprintf(controller.EventMessageFmt, fmt.Sprintf("/api/v1/namespaces/%s/configmaps/%s", expect.ConfigMap.Namespace, expect.ConfigMap.Name)) } } if expectMessage != recent.Message { diff --git a/test/e2e_node/util.go b/test/e2e_node/util.go index 1faf723379..679c7278f7 100644 --- a/test/e2e_node/util.go +++ b/test/e2e_node/util.go @@ -57,8 +57,10 @@ var startServices = flag.Bool("start-services", true, "If true, start local node var stopServices = flag.Bool("stop-services", true, "If true, stop local node services after running tests") var busyboxImage = "busybox" -// Kubelet internal cgroup name for node allocatable cgroup. -const defaultNodeAllocatableCgroup = "kubepods" +const ( + // Kubelet internal cgroup name for node allocatable cgroup. + defaultNodeAllocatableCgroup = "kubepods" +) func getNodeSummary() (*stats.Summary, error) { req, err := http.NewRequest("GET", *kubeletAddress+"/stats/summary", nil) @@ -167,10 +169,11 @@ func setKubeletConfiguration(f *framework.Framework, kubeCfg *kubeletconfig.Kube // create the reference and set Node.Spec.ConfigSource src := &apiv1.NodeConfigSource{ - ConfigMapRef: &apiv1.ObjectReference{ - Namespace: "kube-system", - Name: cm.Name, - UID: cm.UID, + ConfigMap: &apiv1.ConfigMapNodeConfigSource{ + Namespace: "kube-system", + Name: cm.Name, + UID: cm.UID, + KubeletConfigKey: "kubelet", }, } diff --git a/test/integration/apiserver/print_test.go b/test/integration/apiserver/print_test.go index 85bfa4c3f4..2322336b6d 100644 --- a/test/integration/apiserver/print_test.go +++ b/test/integration/apiserver/print_test.go @@ -50,7 +50,6 @@ var kindWhiteList = sets.NewString( "ExportOptions", "GetOptions", "ListOptions", - "NodeConfigSource", "NodeProxyOptions", "PodAttachOptions", "PodExecOptions", diff --git a/test/integration/auth/node_test.go b/test/integration/auth/node_test.go index 92efd530e7..7a8fcec996 100644 --- a/test/integration/auth/node_test.go +++ b/test/integration/auth/node_test.go @@ -286,12 +286,13 @@ func TestNodeAuthorizer(t *testing.T) { return err } node2.Spec.ConfigSource = &api.NodeConfigSource{ - ConfigMapRef: &api.ObjectReference{ + ConfigMap: &api.ConfigMapNodeConfigSource{ Namespace: "ns", Name: "myconfigmapconfigsource", // validation just requires UID to be non-empty and it isn't necessary for GET, // so we just use a bogus one for the test - UID: "uid", + UID: "uid", + KubeletConfigKey: "kubelet", }, } _, err = client.Core().Nodes().Update(node2) diff --git a/test/integration/etcd/etcd_storage_path_test.go b/test/integration/etcd/etcd_storage_path_test.go index 6c8d212aca..ed29439475 100644 --- a/test/integration/etcd/etcd_storage_path_test.go +++ b/test/integration/etcd/etcd_storage_path_test.go @@ -437,7 +437,6 @@ var ephemeralWhiteList = createEphemeralWhiteList( gvk("", "v1", "RangeAllocation"), // stored in various places in etcd but cannot be directly created gvk("", "v1", "ComponentStatus"), // status info not stored in etcd gvk("", "v1", "SerializedReference"), // used for serilization, not stored in etcd - gvk("", "v1", "NodeConfigSource"), // subfield of node.spec, but shouldn't be directly created gvk("", "v1", "PodStatusResult"), // wrapper object not stored in etcd // --