From facd1d114918b4dbf0e01551bd117484234a3d21 Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Mon, 1 Feb 2021 11:04:49 -0300 Subject: [PATCH 1/9] Fix merge conflict in kube_features --- pkg/apis/networking/types.go | 12 +++++++-- pkg/apis/networking/validation/validation.go | 10 +++++++ pkg/features/kube_features.go | 7 +++++ pkg/registry/networking/networkpolicy/BUILD | 2 ++ .../networking/networkpolicy/strategy.go | 27 +++++++++++++++++++ .../k8s.io/api/extensions/v1beta1/types.go | 15 +++++++---- staging/src/k8s.io/api/networking/v1/types.go | 14 +++++++--- 7 files changed, 77 insertions(+), 10 deletions(-) diff --git a/pkg/apis/networking/types.go b/pkg/apis/networking/types.go index 4ba83a844e89..dfeafdea4053 100644 --- a/pkg/apis/networking/types.go +++ b/pkg/apis/networking/types.go @@ -138,10 +138,18 @@ type NetworkPolicyPort struct { // +optional Protocol *api.Protocol - // The port on the given protocol. This can either be a numerical or named port on - // a pod. If this field is not provided, this matches all port names and numbers. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional Port *intstr.IntOrString + + // EndPort, if set, indicates that a range of ports, from Port to EndPort inclusive + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // +optional + EndPort *int32 } // IPBlock describes a particular CIDR (Ex. "192.168.1.1/24","2001:db9::/64") that is allowed diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index b053d279e64f..5fd17a12de34 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -68,11 +68,21 @@ func ValidateNetworkPolicyPort(port *networking.NetworkPolicyPort, portPath *fie for _, msg := range validation.IsValidPortNum(int(port.Port.IntVal)) { allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.IntVal, msg)) } + if *port.EndPort < port.Port.IntVal { + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.IntVal, "endPort field must be equal or bigger than port field")) + } } else { + if port.EndPort != nil { + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.StrVal, "endPort cannot be used when port is non-numeric")) + } for _, msg := range validation.IsValidPortName(port.Port.StrVal) { allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.StrVal, msg)) } } + } else { + if port.EndPort != nil { + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "endPort cannot be defined when port is not defined")) + } } return allErrs diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index f7fe6a7ec828..7aca68e84a77 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -297,6 +297,12 @@ const ( // Enables SCTP as new protocol for Service ports, NetworkPolicy, and ContainerPort in Pod/Containers definition SCTPSupport featuregate.Feature = "SCTPSupport" + // owner: @rikatz + // alpha: v1.20 + // + // Enables the endPort field in NetworkPolicy to enable a Port Range behavior in Network Policies. + NetworkPolicyEndPort featuregate.Feature = "NetworkPolicyEndPort" + // owner: @xing-yang // alpha: v1.12 // beta: v1.17 @@ -728,6 +734,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS RuntimeClass: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.23 NodeLease: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, SCTPSupport: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.22 + NetworkPolicyEndPort: {Default: false, PreRelease: featuregate.Alpha}, VolumeSnapshotDataSource: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.21 ProcMountType: {Default: false, PreRelease: featuregate.Alpha}, TTLAfterFinished: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/pkg/registry/networking/networkpolicy/BUILD b/pkg/registry/networking/networkpolicy/BUILD index 2c86b95be8f4..a15c1ed74a72 100644 --- a/pkg/registry/networking/networkpolicy/BUILD +++ b/pkg/registry/networking/networkpolicy/BUILD @@ -16,9 +16,11 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/networking:go_default_library", "//pkg/apis/networking/validation:go_default_library", + "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index 8dc3ea7edea6..1e09d337e806 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -26,6 +26,9 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/networking" "k8s.io/kubernetes/pkg/apis/networking/validation" + "k8s.io/kubernetes/pkg/features" + + utilfeature "k8s.io/apiserver/pkg/util/feature" ) // networkPolicyStrategy implements verification logic for NetworkPolicies @@ -46,6 +49,7 @@ func (networkPolicyStrategy) NamespaceScoped() bool { func (networkPolicyStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { networkPolicy := obj.(*networking.NetworkPolicy) networkPolicy.Generation = 1 + dropNetworkPolicyDisabledFields(networkPolicy, nil) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -53,6 +57,7 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt newNetworkPolicy := obj.(*networking.NetworkPolicy) oldNetworkPolicy := old.(*networking.NetworkPolicy) + dropNetworkPolicyDisabledFields(newNetworkPolicy, oldNetworkPolicy) // Any changes to the spec increment the generation number, any changes to the // status should reflect the generation number of the corresponding object. // See metav1.ObjectMeta description for more information on Generation. @@ -86,3 +91,25 @@ func (networkPolicyStrategy) ValidateUpdate(ctx context.Context, obj, old runtim func (networkPolicyStrategy) AllowUnconditionalUpdate() bool { return true } + +// Drops Network Policy Disabled fields if Feature Gate is also disabled. +// This should be used in future Network Policy evolutions +func dropNetworkPolicyDisabledFields(newNetPol *networking.NetworkPolicy, oldNetPol *networking.NetworkPolicy) { + // Clear NetworkPolicyPort EndPort if NetworkPolicyEndPort is not enabled + for idx, ingressSpec := range oldNetPol.Spec.Ingress { + for idxPort, port := range ingressSpec.Ports { + if port.EndPort != nil && !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { + newNetPol.Spec.Ingress[idx].Ports[idxPort].EndPort = nil + } + } + } + + for idx, egressSpec := range oldNetPol.Spec.Egress { + for idxPort, port := range egressSpec.Ports { + if port.EndPort != nil && !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { + newNetPol.Spec.Egress[idx].Ports[idxPort].EndPort = nil + } + } + } + +} diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index 0c22a0a69e5f..f66c31bc9fb0 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1471,13 +1471,18 @@ type NetworkPolicyPort struct { // +optional Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"` - // If specified, the port on the given protocol. This can - // either be a numerical or named port on a pod. If this field is not provided, - // this matches all port names and numbers. - // If present, only traffic on the specified protocol AND port - // will be matched. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` + + // EndPort, if set, indicates that a range of ports, from Port to EndPort inclusive + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // +optional + EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` } // DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. diff --git a/staging/src/k8s.io/api/networking/v1/types.go b/staging/src/k8s.io/api/networking/v1/types.go index df2569089c7a..490dd759506b 100644 --- a/staging/src/k8s.io/api/networking/v1/types.go +++ b/staging/src/k8s.io/api/networking/v1/types.go @@ -38,7 +38,7 @@ type NetworkPolicy struct { Spec NetworkPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } -// Policy Type string describes the NetworkPolicy type +// PolicyType string describes the NetworkPolicy type // This type is beta-level in 1.8 type PolicyType string @@ -141,10 +141,18 @@ type NetworkPolicyPort struct { // +optional Protocol *v1.Protocol `json:"protocol,omitempty" protobuf:"bytes,1,opt,name=protocol,casttype=k8s.io/api/core/v1.Protocol"` - // The port on the given protocol. This can either be a numerical or named port on - // a pod. If this field is not provided, this matches all port names and numbers. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` + + // EndPort, if set, indicates that a range of ports, from Port to EndPort inclusive + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // +optional + EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` } // IPBlock describes a particular CIDR (Ex. "192.168.1.1/24","2001:db9::/64") that is allowed From 4a89e0239aef8a62842c56b58e0588545bebc523 Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Tue, 15 Dec 2020 18:28:25 -0300 Subject: [PATCH 2/9] Add alpha support for EndPort in Network Policy Signed-off-by: Ricardo Pchevuzinske Katz --- pkg/apis/networking/types.go | 3 +- pkg/apis/networking/validation/validation.go | 4 +- .../networking/validation/validation_test.go | 222 ++++++++++++++++- pkg/registry/networking/networkpolicy/BUILD | 16 ++ .../networking/networkpolicy/strategy.go | 47 +++- .../networking/networkpolicy/strategy_test.go | 235 ++++++++++++++++++ .../k8s.io/api/extensions/v1beta1/types.go | 3 +- 7 files changed, 513 insertions(+), 17 deletions(-) create mode 100644 pkg/registry/networking/networkpolicy/strategy_test.go diff --git a/pkg/apis/networking/types.go b/pkg/apis/networking/types.go index dfeafdea4053..f43daaf2d3b0 100644 --- a/pkg/apis/networking/types.go +++ b/pkg/apis/networking/types.go @@ -145,9 +145,10 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString - // EndPort, if set, indicates that a range of ports, from Port to EndPort inclusive + // endPort, if set, indicates that a range of ports, from port to endPort inclusive // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. + // Also the endPort must be equal or greater than port // +optional EndPort *int32 } diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index 5fd17a12de34..a6d5412eb95e 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -68,8 +68,8 @@ func ValidateNetworkPolicyPort(port *networking.NetworkPolicyPort, portPath *fie for _, msg := range validation.IsValidPortNum(int(port.Port.IntVal)) { allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.IntVal, msg)) } - if *port.EndPort < port.Port.IntVal { - allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.IntVal, "endPort field must be equal or bigger than port field")) + if port.EndPort != nil && *port.EndPort < port.Port.IntVal { + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.IntVal, "endPort field must be equal or greater than port field")) } } else { if port.EndPort != nil { diff --git a/pkg/apis/networking/validation/validation_test.go b/pkg/apis/networking/validation/validation_test.go index 82973a11cb32..fdb6a00fa43f 100644 --- a/pkg/apis/networking/validation/validation_test.go +++ b/pkg/apis/networking/validation/validation_test.go @@ -38,7 +38,7 @@ func TestValidateNetworkPolicy(t *testing.T) { protocolUDP := api.ProtocolUDP protocolICMP := api.Protocol("ICMP") protocolSCTP := api.ProtocolSCTP - + endPort := int32(32768) successCases := []networking.NetworkPolicy{ { ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, @@ -377,6 +377,78 @@ func TestValidateNetworkPolicy(t *testing.T) { PolicyTypes: []networking.PolicyType{networking.PolicyTypeIngress, networking.PolicyTypeEgress}, }, }, + { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Egress: []networking.NetworkPolicyEgressRule{ + { + Ports: []networking.NetworkPolicyPort{ + { + Protocol: nil, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000}, + EndPort: &endPort, + }, + { + Protocol: &protocolUDP, + Port: &intstr.IntOrString{Type: intstr.String, StrVal: "dns"}, + }, + }, + }, + }, + }, + }, + { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Egress: []networking.NetworkPolicyEgressRule{ + { + To: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + Ports: []networking.NetworkPolicyPort{ + { + Protocol: nil, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 30000}, + EndPort: &endPort, + }, + { + Protocol: nil, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000}, + EndPort: &endPort, + }, + }, + }, + }, + Ingress: []networking.NetworkPolicyIngressRule{ + { + From: []networking.NetworkPolicyPeer{ + { + PodSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"e": "f"}, + }, + }, + }, + Ports: []networking.NetworkPolicyPort{ + { + Protocol: &protocolTCP, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32768}, + EndPort: &endPort, + }, + }, + }, + }, + }, + }, } // Success cases are expected to pass validation. @@ -798,6 +870,154 @@ func TestValidateNetworkPolicy(t *testing.T) { PolicyTypes: []networking.PolicyType{"foo", "bar", "baz"}, }, }, + "multiple ports defined, one port range is invalid": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Egress: []networking.NetworkPolicyEgressRule{ + { + To: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + Ports: []networking.NetworkPolicyPort{ + { + Protocol: &protocolUDP, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 35000}, + EndPort: &endPort, + }, + { + Protocol: nil, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000}, + EndPort: &endPort, + }, + }, + }, + }, + }, + }, + "endPort defined with named/string port": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Egress: []networking.NetworkPolicyEgressRule{ + { + To: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + Ports: []networking.NetworkPolicyPort{ + { + Protocol: &protocolUDP, + Port: &intstr.IntOrString{Type: intstr.String, StrVal: "dns"}, + EndPort: &endPort, + }, + { + Protocol: nil, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 32000}, + EndPort: &endPort, + }, + }, + }, + }, + }, + }, + "endPort defined without port defined": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Egress: []networking.NetworkPolicyEgressRule{ + { + To: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + Ports: []networking.NetworkPolicyPort{ + { + Protocol: &protocolTCP, + EndPort: &endPort, + }, + }, + }, + }, + }, + }, + "port is greater than endPort": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Egress: []networking.NetworkPolicyEgressRule{ + { + To: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + Ports: []networking.NetworkPolicyPort{ + { + Protocol: &protocolSCTP, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 33000}, + EndPort: &endPort, + }, + }, + }, + }, + }, + }, + "multiple invalid port ranges defined": { + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + Egress: []networking.NetworkPolicyEgressRule{ + { + To: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + Ports: []networking.NetworkPolicyPort{ + { + Protocol: &protocolUDP, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 35000}, + EndPort: &endPort, + }, + { + Protocol: &protocolTCP, + EndPort: &endPort, + }, + { + Protocol: &protocolTCP, + Port: &intstr.IntOrString{Type: intstr.String, StrVal: "https"}, + EndPort: &endPort, + }, + }, + }, + }, + }, + }, } // Error cases are not expected to pass validation. diff --git a/pkg/registry/networking/networkpolicy/BUILD b/pkg/registry/networking/networkpolicy/BUILD index a15c1ed74a72..b75edd884e08 100644 --- a/pkg/registry/networking/networkpolicy/BUILD +++ b/pkg/registry/networking/networkpolicy/BUILD @@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"]) load( "@io_bazel_rules_go//go:def.bzl", "go_library", + "go_test", ) go_library( @@ -39,3 +40,18 @@ filegroup( ], tags = ["automanaged"], ) + +go_test( + name = "go_default_test", + srcs = ["strategy_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/core:go_default_library", + "//pkg/apis/networking:go_default_library", + "//pkg/features:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/component-base/featuregate/testing:go_default_library", + ], +) diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index 1e09d337e806..1044e79b67b9 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2020 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,7 +49,9 @@ func (networkPolicyStrategy) NamespaceScoped() bool { func (networkPolicyStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { networkPolicy := obj.(*networking.NetworkPolicy) networkPolicy.Generation = 1 - dropNetworkPolicyDisabledFields(networkPolicy, nil) + if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { + dropNetworkPolicyEndPort(networkPolicy) + } } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. @@ -57,7 +59,10 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt newNetworkPolicy := obj.(*networking.NetworkPolicy) oldNetworkPolicy := old.(*networking.NetworkPolicy) - dropNetworkPolicyDisabledFields(newNetworkPolicy, oldNetworkPolicy) + if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) && !hasNetworkPolicyEndPort(oldNetworkPolicy) { + dropNetworkPolicyEndPort(newNetworkPolicy) + } + // Any changes to the spec increment the generation number, any changes to the // status should reflect the generation number of the corresponding object. // See metav1.ObjectMeta description for more information on Generation. @@ -92,24 +97,42 @@ func (networkPolicyStrategy) AllowUnconditionalUpdate() bool { return true } -// Drops Network Policy Disabled fields if Feature Gate is also disabled. +// Drops Network Policy EndPort fields if Feature Gate is also disabled. // This should be used in future Network Policy evolutions -func dropNetworkPolicyDisabledFields(newNetPol *networking.NetworkPolicy, oldNetPol *networking.NetworkPolicy) { - // Clear NetworkPolicyPort EndPort if NetworkPolicyEndPort is not enabled - for idx, ingressSpec := range oldNetPol.Spec.Ingress { +func dropNetworkPolicyEndPort(netPol *networking.NetworkPolicy) { + for idx, ingressSpec := range netPol.Spec.Ingress { for idxPort, port := range ingressSpec.Ports { - if port.EndPort != nil && !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { - newNetPol.Spec.Ingress[idx].Ports[idxPort].EndPort = nil + if port.EndPort != nil { + netPol.Spec.Ingress[idx].Ports[idxPort].EndPort = nil } } } - for idx, egressSpec := range oldNetPol.Spec.Egress { + for idx, egressSpec := range netPol.Spec.Egress { for idxPort, port := range egressSpec.Ports { - if port.EndPort != nil && !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { - newNetPol.Spec.Egress[idx].Ports[idxPort].EndPort = nil + if port.EndPort != nil { + netPol.Spec.Egress[idx].Ports[idxPort].EndPort = nil + } + } + } +} + +// Verifies if a Network Policy has endPort defined before dropping it +func hasNetworkPolicyEndPort(netPol *networking.NetworkPolicy) bool { + for _, ingressSpec := range netPol.Spec.Ingress { + for _, port := range ingressSpec.Ports { + if port.EndPort != nil { + return true } } } + for _, egressSpec := range netPol.Spec.Egress { + for _, port := range egressSpec.Ports { + if port.EndPort != nil { + return true + } + } + } + return false } diff --git a/pkg/registry/networking/networkpolicy/strategy_test.go b/pkg/registry/networking/networkpolicy/strategy_test.go new file mode 100644 index 000000000000..886d13f9346b --- /dev/null +++ b/pkg/registry/networking/networkpolicy/strategy_test.go @@ -0,0 +1,235 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package networkpolicy + +import ( + "context" + "fmt" + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/networking" + "k8s.io/kubernetes/pkg/features" + + utilfeature "k8s.io/apiserver/pkg/util/feature" + featuregatetesting "k8s.io/component-base/featuregate/testing" +) + +func makeNetworkPolicy(isIngress, isEgress, hasEndPort bool) *networking.NetworkPolicy { + + protocolTCP := api.ProtocolTCP + endPort := int32(32000) + netPol := &networking.NetworkPolicy{ + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + Spec: networking.NetworkPolicySpec{ + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{"a": "b"}, + }, + }, + } + egress := networking.NetworkPolicyEgressRule{ + To: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + } + + ingress := networking.NetworkPolicyIngressRule{ + From: []networking.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"c": "d"}, + }, + }, + }, + } + + ports := []networking.NetworkPolicyPort{ + { + Protocol: &protocolTCP, + Port: &intstr.IntOrString{Type: intstr.Int, IntVal: 31000}, + }, + } + + ingress.Ports = ports + egress.Ports = ports + + if hasEndPort { + ingress.Ports[0].EndPort = &endPort + egress.Ports[0].EndPort = &endPort + } + + if isIngress { + netPol.Spec.Ingress = append(netPol.Spec.Ingress, ingress) + } + + if isEgress { + netPol.Spec.Egress = append(netPol.Spec.Egress, egress) + } + + return netPol +} + +func TestNetworkPolicyStrategy(t *testing.T) { + for _, tc := range []struct { + name string + hasEndPort bool + enableFeatureGate bool + isIngress bool + isEgress bool + }{ + { + name: "Create Ingress Rule with EndPort Feature Gate enabled and with EndPort defined", + hasEndPort: true, + enableFeatureGate: true, + isIngress: true, + isEgress: false, + }, + { + name: "Create Ingress Rule with EndPort Feature Gate disabled and with EndPort defined", + hasEndPort: true, + enableFeatureGate: false, + isIngress: true, + isEgress: false, + }, + { + name: "Create Ingress Rule with EndPort Feature Gate enabled and with endPort undefined", + hasEndPort: false, + enableFeatureGate: true, + isIngress: true, + isEgress: false, + }, + { + name: "Create Ingress Rule with EndPort Feature Gate disabled and with endPort undefined", + hasEndPort: false, + enableFeatureGate: false, + isIngress: true, + isEgress: false, + }, + { + name: "Create Egress Rule with EndPort Feature Gate enabled and with endPort defined", + hasEndPort: true, + enableFeatureGate: true, + isIngress: false, + isEgress: true, + }, + { + name: "Create Egress Rule with EndPort Feature Gate enabled and with endPort defined", + hasEndPort: true, + enableFeatureGate: false, + isIngress: false, + isEgress: true, + }, + { + name: "Create Egress Rule with EndPort Feature Gate true and with endPort undefined", + hasEndPort: false, + enableFeatureGate: true, + isIngress: false, + isEgress: true, + }, + { + name: "Create Egress Rule with EndPort Feature Gate disabled and with endPort undefined", + hasEndPort: false, + enableFeatureGate: false, + isIngress: false, + isEgress: true, + }, + { + name: "Create Ingress and Egress Rule with EndPort Feature Gate enabled and endPort defined", + hasEndPort: true, + enableFeatureGate: true, + isIngress: true, + isEgress: true, + }, + { + name: "Create Ingress and Egress Rule with EndPort Feature Gate disabled and endPort defined", + hasEndPort: true, + enableFeatureGate: false, + isIngress: true, + isEgress: true, + }, + { + name: "Create Ingress and Egress Rule with EndPort Feature Gate enabled and endPort undefined", + hasEndPort: false, + enableFeatureGate: true, + isIngress: true, + isEgress: true, + }, + { + name: "Create Ingress and Egress Rule with EndPort Feature Gate disabled and endPort undefined", + hasEndPort: false, + enableFeatureGate: false, + isIngress: true, + isEgress: true, + }, + { + name: "Create a null rule with EndPort Feature Gate enabled", + hasEndPort: false, + enableFeatureGate: true, + isIngress: false, + isEgress: false, + }, + { + name: "Create a null rule with EndPort Feature Gate disabled", + hasEndPort: false, + enableFeatureGate: false, + isIngress: false, + isEgress: false, + }, + } { + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, tc.enableFeatureGate)() + netpol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) + Strategy.PrepareForCreate(context.Background(), netpol) + err := ValidateNetworkPolicy(netpol, tc.enableFeatureGate, tc.hasEndPort) + if err != nil { + t.Errorf("Create Rule test %s failed: %s", tc.name, err) + } + + oldNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, false) + newNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) + Strategy.PrepareForUpdate(context.Background(), newNetPol, oldNetPol) + err = ValidateNetworkPolicy(newNetPol, tc.enableFeatureGate, tc.hasEndPort) + if err != nil { + t.Errorf("Update Rule test %s failed: %s", tc.name, err) + } + + } +} + +func ValidateNetworkPolicy(netPol *networking.NetworkPolicy, fgEnabled, hasEndPort bool) error { + if (fgEnabled && hasEndPort) && !hasNetworkPolicyEndPort(netPol) { + return fmt.Errorf("rule should contain endPort defined") + } + + if (!fgEnabled && !hasEndPort) && hasNetworkPolicyEndPort(netPol) { + return fmt.Errorf("rule should not contain endPort defined") + } + + if (fgEnabled && !hasEndPort) && hasNetworkPolicyEndPort(netPol) { + return fmt.Errorf("rule should not contain endPort defined") + } + + if !fgEnabled && hasNetworkPolicyEndPort(netPol) { + return fmt.Errorf("rule should not contain endPort defined") + } + return nil +} diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index f66c31bc9fb0..64be0025838e 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1478,9 +1478,10 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` - // EndPort, if set, indicates that a range of ports, from Port to EndPort inclusive + // endPort, if set, indicates that a range of ports, from port to endPort inclusive // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. + // Also the endPort must be equal or greater than port // +optional EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` } From f635fd4d62dd5288bad2e292a70d325ba09500cf Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Wed, 16 Dec 2020 16:44:20 -0300 Subject: [PATCH 3/9] Add alpha support for EndPort in Network Policy Signed-off-by: Ricardo Pchevuzinske Katz --- pkg/apis/networking/types.go | 2 +- pkg/apis/networking/validation/validation.go | 2 +- .../networking/networkpolicy/strategy.go | 22 +------ .../networking/networkpolicy/strategy_test.go | 62 ++++++++++--------- .../k8s.io/api/extensions/v1beta1/types.go | 2 +- staging/src/k8s.io/api/networking/v1/types.go | 4 +- 6 files changed, 40 insertions(+), 54 deletions(-) diff --git a/pkg/apis/networking/types.go b/pkg/apis/networking/types.go index f43daaf2d3b0..6a5d3315ecfb 100644 --- a/pkg/apis/networking/types.go +++ b/pkg/apis/networking/types.go @@ -145,7 +145,7 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString - // endPort, if set, indicates that a range of ports, from port to endPort inclusive + // If set, indicates that a range of ports, from port to endPort inclusive // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. // Also the endPort must be equal or greater than port diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index a6d5412eb95e..e7dbe346c86b 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -73,7 +73,7 @@ func ValidateNetworkPolicyPort(port *networking.NetworkPolicyPort, portPath *fie } } else { if port.EndPort != nil { - allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.StrVal, "endPort cannot be used when port is non-numeric")) + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "endPort cannot be defined when port is non-numeric")) } for _, msg := range validation.IsValidPortName(port.Port.StrVal) { allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.StrVal, msg)) diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index 1044e79b67b9..283b84d621e3 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -59,7 +59,7 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt newNetworkPolicy := obj.(*networking.NetworkPolicy) oldNetworkPolicy := old.(*networking.NetworkPolicy) - if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) && !hasNetworkPolicyEndPort(oldNetworkPolicy) { + if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { dropNetworkPolicyEndPort(newNetworkPolicy) } @@ -116,23 +116,3 @@ func dropNetworkPolicyEndPort(netPol *networking.NetworkPolicy) { } } } - -// Verifies if a Network Policy has endPort defined before dropping it -func hasNetworkPolicyEndPort(netPol *networking.NetworkPolicy) bool { - for _, ingressSpec := range netPol.Spec.Ingress { - for _, port := range ingressSpec.Ports { - if port.EndPort != nil { - return true - } - } - } - - for _, egressSpec := range netPol.Spec.Egress { - for _, port := range egressSpec.Ports { - if port.EndPort != nil { - return true - } - } - } - return false -} diff --git a/pkg/registry/networking/networkpolicy/strategy_test.go b/pkg/registry/networking/networkpolicy/strategy_test.go index 886d13f9346b..f09745d4ae11 100644 --- a/pkg/registry/networking/networkpolicy/strategy_test.go +++ b/pkg/registry/networking/networkpolicy/strategy_test.go @@ -18,7 +18,7 @@ package networkpolicy import ( "context" - "fmt" + "reflect" "testing" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -36,7 +36,7 @@ func makeNetworkPolicy(isIngress, isEgress, hasEndPort bool) *networking.Network protocolTCP := api.ProtocolTCP endPort := int32(32000) netPol := &networking.NetworkPolicy{ - ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, + ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar", Generation: 0}, Spec: networking.NetworkPolicySpec{ PodSelector: metav1.LabelSelector{ MatchLabels: map[string]string{"a": "b"}, @@ -197,39 +197,45 @@ func TestNetworkPolicyStrategy(t *testing.T) { }, } { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, tc.enableFeatureGate)() - netpol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) - Strategy.PrepareForCreate(context.Background(), netpol) - err := ValidateNetworkPolicy(netpol, tc.enableFeatureGate, tc.hasEndPort) - if err != nil { - t.Errorf("Create Rule test %s failed: %s", tc.name, err) + // Create a Network Policy containing EndPort defined to compare with the generated by the tests + expectedNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, + (tc.hasEndPort && tc.enableFeatureGate)) + + netPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) + Strategy.PrepareForCreate(context.Background(), netPol) + if !reflect.DeepEqual(netPol.Spec, expectedNetPol.Spec) { + t.Errorf("Create: %s failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v", + tc.name, netPol, expectedNetPol) } - oldNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, false) - newNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) - Strategy.PrepareForUpdate(context.Background(), newNetPol, oldNetPol) - err = ValidateNetworkPolicy(newNetPol, tc.enableFeatureGate, tc.hasEndPort) - if err != nil { - t.Errorf("Update Rule test %s failed: %s", tc.name, err) + if netPol.Generation != 1 { + t.Errorf("Create: Test %s failed. Network Policy Generation should be 1, got %d", + tc.name, netPol.Generation) } - } -} + errs := Strategy.Validate(context.Background(), netPol) + if len(errs) != 0 { + t.Errorf("Unexpected error from validation for created Network Policy: %v", errs) + } -func ValidateNetworkPolicy(netPol *networking.NetworkPolicy, fgEnabled, hasEndPort bool) error { - if (fgEnabled && hasEndPort) && !hasNetworkPolicyEndPort(netPol) { - return fmt.Errorf("rule should contain endPort defined") - } + oldNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, false) + updatedNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) + Strategy.PrepareForUpdate(context.Background(), updatedNetPol, oldNetPol) - if (!fgEnabled && !hasEndPort) && hasNetworkPolicyEndPort(netPol) { - return fmt.Errorf("rule should not contain endPort defined") - } + if !reflect.DeepEqual(updatedNetPol.Spec, expectedNetPol.Spec) { + t.Errorf("Update: %s failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v", + tc.name, updatedNetPol, expectedNetPol) + } - if (fgEnabled && !hasEndPort) && hasNetworkPolicyEndPort(netPol) { - return fmt.Errorf("rule should not contain endPort defined") - } + if updatedNetPol.Generation != 0 && !tc.enableFeatureGate { + t.Errorf("Update: Test %s failed. Network Policy Generation should be 1, got %d", + tc.name, updatedNetPol.Generation) + } + + errs = Strategy.Validate(context.Background(), updatedNetPol) + if len(errs) != 0 { + t.Errorf("Unexpected error from validation for updated Network Policy: %v", errs) + } - if !fgEnabled && hasNetworkPolicyEndPort(netPol) { - return fmt.Errorf("rule should not contain endPort defined") } - return nil } diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index 64be0025838e..197cf59505a6 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1478,7 +1478,7 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` - // endPort, if set, indicates that a range of ports, from port to endPort inclusive + // If set, indicates that a range of ports, from port to endPort inclusive // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. // Also the endPort must be equal or greater than port diff --git a/staging/src/k8s.io/api/networking/v1/types.go b/staging/src/k8s.io/api/networking/v1/types.go index 490dd759506b..852e7305e769 100644 --- a/staging/src/k8s.io/api/networking/v1/types.go +++ b/staging/src/k8s.io/api/networking/v1/types.go @@ -17,7 +17,7 @@ limitations under the License. package v1 import ( - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -148,7 +148,7 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` - // EndPort, if set, indicates that a range of ports, from Port to EndPort inclusive + // If set, indicates that a range of ports, from Port to EndPort inclusive // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. // +optional From bad0a9ace3a138b215443cc8f9a8ad14ad85a839 Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Wed, 13 Jan 2021 19:18:32 -0300 Subject: [PATCH 4/9] Add alpha support for EndPort in Network Policy Signed-off-by: Ricardo Pchevuzinske Katz --- .../networking/networkpolicy/strategy.go | 21 ++++- .../networking/networkpolicy/strategy_test.go | 90 +++++++++++++++++-- 2 files changed, 104 insertions(+), 7 deletions(-) diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index 283b84d621e3..1ea85430ab28 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -59,7 +59,7 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt newNetworkPolicy := obj.(*networking.NetworkPolicy) oldNetworkPolicy := old.(*networking.NetworkPolicy) - if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { + if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) && !endPortInUse(oldNetworkPolicy) { dropNetworkPolicyEndPort(newNetworkPolicy) } @@ -116,3 +116,22 @@ func dropNetworkPolicyEndPort(netPol *networking.NetworkPolicy) { } } } + +func endPortInUse(netPol *networking.NetworkPolicy) bool { + for _, ingressSpec := range netPol.Spec.Ingress { + for _, port := range ingressSpec.Ports { + if port.EndPort != nil { + return true + } + } + } + + for _, egressSpec := range netPol.Spec.Egress { + for _, port := range egressSpec.Ports { + if port.EndPort != nil { + return true + } + } + } + return false +} diff --git a/pkg/registry/networking/networkpolicy/strategy_test.go b/pkg/registry/networking/networkpolicy/strategy_test.go index f09745d4ae11..5deb4dd437ac 100644 --- a/pkg/registry/networking/networkpolicy/strategy_test.go +++ b/pkg/registry/networking/networkpolicy/strategy_test.go @@ -18,6 +18,7 @@ package networkpolicy import ( "context" + "fmt" "reflect" "testing" @@ -198,14 +199,14 @@ func TestNetworkPolicyStrategy(t *testing.T) { } { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, tc.enableFeatureGate)() // Create a Network Policy containing EndPort defined to compare with the generated by the tests - expectedNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, + expectedNewNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, (tc.hasEndPort && tc.enableFeatureGate)) netPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) Strategy.PrepareForCreate(context.Background(), netPol) - if !reflect.DeepEqual(netPol.Spec, expectedNetPol.Spec) { + if !reflect.DeepEqual(netPol.Spec, expectedNewNetPol.Spec) { t.Errorf("Create: %s failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v", - tc.name, netPol, expectedNetPol) + tc.name, netPol, expectedNewNetPol) } if netPol.Generation != 1 { @@ -218,13 +219,16 @@ func TestNetworkPolicyStrategy(t *testing.T) { t.Errorf("Unexpected error from validation for created Network Policy: %v", errs) } - oldNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, false) + // Test when an updated Network Policy drops the EndPort field even if the FG has been disabled + // but the field is present + oldNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) updatedNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) + expectedUpdatedNetPol := makeNetworkPolicy(tc.isIngress, tc.isEgress, tc.hasEndPort) Strategy.PrepareForUpdate(context.Background(), updatedNetPol, oldNetPol) - if !reflect.DeepEqual(updatedNetPol.Spec, expectedNetPol.Spec) { + if !reflect.DeepEqual(updatedNetPol.Spec, expectedUpdatedNetPol.Spec) { t.Errorf("Update: %s failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v", - tc.name, updatedNetPol, expectedNetPol) + tc.name, updatedNetPol, expectedUpdatedNetPol) } if updatedNetPol.Generation != 0 && !tc.enableFeatureGate { @@ -236,6 +240,80 @@ func TestNetworkPolicyStrategy(t *testing.T) { if len(errs) != 0 { t.Errorf("Unexpected error from validation for updated Network Policy: %v", errs) } + } +} + +func TestNetworkPolicyEndPortEnablement(t *testing.T) { + // Enable the Feature Gate during the first rule creation + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true) + netPol := makeNetworkPolicy(true, true, true) + // We always expect the EndPort to be present, even if the FG is disabled later + expectedNetPol := makeNetworkPolicy(true, true, true) + + Strategy.PrepareForCreate(context.Background(), netPol) + if !reflect.DeepEqual(netPol.Spec, expectedNetPol.Spec) { + t.Errorf("Create with enabled FG failed. Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v", + netPol, expectedNetPol) + } + + if netPol.Generation != 1 { + t.Errorf("Create with enabled FG failed. Network Policy Generation should be 1, got %d", + netPol.Generation) + } + errs := Strategy.Validate(context.Background(), netPol) + if len(errs) != 0 { + t.Errorf("Unexpected error from validation for created Network Policy: %v", errs) } + + // Now let's disable the Feature Gate, update some other field from NetPol and expect the EndPort is already present + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, false) + updateNetPol, err := testUpdateEndPort(netPol) + if err != nil { + t.Errorf("Update with disabled FG failed. %v", err) + } + // And let's enable the FG again, add another from and check if the EndPort field is still present + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true) + _, err = testUpdateEndPort(updateNetPol) + if err != nil { + t.Errorf("Update with enabled FG failed. %v", err) + } + +} + +func testUpdateEndPort(oldNetPol *networking.NetworkPolicy) (*networking.NetworkPolicy, error) { + updatedNetPol := makeNetworkPolicy(true, true, true) + expectedNetPol := makeNetworkPolicy(true, true, true) + + if oldNetPol == nil { + return nil, fmt.Errorf("Nil Network Policy received") + } + expectedGeneration := oldNetPol.GetGeneration() + 1 + labelValue := fmt.Sprintf("bla%d", expectedGeneration) + + updateFrom := networking.NetworkPolicyPeer{ + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"e": labelValue}, + }, + } + + updatedNetPol.Spec.Ingress[0].From = append(updatedNetPol.Spec.Ingress[0].From, updateFrom) + expectedNetPol.Spec.Ingress[0].From = append(expectedNetPol.Spec.Ingress[0].From, updateFrom) + + Strategy.PrepareForUpdate(context.Background(), updatedNetPol, oldNetPol) + if !reflect.DeepEqual(updatedNetPol.Spec, expectedNetPol.Spec) { + return nil, fmt.Errorf("Spec from NetworkPolicy is not equal to the expected. \nGot: %+v \nExpected: %+v", + updatedNetPol, expectedNetPol) + } + if updatedNetPol.Generation != expectedGeneration { + return nil, fmt.Errorf("Network Policy Generation should be %d, got %d", + expectedGeneration, updatedNetPol.Generation) + } + + errs := Strategy.Validate(context.Background(), updatedNetPol) + if len(errs) != 0 { + return nil, fmt.Errorf("Unexpected error from validation for created Network Policy: %v", errs) + } + return updatedNetPol, nil + } From 5e0a89a1aedaf4eea7335783b8d290a70f852872 Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Thu, 14 Jan 2021 14:20:12 -0300 Subject: [PATCH 5/9] Correct some nits Signed-off-by: Ricardo Pchevuzinske Katz --- pkg/features/kube_features.go | 2 +- pkg/registry/networking/networkpolicy/strategy.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 7aca68e84a77..6f2d13fc3136 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -298,7 +298,7 @@ const ( SCTPSupport featuregate.Feature = "SCTPSupport" // owner: @rikatz - // alpha: v1.20 + // alpha: v1.21 // // Enables the endPort field in NetworkPolicy to enable a Port Range behavior in Network Policies. NetworkPolicyEndPort featuregate.Feature = "NetworkPolicyEndPort" diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index 1ea85430ab28..bf66beecd41b 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -1,5 +1,5 @@ /* -Copyright 2020 The Kubernetes Authors. +Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "k8s.io/kubernetes/pkg/apis/networking" "k8s.io/kubernetes/pkg/apis/networking/validation" "k8s.io/kubernetes/pkg/features" - utilfeature "k8s.io/apiserver/pkg/util/feature" ) @@ -49,6 +48,7 @@ func (networkPolicyStrategy) NamespaceScoped() bool { func (networkPolicyStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { networkPolicy := obj.(*networking.NetworkPolicy) networkPolicy.Generation = 1 + if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { dropNetworkPolicyEndPort(networkPolicy) } From a3e1d3a51ec928032a5baaf218c06a8d407a759c Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Mon, 1 Feb 2021 10:47:32 -0300 Subject: [PATCH 6/9] Add alpha support for EndPort in Network Policy --- pkg/apis/networking/types.go | 6 ++++-- pkg/apis/networking/validation/validation.go | 6 +++--- staging/src/k8s.io/api/extensions/v1beta1/types.go | 6 ++++-- staging/src/k8s.io/api/networking/v1/types.go | 5 ++++- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/pkg/apis/networking/types.go b/pkg/apis/networking/types.go index 6a5d3315ecfb..4310f6f8fc1c 100644 --- a/pkg/apis/networking/types.go +++ b/pkg/apis/networking/types.go @@ -145,10 +145,12 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString - // If set, indicates that a range of ports, from port to endPort inclusive + // If set, indicates that the range of ports from port to endPort, inclusive, // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. - // Also the endPort must be equal or greater than port + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". // +optional EndPort *int32 } diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index e7dbe346c86b..48776ee41938 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -69,11 +69,11 @@ func ValidateNetworkPolicyPort(port *networking.NetworkPolicyPort, portPath *fie allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.IntVal, msg)) } if port.EndPort != nil && *port.EndPort < port.Port.IntVal { - allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.IntVal, "endPort field must be equal or greater than port field")) + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), port.Port.IntVal, "must be greater than or equal to `port`")) } } else { if port.EndPort != nil { - allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "endPort cannot be defined when port is non-numeric")) + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "may not be specified when `port` is non-numeric")) } for _, msg := range validation.IsValidPortName(port.Port.StrVal) { allErrs = append(allErrs, field.Invalid(portPath.Child("port"), port.Port.StrVal, msg)) @@ -81,7 +81,7 @@ func ValidateNetworkPolicyPort(port *networking.NetworkPolicyPort, portPath *fie } } else { if port.EndPort != nil { - allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "endPort cannot be defined when port is not defined")) + allErrs = append(allErrs, field.Invalid(portPath.Child("endPort"), *port.EndPort, "may not be specified when `port` is not specified")) } } diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index 197cf59505a6..8c1bc52dee7d 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1478,10 +1478,12 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` - // If set, indicates that a range of ports, from port to endPort inclusive + // If set, indicates that the range of ports from port to endPort, inclusive, // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. - // Also the endPort must be equal or greater than port + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". // +optional EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` } diff --git a/staging/src/k8s.io/api/networking/v1/types.go b/staging/src/k8s.io/api/networking/v1/types.go index 852e7305e769..c84c7cdc41e1 100644 --- a/staging/src/k8s.io/api/networking/v1/types.go +++ b/staging/src/k8s.io/api/networking/v1/types.go @@ -148,9 +148,12 @@ type NetworkPolicyPort struct { // +optional Port *intstr.IntOrString `json:"port,omitempty" protobuf:"bytes,2,opt,name=port"` - // If set, indicates that a range of ports, from Port to EndPort inclusive + // If set, indicates that the range of ports from port to endPort, inclusive, // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". // +optional EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` } From b9d3e8cf592dac68b7abd8263ca715814bc6068d Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Mon, 1 Feb 2021 15:36:37 -0300 Subject: [PATCH 7/9] Add alpha support for EndPort in Network Policy --- api/openapi-spec/swagger.json | 7 +- .../v1beta1/zz_generated.conversion.go | 2 + .../networking/v1/zz_generated.conversion.go | 2 + pkg/apis/networking/zz_generated.deepcopy.go | 5 + .../networking/networkpolicy/strategy.go | 2 +- .../api/extensions/v1beta1/generated.pb.go | 493 ++++++++++-------- .../api/extensions/v1beta1/generated.proto | 18 +- .../k8s.io/api/extensions/v1beta1/types.go | 2 +- .../v1beta1/types_swagger_doc_generated.go | 3 +- .../v1beta1/zz_generated.deepcopy.go | 5 + .../k8s.io/api/networking/v1/generated.pb.go | 213 ++++---- .../k8s.io/api/networking/v1/generated.proto | 15 +- staging/src/k8s.io/api/networking/v1/types.go | 2 +- .../v1/types_swagger_doc_generated.go | 3 +- .../networking/v1/zz_generated.deepcopy.go | 5 + .../extensions.v1beta1.NetworkPolicy.json | 41 +- .../HEAD/extensions.v1beta1.NetworkPolicy.pb | Bin 1397 -> 1412 bytes .../extensions.v1beta1.NetworkPolicy.yaml | 39 +- .../networking.k8s.io.v1.NetworkPolicy.json | 41 +- .../networking.k8s.io.v1.NetworkPolicy.pb | Bin 1399 -> 1414 bytes .../networking.k8s.io.v1.NetworkPolicy.yaml | 39 +- 21 files changed, 519 insertions(+), 418 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 0139bf12d72b..8409bcd88637 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -13118,9 +13118,14 @@ "io.k8s.api.networking.v1.NetworkPolicyPort": { "description": "NetworkPolicyPort describes a port to allow traffic on", "properties": { + "endPort": { + "description": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".", + "format": "int32", + "type": "integer" + }, "port": { "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString", - "description": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers." + "description": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched." }, "protocol": { "description": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", diff --git a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index ca9065620883..e2359f7365b0 100644 --- a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -1689,6 +1689,7 @@ func Convert_networking_NetworkPolicyPeer_To_v1beta1_NetworkPolicyPeer(in *netwo func autoConvert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1beta1.NetworkPolicyPort, out *networking.NetworkPolicyPort, s conversion.Scope) error { out.Protocol = (*core.Protocol)(unsafe.Pointer(in.Protocol)) out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port)) + out.EndPort = (*int32)(unsafe.Pointer(in.EndPort)) return nil } @@ -1700,6 +1701,7 @@ func Convert_v1beta1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1bet func autoConvert_networking_NetworkPolicyPort_To_v1beta1_NetworkPolicyPort(in *networking.NetworkPolicyPort, out *v1beta1.NetworkPolicyPort, s conversion.Scope) error { out.Protocol = (*v1.Protocol)(unsafe.Pointer(in.Protocol)) out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port)) + out.EndPort = (*int32)(unsafe.Pointer(in.EndPort)) return nil } diff --git a/pkg/apis/networking/v1/zz_generated.conversion.go b/pkg/apis/networking/v1/zz_generated.conversion.go index c87863a02fe2..3aee2a23042b 100644 --- a/pkg/apis/networking/v1/zz_generated.conversion.go +++ b/pkg/apis/networking/v1/zz_generated.conversion.go @@ -773,6 +773,7 @@ func Convert_networking_NetworkPolicyPeer_To_v1_NetworkPolicyPeer(in *networking func autoConvert_v1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1.NetworkPolicyPort, out *networking.NetworkPolicyPort, s conversion.Scope) error { out.Protocol = (*core.Protocol)(unsafe.Pointer(in.Protocol)) out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port)) + out.EndPort = (*int32)(unsafe.Pointer(in.EndPort)) return nil } @@ -784,6 +785,7 @@ func Convert_v1_NetworkPolicyPort_To_networking_NetworkPolicyPort(in *v1.Network func autoConvert_networking_NetworkPolicyPort_To_v1_NetworkPolicyPort(in *networking.NetworkPolicyPort, out *v1.NetworkPolicyPort, s conversion.Scope) error { out.Protocol = (*corev1.Protocol)(unsafe.Pointer(in.Protocol)) out.Port = (*intstr.IntOrString)(unsafe.Pointer(in.Port)) + out.EndPort = (*int32)(unsafe.Pointer(in.EndPort)) return nil } diff --git a/pkg/apis/networking/zz_generated.deepcopy.go b/pkg/apis/networking/zz_generated.deepcopy.go index a81c0fac7322..de9c0959c2ef 100644 --- a/pkg/apis/networking/zz_generated.deepcopy.go +++ b/pkg/apis/networking/zz_generated.deepcopy.go @@ -558,6 +558,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) { *out = new(intstr.IntOrString) **out = **in } + if in.EndPort != nil { + in, out := &in.EndPort, &out.EndPort + *out = new(int32) + **out = **in + } return } diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index bf66beecd41b..5ccd9de66a12 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -23,11 +23,11 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/storage/names" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/apis/networking" "k8s.io/kubernetes/pkg/apis/networking/validation" "k8s.io/kubernetes/pkg/features" - utilfeature "k8s.io/apiserver/pkg/util/feature" ) // networkPolicyStrategy implements verification logic for NetworkPolicies diff --git a/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go b/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go index db2f82728e9a..b2f6eac5a174 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go @@ -1683,241 +1683,243 @@ func init() { } var fileDescriptor_cdc93917efc28165 = []byte{ - // 3742 bytes of a gzipped FileDescriptorProto + // 3761 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x1c, 0xc7, 0x72, 0xd6, 0xec, 0x2e, 0xb9, 0xcb, 0xe2, 0x7f, 0x93, 0x22, 0xf7, 0x49, 0x4f, 0x5c, 0xbd, 0x31, - 0xa0, 0xc8, 0x8e, 0xb4, 0x6b, 0xc9, 0x92, 0x9e, 0x22, 0x21, 0xef, 0x99, 0x4b, 0x8a, 0x12, 0x5f, + 0xa2, 0xc8, 0x8e, 0xb4, 0x6b, 0xc9, 0x92, 0x9e, 0x22, 0x21, 0xef, 0x99, 0x4b, 0x8a, 0x12, 0x5f, 0xf8, 0xb3, 0xee, 0x25, 0x65, 0xc3, 0x88, 0x1d, 0x0f, 0x77, 0x9b, 0xcb, 0x11, 0x67, 0x67, 0xc6, 0xd3, 0xb3, 0x34, 0x17, 0xc8, 0x21, 0x87, 0x5c, 0x0c, 0x04, 0x48, 0x2e, 0x4e, 0x72, 0x8c, 0x11, - 0x20, 0xa7, 0x04, 0x39, 0x26, 0x07, 0xc3, 0x48, 0x10, 0x07, 0x10, 0x02, 0x27, 0xf0, 0x2d, 0x3e, - 0x11, 0x31, 0x7d, 0x0a, 0x72, 0xca, 0x2d, 0xd0, 0x29, 0xe8, 0x9e, 0x9e, 0xff, 0x19, 0xee, 0x90, - 0x96, 0x88, 0x38, 0x78, 0x27, 0x71, 0xbb, 0xaa, 0xbe, 0xaa, 0xee, 0xae, 0xae, 0xaa, 0xee, 0x29, - 0xc1, 0xca, 0xfe, 0x7d, 0x5a, 0x55, 0x8d, 0xda, 0x7e, 0x6f, 0x87, 0x58, 0x3a, 0xb1, 0x09, 0xad, - 0x1d, 0x10, 0xbd, 0x6d, 0x58, 0x35, 0x41, 0x50, 0x4c, 0xb5, 0x46, 0x0e, 0x6d, 0xa2, 0x53, 0xd5, - 0xd0, 0x69, 0xed, 0xe0, 0xd6, 0x0e, 0xb1, 0x95, 0x5b, 0xb5, 0x0e, 0xd1, 0x89, 0xa5, 0xd8, 0xa4, - 0x5d, 0x35, 0x2d, 0xc3, 0x36, 0xd0, 0x15, 0x87, 0xbd, 0xaa, 0x98, 0x6a, 0xd5, 0x67, 0xaf, 0x0a, - 0xf6, 0x4b, 0x37, 0x3b, 0xaa, 0xbd, 0xd7, 0xdb, 0xa9, 0xb6, 0x8c, 0x6e, 0xad, 0x63, 0x74, 0x8c, - 0x1a, 0x97, 0xda, 0xe9, 0xed, 0xf2, 0x5f, 0xfc, 0x07, 0xff, 0xcb, 0x41, 0xbb, 0x24, 0x07, 0x94, - 0xb7, 0x0c, 0x8b, 0xd4, 0x0e, 0x62, 0x1a, 0x2f, 0xdd, 0xf1, 0x79, 0xba, 0x4a, 0x6b, 0x4f, 0xd5, - 0x89, 0xd5, 0xaf, 0x99, 0xfb, 0x1d, 0x36, 0x40, 0x6b, 0x5d, 0x62, 0x2b, 0x49, 0x52, 0xb5, 0x34, - 0x29, 0xab, 0xa7, 0xdb, 0x6a, 0x97, 0xc4, 0x04, 0xee, 0x0d, 0x12, 0xa0, 0xad, 0x3d, 0xd2, 0x55, - 0x62, 0x72, 0x6f, 0xa5, 0xc9, 0xf5, 0x6c, 0x55, 0xab, 0xa9, 0xba, 0x4d, 0x6d, 0x2b, 0x2a, 0x24, - 0xdf, 0x81, 0xa9, 0x45, 0x4d, 0x33, 0x3e, 0x21, 0xed, 0xa5, 0xe6, 0xea, 0xb2, 0xa5, 0x1e, 0x10, - 0x0b, 0x5d, 0x85, 0x82, 0xae, 0x74, 0x49, 0x59, 0xba, 0x2a, 0x5d, 0x1f, 0xa9, 0x8f, 0x3d, 0x3f, - 0xaa, 0x5c, 0x38, 0x3e, 0xaa, 0x14, 0x36, 0x94, 0x2e, 0xc1, 0x9c, 0x22, 0x3f, 0x84, 0x69, 0x21, - 0xb5, 0xa2, 0x91, 0xc3, 0xa7, 0x86, 0xd6, 0xeb, 0x12, 0x74, 0x0d, 0x86, 0xdb, 0x1c, 0x40, 0x08, - 0x4e, 0x08, 0xc1, 0x61, 0x07, 0x16, 0x0b, 0xaa, 0x4c, 0x61, 0x52, 0x08, 0x3f, 0x31, 0xa8, 0xdd, - 0x50, 0xec, 0x3d, 0x74, 0x1b, 0xc0, 0x54, 0xec, 0xbd, 0x86, 0x45, 0x76, 0xd5, 0x43, 0x21, 0x8e, - 0x84, 0x38, 0x34, 0x3c, 0x0a, 0x0e, 0x70, 0xa1, 0x1b, 0x50, 0xb2, 0x88, 0xd2, 0xde, 0xd4, 0xb5, - 0x7e, 0x39, 0x77, 0x55, 0xba, 0x5e, 0xaa, 0x4f, 0x09, 0x89, 0x12, 0x16, 0xe3, 0xd8, 0xe3, 0x90, - 0x3f, 0xcb, 0xc1, 0xc8, 0xb2, 0x42, 0xba, 0x86, 0xde, 0x24, 0x36, 0xfa, 0x08, 0x4a, 0x6c, 0xbb, - 0xda, 0x8a, 0xad, 0x70, 0x6d, 0xa3, 0xb7, 0xdf, 0xac, 0xfa, 0xee, 0xe4, 0xad, 0x5e, 0xd5, 0xdc, - 0xef, 0xb0, 0x01, 0x5a, 0x65, 0xdc, 0xd5, 0x83, 0x5b, 0xd5, 0xcd, 0x9d, 0x67, 0xa4, 0x65, 0xaf, - 0x13, 0x5b, 0xf1, 0xed, 0xf3, 0xc7, 0xb0, 0x87, 0x8a, 0x36, 0xa0, 0x40, 0x4d, 0xd2, 0xe2, 0x96, - 0x8d, 0xde, 0xbe, 0x51, 0x3d, 0xd1, 0x59, 0xab, 0x9e, 0x65, 0x4d, 0x93, 0xb4, 0xfc, 0x15, 0x67, - 0xbf, 0x30, 0xc7, 0x41, 0x4f, 0x61, 0x98, 0xda, 0x8a, 0xdd, 0xa3, 0xe5, 0x3c, 0x47, 0xac, 0x66, - 0x46, 0xe4, 0x52, 0xfe, 0x66, 0x38, 0xbf, 0xb1, 0x40, 0x93, 0xff, 0x33, 0x07, 0xc8, 0xe3, 0x5d, - 0x32, 0xf4, 0xb6, 0x6a, 0xab, 0x86, 0x8e, 0x1e, 0x40, 0xc1, 0xee, 0x9b, 0xae, 0x0b, 0x5c, 0x73, - 0x0d, 0xda, 0xea, 0x9b, 0xe4, 0xc5, 0x51, 0x65, 0x2e, 0x2e, 0xc1, 0x28, 0x98, 0xcb, 0xa0, 0x35, - 0xcf, 0xd4, 0x1c, 0x97, 0xbe, 0x13, 0x56, 0xfd, 0xe2, 0xa8, 0x92, 0x70, 0xd8, 0xaa, 0x1e, 0x52, - 0xd8, 0x40, 0x74, 0x00, 0x48, 0x53, 0xa8, 0xbd, 0x65, 0x29, 0x3a, 0x75, 0x34, 0xa9, 0x5d, 0x22, - 0x16, 0xe1, 0x8d, 0x6c, 0x9b, 0xc6, 0x24, 0xea, 0x97, 0x84, 0x15, 0x68, 0x2d, 0x86, 0x86, 0x13, - 0x34, 0x30, 0x6f, 0xb6, 0x88, 0x42, 0x0d, 0xbd, 0x5c, 0x08, 0x7b, 0x33, 0xe6, 0xa3, 0x58, 0x50, - 0xd1, 0xeb, 0x50, 0xec, 0x12, 0x4a, 0x95, 0x0e, 0x29, 0x0f, 0x71, 0xc6, 0x49, 0xc1, 0x58, 0x5c, - 0x77, 0x86, 0xb1, 0x4b, 0x97, 0xbf, 0x90, 0x60, 0xdc, 0x5b, 0xb9, 0x35, 0x95, 0xda, 0xe8, 0x77, - 0x63, 0x7e, 0x58, 0xcd, 0x36, 0x25, 0x26, 0xcd, 0xbd, 0xd0, 0xf3, 0x79, 0x77, 0x24, 0xe0, 0x83, - 0xeb, 0x30, 0xa4, 0xda, 0xa4, 0xcb, 0xf6, 0x21, 0x7f, 0x7d, 0xf4, 0xf6, 0xf5, 0xac, 0x2e, 0x53, - 0x1f, 0x17, 0xa0, 0x43, 0xab, 0x4c, 0x1c, 0x3b, 0x28, 0xf2, 0x9f, 0x16, 0x02, 0xe6, 0x33, 0xd7, - 0x44, 0x1f, 0x40, 0x89, 0x12, 0x8d, 0xb4, 0x6c, 0xc3, 0x12, 0xe6, 0xbf, 0x95, 0xd1, 0x7c, 0x65, - 0x87, 0x68, 0x4d, 0x21, 0x5a, 0x1f, 0x63, 0xf6, 0xbb, 0xbf, 0xb0, 0x07, 0x89, 0xde, 0x81, 0x92, - 0x4d, 0xba, 0xa6, 0xa6, 0xd8, 0x44, 0x9c, 0xa3, 0xd7, 0x82, 0x53, 0x60, 0x9e, 0xc3, 0xc0, 0x1a, - 0x46, 0x7b, 0x4b, 0xb0, 0xf1, 0xe3, 0xe3, 0x2d, 0x89, 0x3b, 0x8a, 0x3d, 0x18, 0x74, 0x00, 0x13, - 0x3d, 0xb3, 0xcd, 0x38, 0x6d, 0x16, 0x05, 0x3b, 0x7d, 0xe1, 0x49, 0xf7, 0xb2, 0xae, 0xcd, 0x76, - 0x48, 0xba, 0x3e, 0x27, 0x74, 0x4d, 0x84, 0xc7, 0x71, 0x44, 0x0b, 0x5a, 0x84, 0xc9, 0xae, 0xaa, - 0xb3, 0xb8, 0xd4, 0x6f, 0x92, 0x96, 0xa1, 0xb7, 0x29, 0x77, 0xab, 0xa1, 0xfa, 0xbc, 0x00, 0x98, - 0x5c, 0x0f, 0x93, 0x71, 0x94, 0x1f, 0xfd, 0x0a, 0x90, 0x3b, 0x8d, 0xc7, 0x4e, 0x10, 0x57, 0x0d, - 0x9d, 0xfb, 0x5c, 0xde, 0x77, 0xee, 0xad, 0x18, 0x07, 0x4e, 0x90, 0x42, 0x6b, 0x30, 0x6b, 0x91, - 0x03, 0x95, 0xcd, 0xf1, 0x89, 0x4a, 0x6d, 0xc3, 0xea, 0xaf, 0xa9, 0x5d, 0xd5, 0x2e, 0x0f, 0x73, - 0x9b, 0xca, 0xc7, 0x47, 0x95, 0x59, 0x9c, 0x40, 0xc7, 0x89, 0x52, 0xf2, 0x9f, 0x0d, 0xc3, 0x64, - 0x24, 0xde, 0xa0, 0xa7, 0x30, 0xd7, 0xea, 0x59, 0x16, 0xd1, 0xed, 0x8d, 0x5e, 0x77, 0x87, 0x58, - 0xcd, 0xd6, 0x1e, 0x69, 0xf7, 0x34, 0xd2, 0xe6, 0x8e, 0x32, 0x54, 0x5f, 0x10, 0x16, 0xcf, 0x2d, - 0x25, 0x72, 0xe1, 0x14, 0x69, 0xb6, 0x0a, 0x3a, 0x1f, 0x5a, 0x57, 0x29, 0xf5, 0x30, 0x73, 0x1c, - 0xd3, 0x5b, 0x85, 0x8d, 0x18, 0x07, 0x4e, 0x90, 0x62, 0x36, 0xb6, 0x09, 0x55, 0x2d, 0xd2, 0x8e, - 0xda, 0x98, 0x0f, 0xdb, 0xb8, 0x9c, 0xc8, 0x85, 0x53, 0xa4, 0xd1, 0x5d, 0x18, 0x75, 0xb4, 0xf1, - 0xfd, 0x13, 0x1b, 0x3d, 0x23, 0xc0, 0x46, 0x37, 0x7c, 0x12, 0x0e, 0xf2, 0xb1, 0xa9, 0x19, 0x3b, - 0x94, 0x58, 0x07, 0xa4, 0x9d, 0xbe, 0xc1, 0x9b, 0x31, 0x0e, 0x9c, 0x20, 0xc5, 0xa6, 0xe6, 0x78, - 0x60, 0x6c, 0x6a, 0xc3, 0xe1, 0xa9, 0x6d, 0x27, 0x72, 0xe1, 0x14, 0x69, 0xe6, 0xc7, 0x8e, 0xc9, - 0x8b, 0x07, 0x8a, 0xaa, 0x29, 0x3b, 0x1a, 0x29, 0x17, 0xc3, 0x7e, 0xbc, 0x11, 0x26, 0xe3, 0x28, - 0x3f, 0x7a, 0x0c, 0xd3, 0xce, 0xd0, 0xb6, 0xae, 0x78, 0x20, 0x25, 0x0e, 0xf2, 0x13, 0x01, 0x32, - 0xbd, 0x11, 0x65, 0xc0, 0x71, 0x19, 0xf4, 0x00, 0x26, 0x5a, 0x86, 0xa6, 0x71, 0x7f, 0x5c, 0x32, - 0x7a, 0xba, 0x5d, 0x1e, 0xe1, 0x28, 0x88, 0x9d, 0xc7, 0xa5, 0x10, 0x05, 0x47, 0x38, 0x11, 0x01, - 0x68, 0xb9, 0x09, 0x87, 0x96, 0x81, 0xc7, 0xc7, 0x5b, 0x59, 0x63, 0x80, 0x97, 0xaa, 0xfc, 0x1a, - 0xc0, 0x1b, 0xa2, 0x38, 0x00, 0x2c, 0xff, 0x8b, 0x04, 0xf3, 0x29, 0xa1, 0x03, 0xfd, 0x32, 0x94, - 0x62, 0x7f, 0x33, 0x92, 0x62, 0x2f, 0xa7, 0x88, 0x05, 0xf2, 0xac, 0x0e, 0xe3, 0x16, 0x9b, 0x95, - 0xde, 0x71, 0x58, 0x44, 0x8c, 0xbc, 0x3b, 0x60, 0x1a, 0x38, 0x28, 0xe3, 0xc7, 0xfc, 0xe9, 0xe3, - 0xa3, 0xca, 0x78, 0x88, 0x86, 0xc3, 0xf0, 0xf2, 0x9f, 0xe7, 0x00, 0x96, 0x89, 0xa9, 0x19, 0xfd, - 0x2e, 0xd1, 0xcf, 0xa3, 0x86, 0xda, 0x0c, 0xd5, 0x50, 0x37, 0x07, 0x6d, 0x8f, 0x67, 0x5a, 0x6a, - 0x11, 0xf5, 0x6e, 0xa4, 0x88, 0xaa, 0x65, 0x87, 0x3c, 0xb9, 0x8a, 0xfa, 0xf7, 0x3c, 0xcc, 0xf8, - 0xcc, 0x7e, 0x19, 0xf5, 0x30, 0xb4, 0xc7, 0xbf, 0x11, 0xd9, 0xe3, 0xf9, 0x04, 0x91, 0x57, 0x56, - 0x47, 0x3d, 0x83, 0x09, 0x56, 0xe5, 0x38, 0x7b, 0xc9, 0x6b, 0xa8, 0xe1, 0x53, 0xd7, 0x50, 0x5e, - 0xb6, 0x5b, 0x0b, 0x21, 0xe1, 0x08, 0x72, 0x4a, 0xcd, 0x56, 0xfc, 0x31, 0xd6, 0x6c, 0x5f, 0x4a, - 0x30, 0xe1, 0x6f, 0xd3, 0x39, 0x14, 0x6d, 0x1b, 0xe1, 0xa2, 0xed, 0xf5, 0xcc, 0x2e, 0x9a, 0x52, - 0xb5, 0xfd, 0x0f, 0x2b, 0xf0, 0x3d, 0x26, 0x76, 0xc0, 0x77, 0x94, 0xd6, 0xfe, 0xe0, 0x3b, 0x1e, - 0xfa, 0x4c, 0x02, 0x24, 0xb2, 0xc0, 0xa2, 0xae, 0x1b, 0xb6, 0xe2, 0xc4, 0x4a, 0xc7, 0xac, 0xd5, - 0xcc, 0x66, 0xb9, 0x1a, 0xab, 0xdb, 0x31, 0xac, 0x47, 0xba, 0x6d, 0xf5, 0xfd, 0x4d, 0x8e, 0x33, - 0xe0, 0x04, 0x03, 0x90, 0x02, 0x60, 0x09, 0xcc, 0x2d, 0x43, 0x1c, 0xe4, 0x9b, 0x19, 0x62, 0x1e, - 0x13, 0x58, 0x32, 0xf4, 0x5d, 0xb5, 0xe3, 0x87, 0x1d, 0xec, 0x01, 0xe1, 0x00, 0xe8, 0xa5, 0x47, - 0x30, 0x9f, 0x62, 0x2d, 0x9a, 0x82, 0xfc, 0x3e, 0xe9, 0x3b, 0xcb, 0x86, 0xd9, 0x9f, 0x68, 0x16, - 0x86, 0x0e, 0x14, 0xad, 0xe7, 0x84, 0xdf, 0x11, 0xec, 0xfc, 0x78, 0x90, 0xbb, 0x2f, 0xc9, 0x5f, - 0x0c, 0x05, 0x7d, 0x87, 0x57, 0xcc, 0xd7, 0xd9, 0xa5, 0xd5, 0xd4, 0xd4, 0x96, 0x42, 0x45, 0x21, - 0x34, 0xe6, 0x5c, 0x58, 0x9d, 0x31, 0xec, 0x51, 0x43, 0xb5, 0x75, 0xee, 0xd5, 0xd6, 0xd6, 0xf9, - 0x97, 0x53, 0x5b, 0xff, 0x1e, 0x94, 0xa8, 0x5b, 0x55, 0x17, 0x38, 0xe4, 0xad, 0x53, 0xc4, 0x57, - 0x51, 0x50, 0x7b, 0x0a, 0xbc, 0x52, 0xda, 0x03, 0x4d, 0x2a, 0xa2, 0x87, 0x4e, 0x59, 0x44, 0xbf, - 0xd4, 0xc2, 0x97, 0xc5, 0x1b, 0x53, 0xe9, 0x51, 0xd2, 0xe6, 0xb1, 0xad, 0xe4, 0xc7, 0x9b, 0x06, - 0x1f, 0xc5, 0x82, 0x8a, 0x3e, 0x08, 0xb9, 0x6c, 0xe9, 0x2c, 0x2e, 0x3b, 0x91, 0xee, 0xae, 0x68, - 0x1b, 0xe6, 0x4d, 0xcb, 0xe8, 0x58, 0x84, 0xd2, 0x65, 0xa2, 0xb4, 0x35, 0x55, 0x27, 0xee, 0xfa, - 0x38, 0x15, 0xd1, 0xe5, 0xe3, 0xa3, 0xca, 0x7c, 0x23, 0x99, 0x05, 0xa7, 0xc9, 0xca, 0xcf, 0x0b, - 0x30, 0x15, 0xcd, 0x80, 0x29, 0x45, 0xaa, 0x74, 0xa6, 0x22, 0xf5, 0x46, 0xe0, 0x30, 0x38, 0x15, - 0x7c, 0xe0, 0x05, 0x27, 0x76, 0x20, 0x16, 0x61, 0x52, 0x44, 0x03, 0x97, 0x28, 0xca, 0x74, 0x6f, - 0xf7, 0xb7, 0xc3, 0x64, 0x1c, 0xe5, 0x47, 0x0f, 0x61, 0xdc, 0xe2, 0x75, 0xb7, 0x0b, 0xe0, 0xd4, - 0xae, 0x17, 0x05, 0xc0, 0x38, 0x0e, 0x12, 0x71, 0x98, 0x97, 0xd5, 0xad, 0x7e, 0x39, 0xea, 0x02, - 0x14, 0xc2, 0x75, 0xeb, 0x62, 0x94, 0x01, 0xc7, 0x65, 0xd0, 0x3a, 0xcc, 0xf4, 0xf4, 0x38, 0x94, - 0xe3, 0xca, 0x97, 0x05, 0xd4, 0xcc, 0x76, 0x9c, 0x05, 0x27, 0xc9, 0xa1, 0xdd, 0x50, 0x29, 0x3b, - 0xcc, 0xc3, 0xf3, 0xed, 0xcc, 0x07, 0x2f, 0x73, 0x2d, 0x9b, 0x50, 0x6e, 0x97, 0xb2, 0x96, 0xdb, - 0xf2, 0x3f, 0x4a, 0xc1, 0x24, 0xe4, 0x95, 0xc0, 0x83, 0x5e, 0x99, 0x62, 0x12, 0x81, 0xea, 0xc8, - 0x48, 0xae, 0x7e, 0xef, 0x9d, 0xaa, 0xfa, 0xf5, 0x93, 0xe7, 0xe0, 0xf2, 0xf7, 0x73, 0x09, 0xe6, - 0x56, 0x9a, 0x8f, 0x2d, 0xa3, 0x67, 0xba, 0xe6, 0x6c, 0x9a, 0xce, 0xd2, 0xfc, 0x1c, 0x0a, 0x56, - 0x4f, 0x73, 0xe7, 0xf1, 0x9a, 0x3b, 0x0f, 0xdc, 0xd3, 0xd8, 0x3c, 0x66, 0x22, 0x52, 0xce, 0x24, - 0x98, 0x00, 0xda, 0x80, 0x61, 0x4b, 0xd1, 0x3b, 0xc4, 0x4d, 0xab, 0xd7, 0x06, 0x58, 0xbf, 0xba, - 0x8c, 0x19, 0x7b, 0xa0, 0xb0, 0xe1, 0xd2, 0x58, 0xa0, 0xc8, 0xff, 0x24, 0xc1, 0xe4, 0x93, 0xad, - 0xad, 0xc6, 0xaa, 0xce, 0x4f, 0x34, 0x7f, 0x5b, 0xbd, 0x0a, 0x05, 0x53, 0xb1, 0xf7, 0xa2, 0x99, - 0x9e, 0xd1, 0x30, 0xa7, 0xa0, 0x3b, 0x50, 0x62, 0xff, 0x32, 0xbb, 0xf8, 0x91, 0x1a, 0xe1, 0x81, - 0xb0, 0xd4, 0x10, 0x63, 0x2f, 0x02, 0x7f, 0x63, 0x8f, 0x13, 0xbd, 0x07, 0x45, 0x16, 0x7f, 0x88, - 0xde, 0xce, 0x58, 0xa0, 0x0b, 0xa3, 0xea, 0x8e, 0x90, 0x5f, 0x73, 0x89, 0x01, 0xec, 0xc2, 0xc9, - 0xfb, 0x30, 0x1b, 0x98, 0x04, 0x5b, 0xc5, 0xa7, 0x2c, 0xa7, 0xa2, 0x26, 0x0c, 0x31, 0xed, 0x2c, - 0x73, 0xe6, 0x33, 0x3c, 0x81, 0x46, 0x16, 0xc2, 0xaf, 0x8f, 0xd8, 0x2f, 0x8a, 0x1d, 0x2c, 0x79, - 0x1d, 0xc6, 0xf9, 0x33, 0xb4, 0x61, 0xd9, 0x7c, 0x31, 0xd1, 0x15, 0xc8, 0x77, 0x55, 0x5d, 0x64, - 0xe7, 0x51, 0x21, 0x93, 0x67, 0x99, 0x85, 0x8d, 0x73, 0xb2, 0x72, 0x28, 0xe2, 0x95, 0x4f, 0x56, - 0x0e, 0x31, 0x1b, 0x97, 0x1f, 0x43, 0x51, 0x6c, 0x52, 0x10, 0x28, 0x7f, 0x32, 0x50, 0x3e, 0x01, - 0x68, 0x13, 0x8a, 0xab, 0x8d, 0xba, 0x66, 0x38, 0xb5, 0x5a, 0x4b, 0x6d, 0x5b, 0xd1, 0x1d, 0x5c, - 0x5a, 0x5d, 0xc6, 0x98, 0x53, 0x90, 0x0c, 0xc3, 0xe4, 0xb0, 0x45, 0x4c, 0x9b, 0xfb, 0xd1, 0x48, - 0x1d, 0x98, 0x6f, 0x3c, 0xe2, 0x23, 0x58, 0x50, 0xe4, 0x3f, 0xce, 0x41, 0x51, 0x2c, 0xc7, 0x39, - 0xdc, 0xdd, 0xd6, 0x42, 0x77, 0xb7, 0x37, 0xb2, 0xb9, 0x46, 0xea, 0xc5, 0x6d, 0x2b, 0x72, 0x71, - 0xbb, 0x91, 0x11, 0xef, 0xe4, 0x5b, 0xdb, 0xa7, 0x39, 0x98, 0x08, 0x3b, 0x25, 0xba, 0x0b, 0xa3, - 0x2c, 0x4d, 0xa9, 0x2d, 0xb2, 0xe1, 0x57, 0xc7, 0xde, 0xd3, 0x4d, 0xd3, 0x27, 0xe1, 0x20, 0x1f, - 0xea, 0x78, 0x62, 0xcc, 0x8f, 0xc4, 0xa4, 0xd3, 0x97, 0xb4, 0x67, 0xab, 0x5a, 0xd5, 0xf9, 0x20, - 0x53, 0x5d, 0xd5, 0xed, 0x4d, 0xab, 0x69, 0x5b, 0xaa, 0xde, 0x89, 0x29, 0xe2, 0x4e, 0x19, 0x44, - 0x46, 0xef, 0xb2, 0x94, 0x49, 0x8d, 0x9e, 0xd5, 0x22, 0x49, 0xa5, 0xaf, 0x5b, 0xb6, 0xb1, 0x03, - 0xda, 0x5e, 0x33, 0x5a, 0x8a, 0xe6, 0x6c, 0x0e, 0x26, 0xbb, 0xc4, 0x22, 0x7a, 0x8b, 0xb8, 0xe5, - 0xa6, 0x03, 0x81, 0x3d, 0x30, 0xf9, 0xef, 0x25, 0x18, 0x15, 0x6b, 0x71, 0x0e, 0x97, 0x9c, 0xdf, - 0x09, 0x5f, 0x72, 0xae, 0x65, 0x8c, 0x1c, 0xc9, 0x37, 0x9c, 0xbf, 0xf2, 0x4d, 0x67, 0xb1, 0x82, - 0x1d, 0x97, 0x3d, 0x83, 0xda, 0xd1, 0xe3, 0xc2, 0x4e, 0x39, 0xe6, 0x14, 0xd4, 0x83, 0x29, 0x35, - 0x12, 0x5c, 0xc4, 0x9e, 0xd5, 0xb2, 0x59, 0xe2, 0x89, 0xd5, 0xcb, 0x02, 0x7e, 0x2a, 0x4a, 0xc1, - 0x31, 0x15, 0x32, 0x81, 0x18, 0x17, 0x7a, 0x07, 0x0a, 0x7b, 0xb6, 0x6d, 0x26, 0x3c, 0x9f, 0x0f, - 0x08, 0x69, 0xbe, 0x09, 0x25, 0x3e, 0xbb, 0xad, 0xad, 0x06, 0xe6, 0x50, 0xf2, 0x3f, 0xe4, 0xbc, - 0xf5, 0xe0, 0x77, 0x8e, 0xb7, 0xbd, 0xd9, 0x2e, 0x69, 0x0a, 0xa5, 0xdc, 0xb1, 0x9d, 0xfb, 0xf1, - 0x6c, 0xc0, 0x70, 0x8f, 0x86, 0x63, 0xdc, 0x68, 0xcb, 0x0f, 0xf5, 0xd2, 0x59, 0x42, 0xfd, 0x68, - 0x52, 0x98, 0x47, 0x4f, 0x20, 0x6f, 0x6b, 0x59, 0xef, 0xb9, 0x02, 0x71, 0x6b, 0xad, 0xe9, 0xc7, - 0xca, 0xad, 0xb5, 0x26, 0x66, 0x10, 0x68, 0x13, 0x86, 0x58, 0x3a, 0x65, 0xd1, 0x21, 0x9f, 0x3d, - 0xda, 0xb0, 0x15, 0xf4, 0x5d, 0x8a, 0xfd, 0xa2, 0xd8, 0xc1, 0x91, 0x3f, 0x86, 0xf1, 0x50, 0x08, - 0x41, 0x1f, 0xc1, 0x98, 0x66, 0x28, 0xed, 0xba, 0xa2, 0x29, 0x7a, 0x8b, 0xb8, 0x5f, 0x3b, 0xae, - 0x25, 0x9d, 0xbd, 0xb5, 0x00, 0x9f, 0x08, 0x40, 0xb3, 0x42, 0xc9, 0x58, 0x90, 0x86, 0x43, 0x88, - 0xb2, 0x02, 0xe0, 0xcf, 0x11, 0x55, 0x60, 0x88, 0x79, 0xaa, 0x93, 0xea, 0x46, 0xea, 0x23, 0xcc, - 0x42, 0xe6, 0xc0, 0x14, 0x3b, 0xe3, 0xe8, 0x36, 0x00, 0x25, 0x2d, 0x8b, 0xd8, 0x7c, 0x3b, 0x73, - 0xe1, 0x2f, 0xa6, 0x4d, 0x8f, 0x82, 0x03, 0x5c, 0xf2, 0x3f, 0x4b, 0x30, 0xbe, 0x41, 0xec, 0x4f, - 0x0c, 0x6b, 0xbf, 0x61, 0x68, 0x6a, 0xab, 0x7f, 0x0e, 0x79, 0x00, 0x87, 0xf2, 0xc0, 0x9b, 0x03, - 0x76, 0x26, 0x64, 0x5d, 0x5a, 0x36, 0x90, 0xbf, 0x94, 0x60, 0x3e, 0xc4, 0xf9, 0xc8, 0x3f, 0xfc, - 0xdb, 0x30, 0x64, 0x1a, 0x96, 0xed, 0xd6, 0x08, 0xa7, 0x52, 0xc8, 0x22, 0x6c, 0xa0, 0x4a, 0x60, - 0x30, 0xd8, 0x41, 0x43, 0x6b, 0x90, 0xb3, 0x0d, 0xe1, 0xaa, 0xa7, 0xc3, 0x24, 0xc4, 0xaa, 0x83, - 0xc0, 0xcc, 0x6d, 0x19, 0x38, 0x67, 0x1b, 0x6c, 0x23, 0xca, 0x21, 0xae, 0x60, 0xf8, 0x7a, 0x45, - 0x33, 0xc0, 0x50, 0xd8, 0xb5, 0x8c, 0xee, 0x99, 0xe7, 0xe0, 0x6d, 0xc4, 0x8a, 0x65, 0x74, 0x31, - 0xc7, 0x92, 0xbf, 0x92, 0x60, 0x3a, 0xc4, 0x79, 0x0e, 0xa9, 0xe3, 0x9d, 0x70, 0xea, 0xb8, 0x71, - 0x9a, 0x89, 0xa4, 0x24, 0x90, 0xaf, 0x72, 0x91, 0x69, 0xb0, 0x09, 0xa3, 0x5d, 0x18, 0x35, 0x8d, - 0x76, 0xf3, 0x25, 0x7c, 0xdf, 0x9c, 0x64, 0x29, 0xbd, 0xe1, 0x63, 0xe1, 0x20, 0x30, 0x3a, 0x84, - 0x69, 0x5d, 0xe9, 0x12, 0x6a, 0x2a, 0x2d, 0xd2, 0x7c, 0x09, 0x2f, 0x3e, 0x17, 0xf9, 0x07, 0x94, - 0x28, 0x22, 0x8e, 0x2b, 0x41, 0xeb, 0x50, 0x54, 0x4d, 0x5e, 0x62, 0x8a, 0x5a, 0x62, 0x60, 0x1e, - 0x76, 0x0a, 0x52, 0x27, 0x9e, 0x8b, 0x1f, 0xd8, 0xc5, 0x90, 0xff, 0x3a, 0xea, 0x0d, 0xbc, 0x62, - 0x79, 0x0c, 0x25, 0xde, 0x69, 0xd2, 0x32, 0x34, 0xf7, 0x53, 0x07, 0xbf, 0x5c, 0x88, 0xb1, 0x17, - 0x47, 0x95, 0xcb, 0x09, 0xaf, 0xd8, 0x2e, 0x19, 0x7b, 0xc2, 0x68, 0x03, 0x0a, 0xe6, 0x0f, 0x29, - 0xae, 0x78, 0x9a, 0xe4, 0x15, 0x15, 0xc7, 0x91, 0xff, 0x30, 0x1f, 0x31, 0x97, 0x27, 0xcb, 0x67, - 0x2f, 0x6d, 0xd7, 0xbd, 0x62, 0x2e, 0x75, 0xe7, 0x77, 0xa0, 0x28, 0x52, 0xad, 0x70, 0xe6, 0x9f, - 0x9f, 0xc6, 0x99, 0x83, 0x59, 0xcc, 0xbb, 0x4b, 0xb9, 0x83, 0x2e, 0x30, 0xfa, 0x10, 0x86, 0x89, - 0xa3, 0xc2, 0xc9, 0x8d, 0xf7, 0x4e, 0xa3, 0xc2, 0x8f, 0xab, 0x7e, 0x0d, 0x2d, 0xc6, 0x04, 0x2a, - 0xfa, 0x25, 0x5b, 0x2f, 0xc6, 0xcb, 0x4a, 0x4e, 0x5a, 0x2e, 0xf0, 0x74, 0x75, 0xc5, 0x99, 0xb6, - 0x37, 0xfc, 0xe2, 0xa8, 0x02, 0xfe, 0x4f, 0x1c, 0x94, 0x90, 0xff, 0x55, 0x82, 0x69, 0xbe, 0x42, - 0xad, 0x9e, 0xa5, 0xda, 0xfd, 0x73, 0x4b, 0x4c, 0x4f, 0x43, 0x89, 0xe9, 0xce, 0x80, 0x65, 0x89, - 0x59, 0x98, 0x9a, 0x9c, 0xbe, 0x96, 0xe0, 0x62, 0x8c, 0xfb, 0x1c, 0xe2, 0xe2, 0x76, 0x38, 0x2e, - 0xbe, 0x79, 0xda, 0x09, 0xa5, 0xc4, 0xc6, 0xff, 0x9e, 0x4e, 0x98, 0x0e, 0x3f, 0x29, 0xb7, 0x01, - 0x4c, 0x4b, 0x3d, 0x50, 0x35, 0xd2, 0x11, 0x5f, 0xf5, 0x4b, 0x81, 0x9e, 0x2d, 0x8f, 0x82, 0x03, - 0x5c, 0x88, 0xc2, 0x5c, 0x9b, 0xec, 0x2a, 0x3d, 0xcd, 0x5e, 0x6c, 0xb7, 0x97, 0x14, 0x53, 0xd9, - 0x51, 0x35, 0xd5, 0x56, 0xc5, 0xfb, 0xc7, 0x48, 0xfd, 0xa1, 0xf3, 0xb5, 0x3d, 0x89, 0xe3, 0xc5, - 0x51, 0xe5, 0x4a, 0xd2, 0xe7, 0x2e, 0x97, 0xa5, 0x8f, 0x53, 0xa0, 0x51, 0x1f, 0xca, 0x16, 0xf9, - 0xb8, 0xa7, 0x5a, 0xa4, 0xbd, 0x6c, 0x19, 0x66, 0x48, 0x6d, 0x9e, 0xab, 0xfd, 0xed, 0xe3, 0xa3, - 0x4a, 0x19, 0xa7, 0xf0, 0x0c, 0x56, 0x9c, 0x0a, 0x8f, 0x9e, 0xc1, 0x8c, 0x22, 0xba, 0xeb, 0x82, - 0x5a, 0x9d, 0x53, 0x72, 0xff, 0xf8, 0xa8, 0x32, 0xb3, 0x18, 0x27, 0x0f, 0x56, 0x98, 0x04, 0x8a, - 0x6a, 0x50, 0x3c, 0xe0, 0x8d, 0x78, 0xb4, 0x3c, 0xc4, 0xf1, 0x59, 0x22, 0x28, 0x3a, 0xbd, 0x79, - 0x0c, 0x73, 0x78, 0xa5, 0xc9, 0x4f, 0x9f, 0xcb, 0xc5, 0xee, 0xba, 0xac, 0x96, 0x14, 0x27, 0x9e, - 0x3f, 0x81, 0x97, 0xfc, 0xa8, 0xf5, 0xc4, 0x27, 0xe1, 0x20, 0x1f, 0xfa, 0x00, 0x46, 0xf6, 0xc4, - 0x83, 0x09, 0x2d, 0x17, 0x33, 0x25, 0xe1, 0xd0, 0x03, 0x4b, 0x7d, 0x5a, 0xa8, 0x18, 0x71, 0x87, - 0x29, 0xf6, 0x11, 0xd1, 0xeb, 0x50, 0xe4, 0x3f, 0x56, 0x97, 0xf9, 0xfb, 0x62, 0xc9, 0x8f, 0x6d, - 0x4f, 0x9c, 0x61, 0xec, 0xd2, 0x5d, 0xd6, 0xd5, 0xc6, 0x12, 0x7f, 0xe7, 0x8e, 0xb0, 0xae, 0x36, - 0x96, 0xb0, 0x4b, 0x47, 0x1f, 0x41, 0x91, 0x92, 0x35, 0x55, 0xef, 0x1d, 0x96, 0x21, 0xd3, 0x57, - 0xf2, 0xe6, 0x23, 0xce, 0x1d, 0x79, 0xe9, 0xf3, 0x35, 0x08, 0x3a, 0x76, 0x61, 0xd1, 0x1e, 0x8c, - 0x58, 0x3d, 0x7d, 0x91, 0x6e, 0x53, 0x62, 0x95, 0x47, 0xb9, 0x8e, 0x41, 0xe1, 0x1c, 0xbb, 0xfc, - 0x51, 0x2d, 0xde, 0x0a, 0x79, 0x1c, 0xd8, 0x07, 0x47, 0x7b, 0x00, 0xfc, 0x07, 0x7f, 0x54, 0x2c, - 0xcf, 0x71, 0x55, 0xf7, 0xb3, 0xa8, 0x4a, 0x7a, 0xbb, 0x14, 0x1f, 0x16, 0x3c, 0x32, 0x0e, 0x60, - 0xa3, 0x3f, 0x92, 0x00, 0xd1, 0x9e, 0x69, 0x6a, 0xa4, 0x4b, 0x74, 0x5b, 0xd1, 0xf8, 0x28, 0x2d, - 0x8f, 0x71, 0x95, 0x6f, 0x0f, 0x5a, 0xc1, 0x98, 0x60, 0x54, 0xb5, 0xf7, 0xbd, 0x20, 0xce, 0x8a, - 0x13, 0xf4, 0xb2, 0x4d, 0xdc, 0x15, 0xb3, 0x1e, 0xcf, 0xb4, 0x89, 0xc9, 0xcf, 0xb5, 0xfe, 0x26, - 0x0a, 0x3a, 0x76, 0x61, 0xd1, 0x53, 0x98, 0x73, 0x3b, 0x46, 0xb1, 0x61, 0xd8, 0x2b, 0xaa, 0x46, - 0x68, 0x9f, 0xda, 0xa4, 0x5b, 0x9e, 0xe0, 0x0e, 0xe6, 0xb5, 0xcd, 0xe0, 0x44, 0x2e, 0x9c, 0x22, - 0x8d, 0xba, 0x50, 0x71, 0x83, 0x13, 0x3b, 0xb9, 0x5e, 0x74, 0x7c, 0x44, 0x5b, 0x8a, 0xe6, 0x7c, - 0x42, 0x99, 0xe4, 0x0a, 0x5e, 0x3b, 0x3e, 0xaa, 0x54, 0x96, 0x4f, 0x66, 0xc5, 0x83, 0xb0, 0xd0, - 0x7b, 0x50, 0x56, 0xd2, 0xf4, 0x4c, 0x71, 0x3d, 0x3f, 0x65, 0x11, 0x2f, 0x55, 0x41, 0xaa, 0x34, - 0xb2, 0x61, 0x4a, 0x09, 0xf7, 0xee, 0xd2, 0xf2, 0x74, 0xa6, 0xd7, 0xd8, 0x48, 0xcb, 0xaf, 0xff, - 0x70, 0x12, 0x21, 0x50, 0x1c, 0xd3, 0x80, 0x7e, 0x1f, 0x90, 0x12, 0x6d, 0x37, 0xa6, 0x65, 0x94, - 0x29, 0xd1, 0xc5, 0xfa, 0x94, 0x7d, 0xb7, 0x8b, 0x91, 0x28, 0x4e, 0xd0, 0xc3, 0x0a, 0x74, 0x25, - 0xd2, 0x22, 0x4d, 0xcb, 0xf3, 0x5c, 0x79, 0x2d, 0x9b, 0x72, 0x4f, 0x2e, 0xf0, 0xa5, 0x28, 0x8a, - 0x88, 0xe3, 0x4a, 0xd0, 0x1a, 0xcc, 0x8a, 0xc1, 0x6d, 0x9d, 0x2a, 0xbb, 0xa4, 0xd9, 0xa7, 0x2d, - 0x5b, 0xa3, 0xe5, 0x19, 0x1e, 0xdf, 0xf9, 0xd7, 0xca, 0xc5, 0x04, 0x3a, 0x4e, 0x94, 0x42, 0x6f, - 0xc3, 0xd4, 0xae, 0x61, 0xed, 0xa8, 0xed, 0x36, 0xd1, 0x5d, 0xa4, 0x59, 0x8e, 0xc4, 0xdf, 0x81, - 0x56, 0x22, 0x34, 0x1c, 0xe3, 0x46, 0x14, 0x2e, 0x0a, 0xe4, 0x86, 0x65, 0xb4, 0xd6, 0x8d, 0x9e, - 0x6e, 0x3b, 0x65, 0xdf, 0x45, 0x2f, 0x8d, 0x5e, 0x5c, 0x4c, 0x62, 0x78, 0x71, 0x54, 0xb9, 0x9a, - 0x5c, 0xe5, 0xfb, 0x4c, 0x38, 0x19, 0x1b, 0x99, 0x30, 0x26, 0x1a, 0xdf, 0xf9, 0x83, 0x54, 0xb9, - 0xcc, 0x8f, 0xfe, 0x83, 0xc1, 0x01, 0xcf, 0x13, 0x89, 0x9e, 0xff, 0xa9, 0xe3, 0xa3, 0xca, 0x58, - 0x90, 0x01, 0x87, 0x34, 0xf0, 0x46, 0x27, 0xf1, 0x79, 0xed, 0x7c, 0x9a, 0xc5, 0x4f, 0xd7, 0xe8, - 0xe4, 0x9b, 0xf6, 0xd2, 0x1a, 0x9d, 0x02, 0x90, 0x27, 0x3f, 0x99, 0xff, 0x57, 0x0e, 0x66, 0x7c, - 0xe6, 0xcc, 0x8d, 0x4e, 0x09, 0x22, 0xbf, 0x6e, 0x18, 0xcf, 0xd6, 0x7c, 0xe4, 0x2f, 0xdd, 0xff, - 0xbd, 0xe6, 0x23, 0xdf, 0xb6, 0x94, 0xdb, 0xc3, 0xdf, 0xe6, 0x82, 0x13, 0x38, 0x65, 0x07, 0xcc, - 0x4b, 0xe8, 0x99, 0xfe, 0xd1, 0x35, 0xd1, 0xc8, 0x5f, 0xe7, 0x61, 0x2a, 0x7a, 0x1a, 0x43, 0x8d, - 0x12, 0xd2, 0xc0, 0x46, 0x89, 0x06, 0xcc, 0xee, 0xf6, 0x34, 0xad, 0xcf, 0xe7, 0x10, 0xe8, 0x96, - 0x70, 0x3e, 0x59, 0xfe, 0x54, 0x48, 0xce, 0xae, 0x24, 0xf0, 0xe0, 0x44, 0xc9, 0x78, 0xdf, 0x44, - 0xe1, 0x87, 0xf6, 0x4d, 0x0c, 0x9d, 0xa1, 0x6f, 0x22, 0xb9, 0xf5, 0x24, 0x7f, 0xa6, 0xd6, 0x93, - 0xb3, 0x34, 0x4d, 0x24, 0x04, 0xb1, 0x81, 0x0d, 0xc0, 0xbf, 0x80, 0x89, 0x70, 0x23, 0x8f, 0xb3, - 0x97, 0x4e, 0x2f, 0x91, 0xf8, 0x34, 0x1c, 0xd8, 0x4b, 0x67, 0x1c, 0x7b, 0x1c, 0xf2, 0xb1, 0x04, - 0x73, 0xc9, 0x0d, 0xbb, 0x48, 0x83, 0x89, 0xae, 0x72, 0x18, 0x6c, 0xa2, 0x96, 0xce, 0xf8, 0x32, - 0xc6, 0x3b, 0x38, 0xd6, 0x43, 0x58, 0x38, 0x82, 0x8d, 0xde, 0x87, 0x52, 0x57, 0x39, 0x6c, 0xf6, - 0xac, 0x0e, 0x39, 0xf3, 0x0b, 0x1c, 0x3f, 0x46, 0xeb, 0x02, 0x05, 0x7b, 0x78, 0xf2, 0xf7, 0x12, - 0xcc, 0xa7, 0xf4, 0x65, 0xfc, 0x3f, 0x9a, 0xe5, 0x5f, 0x4a, 0xf0, 0x93, 0xd4, 0x6b, 0x18, 0xba, - 0x17, 0x6a, 0x21, 0x91, 0x23, 0x2d, 0x24, 0x28, 0x2e, 0xf8, 0x8a, 0x3a, 0x48, 0x3e, 0x97, 0xa0, - 0x9c, 0x76, 0x2f, 0x45, 0x77, 0x43, 0x46, 0xfe, 0x2c, 0x62, 0xe4, 0x74, 0x4c, 0xee, 0x15, 0xd9, - 0xf8, 0x6f, 0x12, 0x5c, 0x3e, 0xa1, 0xbe, 0xf3, 0xae, 0x3f, 0xa4, 0x1d, 0xe4, 0xe2, 0x4f, 0xe2, - 0xe2, 0x7b, 0x9a, 0x7f, 0xfd, 0x49, 0xe0, 0xc1, 0xa9, 0xd2, 0x68, 0x1b, 0xe6, 0xc5, 0xdd, 0x2b, - 0x4a, 0x13, 0xa5, 0x0b, 0xef, 0xb4, 0x5b, 0x4e, 0x66, 0xc1, 0x69, 0xb2, 0xf2, 0xdf, 0x48, 0x30, - 0x97, 0xfc, 0xe0, 0x80, 0xde, 0x0a, 0x2d, 0x79, 0x25, 0xb2, 0xe4, 0x93, 0x11, 0x29, 0xb1, 0xe0, - 0x1f, 0xc2, 0x84, 0x78, 0x96, 0x10, 0x30, 0xc2, 0x99, 0xe5, 0xa4, 0xec, 0x24, 0x20, 0xdc, 0xe2, - 0x98, 0x1f, 0x93, 0xf0, 0x18, 0x8e, 0xa0, 0xc9, 0x9f, 0xe6, 0x60, 0xa8, 0xd9, 0x52, 0x34, 0x72, - 0x0e, 0xb5, 0xf1, 0xaf, 0x42, 0xb5, 0xf1, 0xa0, 0xff, 0xc3, 0xc6, 0xad, 0x4a, 0x2d, 0x8b, 0x71, - 0xa4, 0x2c, 0x7e, 0x23, 0x13, 0xda, 0xc9, 0x15, 0xf1, 0x6f, 0xc1, 0x88, 0xa7, 0xf4, 0x74, 0x89, - 0x5a, 0xfe, 0x8b, 0x1c, 0x8c, 0x06, 0x54, 0x9c, 0x32, 0xcd, 0xef, 0x86, 0x6a, 0x9b, 0x7c, 0x86, - 0x47, 0xa0, 0x80, 0xae, 0xaa, 0x5b, 0xcd, 0x38, 0x3d, 0xd8, 0x7e, 0xd7, 0x6d, 0xbc, 0xc8, 0xf9, - 0x05, 0x4c, 0xd8, 0x8a, 0xd5, 0x21, 0xb6, 0xf7, 0x51, 0xc4, 0xe9, 0x11, 0xf3, 0xfe, 0x33, 0xc0, - 0x56, 0x88, 0x8a, 0x23, 0xdc, 0x97, 0x1e, 0xc2, 0x78, 0x48, 0xd9, 0xa9, 0x5a, 0xa8, 0xff, 0x4e, - 0x82, 0x9f, 0x0d, 0x7c, 0x48, 0x42, 0xf5, 0xd0, 0x21, 0xa9, 0x46, 0x0e, 0xc9, 0x42, 0x3a, 0xc0, - 0xab, 0x6b, 0xc5, 0xab, 0xdf, 0x7c, 0xfe, 0xdd, 0xc2, 0x85, 0x6f, 0xbe, 0x5b, 0xb8, 0xf0, 0xed, - 0x77, 0x0b, 0x17, 0xfe, 0xe0, 0x78, 0x41, 0x7a, 0x7e, 0xbc, 0x20, 0x7d, 0x73, 0xbc, 0x20, 0x7d, - 0x7b, 0xbc, 0x20, 0xfd, 0xc7, 0xf1, 0x82, 0xf4, 0x27, 0xdf, 0x2f, 0x5c, 0x78, 0xbf, 0x28, 0xe0, - 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe5, 0x2f, 0x59, 0xc3, 0x16, 0x3f, 0x00, 0x00, + 0x20, 0xb7, 0x20, 0xc7, 0xe4, 0x60, 0x18, 0x09, 0xe2, 0x00, 0x42, 0xe0, 0x04, 0x06, 0x72, 0x88, + 0x4f, 0x44, 0x4c, 0x9f, 0x82, 0x9c, 0x72, 0x0b, 0x74, 0x0a, 0xba, 0xa7, 0xe7, 0x7f, 0x86, 0x3b, + 0xa4, 0x25, 0x22, 0x0e, 0x72, 0x12, 0xb7, 0xab, 0xea, 0xab, 0xea, 0xee, 0xea, 0xaa, 0xea, 0x9e, + 0x12, 0xac, 0xec, 0xdf, 0xa7, 0x55, 0xd5, 0xa8, 0xed, 0xf7, 0x76, 0x88, 0xa5, 0x13, 0x9b, 0xd0, + 0xda, 0x01, 0xd1, 0xdb, 0x86, 0x55, 0x13, 0x04, 0xc5, 0x54, 0x6b, 0xe4, 0xd0, 0x26, 0x3a, 0x55, + 0x0d, 0x9d, 0xd6, 0x0e, 0x6e, 0xed, 0x10, 0x5b, 0xb9, 0x55, 0xeb, 0x10, 0x9d, 0x58, 0x8a, 0x4d, + 0xda, 0x55, 0xd3, 0x32, 0x6c, 0x03, 0x5d, 0x71, 0xd8, 0xab, 0x8a, 0xa9, 0x56, 0x7d, 0xf6, 0xaa, + 0x60, 0xbf, 0x74, 0xb3, 0xa3, 0xda, 0x7b, 0xbd, 0x9d, 0x6a, 0xcb, 0xe8, 0xd6, 0x3a, 0x46, 0xc7, + 0xa8, 0x71, 0xa9, 0x9d, 0xde, 0x2e, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x1c, 0xb4, 0x4b, 0x72, 0x40, + 0x79, 0xcb, 0xb0, 0x48, 0xed, 0x20, 0xa6, 0xf1, 0xd2, 0x1d, 0x9f, 0xa7, 0xab, 0xb4, 0xf6, 0x54, + 0x9d, 0x58, 0xfd, 0x9a, 0xb9, 0xdf, 0x61, 0x03, 0xb4, 0xd6, 0x25, 0xb6, 0x92, 0x24, 0x55, 0x4b, + 0x93, 0xb2, 0x7a, 0xba, 0xad, 0x76, 0x49, 0x4c, 0xe0, 0xde, 0x20, 0x01, 0xda, 0xda, 0x23, 0x5d, + 0x25, 0x26, 0xf7, 0x56, 0x9a, 0x5c, 0xcf, 0x56, 0xb5, 0x9a, 0xaa, 0xdb, 0xd4, 0xb6, 0xa2, 0x42, + 0xf2, 0x1d, 0x98, 0x5a, 0xd4, 0x34, 0xe3, 0x13, 0xd2, 0x5e, 0x6a, 0xae, 0x2e, 0x5b, 0xea, 0x01, + 0xb1, 0xd0, 0x55, 0x28, 0xe8, 0x4a, 0x97, 0x94, 0xa5, 0xab, 0xd2, 0xf5, 0x91, 0xfa, 0xd8, 0xf3, + 0xa3, 0xca, 0x85, 0xe3, 0xa3, 0x4a, 0x61, 0x43, 0xe9, 0x12, 0xcc, 0x29, 0xf2, 0x43, 0x98, 0x16, + 0x52, 0x2b, 0x1a, 0x39, 0x7c, 0x6a, 0x68, 0xbd, 0x2e, 0x41, 0xd7, 0x60, 0xb8, 0xcd, 0x01, 0x84, + 0xe0, 0x84, 0x10, 0x1c, 0x76, 0x60, 0xb1, 0xa0, 0xca, 0x14, 0x26, 0x85, 0xf0, 0x13, 0x83, 0xda, + 0x0d, 0xc5, 0xde, 0x43, 0xb7, 0x01, 0x4c, 0xc5, 0xde, 0x6b, 0x58, 0x64, 0x57, 0x3d, 0x14, 0xe2, + 0x48, 0x88, 0x43, 0xc3, 0xa3, 0xe0, 0x00, 0x17, 0xba, 0x01, 0x25, 0x8b, 0x28, 0xed, 0x4d, 0x5d, + 0xeb, 0x97, 0x73, 0x57, 0xa5, 0xeb, 0xa5, 0xfa, 0x94, 0x90, 0x28, 0x61, 0x31, 0x8e, 0x3d, 0x0e, + 0xf9, 0xb3, 0x1c, 0x8c, 0x2c, 0x2b, 0xa4, 0x6b, 0xe8, 0x4d, 0x62, 0xa3, 0x8f, 0xa0, 0xc4, 0xb6, + 0xab, 0xad, 0xd8, 0x0a, 0xd7, 0x36, 0x7a, 0xfb, 0xcd, 0xaa, 0xef, 0x4e, 0xde, 0xea, 0x55, 0xcd, + 0xfd, 0x0e, 0x1b, 0xa0, 0x55, 0xc6, 0x5d, 0x3d, 0xb8, 0x55, 0xdd, 0xdc, 0x79, 0x46, 0x5a, 0xf6, + 0x3a, 0xb1, 0x15, 0xdf, 0x3e, 0x7f, 0x0c, 0x7b, 0xa8, 0x68, 0x03, 0x0a, 0xd4, 0x24, 0x2d, 0x6e, + 0xd9, 0xe8, 0xed, 0x1b, 0xd5, 0x13, 0x9d, 0xb5, 0xea, 0x59, 0xd6, 0x34, 0x49, 0xcb, 0x5f, 0x71, + 0xf6, 0x0b, 0x73, 0x1c, 0xf4, 0x14, 0x86, 0xa9, 0xad, 0xd8, 0x3d, 0x5a, 0xce, 0x73, 0xc4, 0x6a, + 0x66, 0x44, 0x2e, 0xe5, 0x6f, 0x86, 0xf3, 0x1b, 0x0b, 0x34, 0xf9, 0x3f, 0x72, 0x80, 0x3c, 0xde, + 0x25, 0x43, 0x6f, 0xab, 0xb6, 0x6a, 0xe8, 0xe8, 0x01, 0x14, 0xec, 0xbe, 0xe9, 0xba, 0xc0, 0x35, + 0xd7, 0xa0, 0xad, 0xbe, 0x49, 0x5e, 0x1c, 0x55, 0xe6, 0xe2, 0x12, 0x8c, 0x82, 0xb9, 0x0c, 0x5a, + 0xf3, 0x4c, 0xcd, 0x71, 0xe9, 0x3b, 0x61, 0xd5, 0x2f, 0x8e, 0x2a, 0x09, 0x87, 0xad, 0xea, 0x21, + 0x85, 0x0d, 0x44, 0x07, 0x80, 0x34, 0x85, 0xda, 0x5b, 0x96, 0xa2, 0x53, 0x47, 0x93, 0xda, 0x25, + 0x62, 0x11, 0xde, 0xc8, 0xb6, 0x69, 0x4c, 0xa2, 0x7e, 0x49, 0x58, 0x81, 0xd6, 0x62, 0x68, 0x38, + 0x41, 0x03, 0xf3, 0x66, 0x8b, 0x28, 0xd4, 0xd0, 0xcb, 0x85, 0xb0, 0x37, 0x63, 0x3e, 0x8a, 0x05, + 0x15, 0xbd, 0x0e, 0xc5, 0x2e, 0xa1, 0x54, 0xe9, 0x90, 0xf2, 0x10, 0x67, 0x9c, 0x14, 0x8c, 0xc5, + 0x75, 0x67, 0x18, 0xbb, 0x74, 0xf9, 0x0b, 0x09, 0xc6, 0xbd, 0x95, 0x5b, 0x53, 0xa9, 0x8d, 0x7e, + 0x27, 0xe6, 0x87, 0xd5, 0x6c, 0x53, 0x62, 0xd2, 0xdc, 0x0b, 0x3d, 0x9f, 0x77, 0x47, 0x02, 0x3e, + 0xb8, 0x0e, 0x43, 0xaa, 0x4d, 0xba, 0x6c, 0x1f, 0xf2, 0xd7, 0x47, 0x6f, 0x5f, 0xcf, 0xea, 0x32, + 0xf5, 0x71, 0x01, 0x3a, 0xb4, 0xca, 0xc4, 0xb1, 0x83, 0x22, 0xff, 0x49, 0x21, 0x60, 0x3e, 0x73, + 0x4d, 0xf4, 0x01, 0x94, 0x28, 0xd1, 0x48, 0xcb, 0x36, 0x2c, 0x61, 0xfe, 0x5b, 0x19, 0xcd, 0x57, + 0x76, 0x88, 0xd6, 0x14, 0xa2, 0xf5, 0x31, 0x66, 0xbf, 0xfb, 0x0b, 0x7b, 0x90, 0xe8, 0x1d, 0x28, + 0xd9, 0xa4, 0x6b, 0x6a, 0x8a, 0x4d, 0xc4, 0x39, 0x7a, 0x2d, 0x38, 0x05, 0xe6, 0x39, 0x0c, 0xac, + 0x61, 0xb4, 0xb7, 0x04, 0x1b, 0x3f, 0x3e, 0xde, 0x92, 0xb8, 0xa3, 0xd8, 0x83, 0x41, 0x07, 0x30, + 0xd1, 0x33, 0xdb, 0x8c, 0xd3, 0x66, 0x51, 0xb0, 0xd3, 0x17, 0x9e, 0x74, 0x2f, 0xeb, 0xda, 0x6c, + 0x87, 0xa4, 0xeb, 0x73, 0x42, 0xd7, 0x44, 0x78, 0x1c, 0x47, 0xb4, 0xa0, 0x45, 0x98, 0xec, 0xaa, + 0x3a, 0x8b, 0x4b, 0xfd, 0x26, 0x69, 0x19, 0x7a, 0x9b, 0x72, 0xb7, 0x1a, 0xaa, 0xcf, 0x0b, 0x80, + 0xc9, 0xf5, 0x30, 0x19, 0x47, 0xf9, 0xd1, 0xaf, 0x00, 0xb9, 0xd3, 0x78, 0xec, 0x04, 0x71, 0xd5, + 0xd0, 0xb9, 0xcf, 0xe5, 0x7d, 0xe7, 0xde, 0x8a, 0x71, 0xe0, 0x04, 0x29, 0xb4, 0x06, 0xb3, 0x16, + 0x39, 0x50, 0xd9, 0x1c, 0x9f, 0xa8, 0xd4, 0x36, 0xac, 0xfe, 0x9a, 0xda, 0x55, 0xed, 0xf2, 0x30, + 0xb7, 0xa9, 0x7c, 0x7c, 0x54, 0x99, 0xc5, 0x09, 0x74, 0x9c, 0x28, 0x25, 0xff, 0xe9, 0x30, 0x4c, + 0x46, 0xe2, 0x0d, 0x7a, 0x0a, 0x73, 0xad, 0x9e, 0x65, 0x11, 0xdd, 0xde, 0xe8, 0x75, 0x77, 0x88, + 0xd5, 0x6c, 0xed, 0x91, 0x76, 0x4f, 0x23, 0x6d, 0xee, 0x28, 0x43, 0xf5, 0x05, 0x61, 0xf1, 0xdc, + 0x52, 0x22, 0x17, 0x4e, 0x91, 0x66, 0xab, 0xa0, 0xf3, 0xa1, 0x75, 0x95, 0x52, 0x0f, 0x33, 0xc7, + 0x31, 0xbd, 0x55, 0xd8, 0x88, 0x71, 0xe0, 0x04, 0x29, 0x66, 0x63, 0x9b, 0x50, 0xd5, 0x22, 0xed, + 0xa8, 0x8d, 0xf9, 0xb0, 0x8d, 0xcb, 0x89, 0x5c, 0x38, 0x45, 0x1a, 0xdd, 0x85, 0x51, 0x47, 0x1b, + 0xdf, 0x3f, 0xb1, 0xd1, 0x33, 0x02, 0x6c, 0x74, 0xc3, 0x27, 0xe1, 0x20, 0x1f, 0x9b, 0x9a, 0xb1, + 0x43, 0x89, 0x75, 0x40, 0xda, 0xe9, 0x1b, 0xbc, 0x19, 0xe3, 0xc0, 0x09, 0x52, 0x6c, 0x6a, 0x8e, + 0x07, 0xc6, 0xa6, 0x36, 0x1c, 0x9e, 0xda, 0x76, 0x22, 0x17, 0x4e, 0x91, 0x66, 0x7e, 0xec, 0x98, + 0xbc, 0x78, 0xa0, 0xa8, 0x9a, 0xb2, 0xa3, 0x91, 0x72, 0x31, 0xec, 0xc7, 0x1b, 0x61, 0x32, 0x8e, + 0xf2, 0xa3, 0xc7, 0x30, 0xed, 0x0c, 0x6d, 0xeb, 0x8a, 0x07, 0x52, 0xe2, 0x20, 0x3f, 0x11, 0x20, + 0xd3, 0x1b, 0x51, 0x06, 0x1c, 0x97, 0x41, 0x0f, 0x60, 0xa2, 0x65, 0x68, 0x1a, 0xf7, 0xc7, 0x25, + 0xa3, 0xa7, 0xdb, 0xe5, 0x11, 0x8e, 0x82, 0xd8, 0x79, 0x5c, 0x0a, 0x51, 0x70, 0x84, 0x13, 0x11, + 0x80, 0x96, 0x9b, 0x70, 0x68, 0x19, 0x78, 0x7c, 0xbc, 0x95, 0x35, 0x06, 0x78, 0xa9, 0xca, 0xaf, + 0x01, 0xbc, 0x21, 0x8a, 0x03, 0xc0, 0xf2, 0x3f, 0x49, 0x30, 0x9f, 0x12, 0x3a, 0xd0, 0x2f, 0x43, + 0x29, 0xf6, 0x37, 0x22, 0x29, 0xf6, 0x72, 0x8a, 0x58, 0x20, 0xcf, 0xea, 0x30, 0x6e, 0xb1, 0x59, + 0xe9, 0x1d, 0x87, 0x45, 0xc4, 0xc8, 0xbb, 0x03, 0xa6, 0x81, 0x83, 0x32, 0x7e, 0xcc, 0x9f, 0x3e, + 0x3e, 0xaa, 0x8c, 0x87, 0x68, 0x38, 0x0c, 0x2f, 0xff, 0x59, 0x0e, 0x60, 0x99, 0x98, 0x9a, 0xd1, + 0xef, 0x12, 0xfd, 0x3c, 0x6a, 0xa8, 0xcd, 0x50, 0x0d, 0x75, 0x73, 0xd0, 0xf6, 0x78, 0xa6, 0xa5, + 0x16, 0x51, 0xef, 0x46, 0x8a, 0xa8, 0x5a, 0x76, 0xc8, 0x93, 0xab, 0xa8, 0x7f, 0xcb, 0xc3, 0x8c, + 0xcf, 0xec, 0x97, 0x51, 0x0f, 0x43, 0x7b, 0xfc, 0xeb, 0x91, 0x3d, 0x9e, 0x4f, 0x10, 0x79, 0x65, + 0x75, 0xd4, 0x33, 0x98, 0x60, 0x55, 0x8e, 0xb3, 0x97, 0xbc, 0x86, 0x1a, 0x3e, 0x75, 0x0d, 0xe5, + 0x65, 0xbb, 0xb5, 0x10, 0x12, 0x8e, 0x20, 0xa7, 0xd4, 0x6c, 0xc5, 0x1f, 0x63, 0xcd, 0xf6, 0xa5, + 0x04, 0x13, 0xfe, 0x36, 0x9d, 0x43, 0xd1, 0xb6, 0x11, 0x2e, 0xda, 0x5e, 0xcf, 0xec, 0xa2, 0x29, + 0x55, 0xdb, 0x7f, 0xb3, 0x02, 0xdf, 0x63, 0x62, 0x07, 0x7c, 0x47, 0x69, 0xed, 0x0f, 0xbe, 0xe3, + 0xa1, 0xcf, 0x24, 0x40, 0x22, 0x0b, 0x2c, 0xea, 0xba, 0x61, 0x2b, 0x4e, 0xac, 0x74, 0xcc, 0x5a, + 0xcd, 0x6c, 0x96, 0xab, 0xb1, 0xba, 0x1d, 0xc3, 0x7a, 0xa4, 0xdb, 0x56, 0xdf, 0xdf, 0xe4, 0x38, + 0x03, 0x4e, 0x30, 0x00, 0x29, 0x00, 0x96, 0xc0, 0xdc, 0x32, 0xc4, 0x41, 0xbe, 0x99, 0x21, 0xe6, + 0x31, 0x81, 0x25, 0x43, 0xdf, 0x55, 0x3b, 0x7e, 0xd8, 0xc1, 0x1e, 0x10, 0x0e, 0x80, 0x5e, 0x7a, + 0x04, 0xf3, 0x29, 0xd6, 0xa2, 0x29, 0xc8, 0xef, 0x93, 0xbe, 0xb3, 0x6c, 0x98, 0xfd, 0x89, 0x66, + 0x61, 0xe8, 0x40, 0xd1, 0x7a, 0x4e, 0xf8, 0x1d, 0xc1, 0xce, 0x8f, 0x07, 0xb9, 0xfb, 0x92, 0xfc, + 0xc5, 0x50, 0xd0, 0x77, 0x78, 0xc5, 0x7c, 0x9d, 0x5d, 0x5a, 0x4d, 0x4d, 0x6d, 0x29, 0x54, 0x14, + 0x42, 0x63, 0xce, 0x85, 0xd5, 0x19, 0xc3, 0x1e, 0x35, 0x54, 0x5b, 0xe7, 0x5e, 0x6d, 0x6d, 0x9d, + 0x7f, 0x39, 0xb5, 0xf5, 0xef, 0x42, 0x89, 0xba, 0x55, 0x75, 0x81, 0x43, 0xde, 0x3a, 0x45, 0x7c, + 0x15, 0x05, 0xb5, 0xa7, 0xc0, 0x2b, 0xa5, 0x3d, 0xd0, 0xa4, 0x22, 0x7a, 0xe8, 0x94, 0x45, 0xf4, + 0x4b, 0x2d, 0x7c, 0x59, 0xbc, 0x31, 0x95, 0x1e, 0x25, 0x6d, 0x1e, 0xdb, 0x4a, 0x7e, 0xbc, 0x69, + 0xf0, 0x51, 0x2c, 0xa8, 0xe8, 0x83, 0x90, 0xcb, 0x96, 0xce, 0xe2, 0xb2, 0x13, 0xe9, 0xee, 0x8a, + 0xb6, 0x61, 0xde, 0xb4, 0x8c, 0x8e, 0x45, 0x28, 0x5d, 0x26, 0x4a, 0x5b, 0x53, 0x75, 0xe2, 0xae, + 0x8f, 0x53, 0x11, 0x5d, 0x3e, 0x3e, 0xaa, 0xcc, 0x37, 0x92, 0x59, 0x70, 0x9a, 0xac, 0xfc, 0xbc, + 0x00, 0x53, 0xd1, 0x0c, 0x98, 0x52, 0xa4, 0x4a, 0x67, 0x2a, 0x52, 0x6f, 0x04, 0x0e, 0x83, 0x53, + 0xc1, 0x07, 0x5e, 0x70, 0x62, 0x07, 0x62, 0x11, 0x26, 0x45, 0x34, 0x70, 0x89, 0xa2, 0x4c, 0xf7, + 0x76, 0x7f, 0x3b, 0x4c, 0xc6, 0x51, 0x7e, 0xf4, 0x10, 0xc6, 0x2d, 0x5e, 0x77, 0xbb, 0x00, 0x4e, + 0xed, 0x7a, 0x51, 0x00, 0x8c, 0xe3, 0x20, 0x11, 0x87, 0x79, 0x59, 0xdd, 0xea, 0x97, 0xa3, 0x2e, + 0x40, 0x21, 0x5c, 0xb7, 0x2e, 0x46, 0x19, 0x70, 0x5c, 0x06, 0xad, 0xc3, 0x4c, 0x4f, 0x8f, 0x43, + 0x39, 0xae, 0x7c, 0x59, 0x40, 0xcd, 0x6c, 0xc7, 0x59, 0x70, 0x92, 0x1c, 0xda, 0x0d, 0x95, 0xb2, + 0xc3, 0x3c, 0x3c, 0xdf, 0xce, 0x7c, 0xf0, 0x32, 0xd7, 0xb2, 0x09, 0xe5, 0x76, 0x29, 0x6b, 0xb9, + 0x2d, 0xff, 0xbd, 0x14, 0x4c, 0x42, 0x5e, 0x09, 0x3c, 0xe8, 0x95, 0x29, 0x26, 0x11, 0xa8, 0x8e, + 0x8c, 0xe4, 0xea, 0xf7, 0xde, 0xa9, 0xaa, 0x5f, 0x3f, 0x79, 0x0e, 0x2e, 0x7f, 0x3f, 0x97, 0x60, + 0x6e, 0xa5, 0xf9, 0xd8, 0x32, 0x7a, 0xa6, 0x6b, 0xce, 0xa6, 0xe9, 0x2c, 0xcd, 0xcf, 0xa1, 0x60, + 0xf5, 0x34, 0x77, 0x1e, 0xaf, 0xb9, 0xf3, 0xc0, 0x3d, 0x8d, 0xcd, 0x63, 0x26, 0x22, 0xe5, 0x4c, + 0x82, 0x09, 0xa0, 0x0d, 0x18, 0xb6, 0x14, 0xbd, 0x43, 0xdc, 0xb4, 0x7a, 0x6d, 0x80, 0xf5, 0xab, + 0xcb, 0x98, 0xb1, 0x07, 0x0a, 0x1b, 0x2e, 0x8d, 0x05, 0x8a, 0xfc, 0x0f, 0x12, 0x4c, 0x3e, 0xd9, + 0xda, 0x6a, 0xac, 0xea, 0xfc, 0x44, 0xf3, 0xb7, 0xd5, 0xab, 0x50, 0x30, 0x15, 0x7b, 0x2f, 0x9a, + 0xe9, 0x19, 0x0d, 0x73, 0x0a, 0xba, 0x03, 0x25, 0xf6, 0x2f, 0xb3, 0x8b, 0x1f, 0xa9, 0x11, 0x1e, + 0x08, 0x4b, 0x0d, 0x31, 0xf6, 0x22, 0xf0, 0x37, 0xf6, 0x38, 0xd1, 0x7b, 0x50, 0x64, 0xf1, 0x87, + 0xe8, 0xed, 0x8c, 0x05, 0xba, 0x30, 0xaa, 0xee, 0x08, 0xf9, 0x35, 0x97, 0x18, 0xc0, 0x2e, 0x9c, + 0xbc, 0x0f, 0xb3, 0x81, 0x49, 0xb0, 0x55, 0x7c, 0xca, 0x72, 0x2a, 0x6a, 0xc2, 0x10, 0xd3, 0xce, + 0x32, 0x67, 0x3e, 0xc3, 0x13, 0x68, 0x64, 0x21, 0xfc, 0xfa, 0x88, 0xfd, 0xa2, 0xd8, 0xc1, 0x92, + 0xd7, 0x61, 0x9c, 0x3f, 0x43, 0x1b, 0x96, 0xcd, 0x17, 0x13, 0x5d, 0x81, 0x7c, 0x57, 0xd5, 0x45, + 0x76, 0x1e, 0x15, 0x32, 0x79, 0x96, 0x59, 0xd8, 0x38, 0x27, 0x2b, 0x87, 0x22, 0x5e, 0xf9, 0x64, + 0xe5, 0x10, 0xb3, 0x71, 0xf9, 0x31, 0x14, 0xc5, 0x26, 0x05, 0x81, 0xf2, 0x27, 0x03, 0xe5, 0x13, + 0x80, 0x36, 0xa1, 0xb8, 0xda, 0xa8, 0x6b, 0x86, 0x53, 0xab, 0xb5, 0xd4, 0xb6, 0x15, 0xdd, 0xc1, + 0xa5, 0xd5, 0x65, 0x8c, 0x39, 0x05, 0xc9, 0x30, 0x4c, 0x0e, 0x5b, 0xc4, 0xb4, 0xb9, 0x1f, 0x8d, + 0xd4, 0x81, 0xf9, 0xc6, 0x23, 0x3e, 0x82, 0x05, 0x45, 0xfe, 0xa3, 0x1c, 0x14, 0xc5, 0x72, 0x9c, + 0xc3, 0xdd, 0x6d, 0x2d, 0x74, 0x77, 0x7b, 0x23, 0x9b, 0x6b, 0xa4, 0x5e, 0xdc, 0xb6, 0x22, 0x17, + 0xb7, 0x1b, 0x19, 0xf1, 0x4e, 0xbe, 0xb5, 0x7d, 0x9a, 0x83, 0x89, 0xb0, 0x53, 0xa2, 0xbb, 0x30, + 0xca, 0xd2, 0x94, 0xda, 0x22, 0x1b, 0x7e, 0x75, 0xec, 0x3d, 0xdd, 0x34, 0x7d, 0x12, 0x0e, 0xf2, + 0xa1, 0x8e, 0x27, 0xc6, 0xfc, 0x48, 0x4c, 0x3a, 0x7d, 0x49, 0x7b, 0xb6, 0xaa, 0x55, 0x9d, 0x0f, + 0x32, 0xd5, 0x55, 0xdd, 0xde, 0xb4, 0x9a, 0xb6, 0xa5, 0xea, 0x9d, 0x98, 0x22, 0xee, 0x94, 0x41, + 0x64, 0xf4, 0x2e, 0x4b, 0x99, 0xd4, 0xe8, 0x59, 0x2d, 0x92, 0x54, 0xfa, 0xba, 0x65, 0x1b, 0x3b, + 0xa0, 0xed, 0x35, 0xa3, 0xa5, 0x68, 0xce, 0xe6, 0x60, 0xb2, 0x4b, 0x2c, 0xa2, 0xb7, 0x88, 0x5b, + 0x6e, 0x3a, 0x10, 0xd8, 0x03, 0x93, 0xff, 0x56, 0x82, 0x51, 0xb1, 0x16, 0xe7, 0x70, 0xc9, 0xf9, + 0xed, 0xf0, 0x25, 0xe7, 0x5a, 0xc6, 0xc8, 0x91, 0x7c, 0xc3, 0xf9, 0x4b, 0xdf, 0x74, 0x16, 0x2b, + 0xd8, 0x71, 0xd9, 0x33, 0xa8, 0x1d, 0x3d, 0x2e, 0xec, 0x94, 0x63, 0x4e, 0x41, 0x3d, 0x98, 0x52, + 0x23, 0xc1, 0x45, 0xec, 0x59, 0x2d, 0x9b, 0x25, 0x9e, 0x58, 0xbd, 0x2c, 0xe0, 0xa7, 0xa2, 0x14, + 0x1c, 0x53, 0x21, 0x13, 0x88, 0x71, 0xa1, 0x77, 0xa0, 0xb0, 0x67, 0xdb, 0x66, 0xc2, 0xf3, 0xf9, + 0x80, 0x90, 0xe6, 0x9b, 0x50, 0xe2, 0xb3, 0xdb, 0xda, 0x6a, 0x60, 0x0e, 0x25, 0xff, 0x5d, 0xce, + 0x5b, 0x0f, 0x7e, 0xe7, 0x78, 0xdb, 0x9b, 0xed, 0x92, 0xa6, 0x50, 0xca, 0x1d, 0xdb, 0xb9, 0x1f, + 0xcf, 0x06, 0x0c, 0xf7, 0x68, 0x38, 0xc6, 0x8d, 0xb6, 0xfc, 0x50, 0x2f, 0x9d, 0x25, 0xd4, 0x8f, + 0x26, 0x85, 0x79, 0xf4, 0x04, 0xf2, 0xb6, 0x96, 0xf5, 0x9e, 0x2b, 0x10, 0xb7, 0xd6, 0x9a, 0x7e, + 0xac, 0xdc, 0x5a, 0x6b, 0x62, 0x06, 0x81, 0x36, 0x61, 0x88, 0xa5, 0x53, 0x16, 0x1d, 0xf2, 0xd9, + 0xa3, 0x0d, 0x5b, 0x41, 0xdf, 0xa5, 0xd8, 0x2f, 0x8a, 0x1d, 0x1c, 0xf9, 0x63, 0x18, 0x0f, 0x85, + 0x10, 0xf4, 0x11, 0x8c, 0x69, 0x86, 0xd2, 0xae, 0x2b, 0x9a, 0xa2, 0xb7, 0x88, 0xfb, 0xb5, 0xe3, + 0x5a, 0xd2, 0xd9, 0x5b, 0x0b, 0xf0, 0x89, 0x00, 0x34, 0x2b, 0x94, 0x8c, 0x05, 0x69, 0x38, 0x84, + 0x28, 0x2b, 0x00, 0xfe, 0x1c, 0x51, 0x05, 0x86, 0x98, 0xa7, 0x3a, 0xa9, 0x6e, 0xa4, 0x3e, 0xc2, + 0x2c, 0x64, 0x0e, 0x4c, 0xb1, 0x33, 0x8e, 0x6e, 0x03, 0x50, 0xd2, 0xb2, 0x88, 0xcd, 0xb7, 0x33, + 0x17, 0xfe, 0x62, 0xda, 0xf4, 0x28, 0x38, 0xc0, 0x25, 0xff, 0xa3, 0x04, 0xe3, 0x1b, 0xc4, 0xfe, + 0xc4, 0xb0, 0xf6, 0x1b, 0x86, 0xa6, 0xb6, 0xfa, 0xe7, 0x90, 0x07, 0x70, 0x28, 0x0f, 0xbc, 0x39, + 0x60, 0x67, 0x42, 0xd6, 0xa5, 0x65, 0x03, 0xf9, 0x4b, 0x09, 0xe6, 0x43, 0x9c, 0x8f, 0xfc, 0xc3, + 0xbf, 0x0d, 0x43, 0xa6, 0x61, 0xd9, 0x6e, 0x8d, 0x70, 0x2a, 0x85, 0x2c, 0xc2, 0x06, 0xaa, 0x04, + 0x06, 0x83, 0x1d, 0x34, 0xb4, 0x06, 0x39, 0xdb, 0x10, 0xae, 0x7a, 0x3a, 0x4c, 0x42, 0xac, 0x3a, + 0x08, 0xcc, 0xdc, 0x96, 0x81, 0x73, 0xb6, 0xc1, 0x36, 0xa2, 0x1c, 0xe2, 0x0a, 0x86, 0xaf, 0x57, + 0x34, 0x03, 0x0c, 0x85, 0x5d, 0xcb, 0xe8, 0x9e, 0x79, 0x0e, 0xde, 0x46, 0xac, 0x58, 0x46, 0x17, + 0x73, 0x2c, 0xf9, 0x2b, 0x09, 0xa6, 0x43, 0x9c, 0xe7, 0x90, 0x3a, 0xde, 0x09, 0xa7, 0x8e, 0x1b, + 0xa7, 0x99, 0x48, 0x4a, 0x02, 0xf9, 0x2a, 0x17, 0x99, 0x06, 0x9b, 0x30, 0xda, 0x85, 0x51, 0xd3, + 0x68, 0x37, 0x5f, 0xc2, 0xf7, 0xcd, 0x49, 0x96, 0xd2, 0x1b, 0x3e, 0x16, 0x0e, 0x02, 0xa3, 0x43, + 0x98, 0xd6, 0x95, 0x2e, 0xa1, 0xa6, 0xd2, 0x22, 0xcd, 0x97, 0xf0, 0xe2, 0x73, 0x91, 0x7f, 0x40, + 0x89, 0x22, 0xe2, 0xb8, 0x12, 0xb4, 0x0e, 0x45, 0xd5, 0xe4, 0x25, 0xa6, 0xa8, 0x25, 0x06, 0xe6, + 0x61, 0xa7, 0x20, 0x75, 0xe2, 0xb9, 0xf8, 0x81, 0x5d, 0x0c, 0xf9, 0x5f, 0xa3, 0xde, 0xc0, 0x2b, + 0x96, 0xc7, 0x50, 0xe2, 0x9d, 0x26, 0x2d, 0x43, 0x73, 0x3f, 0x75, 0xf0, 0xcb, 0x85, 0x18, 0x7b, + 0x71, 0x54, 0xb9, 0x9c, 0xf0, 0x8a, 0xed, 0x92, 0xb1, 0x27, 0x8c, 0x36, 0xa0, 0x60, 0xfe, 0x90, + 0xe2, 0x8a, 0xa7, 0x49, 0x5e, 0x51, 0x71, 0x1c, 0xf4, 0x6b, 0x50, 0x24, 0x7a, 0x9b, 0xd7, 0x6b, + 0xce, 0x3b, 0x02, 0x9f, 0xd5, 0x23, 0x67, 0x08, 0xbb, 0x34, 0xf9, 0x0f, 0xf2, 0x91, 0x59, 0xf1, + 0x9c, 0xfa, 0xec, 0xa5, 0x39, 0x87, 0x57, 0xf3, 0xa5, 0x3a, 0xc8, 0x0e, 0x14, 0x45, 0x46, 0x16, + 0x3e, 0xff, 0xf3, 0xd3, 0xf8, 0x7c, 0x30, 0xd9, 0x79, 0x57, 0x2e, 0x77, 0xd0, 0x05, 0x46, 0x1f, + 0xc2, 0x30, 0x71, 0x54, 0x38, 0x29, 0xf4, 0xde, 0x69, 0x54, 0xf8, 0xe1, 0xd7, 0x2f, 0xb5, 0xc5, + 0x98, 0x40, 0x45, 0xbf, 0x64, 0xeb, 0xc5, 0x78, 0x59, 0x65, 0x4a, 0xcb, 0x05, 0x9e, 0xd5, 0xae, + 0x38, 0xd3, 0xf6, 0x86, 0x5f, 0x1c, 0x55, 0xc0, 0xff, 0x89, 0x83, 0x12, 0xf2, 0x3f, 0x4b, 0x30, + 0xcd, 0x57, 0xa8, 0xd5, 0xb3, 0x54, 0xbb, 0x7f, 0x6e, 0xf9, 0xeb, 0x69, 0x28, 0x7f, 0xdd, 0x19, + 0xb0, 0x2c, 0x31, 0x0b, 0x53, 0x73, 0xd8, 0xd7, 0x12, 0x5c, 0x8c, 0x71, 0x9f, 0x43, 0xf8, 0xdc, + 0x0e, 0x87, 0xcf, 0x37, 0x4f, 0x3b, 0xa1, 0x94, 0x10, 0xfa, 0x5f, 0xd3, 0x09, 0xd3, 0xe1, 0x27, + 0xe5, 0x36, 0x80, 0x69, 0xa9, 0x07, 0xaa, 0x46, 0x3a, 0xe2, 0xe3, 0x7f, 0x29, 0xd0, 0xda, 0xe5, + 0x51, 0x70, 0x80, 0x0b, 0x51, 0x98, 0x6b, 0x93, 0x5d, 0xa5, 0xa7, 0xd9, 0x8b, 0xed, 0xf6, 0x92, + 0x62, 0x2a, 0x3b, 0xaa, 0xa6, 0xda, 0xaa, 0x78, 0x26, 0x19, 0xa9, 0x3f, 0x74, 0x3e, 0xca, 0x27, + 0x71, 0xbc, 0x38, 0xaa, 0x5c, 0x49, 0xfa, 0x2a, 0xe6, 0xb2, 0xf4, 0x71, 0x0a, 0x34, 0xea, 0x43, + 0xd9, 0x22, 0x1f, 0xf7, 0x54, 0x8b, 0xb4, 0x97, 0x2d, 0xc3, 0x0c, 0xa9, 0xcd, 0x73, 0xb5, 0xbf, + 0x75, 0x7c, 0x54, 0x29, 0xe3, 0x14, 0x9e, 0xc1, 0x8a, 0x53, 0xe1, 0xd1, 0x33, 0x98, 0x51, 0x44, + 0x13, 0x5e, 0x50, 0xab, 0x73, 0x4a, 0xee, 0x1f, 0x1f, 0x55, 0x66, 0x16, 0xe3, 0xe4, 0xc1, 0x0a, + 0x93, 0x40, 0x51, 0x0d, 0x8a, 0x07, 0xbc, 0x5f, 0x8f, 0x96, 0x87, 0x38, 0x3e, 0xcb, 0x17, 0x45, + 0xa7, 0x85, 0x8f, 0x61, 0x0e, 0xaf, 0x34, 0xf9, 0xe9, 0x73, 0xb9, 0xd8, 0x95, 0x98, 0x95, 0x9c, + 0xe2, 0xc4, 0xf3, 0x97, 0xf2, 0x92, 0x1f, 0xb5, 0x9e, 0xf8, 0x24, 0x1c, 0xe4, 0x43, 0x1f, 0xc0, + 0xc8, 0x9e, 0x78, 0x57, 0xa1, 0xe5, 0x62, 0xa6, 0x5c, 0x1d, 0x7a, 0x87, 0xa9, 0x4f, 0x0b, 0x15, + 0x23, 0xee, 0x30, 0xc5, 0x3e, 0x22, 0x7a, 0x1d, 0x8a, 0xfc, 0xc7, 0xea, 0x32, 0x7f, 0x86, 0x2c, + 0xf9, 0xb1, 0xed, 0x89, 0x33, 0x8c, 0x5d, 0xba, 0xcb, 0xba, 0xda, 0x58, 0xe2, 0xcf, 0xe1, 0x11, + 0xd6, 0xd5, 0xc6, 0x12, 0x76, 0xe9, 0xe8, 0x23, 0x28, 0x52, 0xb2, 0xa6, 0xea, 0xbd, 0xc3, 0x32, + 0x64, 0xfa, 0x98, 0xde, 0x7c, 0xc4, 0xb9, 0x23, 0x0f, 0x82, 0xbe, 0x06, 0x41, 0xc7, 0x2e, 0x2c, + 0xda, 0x83, 0x11, 0xab, 0xa7, 0x2f, 0xd2, 0x6d, 0x4a, 0xac, 0xf2, 0x28, 0xd7, 0x31, 0x28, 0x9c, + 0x63, 0x97, 0x3f, 0xaa, 0xc5, 0x5b, 0x21, 0x8f, 0x03, 0xfb, 0xe0, 0x68, 0x0f, 0x80, 0xff, 0xe0, + 0x6f, 0x8f, 0xe5, 0x39, 0xae, 0xea, 0x7e, 0x16, 0x55, 0x49, 0x4f, 0x9c, 0xe2, 0xfb, 0x83, 0x47, + 0xc6, 0x01, 0x6c, 0xf4, 0x87, 0x12, 0x20, 0xda, 0x33, 0x4d, 0x8d, 0x74, 0x89, 0x6e, 0x2b, 0x1a, + 0x1f, 0xa5, 0xe5, 0x31, 0xae, 0xf2, 0xed, 0x41, 0x2b, 0x18, 0x13, 0x8c, 0xaa, 0xf6, 0x3e, 0x2b, + 0xc4, 0x59, 0x71, 0x82, 0x5e, 0xb6, 0x89, 0xbb, 0x62, 0xd6, 0xe3, 0x99, 0x36, 0x31, 0xf9, 0x55, + 0xd7, 0xdf, 0x44, 0x41, 0xc7, 0x2e, 0x2c, 0x7a, 0x0a, 0x73, 0x6e, 0x63, 0x29, 0x36, 0x0c, 0x7b, + 0x45, 0xd5, 0x08, 0xed, 0x53, 0x9b, 0x74, 0xcb, 0x13, 0xdc, 0xc1, 0xbc, 0xee, 0x1a, 0x9c, 0xc8, + 0x85, 0x53, 0xa4, 0x51, 0x17, 0x2a, 0x6e, 0x70, 0x62, 0x27, 0xd7, 0x8b, 0x8e, 0x8f, 0x68, 0x4b, + 0xd1, 0x9c, 0x2f, 0x2d, 0x93, 0x5c, 0xc1, 0x6b, 0xc7, 0x47, 0x95, 0xca, 0xf2, 0xc9, 0xac, 0x78, + 0x10, 0x16, 0x7a, 0x0f, 0xca, 0x4a, 0x9a, 0x9e, 0x29, 0xae, 0xe7, 0xa7, 0x2c, 0xe2, 0xa5, 0x2a, + 0x48, 0x95, 0x46, 0x36, 0x4c, 0x29, 0xe1, 0x16, 0x5f, 0x5a, 0x9e, 0xce, 0xf4, 0x68, 0x1b, 0xe9, + 0x0c, 0xf6, 0xdf, 0x57, 0x22, 0x04, 0x8a, 0x63, 0x1a, 0xd0, 0xef, 0x01, 0x52, 0xa2, 0x5d, 0xc9, + 0xb4, 0x8c, 0x32, 0x25, 0xba, 0x58, 0x3b, 0xb3, 0xef, 0x76, 0x31, 0x12, 0xc5, 0x09, 0x7a, 0x58, + 0x1d, 0xaf, 0x44, 0x3a, 0xa9, 0x69, 0x79, 0x9e, 0x2b, 0xaf, 0x65, 0x53, 0xee, 0xc9, 0x05, 0x3e, + 0x28, 0x45, 0x11, 0x71, 0x5c, 0x09, 0x5a, 0x83, 0x59, 0x31, 0xb8, 0xad, 0x53, 0x65, 0x97, 0x34, + 0xfb, 0xb4, 0x65, 0x6b, 0xb4, 0x3c, 0xc3, 0xe3, 0x3b, 0xff, 0xa8, 0xb9, 0x98, 0x40, 0xc7, 0x89, + 0x52, 0xe8, 0x6d, 0x98, 0xda, 0x35, 0xac, 0x1d, 0xb5, 0xdd, 0x26, 0xba, 0x8b, 0x34, 0xcb, 0x91, + 0xf8, 0x73, 0xd1, 0x4a, 0x84, 0x86, 0x63, 0xdc, 0x88, 0xc2, 0x45, 0x81, 0xdc, 0xb0, 0x8c, 0xd6, + 0xba, 0xd1, 0xd3, 0x6d, 0xa7, 0xec, 0xbb, 0xe8, 0xa5, 0xd1, 0x8b, 0x8b, 0x49, 0x0c, 0x2f, 0x8e, + 0x2a, 0x57, 0x93, 0x2f, 0x03, 0x3e, 0x13, 0x4e, 0xc6, 0x46, 0x26, 0x8c, 0x89, 0xfe, 0x78, 0xfe, + 0x6e, 0x55, 0x2e, 0xf3, 0xa3, 0xff, 0x60, 0x70, 0xc0, 0xf3, 0x44, 0xa2, 0xe7, 0x7f, 0xea, 0xf8, + 0xa8, 0x32, 0x16, 0x64, 0xc0, 0x21, 0x0d, 0xbc, 0x1f, 0x4a, 0x7c, 0x85, 0x3b, 0x9f, 0x9e, 0xf2, + 0xd3, 0xf5, 0x43, 0xf9, 0xa6, 0xbd, 0xb4, 0x7e, 0xa8, 0x00, 0xe4, 0xc9, 0x2f, 0xeb, 0xff, 0x99, + 0x83, 0x19, 0x9f, 0x39, 0x73, 0x3f, 0x54, 0x82, 0xc8, 0xff, 0xf7, 0x95, 0x67, 0xeb, 0x51, 0xf2, + 0x97, 0xee, 0x7f, 0x5f, 0x8f, 0x92, 0x6f, 0x5b, 0xca, 0xed, 0xe1, 0xaf, 0x73, 0xc1, 0x09, 0x9c, + 0xb2, 0x51, 0xe6, 0x25, 0xb4, 0x56, 0xff, 0xe8, 0x7a, 0x6d, 0xe4, 0xaf, 0xf3, 0x30, 0x15, 0x3d, + 0x8d, 0xa1, 0x7e, 0x0a, 0x69, 0x60, 0x3f, 0x45, 0x03, 0x66, 0x77, 0x7b, 0x9a, 0xd6, 0xe7, 0x73, + 0x08, 0x34, 0x55, 0x38, 0x5f, 0x36, 0x7f, 0x2a, 0x24, 0x67, 0x57, 0x12, 0x78, 0x70, 0xa2, 0x64, + 0xbc, 0xbd, 0xa2, 0xf0, 0x43, 0xdb, 0x2b, 0x86, 0xce, 0xd0, 0x5e, 0x91, 0xdc, 0xa1, 0x92, 0x3f, + 0x53, 0x87, 0xca, 0x59, 0x7a, 0x2b, 0x12, 0x82, 0xd8, 0xc0, 0x3e, 0xe1, 0x5f, 0xc0, 0x44, 0xb8, + 0xdf, 0xc7, 0xd9, 0x4b, 0xa7, 0xe5, 0x48, 0x7c, 0x41, 0x0e, 0xec, 0xa5, 0x33, 0x8e, 0x3d, 0x0e, + 0xf9, 0x58, 0x82, 0xb9, 0xe4, 0xbe, 0x5e, 0xa4, 0xc1, 0x44, 0x57, 0x39, 0x0c, 0xf6, 0x5a, 0x4b, + 0x67, 0x7c, 0x40, 0xe3, 0x8d, 0x1e, 0xeb, 0x21, 0x2c, 0x1c, 0xc1, 0x46, 0xef, 0x43, 0xa9, 0xab, + 0x1c, 0x36, 0x7b, 0x56, 0x87, 0x9c, 0xf9, 0xa1, 0x8e, 0x1f, 0xa3, 0x75, 0x81, 0x82, 0x3d, 0x3c, + 0xf9, 0x7b, 0x09, 0xe6, 0x53, 0xda, 0x37, 0xfe, 0x0f, 0xcd, 0xf2, 0x2f, 0x24, 0xf8, 0x49, 0xea, + 0x35, 0x0c, 0xdd, 0x0b, 0x75, 0x9a, 0xc8, 0x91, 0x4e, 0x13, 0x14, 0x17, 0x7c, 0x45, 0x8d, 0x26, + 0x9f, 0x4b, 0x50, 0x4e, 0xbb, 0x97, 0xa2, 0xbb, 0x21, 0x23, 0x7f, 0x16, 0x31, 0x72, 0x3a, 0x26, + 0xf7, 0x8a, 0x6c, 0xfc, 0x17, 0x09, 0x2e, 0x9f, 0x50, 0xdf, 0x79, 0xd7, 0x1f, 0xd2, 0x0e, 0x72, + 0xf1, 0x97, 0x73, 0xf1, 0xd9, 0xcd, 0xbf, 0xfe, 0x24, 0xf0, 0xe0, 0x54, 0x69, 0xb4, 0x0d, 0xf3, + 0xe2, 0xee, 0x15, 0xa5, 0x89, 0xd2, 0x85, 0x37, 0xe4, 0x2d, 0x27, 0xb3, 0xe0, 0x34, 0x59, 0xf9, + 0xaf, 0x24, 0x98, 0x4b, 0x7e, 0x70, 0x40, 0x6f, 0x85, 0x96, 0xbc, 0x12, 0x59, 0xf2, 0xc9, 0x88, + 0x94, 0x58, 0xf0, 0x0f, 0x61, 0x42, 0x3c, 0x4b, 0x08, 0x18, 0xe1, 0xcc, 0x72, 0x52, 0x76, 0x12, + 0x10, 0x6e, 0x71, 0xcc, 0x8f, 0x49, 0x78, 0x0c, 0x47, 0xd0, 0xe4, 0x4f, 0x73, 0x30, 0xd4, 0x6c, + 0x29, 0x1a, 0x39, 0x87, 0xda, 0xf8, 0x57, 0xa1, 0xda, 0x78, 0xd0, 0x7f, 0x75, 0xe3, 0x56, 0xa5, + 0x96, 0xc5, 0x38, 0x52, 0x16, 0xbf, 0x91, 0x09, 0xed, 0xe4, 0x8a, 0xf8, 0x37, 0x61, 0xc4, 0x53, + 0x7a, 0xba, 0x44, 0x2d, 0xff, 0x79, 0x0e, 0x46, 0x03, 0x2a, 0x4e, 0x99, 0xe6, 0x77, 0x43, 0xb5, + 0x4d, 0x3e, 0xc3, 0x23, 0x50, 0x40, 0x57, 0xd5, 0xad, 0x66, 0x9c, 0x56, 0x6d, 0xbf, 0x39, 0x37, + 0x5e, 0xe4, 0xfc, 0x02, 0x26, 0x6c, 0xc5, 0xea, 0x10, 0xdb, 0xfb, 0x28, 0xe2, 0xb4, 0x92, 0x79, + 0xff, 0x67, 0x60, 0x2b, 0x44, 0xc5, 0x11, 0xee, 0x4b, 0x0f, 0x61, 0x3c, 0xa4, 0xec, 0x54, 0x9d, + 0xd6, 0x7f, 0x23, 0xc1, 0xcf, 0x06, 0x3e, 0x24, 0xa1, 0x7a, 0xe8, 0x90, 0x54, 0x23, 0x87, 0x64, + 0x21, 0x1d, 0xe0, 0xd5, 0x75, 0xec, 0xd5, 0x6f, 0x3e, 0xff, 0x6e, 0xe1, 0xc2, 0x37, 0xdf, 0x2d, + 0x5c, 0xf8, 0xf6, 0xbb, 0x85, 0x0b, 0xbf, 0x7f, 0xbc, 0x20, 0x3d, 0x3f, 0x5e, 0x90, 0xbe, 0x39, + 0x5e, 0x90, 0xbe, 0x3d, 0x5e, 0x90, 0xfe, 0xfd, 0x78, 0x41, 0xfa, 0xe3, 0xef, 0x17, 0x2e, 0xbc, + 0x5f, 0x14, 0x70, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x9d, 0xa0, 0x1e, 0x3d, 0x3f, 0x00, + 0x00, } func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { @@ -3608,6 +3610,11 @@ func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.EndPort != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.EndPort)) + i-- + dAtA[i] = 0x18 + } if m.Port != nil { { size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) @@ -5422,6 +5429,9 @@ func (m *NetworkPolicyPort) Size() (n int) { l = m.Port.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.EndPort != nil { + n += 1 + sovGenerated(uint64(*m.EndPort)) + } return n } @@ -6364,6 +6374,7 @@ func (this *NetworkPolicyPort) String() string { s := strings.Join([]string{`&NetworkPolicyPort{`, `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`, + `EndPort:` + valueToStringGenerated(this.EndPort) + `,`, `}`, }, "") return s @@ -11872,6 +11883,26 @@ func (m *NetworkPolicyPort) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EndPort", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EndPort = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/extensions/v1beta1/generated.proto b/staging/src/k8s.io/api/extensions/v1beta1/generated.proto index e5823499e8f9..f3d77550f83f 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/extensions/v1beta1/generated.proto @@ -745,13 +745,21 @@ message NetworkPolicyPort { // +optional optional string protocol = 1; - // If specified, the port on the given protocol. This can - // either be a numerical or named port on a pod. If this field is not provided, - // this matches all port names and numbers. - // If present, only traffic on the specified protocol AND port - // will be matched. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 2; + + // If set, indicates that the range of ports from port to endPort, inclusive, + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". + // +optional + optional int32 endPort = 3; } // DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec. diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index 8c1bc52dee7d..63a316856b17 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1482,7 +1482,7 @@ type NetworkPolicyPort struct { // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. // The endPort must be equal or greater than port. - // This feature is in Alpha state and should be enabled using the Feature Gate + // This feature is in Alpha state and should be enabled using the Feature Gate // "NetworkPolicyEndPort". // +optional EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go index b309224f837b..1faae5b907c4 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go @@ -413,7 +413,8 @@ func (NetworkPolicyPeer) SwaggerDoc() map[string]string { var map_NetworkPolicyPort = map[string]string{ "": "DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.", "protocol": "Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - "port": "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", + "port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", + "endPort": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".", } func (NetworkPolicyPort) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go index 7b4776c0e264..838315610942 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go @@ -916,6 +916,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) { *out = new(intstr.IntOrString) **out = **in } + if in.EndPort != nil { + in, out := &in.EndPort, &out.EndPort + *out = new(int32) + **out = **in + } return } diff --git a/staging/src/k8s.io/api/networking/v1/generated.pb.go b/staging/src/k8s.io/api/networking/v1/generated.pb.go index 4e03b54381d8..5e695f711559 100644 --- a/staging/src/k8s.io/api/networking/v1/generated.pb.go +++ b/staging/src/k8s.io/api/networking/v1/generated.pb.go @@ -723,98 +723,98 @@ func init() { } var fileDescriptor_1c72867a70a7cc90 = []byte{ - // 1441 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcd, 0x6f, 0x1b, 0x45, - 0x1b, 0xcf, 0x3a, 0x71, 0xec, 0x8c, 0xd3, 0x34, 0x9d, 0xb7, 0xd5, 0x6b, 0xf5, 0xd5, 0x6b, 0xe7, - 0x5d, 0xbd, 0xb4, 0x81, 0xd2, 0x35, 0x71, 0x2b, 0xc4, 0x0d, 0xd8, 0xf4, 0x2b, 0xe0, 0x26, 0xd6, - 0xd8, 0x2a, 0x02, 0x51, 0xd4, 0xf1, 0x7a, 0x62, 0x6f, 0xbd, 0xde, 0x59, 0x66, 0xc7, 0xa1, 0xbd, - 0x71, 0xe1, 0xc0, 0x8d, 0x7f, 0x81, 0x03, 0x37, 0x6e, 0x70, 0x43, 0x50, 0xb8, 0xa0, 0x1e, 0x7b, - 0xec, 0xc9, 0xa2, 0xe6, 0xbf, 0xc8, 0x09, 0xcd, 0xec, 0xec, 0xa7, 0x63, 0x6c, 0xaa, 0x2a, 0x27, - 0x7b, 0x9f, 0x8f, 0xdf, 0xf3, 0x39, 0xcf, 0x33, 0x03, 0xde, 0x1f, 0xbc, 0xe3, 0x1b, 0x36, 0xad, - 0x0d, 0x46, 0x1d, 0xc2, 0x5c, 0xc2, 0x89, 0x5f, 0x3b, 0x22, 0x6e, 0x97, 0xb2, 0x9a, 0x62, 0x60, - 0xcf, 0xae, 0xb9, 0x84, 0x7f, 0x41, 0xd9, 0xc0, 0x76, 0x7b, 0xb5, 0xa3, 0x9d, 0x5a, 0x8f, 0xb8, - 0x84, 0x61, 0x4e, 0xba, 0x86, 0xc7, 0x28, 0xa7, 0xb0, 0x1c, 0x48, 0x1a, 0xd8, 0xb3, 0x8d, 0x58, - 0xd2, 0x38, 0xda, 0xb9, 0x78, 0xb5, 0x67, 0xf3, 0xfe, 0xa8, 0x63, 0x58, 0x74, 0x58, 0xeb, 0xd1, - 0x1e, 0xad, 0x49, 0x85, 0xce, 0xe8, 0x50, 0x7e, 0xc9, 0x0f, 0xf9, 0x2f, 0x00, 0xba, 0xa8, 0x27, - 0x4c, 0x5a, 0x94, 0x91, 0x13, 0x8c, 0x5d, 0xbc, 0x1e, 0xcb, 0x0c, 0xb1, 0xd5, 0xb7, 0x5d, 0xc2, - 0x1e, 0xd7, 0xbc, 0x41, 0x4f, 0x10, 0xfc, 0xda, 0x90, 0x70, 0x7c, 0x92, 0x56, 0x6d, 0x96, 0x16, - 0x1b, 0xb9, 0xdc, 0x1e, 0x92, 0x29, 0x85, 0xb7, 0xe7, 0x29, 0xf8, 0x56, 0x9f, 0x0c, 0xf1, 0x94, - 0xde, 0xb5, 0x59, 0x7a, 0x23, 0x6e, 0x3b, 0x35, 0xdb, 0xe5, 0x3e, 0x67, 0x59, 0x25, 0xfd, 0x17, - 0x0d, 0x9c, 0xbd, 0xd3, 0x6e, 0x37, 0xf7, 0xdc, 0x1e, 0x23, 0xbe, 0xdf, 0xc4, 0xbc, 0x0f, 0xb7, - 0xc0, 0x8a, 0x87, 0x79, 0xbf, 0xac, 0x6d, 0x69, 0xdb, 0x6b, 0xe6, 0xfa, 0xd3, 0x71, 0x75, 0x69, - 0x32, 0xae, 0xae, 0x08, 0x1e, 0x92, 0x1c, 0x78, 0x1d, 0x14, 0xc5, 0x6f, 0xfb, 0xb1, 0x47, 0xca, - 0xcb, 0x52, 0xaa, 0x3c, 0x19, 0x57, 0x8b, 0x4d, 0x45, 0x3b, 0x4e, 0xfc, 0x47, 0x91, 0x24, 0x6c, - 0x81, 0x42, 0x07, 0x5b, 0x03, 0xe2, 0x76, 0xcb, 0xb9, 0x2d, 0x6d, 0xbb, 0x54, 0xdf, 0x36, 0x66, - 0x95, 0xcf, 0x50, 0xfe, 0x98, 0x81, 0xbc, 0x79, 0x56, 0x39, 0x51, 0x50, 0x04, 0x14, 0x22, 0xe9, - 0x87, 0xe0, 0x7c, 0xc2, 0x7f, 0x34, 0x72, 0xc8, 0x3d, 0xec, 0x8c, 0x08, 0xdc, 0x07, 0x79, 0x61, - 0xd8, 0x2f, 0x6b, 0x5b, 0xcb, 0xdb, 0xa5, 0xfa, 0xeb, 0xb3, 0x4d, 0x65, 0xc2, 0x37, 0xcf, 0x28, - 0x5b, 0x79, 0xf1, 0xe5, 0xa3, 0x00, 0x46, 0x3f, 0x00, 0x85, 0xbd, 0xa6, 0xe9, 0x50, 0x6b, 0x20, - 0xf2, 0x63, 0xd9, 0x5d, 0x96, 0xcd, 0xcf, 0xee, 0xde, 0x0d, 0x84, 0x24, 0x07, 0xea, 0x60, 0x95, - 0x3c, 0xb2, 0x88, 0xc7, 0xcb, 0xb9, 0xad, 0xe5, 0xed, 0x35, 0x13, 0x4c, 0xc6, 0xd5, 0xd5, 0x9b, - 0x92, 0x82, 0x14, 0x47, 0xff, 0x2a, 0x07, 0x0a, 0xca, 0x2c, 0x7c, 0x00, 0x8a, 0xa2, 0x7d, 0xba, - 0x98, 0x63, 0x89, 0x5a, 0xaa, 0xbf, 0x95, 0xf0, 0x37, 0xaa, 0xa6, 0xe1, 0x0d, 0x7a, 0x82, 0xe0, - 0x1b, 0x42, 0x5a, 0xf8, 0x7e, 0xd0, 0x79, 0x48, 0x2c, 0x7e, 0x97, 0x70, 0x6c, 0x42, 0xe5, 0x07, - 0x88, 0x69, 0x28, 0x42, 0x85, 0xb7, 0xc1, 0x8a, 0xef, 0x11, 0x4b, 0x25, 0xfe, 0xb5, 0xb9, 0x89, - 0x6f, 0x79, 0xc4, 0x8a, 0x43, 0x13, 0x5f, 0x48, 0x02, 0xc0, 0x03, 0xb0, 0xea, 0x73, 0xcc, 0x47, - 0xbe, 0x2c, 0x7c, 0xa9, 0x7e, 0x79, 0x3e, 0x94, 0x14, 0x37, 0x37, 0x14, 0xd8, 0x6a, 0xf0, 0x8d, - 0x14, 0x8c, 0xfe, 0x9b, 0x06, 0x36, 0xd2, 0xd5, 0x86, 0xf7, 0x40, 0xc1, 0x27, 0xec, 0xc8, 0xb6, - 0x48, 0x79, 0x45, 0x1a, 0xa9, 0xcd, 0x37, 0x12, 0xc8, 0x87, 0xfd, 0x52, 0x12, 0xbd, 0xa2, 0x68, - 0x28, 0x04, 0x83, 0x1f, 0x81, 0x22, 0x23, 0x3e, 0x1d, 0x31, 0x8b, 0x28, 0xef, 0xaf, 0x26, 0x81, - 0xc5, 0xb9, 0x17, 0x90, 0xa2, 0x59, 0xbb, 0x0d, 0x6a, 0x61, 0x27, 0x48, 0x25, 0x22, 0x87, 0x84, - 0x11, 0xd7, 0x22, 0xe6, 0xba, 0xe8, 0x72, 0xa4, 0x20, 0x50, 0x04, 0x26, 0x4e, 0xd1, 0xba, 0x72, - 0x64, 0xd7, 0xc1, 0xa7, 0x52, 0xd0, 0x46, 0xaa, 0xa0, 0x6f, 0xcc, 0x4d, 0x90, 0xf4, 0x6b, 0x56, - 0x55, 0xf5, 0x9f, 0x35, 0xb0, 0x99, 0x14, 0x6c, 0xd8, 0x3e, 0x87, 0x9f, 0x4e, 0x05, 0x61, 0x2c, - 0x16, 0x84, 0xd0, 0x96, 0x21, 0x6c, 0x2a, 0x53, 0xc5, 0x90, 0x92, 0x08, 0xe0, 0x43, 0x90, 0xb7, - 0x39, 0x19, 0xfa, 0xf2, 0x88, 0x94, 0xea, 0x97, 0x16, 0x8b, 0x20, 0x3e, 0x9d, 0x7b, 0x42, 0x19, - 0x05, 0x18, 0xfa, 0x77, 0x19, 0xff, 0x45, 0x68, 0xb0, 0x0e, 0x80, 0x45, 0x5d, 0xce, 0xa8, 0xe3, - 0x90, 0xf0, 0xb4, 0x46, 0x49, 0xdd, 0x8d, 0x38, 0x28, 0x21, 0x05, 0xef, 0x03, 0xe0, 0x61, 0x86, - 0x87, 0x84, 0x13, 0xe6, 0xab, 0xe4, 0xfe, 0xc3, 0x26, 0xd9, 0x10, 0xf0, 0xcd, 0x08, 0x04, 0x25, - 0x00, 0xf5, 0x1f, 0x34, 0x50, 0x52, 0x7e, 0x9e, 0x42, 0x8a, 0x6f, 0xa5, 0x53, 0xfc, 0xbf, 0xf9, - 0xe3, 0xf6, 0xe4, 0xec, 0x7e, 0x1b, 0x7b, 0x2d, 0x06, 0xac, 0x18, 0x80, 0x7d, 0xea, 0xf3, 0xec, - 0x00, 0xbc, 0x43, 0x7d, 0x8e, 0x24, 0x07, 0x7a, 0x60, 0xd3, 0xce, 0x4c, 0xe4, 0x85, 0x3b, 0x35, - 0xd2, 0x30, 0xcb, 0x0a, 0x79, 0x33, 0xcb, 0x41, 0x53, 0xe8, 0xfa, 0x03, 0x30, 0x25, 0x25, 0xce, - 0x48, 0x9f, 0x73, 0xef, 0x84, 0xcc, 0xce, 0x5e, 0x01, 0xb1, 0xf5, 0xa2, 0x8c, 0xa9, 0xdd, 0x6e, - 0x22, 0x89, 0xa2, 0x7f, 0xad, 0x81, 0x0b, 0x27, 0x4e, 0x1b, 0x91, 0x0f, 0x17, 0x0f, 0x49, 0x36, - 0x1f, 0xfb, 0x78, 0x48, 0x90, 0xe4, 0xc0, 0x7d, 0xb0, 0xe2, 0x51, 0xc6, 0x55, 0x0e, 0xde, 0x9c, - 0xed, 0x49, 0x1a, 0xb9, 0x49, 0x19, 0x4f, 0x2c, 0x60, 0xca, 0x38, 0x92, 0x38, 0xfa, 0xef, 0xb9, - 0xa8, 0x22, 0xb2, 0xd5, 0xdf, 0x8b, 0xf2, 0x2d, 0xdb, 0x5f, 0x58, 0x96, 0xa3, 0x73, 0xcd, 0x3c, - 0x9f, 0xc8, 0x5f, 0xc4, 0x43, 0x53, 0xd2, 0xb0, 0x0b, 0x36, 0xba, 0xe4, 0x10, 0x8f, 0x1c, 0xae, - 0x6c, 0xab, 0xac, 0x2d, 0xbe, 0xa3, 0xe1, 0x64, 0x5c, 0xdd, 0xb8, 0x91, 0xc2, 0x40, 0x19, 0x4c, - 0xb8, 0x0b, 0x96, 0xb9, 0x13, 0xf6, 0xe3, 0xff, 0xe7, 0x42, 0xb7, 0x1b, 0x2d, 0xb3, 0xa4, 0xc2, - 0x5f, 0x6e, 0x37, 0x5a, 0x48, 0x68, 0xc3, 0x0f, 0x40, 0x9e, 0x8d, 0x1c, 0x22, 0x36, 0xd0, 0xf2, - 0x42, 0xcb, 0x4c, 0xd4, 0x34, 0x6e, 0x6d, 0xf1, 0xe5, 0xa3, 0x00, 0x42, 0xff, 0x1c, 0x9c, 0x49, - 0xad, 0x29, 0xf8, 0x00, 0xac, 0x3b, 0x14, 0x77, 0x4d, 0xec, 0x60, 0xd7, 0x52, 0x63, 0x23, 0x33, - 0x9d, 0xc2, 0x11, 0xd0, 0x48, 0xc8, 0xa9, 0x25, 0x77, 0x5e, 0x19, 0x59, 0x4f, 0xf2, 0x50, 0x0a, - 0x51, 0xc7, 0x00, 0xc4, 0xe1, 0xc1, 0x2a, 0xc8, 0x8b, 0x13, 0x13, 0xdc, 0x53, 0xd6, 0xcc, 0x35, - 0xe1, 0xa1, 0x38, 0x48, 0x3e, 0x0a, 0xe8, 0x62, 0x8a, 0xf9, 0xc4, 0x62, 0x84, 0xcb, 0xa2, 0xe6, - 0xd2, 0x53, 0xac, 0x15, 0x71, 0x50, 0x42, 0x4a, 0xff, 0x55, 0x03, 0x67, 0xf6, 0x83, 0x4c, 0x34, - 0xa9, 0x63, 0x5b, 0x8f, 0x4f, 0x61, 0x21, 0xdd, 0x4d, 0x2d, 0xa4, 0x2b, 0xb3, 0x8b, 0x92, 0x72, - 0x6c, 0xe6, 0x46, 0xfa, 0x51, 0x03, 0xff, 0x4e, 0x49, 0xde, 0x8c, 0xe7, 0x4f, 0x13, 0xe4, 0xc5, - 0x29, 0x08, 0xef, 0x76, 0x8b, 0xda, 0x92, 0xa7, 0x29, 0xbe, 0xdd, 0x09, 0x04, 0x14, 0x00, 0xc1, - 0xdb, 0x20, 0xc7, 0xa9, 0x6a, 0xcb, 0x85, 0xe1, 0x08, 0x61, 0x26, 0x50, 0x70, 0xb9, 0x36, 0x45, - 0x39, 0x4e, 0xf5, 0x9f, 0x34, 0x50, 0x4e, 0x49, 0x25, 0xe7, 0xe6, 0xab, 0xf7, 0xfb, 0x2e, 0x58, - 0x39, 0x64, 0x74, 0xf8, 0x32, 0x9e, 0x47, 0x49, 0xbf, 0xc5, 0xe8, 0x10, 0x49, 0x18, 0xfd, 0x89, - 0x06, 0xce, 0xa5, 0x24, 0x4f, 0x61, 0x49, 0x35, 0xd2, 0x4b, 0xea, 0xf2, 0x82, 0x31, 0xcc, 0x58, - 0x55, 0x4f, 0x72, 0x99, 0x08, 0x44, 0xac, 0xf0, 0x10, 0x94, 0x3c, 0xda, 0x6d, 0x11, 0x87, 0x58, - 0x9c, 0x86, 0x67, 0xfa, 0xda, 0x82, 0x41, 0xe0, 0x0e, 0x71, 0x42, 0x55, 0xf3, 0xec, 0x64, 0x5c, - 0x2d, 0x35, 0x63, 0x2c, 0x94, 0x04, 0x86, 0x8f, 0xc0, 0x39, 0x31, 0xee, 0x7d, 0x0f, 0x5b, 0x24, - 0xb2, 0x96, 0x7b, 0x79, 0x6b, 0x17, 0x26, 0xe3, 0xea, 0xb9, 0xfd, 0x2c, 0x22, 0x9a, 0x36, 0x02, - 0xef, 0x80, 0x82, 0xed, 0xc9, 0xe7, 0x89, 0xba, 0xd9, 0xfe, 0xdd, 0xb2, 0x0f, 0xde, 0x31, 0xc1, - 0x25, 0x59, 0x7d, 0xa0, 0x50, 0x5d, 0xff, 0x3e, 0xdb, 0x03, 0xa2, 0xe1, 0xe0, 0x6d, 0x50, 0x94, - 0x0f, 0x46, 0x8b, 0x3a, 0x6a, 0xcd, 0x5d, 0x91, 0x2f, 0x3e, 0x45, 0x3b, 0x1e, 0x57, 0xff, 0x33, - 0xfd, 0x82, 0x36, 0x42, 0x36, 0x8a, 0x94, 0x33, 0x9b, 0x70, 0xf6, 0x10, 0x12, 0x8f, 0x56, 0x23, - 0x78, 0xb4, 0x1a, 0x7b, 0x2e, 0x3f, 0x60, 0x2d, 0xce, 0x6c, 0xb7, 0x17, 0x6c, 0xe5, 0xc4, 0x26, - 0x3c, 0xce, 0x16, 0x5c, 0xee, 0xc3, 0x87, 0xaf, 0xac, 0xe0, 0xff, 0x52, 0x6d, 0x36, 0xbb, 0xe8, - 0xf7, 0x41, 0x41, 0x6d, 0x53, 0xd5, 0xc2, 0xf5, 0x05, 0x5b, 0x38, 0xb9, 0x9d, 0xa2, 0x07, 0x6e, - 0x48, 0x0c, 0x31, 0xe1, 0xc7, 0x60, 0x95, 0x04, 0xe8, 0xc1, 0xba, 0xdb, 0x59, 0x10, 0x3d, 0x9e, - 0x97, 0xf1, 0xd3, 0x4b, 0xd1, 0x14, 0x20, 0x7c, 0x57, 0x64, 0x49, 0xc8, 0x8a, 0xcb, 0xac, 0x5f, - 0x5e, 0x91, 0x1b, 0xe8, 0xbf, 0x41, 0xb0, 0x11, 0xf9, 0x58, 0xdc, 0x66, 0xa3, 0x4f, 0x94, 0xd4, - 0xd0, 0x3f, 0x03, 0x70, 0xfa, 0xc2, 0xb2, 0xc0, 0x75, 0xe8, 0x12, 0x58, 0x75, 0x47, 0xc3, 0x0e, - 0x09, 0x0e, 0x47, 0x3e, 0x76, 0x70, 0x5f, 0x52, 0x91, 0xe2, 0x9a, 0xdb, 0x4f, 0x5f, 0x54, 0x96, - 0x9e, 0xbd, 0xa8, 0x2c, 0x3d, 0x7f, 0x51, 0x59, 0xfa, 0x72, 0x52, 0xd1, 0x9e, 0x4e, 0x2a, 0xda, - 0xb3, 0x49, 0x45, 0x7b, 0x3e, 0xa9, 0x68, 0x7f, 0x4c, 0x2a, 0xda, 0x37, 0x7f, 0x56, 0x96, 0x3e, - 0xc9, 0x1d, 0xed, 0xfc, 0x15, 0x00, 0x00, 0xff, 0xff, 0xc5, 0x87, 0xf6, 0x28, 0x4c, 0x12, 0x00, - 0x00, + // 1455 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4b, 0x6f, 0x1b, 0x45, + 0x1c, 0xcf, 0x3a, 0x71, 0x9c, 0x8c, 0xd3, 0x34, 0x1d, 0x5a, 0x61, 0x15, 0x61, 0x87, 0x15, 0x6d, + 0x03, 0xa5, 0x6b, 0xe2, 0x56, 0x88, 0x1b, 0xb0, 0xe9, 0x2b, 0xe0, 0x26, 0xd6, 0xd8, 0x2a, 0x02, + 0x51, 0xd4, 0xf1, 0x7a, 0x62, 0x6f, 0xbd, 0xde, 0x59, 0x66, 0xc7, 0xa1, 0xbd, 0x71, 0xe1, 0xc0, + 0x8d, 0xaf, 0xc0, 0x81, 0x4f, 0x00, 0x37, 0x04, 0x85, 0x0b, 0xea, 0xb1, 0x12, 0x97, 0x9e, 0x2c, + 0x6a, 0xbe, 0x45, 0x4e, 0x68, 0x66, 0x67, 0x9f, 0x8e, 0xb1, 0xa9, 0xaa, 0x9c, 0xec, 0xfd, 0x3f, + 0x7e, 0xff, 0xc7, 0xfc, 0x1f, 0x33, 0xe0, 0xa3, 0xfe, 0xfb, 0xbe, 0x61, 0xd3, 0x6a, 0x7f, 0xd8, + 0x26, 0xcc, 0x25, 0x9c, 0xf8, 0xd5, 0x43, 0xe2, 0x76, 0x28, 0xab, 0x2a, 0x06, 0xf6, 0xec, 0xaa, + 0x4b, 0xf8, 0xd7, 0x94, 0xf5, 0x6d, 0xb7, 0x5b, 0x3d, 0xdc, 0xae, 0x76, 0x89, 0x4b, 0x18, 0xe6, + 0xa4, 0x63, 0x78, 0x8c, 0x72, 0x0a, 0x4b, 0x81, 0xa4, 0x81, 0x3d, 0xdb, 0x88, 0x25, 0x8d, 0xc3, + 0xed, 0xf3, 0x57, 0xba, 0x36, 0xef, 0x0d, 0xdb, 0x86, 0x45, 0x07, 0xd5, 0x2e, 0xed, 0xd2, 0xaa, + 0x54, 0x68, 0x0f, 0x0f, 0xe4, 0x97, 0xfc, 0x90, 0xff, 0x02, 0xa0, 0xf3, 0x7a, 0xc2, 0xa4, 0x45, + 0x19, 0x39, 0xc6, 0xd8, 0xf9, 0x6b, 0xb1, 0xcc, 0x00, 0x5b, 0x3d, 0xdb, 0x25, 0xec, 0x51, 0xd5, + 0xeb, 0x77, 0x05, 0xc1, 0xaf, 0x0e, 0x08, 0xc7, 0xc7, 0x69, 0x55, 0xa7, 0x69, 0xb1, 0xa1, 0xcb, + 0xed, 0x01, 0x99, 0x50, 0x78, 0x6f, 0x96, 0x82, 0x6f, 0xf5, 0xc8, 0x00, 0x4f, 0xe8, 0x5d, 0x9d, + 0xa6, 0x37, 0xe4, 0xb6, 0x53, 0xb5, 0x5d, 0xee, 0x73, 0x96, 0x55, 0xd2, 0x7f, 0xd3, 0xc0, 0xe9, + 0xdb, 0xad, 0x56, 0x63, 0xd7, 0xed, 0x32, 0xe2, 0xfb, 0x0d, 0xcc, 0x7b, 0x70, 0x13, 0x2c, 0x79, + 0x98, 0xf7, 0x4a, 0xda, 0xa6, 0xb6, 0xb5, 0x6a, 0xae, 0x3d, 0x19, 0x55, 0x16, 0xc6, 0xa3, 0xca, + 0x92, 0xe0, 0x21, 0xc9, 0x81, 0xd7, 0xc0, 0x8a, 0xf8, 0x6d, 0x3d, 0xf2, 0x48, 0x69, 0x51, 0x4a, + 0x95, 0xc6, 0xa3, 0xca, 0x4a, 0x43, 0xd1, 0x8e, 0x12, 0xff, 0x51, 0x24, 0x09, 0x9b, 0xa0, 0xd0, + 0xc6, 0x56, 0x9f, 0xb8, 0x9d, 0x52, 0x6e, 0x53, 0xdb, 0x2a, 0xd6, 0xb6, 0x8c, 0x69, 0xc7, 0x67, + 0x28, 0x7f, 0xcc, 0x40, 0xde, 0x3c, 0xad, 0x9c, 0x28, 0x28, 0x02, 0x0a, 0x91, 0xf4, 0x03, 0x70, + 0x36, 0xe1, 0x3f, 0x1a, 0x3a, 0xe4, 0x2e, 0x76, 0x86, 0x04, 0xee, 0x81, 0xbc, 0x30, 0xec, 0x97, + 0xb4, 0xcd, 0xc5, 0xad, 0x62, 0xed, 0xad, 0xe9, 0xa6, 0x32, 0xe1, 0x9b, 0xa7, 0x94, 0xad, 0xbc, + 0xf8, 0xf2, 0x51, 0x00, 0xa3, 0xef, 0x83, 0xc2, 0x6e, 0xc3, 0x74, 0xa8, 0xd5, 0x17, 0xf9, 0xb1, + 0xec, 0x0e, 0xcb, 0xe6, 0x67, 0x67, 0xf7, 0x3a, 0x42, 0x92, 0x03, 0x75, 0xb0, 0x4c, 0x1e, 0x5a, + 0xc4, 0xe3, 0xa5, 0xdc, 0xe6, 0xe2, 0xd6, 0xaa, 0x09, 0xc6, 0xa3, 0xca, 0xf2, 0x0d, 0x49, 0x41, + 0x8a, 0xa3, 0x7f, 0x9b, 0x03, 0x05, 0x65, 0x16, 0xde, 0x07, 0x2b, 0xa2, 0x7c, 0x3a, 0x98, 0x63, + 0x89, 0x5a, 0xac, 0xbd, 0x9b, 0xf0, 0x37, 0x3a, 0x4d, 0xc3, 0xeb, 0x77, 0x05, 0xc1, 0x37, 0x84, + 0xb4, 0xf0, 0x7d, 0xbf, 0xfd, 0x80, 0x58, 0xfc, 0x0e, 0xe1, 0xd8, 0x84, 0xca, 0x0f, 0x10, 0xd3, + 0x50, 0x84, 0x0a, 0x6f, 0x81, 0x25, 0xdf, 0x23, 0x96, 0x4a, 0xfc, 0x85, 0x99, 0x89, 0x6f, 0x7a, + 0xc4, 0x8a, 0x43, 0x13, 0x5f, 0x48, 0x02, 0xc0, 0x7d, 0xb0, 0xec, 0x73, 0xcc, 0x87, 0xbe, 0x3c, + 0xf8, 0x62, 0xed, 0xd2, 0x6c, 0x28, 0x29, 0x6e, 0xae, 0x2b, 0xb0, 0xe5, 0xe0, 0x1b, 0x29, 0x18, + 0xfd, 0x0f, 0x0d, 0xac, 0xa7, 0x4f, 0x1b, 0xde, 0x05, 0x05, 0x9f, 0xb0, 0x43, 0xdb, 0x22, 0xa5, + 0x25, 0x69, 0xa4, 0x3a, 0xdb, 0x48, 0x20, 0x1f, 0xd6, 0x4b, 0x51, 0xd4, 0x8a, 0xa2, 0xa1, 0x10, + 0x0c, 0x7e, 0x0a, 0x56, 0x18, 0xf1, 0xe9, 0x90, 0x59, 0x44, 0x79, 0x7f, 0x25, 0x09, 0x2c, 0xfa, + 0x5e, 0x40, 0x8a, 0x62, 0xed, 0xd4, 0xa9, 0x85, 0x9d, 0x20, 0x95, 0x88, 0x1c, 0x10, 0x46, 0x5c, + 0x8b, 0x98, 0x6b, 0xa2, 0xca, 0x91, 0x82, 0x40, 0x11, 0x98, 0xe8, 0xa2, 0x35, 0xe5, 0xc8, 0x8e, + 0x83, 0x4f, 0xe4, 0x40, 0xeb, 0xa9, 0x03, 0x7d, 0x7b, 0x66, 0x82, 0xa4, 0x5f, 0xd3, 0x4e, 0x55, + 0xff, 0x55, 0x03, 0x1b, 0x49, 0xc1, 0xba, 0xed, 0x73, 0xf8, 0xc5, 0x44, 0x10, 0xc6, 0x7c, 0x41, + 0x08, 0x6d, 0x19, 0xc2, 0x86, 0x32, 0xb5, 0x12, 0x52, 0x12, 0x01, 0x7c, 0x02, 0xf2, 0x36, 0x27, + 0x03, 0x5f, 0xb6, 0x48, 0xb1, 0x76, 0x71, 0xbe, 0x08, 0xe2, 0xee, 0xdc, 0x15, 0xca, 0x28, 0xc0, + 0xd0, 0x7f, 0xcc, 0xf8, 0x2f, 0x42, 0x83, 0x35, 0x00, 0x2c, 0xea, 0x72, 0x46, 0x1d, 0x87, 0x84, + 0xdd, 0x1a, 0x25, 0x75, 0x27, 0xe2, 0xa0, 0x84, 0x14, 0xbc, 0x07, 0x80, 0x87, 0x19, 0x1e, 0x10, + 0x4e, 0x98, 0xaf, 0x92, 0xfb, 0x3f, 0x8b, 0x64, 0x5d, 0xc0, 0x37, 0x22, 0x10, 0x94, 0x00, 0xd4, + 0x7f, 0xd2, 0x40, 0x51, 0xf9, 0x79, 0x02, 0x29, 0xbe, 0x99, 0x4e, 0xf1, 0x1b, 0xb3, 0xc7, 0xed, + 0xf1, 0xd9, 0xfd, 0x21, 0xf6, 0x5a, 0x0c, 0x58, 0x31, 0x00, 0x7b, 0xd4, 0xe7, 0xd9, 0x01, 0x78, + 0x9b, 0xfa, 0x1c, 0x49, 0x0e, 0xf4, 0xc0, 0x86, 0x9d, 0x99, 0xc8, 0x73, 0x57, 0x6a, 0xa4, 0x61, + 0x96, 0x14, 0xf2, 0x46, 0x96, 0x83, 0x26, 0xd0, 0xf5, 0xfb, 0x60, 0x42, 0x4a, 0xf4, 0x48, 0x8f, + 0x73, 0xef, 0x98, 0xcc, 0x4e, 0x5f, 0x01, 0xb1, 0xf5, 0x15, 0x19, 0x53, 0xab, 0xd5, 0x40, 0x12, + 0x45, 0xff, 0x4e, 0x03, 0xe7, 0x8e, 0x9d, 0x36, 0x22, 0x1f, 0x2e, 0x1e, 0x90, 0x6c, 0x3e, 0xf6, + 0xf0, 0x80, 0x20, 0xc9, 0x81, 0x7b, 0x60, 0xc9, 0xa3, 0x8c, 0xab, 0x1c, 0xbc, 0x33, 0xdd, 0x93, + 0x34, 0x72, 0x83, 0x32, 0x9e, 0x58, 0xc0, 0x94, 0x71, 0x24, 0x71, 0xf4, 0x3f, 0x73, 0xd1, 0x89, + 0xc8, 0x52, 0xff, 0x30, 0xca, 0xb7, 0x2c, 0x7f, 0x61, 0x59, 0x8e, 0xce, 0x55, 0xf3, 0x6c, 0x22, + 0x7f, 0x11, 0x0f, 0x4d, 0x48, 0xc3, 0x0e, 0x58, 0xef, 0x90, 0x03, 0x3c, 0x74, 0xb8, 0xb2, 0xad, + 0xb2, 0x36, 0xff, 0x8e, 0x86, 0xe3, 0x51, 0x65, 0xfd, 0x7a, 0x0a, 0x03, 0x65, 0x30, 0xe1, 0x0e, + 0x58, 0xe4, 0x4e, 0x58, 0x8f, 0x6f, 0xce, 0x84, 0x6e, 0xd5, 0x9b, 0x66, 0x51, 0x85, 0xbf, 0xd8, + 0xaa, 0x37, 0x91, 0xd0, 0x86, 0x1f, 0x83, 0x3c, 0x1b, 0x3a, 0x44, 0x6c, 0xa0, 0xc5, 0xb9, 0x96, + 0x99, 0x38, 0xd3, 0xb8, 0xb4, 0xc5, 0x97, 0x8f, 0x02, 0x08, 0xfd, 0x2b, 0x70, 0x2a, 0xb5, 0xa6, + 0xe0, 0x7d, 0xb0, 0xe6, 0x50, 0xdc, 0x31, 0xb1, 0x83, 0x5d, 0x4b, 0x8d, 0x8d, 0xcc, 0x74, 0x0a, + 0x47, 0x40, 0x3d, 0x21, 0xa7, 0x96, 0xdc, 0x59, 0x65, 0x64, 0x2d, 0xc9, 0x43, 0x29, 0x44, 0x1d, + 0x03, 0x10, 0x87, 0x07, 0x2b, 0x20, 0x2f, 0x3a, 0x26, 0xb8, 0xa7, 0xac, 0x9a, 0xab, 0xc2, 0x43, + 0xd1, 0x48, 0x3e, 0x0a, 0xe8, 0x62, 0x8a, 0xf9, 0xc4, 0x62, 0x84, 0xcb, 0x43, 0xcd, 0xa5, 0xa7, + 0x58, 0x33, 0xe2, 0xa0, 0x84, 0x94, 0xfe, 0xbb, 0x06, 0x4e, 0xed, 0x05, 0x99, 0x68, 0x50, 0xc7, + 0xb6, 0x1e, 0x9d, 0xc0, 0x42, 0xba, 0x93, 0x5a, 0x48, 0x97, 0xa7, 0x1f, 0x4a, 0xca, 0xb1, 0xa9, + 0x1b, 0xe9, 0x67, 0x0d, 0xbc, 0x9a, 0x92, 0xbc, 0x11, 0xcf, 0x9f, 0x06, 0xc8, 0x8b, 0x2e, 0x08, + 0xef, 0x76, 0xf3, 0xda, 0x92, 0xdd, 0x14, 0xdf, 0xee, 0x04, 0x02, 0x0a, 0x80, 0xe0, 0x2d, 0x90, + 0xe3, 0x54, 0x95, 0xe5, 0xdc, 0x70, 0x84, 0x30, 0x13, 0x28, 0xb8, 0x5c, 0x8b, 0xa2, 0x1c, 0xa7, + 0xfa, 0x2f, 0x1a, 0x28, 0xa5, 0xa4, 0x92, 0x73, 0xf3, 0xe5, 0xfb, 0x7d, 0x07, 0x2c, 0x1d, 0x30, + 0x3a, 0x78, 0x11, 0xcf, 0xa3, 0xa4, 0xdf, 0x64, 0x74, 0x80, 0x24, 0x8c, 0xfe, 0x58, 0x03, 0x67, + 0x52, 0x92, 0x27, 0xb0, 0xa4, 0xea, 0xe9, 0x25, 0x75, 0x69, 0xce, 0x18, 0xa6, 0xac, 0xaa, 0xc7, + 0xb9, 0x4c, 0x04, 0x22, 0x56, 0x78, 0x00, 0x8a, 0x1e, 0xed, 0x34, 0x89, 0x43, 0x2c, 0x4e, 0xc3, + 0x9e, 0xbe, 0x3a, 0x67, 0x10, 0xb8, 0x4d, 0x9c, 0x50, 0xd5, 0x3c, 0x3d, 0x1e, 0x55, 0x8a, 0x8d, + 0x18, 0x0b, 0x25, 0x81, 0xe1, 0x43, 0x70, 0x46, 0x8c, 0x7b, 0xdf, 0xc3, 0x16, 0x89, 0xac, 0xe5, + 0x5e, 0xdc, 0xda, 0xb9, 0xf1, 0xa8, 0x72, 0x66, 0x2f, 0x8b, 0x88, 0x26, 0x8d, 0xc0, 0xdb, 0xa0, + 0x60, 0x7b, 0xf2, 0x79, 0xa2, 0x6e, 0xb6, 0xff, 0xb5, 0xec, 0x83, 0x77, 0x4c, 0x70, 0x49, 0x56, + 0x1f, 0x28, 0x54, 0xd7, 0xff, 0xca, 0xd6, 0x80, 0x28, 0x38, 0x78, 0x0b, 0xac, 0xc8, 0x07, 0xa3, + 0x45, 0x1d, 0xb5, 0xe6, 0x2e, 0xcb, 0x17, 0x9f, 0xa2, 0x1d, 0x8d, 0x2a, 0xaf, 0x4d, 0xbe, 0xa0, + 0x8d, 0x90, 0x8d, 0x22, 0xe5, 0xcc, 0x26, 0x9c, 0x3e, 0x84, 0xc4, 0xa3, 0xd5, 0x08, 0x1e, 0xad, + 0xc6, 0xae, 0xcb, 0xf7, 0x59, 0x93, 0x33, 0xdb, 0xed, 0x06, 0x5b, 0x39, 0xde, 0x84, 0xf0, 0x02, + 0x28, 0xa8, 0x45, 0x29, 0x03, 0xcf, 0x07, 0x51, 0xdd, 0x08, 0x48, 0x28, 0xe4, 0xe9, 0x47, 0xd9, + 0xba, 0x90, 0x6b, 0xf3, 0xc1, 0x4b, 0xab, 0x8b, 0x57, 0x54, 0x35, 0x4e, 0xaf, 0x8d, 0x7b, 0xa0, + 0xa0, 0x96, 0xae, 0xaa, 0xf4, 0xda, 0x9c, 0x95, 0x9e, 0x5c, 0x62, 0xd1, 0x3b, 0x38, 0x24, 0x86, + 0x98, 0xf0, 0x33, 0xb0, 0x4c, 0x02, 0xf4, 0x60, 0x2b, 0x6e, 0xcf, 0x89, 0x1e, 0x8f, 0xd5, 0xf8, + 0x85, 0xa6, 0x68, 0x0a, 0x10, 0x7e, 0x20, 0xb2, 0x24, 0x64, 0xc5, 0x9d, 0xd7, 0x2f, 0x2d, 0xc9, + 0x45, 0xf5, 0x7a, 0x10, 0x6c, 0x44, 0x3e, 0x12, 0x97, 0xde, 0xe8, 0x13, 0x25, 0x35, 0xf4, 0x2f, + 0x01, 0x9c, 0xbc, 0xd7, 0xcc, 0x71, 0x6b, 0xba, 0x08, 0x96, 0xdd, 0xe1, 0xa0, 0x4d, 0x82, 0x1e, + 0xca, 0xc7, 0x0e, 0xee, 0x49, 0x2a, 0x52, 0x5c, 0x73, 0xeb, 0xc9, 0xf3, 0xf2, 0xc2, 0xd3, 0xe7, + 0xe5, 0x85, 0x67, 0xcf, 0xcb, 0x0b, 0xdf, 0x8c, 0xcb, 0xda, 0x93, 0x71, 0x59, 0x7b, 0x3a, 0x2e, + 0x6b, 0xcf, 0xc6, 0x65, 0xed, 0xef, 0x71, 0x59, 0xfb, 0xfe, 0x9f, 0xf2, 0xc2, 0xe7, 0xb9, 0xc3, + 0xed, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xb2, 0x4c, 0xf7, 0x73, 0x12, 0x00, 0x00, } func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) { @@ -1735,6 +1735,11 @@ func (m *NetworkPolicyPort) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.EndPort != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.EndPort)) + i-- + dAtA[i] = 0x18 + } if m.Port != nil { { size, err := m.Port.MarshalToSizedBuffer(dAtA[:i]) @@ -2215,6 +2220,9 @@ func (m *NetworkPolicyPort) Size() (n int) { l = m.Port.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.EndPort != nil { + n += 1 + sovGenerated(uint64(*m.EndPort)) + } return n } @@ -2544,6 +2552,7 @@ func (this *NetworkPolicyPort) String() string { s := strings.Join([]string{`&NetworkPolicyPort{`, `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "intstr.IntOrString", 1) + `,`, + `EndPort:` + valueToStringGenerated(this.EndPort) + `,`, `}`, }, "") return s @@ -5160,6 +5169,26 @@ func (m *NetworkPolicyPort) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EndPort", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EndPort = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/networking/v1/generated.proto b/staging/src/k8s.io/api/networking/v1/generated.proto index 74737098b984..abf592db0a96 100644 --- a/staging/src/k8s.io/api/networking/v1/generated.proto +++ b/staging/src/k8s.io/api/networking/v1/generated.proto @@ -398,10 +398,21 @@ message NetworkPolicyPort { // +optional optional string protocol = 1; - // The port on the given protocol. This can either be a numerical or named port on - // a pod. If this field is not provided, this matches all port names and numbers. + // The port on the given protocol. This can either be a numerical or named + // port on a pod. If this field is not provided, this matches all port names and + // numbers. + // If present, only traffic on the specified protocol AND port will be matched. // +optional optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 2; + + // If set, indicates that the range of ports from port to endPort, inclusive, + // should be allowed by the policy. This field cannot be defined if the port field + // is not defined or if the port field is defined as a named (string) port. + // The endPort must be equal or greater than port. + // This feature is in Alpha state and should be enabled using the Feature Gate + // "NetworkPolicyEndPort". + // +optional + optional int32 endPort = 3; } // NetworkPolicySpec provides the specification of a NetworkPolicy diff --git a/staging/src/k8s.io/api/networking/v1/types.go b/staging/src/k8s.io/api/networking/v1/types.go index c84c7cdc41e1..170791f52cc3 100644 --- a/staging/src/k8s.io/api/networking/v1/types.go +++ b/staging/src/k8s.io/api/networking/v1/types.go @@ -152,7 +152,7 @@ type NetworkPolicyPort struct { // should be allowed by the policy. This field cannot be defined if the port field // is not defined or if the port field is defined as a named (string) port. // The endPort must be equal or greater than port. - // This feature is in Alpha state and should be enabled using the Feature Gate + // This feature is in Alpha state and should be enabled using the Feature Gate // "NetworkPolicyEndPort". // +optional EndPort *int32 `json:"endPort,omitempty" protobuf:"bytes,3,opt,name=endPort"` diff --git a/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go index 41b9b3fb6bda..3ca478e6b794 100644 --- a/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go @@ -230,7 +230,8 @@ func (NetworkPolicyPeer) SwaggerDoc() map[string]string { var map_NetworkPolicyPort = map[string]string{ "": "NetworkPolicyPort describes a port to allow traffic on", "protocol": "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - "port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.", + "port": "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", + "endPort": "If set, indicates that the range of ports from port to endPort, inclusive, should be allowed by the policy. This field cannot be defined if the port field is not defined or if the port field is defined as a named (string) port. The endPort must be equal or greater than port. This feature is in Alpha state and should be enabled using the Feature Gate \"NetworkPolicyEndPort\".", } func (NetworkPolicyPort) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go index b17e78927718..a68fb0f5415a 100644 --- a/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go @@ -558,6 +558,11 @@ func (in *NetworkPolicyPort) DeepCopyInto(out *NetworkPolicyPort) { *out = new(intstr.IntOrString) **out = **in } + if in.EndPort != nil { + in, out := &in.EndPort, &out.EndPort + *out = new(int32) + **out = **in + } return } diff --git a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json index 9b115670ffe3..c2d4e3800924 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json +++ b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json @@ -60,30 +60,34 @@ "ports": [ { "protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ", - "port": 2 + "port": 2, + "endPort": -420211493 } ], "from": [ { "podSelector": { "matchLabels": { - "yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O": "17_.8CnT" + "5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g" }, "matchExpressions": [ { - "key": "3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V", + "key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v", "operator": "Exists" } ] }, "namespaceSelector": { "matchLabels": { - "g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7": "9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R" + "pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y" }, "matchExpressions": [ { - "key": "2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051", - "operator": "DoesNotExist" + "key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X", + "operator": "In", + "values": [ + "g4" + ] } ] }, @@ -101,37 +105,32 @@ { "ports": [ { - "protocol": "ɗ", - "port": 3 + "protocol": "s3!Zɾģ毋", + "port": 3, + "endPort": -630252364 } ], "to": [ { "podSelector": { "matchLabels": { - "hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX": "f-AH-Q.GM72_-c-.-.6--3-___t-8" + "P1s-V.9.3": "9..c_uo3a" }, "matchExpressions": [ { - "key": "b_2_-8-----yY", - "operator": "NotIn", - "values": [ - "M24" - ] + "key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy", + "operator": "DoesNotExist" } ] }, "namespaceSelector": { "matchLabels": { - "P____K_1": "Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv" + "5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz" }, "matchExpressions": [ { - "key": "4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5", - "operator": "NotIn", - "values": [ - "7-.p_3_J_SA995IKCR.sm" - ] + "key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8", + "operator": "DoesNotExist" } ] }, @@ -146,7 +145,7 @@ } ], "policyTypes": [ - "ĨǔvÄ" + "(dŊiɢz" ] } } \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.pb b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.pb index 19ded16fe8ab398741a9a556ea782599ad880994..a631989391f779bfa4c5e2ae3716927f26c9e4c7 100644 GIT binary patch delta 832 zcmY+CJC9pM7>4&8qi8dsKvST|5)uT7Tl9WD=ggUNp|i7#H_ooTUhifv%@@bV*YzH+ z*LOD-2nlg1K>H6sDQG}QND&gEf+8IfRM1hRqd}r1FocS!Mw-z(-}^lCr+D|;$8T6a ze{%B+>%mvQylg%5dq%jImi@}=`mdk=`0&Z!W?AxKMm(^@J)t!-bx^_%#k@~L3_@C< zR;4(Pw?IC?)9pj*^+38n#H3llm#-=pKFyDsM2>1P;1F$-Gpq)OpoBc9gUTInTjoW$ z7u4L4DO%l1?{I|@5SM3-V!DeNYAwx`3+lQYF6nR!=7s&lLz$0hDz9wLyQA?)zGI7_ z@Xz}JJSaEFmD?30)IF%*;@NSn)GC;Iz9o;mUMv+epb|XWFHVNKfA)nnCG)LvZ_$goc zhb7*(#EI@h$88K3rcM0mK?^8mk#A-pbd0fLdq3o`z#B$A=+vJqWg_;& z3C7)~j}T~|DN@n24|i!4M3G7`RXuaGFg7sBCGgq&Qp5Vhr|rDjx?7CZn{1+QD>5j^ j!IGEGD2@JK`(GK_mA3Y7tiP80@Im*{r_1cxjkSLO?p*CY delta 791 zcmXw1&1zFY6z)y5mQg{*pGCxliWQab^v<1o@65%8#8#VHQnjtx3UaVXTaz}wH%*gn z0^$QG6@7s&x>3-DAc!0P@D+Rj-@v^SK@JR@bLO1+e&*TXKjQgi@7s$jZ@pLVex3IY zyvd63T`w~}kWaJXgC{EDQGXpU30CpggexU<0l!-9hY^&4A8Fd@_iL#^XG1j`aS63p z8LiPn&<)!_gx-2dqrU^=YAE^Gju5vejLpXs-9=Ni>z|_K0o9f6XL<#dU3MjUk9dhGL zP_+(ACq{e7uI%X6HeuW4C$SAfRG=(uRg` z!^}eam92?1CZBH?c9^ci;oWw0$a0(KK)Q~eE4i4f4Zus9RGF6x+BpIuR!nnC^2{3Y z1>B|SqEiPYw}WCpgPA+9^0YX*!mcqy5A>JiK_|mZJ(n#8p?vR&ycoOVuJSA^87-}~ zDIBWif{0YJ&kiL~N<5$*1+yHqw%A|5Wa|MoTs!l^v`*kiGp*7zV82c+5Pe?H*#*|FFkY56#xJL diff --git a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml index 185702d11c66..c17f9fd73133 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml @@ -32,8 +32,9 @@ metadata: spec: egress: - ports: - - port: 3 - protocol: ɗ + - endPort: -630252364 + port: 3 + protocol: s3!Zɾģ毋 to: - ipBlock: cidr: "51" @@ -41,21 +42,16 @@ spec: - "52" namespaceSelector: matchExpressions: - - key: 4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5 - operator: NotIn - values: - - 7-.p_3_J_SA995IKCR.sm + - key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8 + operator: DoesNotExist matchLabels: - P____K_1: Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv + 5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz podSelector: matchExpressions: - - key: b_2_-8-----yY - operator: NotIn - values: - - M24 + - key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy + operator: DoesNotExist matchLabels: - ? hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX - : f-AH-Q.GM72_-c-.-.6--3-___t-8 + P1s-V.9.3: 9..c_uo3a ingress: - from: - ipBlock: @@ -64,18 +60,21 @@ spec: - "38" namespaceSelector: matchExpressions: - - key: 2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051 - operator: DoesNotExist + - key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X + operator: In + values: + - g4 matchLabels: - g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7: 9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R + pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y podSelector: matchExpressions: - - key: 3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V + - key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v operator: Exists matchLabels: - yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O: 17_.8CnT + 5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g ports: - - port: 2 + - endPort: -420211493 + port: 2 protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ podSelector: matchExpressions: @@ -86,4 +85,4 @@ spec: matchLabels: 8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4 policyTypes: - - ĨǔvÄ + - (dŊiɢz diff --git a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json index 360e125b65fd..6f36aa926963 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json +++ b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json @@ -60,30 +60,34 @@ "ports": [ { "protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ", - "port": 2 + "port": 2, + "endPort": -420211493 } ], "from": [ { "podSelector": { "matchLabels": { - "yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O": "17_.8CnT" + "5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g" }, "matchExpressions": [ { - "key": "3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V", + "key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v", "operator": "Exists" } ] }, "namespaceSelector": { "matchLabels": { - "g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7": "9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R" + "pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y" }, "matchExpressions": [ { - "key": "2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051", - "operator": "DoesNotExist" + "key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X", + "operator": "In", + "values": [ + "g4" + ] } ] }, @@ -101,37 +105,32 @@ { "ports": [ { - "protocol": "ɗ", - "port": 3 + "protocol": "s3!Zɾģ毋", + "port": 3, + "endPort": -630252364 } ], "to": [ { "podSelector": { "matchLabels": { - "hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX": "f-AH-Q.GM72_-c-.-.6--3-___t-8" + "P1s-V.9.3": "9..c_uo3a" }, "matchExpressions": [ { - "key": "b_2_-8-----yY", - "operator": "NotIn", - "values": [ - "M24" - ] + "key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy", + "operator": "DoesNotExist" } ] }, "namespaceSelector": { "matchLabels": { - "P____K_1": "Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv" + "5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz" }, "matchExpressions": [ { - "key": "4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5", - "operator": "NotIn", - "values": [ - "7-.p_3_J_SA995IKCR.sm" - ] + "key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8", + "operator": "DoesNotExist" } ] }, @@ -146,7 +145,7 @@ } ], "policyTypes": [ - "ĨǔvÄ" + "(dŊiɢz" ] } } \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.pb b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.pb index 549337621b3e375de85326b82cd61317b32d6388..004bd749dc8473d3115be1b800256b0183091aa7 100644 GIT binary patch delta 831 zcmY+Cy^kA37{+gH6kR41XbKcrLV_ScPIy-mx;@sKi^Ih(vd2zh{Jm30! z{&r(Qktl%zlK&tmMVdrNND&gEf+8Ifbfij=jwTHiBonBZYNQ!G^FF`d{3ULj`}$++ z_iymfy8qqN_pLYnObh33I`zTg{2vc~ef-Z$vn=^IE$&<5GodvzwNSt&MZ80O^a7fp zQl==2PeC5Qs#H3lllOHMv9!>Y_M7C-$U=wYS-7oulpqN~{h0;}UQ)Wf5 z?N^+DDO_Amu5yWD5Em!4e6ocJDh+k@dievuM= z;hl7SxKNJ2Qf!tGQ+v01nI{L8LL+C!npaFLk?Ph__OJ~*R8-M2+T~Sde+ZXwC;iU# z4p9_05_J&9Y%^gdzp}*VRwJ4mK>@yYr!8`;Xdj_^1mM(8T8P{*GW#h`&_5aaa3)Z$ zt!qwqTJO&iXdsGpRUx?EU%Bg~KU#q2#~|=_Vd(D5)RiQYYI>Pvky3$7sW5XhE#4L9 z2I{@TCqMoC?ej-p$}`JLZ>2L!=fD5q$KU?`PtmiKsEW76*)3;)YZQ@^XCtB-k9w*q z^CED#$0xq8OYG%4#JT+;l@Ks976&{!28XAnQRoqaozTFcHGl$ zVToIoIMiL}sEPi}w5gt=ndmU78QvxWJs1dZ^w?Z+brn;`AaWfKYEWC*q{0^Wvg~E4 z;0_e+Z}kJh+f%&tp1=Eb(%bdM z7pHgp-07iw=!*}YsET`oRluZpfMpZiFQW$pwb~$xp$vjp)AnFc&kVZjs?|)&s3*#3 zjXuI&)B$4jSIZiMZ5UTWIlxwoq%&!3A)(}&99M?PPBj+fjJTkI5WpsI$Oh{Qv2hs` z`f3}|W+84h)@!b#%eabVlqdj&6Mewo_S4Y!smiWntq0Q5H5W^&=ny`kSakPMY#YGY#BSl&Bs80;D<~9k zgRYdEIw-pxlmHsc+=Z3L#DV+l8YA?;U`g(FGR!pcekqLPdruU^_;q)cXIaU3aiv4i zNHrHkq*?=ZD2X!SA@wPo<*>cU!91qgcWB!65UTZ_tcy~#>_|0jU853gnU?Ksz`5^8 zT3ta;*CLpK^EpLZr@>^Sy0AeCbbG;>U$1dWB~m(a-;UZzG5(M7hyk@&^HrWN98c4D fW_Ic(W%ZGN&eL2Rp4j{K^^a%0FOTwLC&vB)Z?n%Q diff --git a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml index 0c1b28c586c8..8ef547ed2c02 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml @@ -32,8 +32,9 @@ metadata: spec: egress: - ports: - - port: 3 - protocol: ɗ + - endPort: -630252364 + port: 3 + protocol: s3!Zɾģ毋 to: - ipBlock: cidr: "51" @@ -41,21 +42,16 @@ spec: - "52" namespaceSelector: matchExpressions: - - key: 4a--0o8m3-d0w7p8vl-1z---883d-v3j4-7y-5.9-q390/niTl.1-.VT--5mj_9.M.134-5-.q6H5 - operator: NotIn - values: - - 7-.p_3_J_SA995IKCR.sm + - key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8 + operator: DoesNotExist matchLabels: - P____K_1: Xfr.4_.-_-_-...1py_8-3..s._.x.2K_2qu_0S-CqW.D_8--21kv + 5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz podSelector: matchExpressions: - - key: b_2_-8-----yY - operator: NotIn - values: - - M24 + - key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy + operator: DoesNotExist matchLabels: - ? hg1-o-p665--4-j8---t6-r7---d--uml-8rdh6844-i-18-850-4s2o8.x4--s--xu-d42--clo90---461v-07r--0---8-30iu/s6.0_OHz_.B-.-_w_--.8_r_N-.3n-x.-_-_-Nm-_X3.1d_YH3x---.._1_.NX - : f-AH-Q.GM72_-c-.-.6--3-___t-8 + P1s-V.9.3: 9..c_uo3a ingress: - from: - ipBlock: @@ -64,18 +60,21 @@ spec: - "38" namespaceSelector: matchExpressions: - - key: 2_28.-.7_8B.HF-U-_ik_--DSXr.n-A9..9__Y-H-Mqpt._.-_..051 - operator: DoesNotExist + - key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X + operator: In + values: + - g4 matchLabels: - g--5.-Z3P__D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-7: 9dfn3Y8d_0_.---M_4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5-R + pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y podSelector: matchExpressions: - - key: 3--2---u--80k1-57----1-x1z-4/r.i1_7z.WH-.._Td2-N_Y.t--_0..--_6V + - key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v operator: Exists matchLabels: - yg--79-e-a74bc-v--0jjy45-17-053.zyyms7-tk1po6c-m61733-x-2v4r--5-xgc3-yz-7-x--c0-w5-6r/78A6.6O: 17_.8CnT + 5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g ports: - - port: 2 + - endPort: -420211493 + port: 2 protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ podSelector: matchExpressions: @@ -86,4 +85,4 @@ spec: matchLabels: 8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4 policyTypes: - - ĨǔvÄ + - (dŊiɢz From 9fd51d840df5f149b04413bccedbed7ced0b8e5a Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Mon, 1 Feb 2021 17:33:48 -0300 Subject: [PATCH 8/9] Add alpha support for EndPort in Network Policy --- pkg/registry/networking/networkpolicy/strategy_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/registry/networking/networkpolicy/strategy_test.go b/pkg/registry/networking/networkpolicy/strategy_test.go index 5deb4dd437ac..35d1686f31bb 100644 --- a/pkg/registry/networking/networkpolicy/strategy_test.go +++ b/pkg/registry/networking/networkpolicy/strategy_test.go @@ -245,7 +245,7 @@ func TestNetworkPolicyStrategy(t *testing.T) { func TestNetworkPolicyEndPortEnablement(t *testing.T) { // Enable the Feature Gate during the first rule creation - featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true) + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true)() netPol := makeNetworkPolicy(true, true, true) // We always expect the EndPort to be present, even if the FG is disabled later expectedNetPol := makeNetworkPolicy(true, true, true) @@ -267,13 +267,13 @@ func TestNetworkPolicyEndPortEnablement(t *testing.T) { } // Now let's disable the Feature Gate, update some other field from NetPol and expect the EndPort is already present - featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, false) + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, false)() updateNetPol, err := testUpdateEndPort(netPol) if err != nil { t.Errorf("Update with disabled FG failed. %v", err) } // And let's enable the FG again, add another from and check if the EndPort field is still present - featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true) + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyEndPort, true)() _, err = testUpdateEndPort(updateNetPol) if err != nil { t.Errorf("Update with enabled FG failed. %v", err) From 3a687357b6ccb8491a1cb2c76d3f226a00966f3c Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Mon, 1 Feb 2021 18:20:32 -0300 Subject: [PATCH 9/9] Add alpha support for EndPort in Network Policy --- pkg/registry/networking/networkpolicy/strategy_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/registry/networking/networkpolicy/strategy_test.go b/pkg/registry/networking/networkpolicy/strategy_test.go index 35d1686f31bb..a707dfba0c7e 100644 --- a/pkg/registry/networking/networkpolicy/strategy_test.go +++ b/pkg/registry/networking/networkpolicy/strategy_test.go @@ -1,5 +1,5 @@ /* -Copyright 2020 The Kubernetes Authors. +Copyright 2021 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.