mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Create meta/internalversion for ListOptions
Move over only the conversions that are needed, create a new scheme that is private to meta and only accessible via ParameterCodec. Move half of pkg/util/labels/.readonly to pkg/apis/meta/v1/labels.go
This commit is contained in:
		@@ -287,14 +287,6 @@ func IsStandardFinalizerName(str string) bool {
 | 
				
			|||||||
	return standardFinalizers.Has(str)
 | 
						return standardFinalizers.Has(str)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SingleObject returns a ListOptions for watching a single object.
 | 
					 | 
				
			||||||
func SingleObject(meta metav1.ObjectMeta) ListOptions {
 | 
					 | 
				
			||||||
	return ListOptions{
 | 
					 | 
				
			||||||
		FieldSelector:   fields.OneTermEqualSelector("metadata.name", meta.Name),
 | 
					 | 
				
			||||||
		ResourceVersion: meta.ResourceVersion,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice,
 | 
					// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice,
 | 
				
			||||||
// only if they do not already exist
 | 
					// only if they do not already exist
 | 
				
			||||||
func AddToNodeAddresses(addresses *[]NodeAddress, addAddresses ...NodeAddress) {
 | 
					func AddToNodeAddresses(addresses *[]NodeAddress, addAddresses ...NodeAddress) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2867,6 +2867,7 @@ type DeleteOptions struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ListOptions is the query options to a standard REST list call, and has future support for
 | 
					// ListOptions is the query options to a standard REST list call, and has future support for
 | 
				
			||||||
// watch calls.
 | 
					// watch calls.
 | 
				
			||||||
 | 
					// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
 | 
				
			||||||
type ListOptions struct {
 | 
					type ListOptions struct {
 | 
				
			||||||
	metav1.TypeMeta
 | 
						metav1.TypeMeta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1276,6 +1276,8 @@ message List {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListOptions is the query options to a standard REST list call.
 | 
					// ListOptions is the query options to a standard REST list call.
 | 
				
			||||||
 | 
					// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
 | 
				
			||||||
 | 
					// +k8s:openapi-gen=false
 | 
				
			||||||
message ListOptions {
 | 
					message ListOptions {
 | 
				
			||||||
  // A selector to restrict the list of returned objects by their labels.
 | 
					  // A selector to restrict the list of returned objects by their labels.
 | 
				
			||||||
  // Defaults to everything.
 | 
					  // Defaults to everything.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,8 +21,6 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/fields"
 | 
					 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/selection"
 | 
						"k8s.io/apimachinery/pkg/selection"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/types"
 | 
						"k8s.io/apimachinery/pkg/types"
 | 
				
			||||||
@@ -91,14 +89,6 @@ func IsStandardFinalizerName(str string) bool {
 | 
				
			|||||||
	return standardFinalizers.Has(str)
 | 
						return standardFinalizers.Has(str)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SingleObject returns a ListOptions for watching a single object.
 | 
					 | 
				
			||||||
func SingleObject(meta metav1.ObjectMeta) ListOptions {
 | 
					 | 
				
			||||||
	return ListOptions{
 | 
					 | 
				
			||||||
		FieldSelector:   fields.OneTermEqualSelector("metadata.name", meta.Name).String(),
 | 
					 | 
				
			||||||
		ResourceVersion: meta.ResourceVersion,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice,
 | 
					// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice,
 | 
				
			||||||
// only if they do not already exist
 | 
					// only if they do not already exist
 | 
				
			||||||
func AddToNodeAddresses(addresses *[]NodeAddress, addAddresses ...NodeAddress) {
 | 
					func AddToNodeAddresses(addresses *[]NodeAddress, addAddresses ...NodeAddress) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3308,6 +3308,8 @@ type DeleteOptions struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListOptions is the query options to a standard REST list call.
 | 
					// ListOptions is the query options to a standard REST list call.
 | 
				
			||||||
 | 
					// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
 | 
				
			||||||
 | 
					// +k8s:openapi-gen=false
 | 
				
			||||||
type ListOptions struct {
 | 
					type ListOptions struct {
 | 
				
			||||||
	metav1.TypeMeta `json:",inline"`
 | 
						metav1.TypeMeta `json:",inline"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								pkg/util/labels/.readonly
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								pkg/util/labels/.readonly
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package internalversion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/conversion"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/fields"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/util/validation/field"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_internalversion_ListOptions_To_v1_ListOptions(in *ListOptions, out *metav1.ListOptions, s conversion.Scope) error {
 | 
				
			||||||
 | 
						if err := Convert_fields_Selector_To_string(&in.FieldSelector, &out.FieldSelector, s); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := Convert_labels_Selector_To_string(&in.LabelSelector, &out.LabelSelector, s); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						out.ResourceVersion = in.ResourceVersion
 | 
				
			||||||
 | 
						out.TimeoutSeconds = in.TimeoutSeconds
 | 
				
			||||||
 | 
						out.Watch = in.Watch
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_v1_ListOptions_To_internalversion_ListOptions(in *metav1.ListOptions, out *ListOptions, s conversion.Scope) error {
 | 
				
			||||||
 | 
						if err := Convert_string_To_fields_Selector(&in.FieldSelector, &out.FieldSelector, s); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := Convert_string_To_labels_Selector(&in.LabelSelector, &out.LabelSelector, s); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						out.ResourceVersion = in.ResourceVersion
 | 
				
			||||||
 | 
						out.TimeoutSeconds = in.TimeoutSeconds
 | 
				
			||||||
 | 
						out.Watch = in.Watch
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_string_To_labels_Selector(in *string, out *labels.Selector, s conversion.Scope) error {
 | 
				
			||||||
 | 
						selector, err := labels.Parse(*in)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*out = selector
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_string_To_fields_Selector(in *string, out *fields.Selector, s conversion.Scope) error {
 | 
				
			||||||
 | 
						selector, err := fields.ParseSelector(*in)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*out = selector
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_labels_Selector_To_string(in *labels.Selector, out *string, s conversion.Scope) error {
 | 
				
			||||||
 | 
						if *in == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*out = (*in).String()
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_fields_Selector_To_string(in *fields.Selector, out *string, s conversion.Scope) error {
 | 
				
			||||||
 | 
						if *in == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*out = (*in).String()
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_map_to_v1_LabelSelector(in *map[string]string, out *metav1.LabelSelector, s conversion.Scope) error {
 | 
				
			||||||
 | 
						if in == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						out = new(metav1.LabelSelector)
 | 
				
			||||||
 | 
						for labelKey, labelValue := range *in {
 | 
				
			||||||
 | 
							metav1.AddLabelToSelector(out, labelKey, labelValue)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Convert_v1_LabelSelector_to_map(in *metav1.LabelSelector, out *map[string]string, s conversion.Scope) error {
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						*out, err = metav1.LabelSelectorAsMap(in)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							err = field.Invalid(field.NewPath("labelSelector"), *in, fmt.Sprintf("cannot convert to old selector: %v", err))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package internalversion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/runtime/serializer"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GroupName is the group name for this API.
 | 
				
			||||||
 | 
					const GroupName = "meta.k8s.io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Scheme is the registry for any type that adheres to the meta API spec.
 | 
				
			||||||
 | 
					var scheme = runtime.NewScheme()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Codecs provides access to encoding and decoding for the scheme
 | 
				
			||||||
 | 
					var codecs = serializer.NewCodecFactory(scheme)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SchemeGroupVersion is group version used to register these objects
 | 
				
			||||||
 | 
					var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ParameterCodec handles versioning of objects that are converted to query parameters.
 | 
				
			||||||
 | 
					var ParameterCodec = runtime.NewParameterCodec(scheme)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Kind takes an unqualified kind and returns a Group qualified GroupKind
 | 
				
			||||||
 | 
					func Kind(kind string) schema.GroupKind {
 | 
				
			||||||
 | 
						return SchemeGroupVersion.WithKind(kind).GroupKind()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// addToGroupVersion registers common meta types into schemas.
 | 
				
			||||||
 | 
					func addToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion) error {
 | 
				
			||||||
 | 
						if err := scheme.AddIgnoredConversionType(&metav1.TypeMeta{}, &metav1.TypeMeta{}); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						scheme.AddConversionFuncs(
 | 
				
			||||||
 | 
							Convert_string_To_labels_Selector,
 | 
				
			||||||
 | 
							Convert_labels_Selector_To_string,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Convert_string_To_fields_Selector,
 | 
				
			||||||
 | 
							Convert_fields_Selector_To_string,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Convert_map_to_v1_LabelSelector,
 | 
				
			||||||
 | 
							Convert_v1_LabelSelector_to_map,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Convert_internalversion_ListOptions_To_v1_ListOptions,
 | 
				
			||||||
 | 
							Convert_v1_ListOptions_To_internalversion_ListOptions,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						scheme.AddKnownTypes(SchemeGroupVersion,
 | 
				
			||||||
 | 
							&ListOptions{},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion)
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Unlike other API groups, meta internal knows about all meta external versions, but keeps
 | 
				
			||||||
 | 
					// the logic for conversion private.
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						if err := addToGroupVersion(scheme, SchemeGroupVersion); err != nil {
 | 
				
			||||||
 | 
							panic(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					package internalversion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
 | 
						"reflect"
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/util/diff"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestListOptions(t *testing.T) {
 | 
				
			||||||
 | 
						// verify round trip conversion
 | 
				
			||||||
 | 
						ten := int64(10)
 | 
				
			||||||
 | 
						in := &metav1.ListOptions{
 | 
				
			||||||
 | 
							LabelSelector:   "a=1",
 | 
				
			||||||
 | 
							FieldSelector:   "b=1",
 | 
				
			||||||
 | 
							ResourceVersion: "10",
 | 
				
			||||||
 | 
							TimeoutSeconds:  &ten,
 | 
				
			||||||
 | 
							Watch:           true,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						out := &ListOptions{}
 | 
				
			||||||
 | 
						if err := scheme.Convert(in, out, nil); err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						actual := &metav1.ListOptions{}
 | 
				
			||||||
 | 
						if err := scheme.Convert(out, actual, nil); err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !reflect.DeepEqual(in, actual) {
 | 
				
			||||||
 | 
							t.Errorf("unexpected: %s", diff.ObjectReflectDiff(in, actual))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// verify failing conversion
 | 
				
			||||||
 | 
						for i, failingObject := range []*metav1.ListOptions{
 | 
				
			||||||
 | 
							&metav1.ListOptions{LabelSelector: "a!!!"},
 | 
				
			||||||
 | 
							&metav1.ListOptions{FieldSelector: "a!!!"},
 | 
				
			||||||
 | 
						} {
 | 
				
			||||||
 | 
							out = &ListOptions{}
 | 
				
			||||||
 | 
							if err := scheme.Convert(failingObject, out, nil); err == nil {
 | 
				
			||||||
 | 
								t.Errorf("%d: unexpected conversion: %#v", i, out)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// verify kind registration
 | 
				
			||||||
 | 
						if gvk, unversioned, err := scheme.ObjectKind(in); err != nil || unversioned || gvk != metav1.SchemeGroupVersion.WithKind("ListOptions") {
 | 
				
			||||||
 | 
							t.Errorf("unexpected: %v %v %v", gvk, unversioned, err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if gvk, unversioned, err := scheme.ObjectKind(out); err != nil || unversioned || gvk != SchemeGroupVersion.WithKind("ListOptions") {
 | 
				
			||||||
 | 
							t.Errorf("unexpected: %v %v %v", gvk, unversioned, err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						actual = &metav1.ListOptions{}
 | 
				
			||||||
 | 
						if err := ParameterCodec.DecodeParameters(url.Values{"watch": []string{"1"}}, metav1.SchemeGroupVersion, actual); err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !actual.Watch {
 | 
				
			||||||
 | 
							t.Errorf("unexpected watch decode: %#v", actual)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// check ParameterCodec
 | 
				
			||||||
 | 
						query, err := ParameterCodec.EncodeParameters(in, metav1.SchemeGroupVersion)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						actual = &metav1.ListOptions{}
 | 
				
			||||||
 | 
						if err := ParameterCodec.DecodeParameters(query, metav1.SchemeGroupVersion, actual); err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !reflect.DeepEqual(in, actual) {
 | 
				
			||||||
 | 
							t.Errorf("unexpected: %s", diff.ObjectReflectDiff(in, actual))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2017 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package internalversion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/fields"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ListOptions is the query options to a standard REST list call, and has future support for
 | 
				
			||||||
 | 
					// watch calls.
 | 
				
			||||||
 | 
					type ListOptions struct {
 | 
				
			||||||
 | 
						metav1.TypeMeta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// A selector based on labels
 | 
				
			||||||
 | 
						LabelSelector labels.Selector
 | 
				
			||||||
 | 
						// A selector based on fields
 | 
				
			||||||
 | 
						FieldSelector fields.Selector
 | 
				
			||||||
 | 
						// If true, watch for changes to this list
 | 
				
			||||||
 | 
						Watch bool
 | 
				
			||||||
 | 
						// When specified with a watch call, shows changes that occur after that particular version of a resource.
 | 
				
			||||||
 | 
						// Defaults to changes from the beginning of history.
 | 
				
			||||||
 | 
						// When specified for list:
 | 
				
			||||||
 | 
						// - if unset, then the result is returned from remote storage based on quorum-read flag;
 | 
				
			||||||
 | 
						// - if it's 0, then we simply return what we currently have in cache, no guarantee;
 | 
				
			||||||
 | 
						// - if set to non zero, then the result is at least as fresh as given rv.
 | 
				
			||||||
 | 
						ResourceVersion string
 | 
				
			||||||
 | 
						// Timeout for the list/watch call.
 | 
				
			||||||
 | 
						TimeoutSeconds *int64
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -42,6 +42,7 @@ limitations under the License.
 | 
				
			|||||||
		LabelSelector
 | 
							LabelSelector
 | 
				
			||||||
		LabelSelectorRequirement
 | 
							LabelSelectorRequirement
 | 
				
			||||||
		ListMeta
 | 
							ListMeta
 | 
				
			||||||
 | 
							ListOptions
 | 
				
			||||||
		ObjectMeta
 | 
							ObjectMeta
 | 
				
			||||||
		OwnerReference
 | 
							OwnerReference
 | 
				
			||||||
		RootPaths
 | 
							RootPaths
 | 
				
			||||||
@@ -151,55 +152,59 @@ func (m *ListMeta) Reset()                    { *m = ListMeta{} }
 | 
				
			|||||||
func (*ListMeta) ProtoMessage()               {}
 | 
					func (*ListMeta) ProtoMessage()               {}
 | 
				
			||||||
func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} }
 | 
					func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *ListOptions) Reset()                    { *m = ListOptions{} }
 | 
				
			||||||
 | 
					func (*ListOptions) ProtoMessage()               {}
 | 
				
			||||||
 | 
					func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *ObjectMeta) Reset()                    { *m = ObjectMeta{} }
 | 
					func (m *ObjectMeta) Reset()                    { *m = ObjectMeta{} }
 | 
				
			||||||
func (*ObjectMeta) ProtoMessage()               {}
 | 
					func (*ObjectMeta) ProtoMessage()               {}
 | 
				
			||||||
func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} }
 | 
					func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *OwnerReference) Reset()                    { *m = OwnerReference{} }
 | 
					func (m *OwnerReference) Reset()                    { *m = OwnerReference{} }
 | 
				
			||||||
func (*OwnerReference) ProtoMessage()               {}
 | 
					func (*OwnerReference) ProtoMessage()               {}
 | 
				
			||||||
func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} }
 | 
					func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *RootPaths) Reset()                    { *m = RootPaths{} }
 | 
					func (m *RootPaths) Reset()                    { *m = RootPaths{} }
 | 
				
			||||||
func (*RootPaths) ProtoMessage()               {}
 | 
					func (*RootPaths) ProtoMessage()               {}
 | 
				
			||||||
func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
 | 
					func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *ServerAddressByClientCIDR) Reset()      { *m = ServerAddressByClientCIDR{} }
 | 
					func (m *ServerAddressByClientCIDR) Reset()      { *m = ServerAddressByClientCIDR{} }
 | 
				
			||||||
func (*ServerAddressByClientCIDR) ProtoMessage() {}
 | 
					func (*ServerAddressByClientCIDR) ProtoMessage() {}
 | 
				
			||||||
func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) {
 | 
					func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) {
 | 
				
			||||||
	return fileDescriptorGenerated, []int{20}
 | 
						return fileDescriptorGenerated, []int{21}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Status) Reset()                    { *m = Status{} }
 | 
					func (m *Status) Reset()                    { *m = Status{} }
 | 
				
			||||||
func (*Status) ProtoMessage()               {}
 | 
					func (*Status) ProtoMessage()               {}
 | 
				
			||||||
func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} }
 | 
					func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *StatusCause) Reset()                    { *m = StatusCause{} }
 | 
					func (m *StatusCause) Reset()                    { *m = StatusCause{} }
 | 
				
			||||||
func (*StatusCause) ProtoMessage()               {}
 | 
					func (*StatusCause) ProtoMessage()               {}
 | 
				
			||||||
func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} }
 | 
					func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *StatusDetails) Reset()                    { *m = StatusDetails{} }
 | 
					func (m *StatusDetails) Reset()                    { *m = StatusDetails{} }
 | 
				
			||||||
func (*StatusDetails) ProtoMessage()               {}
 | 
					func (*StatusDetails) ProtoMessage()               {}
 | 
				
			||||||
func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} }
 | 
					func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Time) Reset()                    { *m = Time{} }
 | 
					func (m *Time) Reset()                    { *m = Time{} }
 | 
				
			||||||
func (*Time) ProtoMessage()               {}
 | 
					func (*Time) ProtoMessage()               {}
 | 
				
			||||||
func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
 | 
					func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Timestamp) Reset()                    { *m = Timestamp{} }
 | 
					func (m *Timestamp) Reset()                    { *m = Timestamp{} }
 | 
				
			||||||
func (*Timestamp) ProtoMessage()               {}
 | 
					func (*Timestamp) ProtoMessage()               {}
 | 
				
			||||||
func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
 | 
					func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *TypeMeta) Reset()                    { *m = TypeMeta{} }
 | 
					func (m *TypeMeta) Reset()                    { *m = TypeMeta{} }
 | 
				
			||||||
func (*TypeMeta) ProtoMessage()               {}
 | 
					func (*TypeMeta) ProtoMessage()               {}
 | 
				
			||||||
func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} }
 | 
					func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *Verbs) Reset()                    { *m = Verbs{} }
 | 
					func (m *Verbs) Reset()                    { *m = Verbs{} }
 | 
				
			||||||
func (*Verbs) ProtoMessage()               {}
 | 
					func (*Verbs) ProtoMessage()               {}
 | 
				
			||||||
func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} }
 | 
					func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *WatchEvent) Reset()                    { *m = WatchEvent{} }
 | 
					func (m *WatchEvent) Reset()                    { *m = WatchEvent{} }
 | 
				
			||||||
func (*WatchEvent) ProtoMessage()               {}
 | 
					func (*WatchEvent) ProtoMessage()               {}
 | 
				
			||||||
func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
 | 
					func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	proto.RegisterType((*APIGroup)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIGroup")
 | 
						proto.RegisterType((*APIGroup)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIGroup")
 | 
				
			||||||
@@ -219,6 +224,7 @@ func init() {
 | 
				
			|||||||
	proto.RegisterType((*LabelSelector)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector")
 | 
						proto.RegisterType((*LabelSelector)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector")
 | 
				
			||||||
	proto.RegisterType((*LabelSelectorRequirement)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement")
 | 
						proto.RegisterType((*LabelSelectorRequirement)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement")
 | 
				
			||||||
	proto.RegisterType((*ListMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta")
 | 
						proto.RegisterType((*ListMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta")
 | 
				
			||||||
 | 
						proto.RegisterType((*ListOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListOptions")
 | 
				
			||||||
	proto.RegisterType((*ObjectMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta")
 | 
						proto.RegisterType((*ObjectMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta")
 | 
				
			||||||
	proto.RegisterType((*OwnerReference)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.OwnerReference")
 | 
						proto.RegisterType((*OwnerReference)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.OwnerReference")
 | 
				
			||||||
	proto.RegisterType((*RootPaths)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.RootPaths")
 | 
						proto.RegisterType((*RootPaths)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.RootPaths")
 | 
				
			||||||
@@ -794,6 +800,49 @@ func (m *ListMeta) MarshalTo(data []byte) (int, error) {
 | 
				
			|||||||
	return i, nil
 | 
						return i, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *ListOptions) Marshal() (data []byte, err error) {
 | 
				
			||||||
 | 
						size := m.Size()
 | 
				
			||||||
 | 
						data = make([]byte, size)
 | 
				
			||||||
 | 
						n, err := m.MarshalTo(data)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return data[:n], nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *ListOptions) MarshalTo(data []byte) (int, error) {
 | 
				
			||||||
 | 
						var i int
 | 
				
			||||||
 | 
						_ = i
 | 
				
			||||||
 | 
						var l int
 | 
				
			||||||
 | 
						_ = l
 | 
				
			||||||
 | 
						data[i] = 0xa
 | 
				
			||||||
 | 
						i++
 | 
				
			||||||
 | 
						i = encodeVarintGenerated(data, i, uint64(len(m.LabelSelector)))
 | 
				
			||||||
 | 
						i += copy(data[i:], m.LabelSelector)
 | 
				
			||||||
 | 
						data[i] = 0x12
 | 
				
			||||||
 | 
						i++
 | 
				
			||||||
 | 
						i = encodeVarintGenerated(data, i, uint64(len(m.FieldSelector)))
 | 
				
			||||||
 | 
						i += copy(data[i:], m.FieldSelector)
 | 
				
			||||||
 | 
						data[i] = 0x18
 | 
				
			||||||
 | 
						i++
 | 
				
			||||||
 | 
						if m.Watch {
 | 
				
			||||||
 | 
							data[i] = 1
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							data[i] = 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						i++
 | 
				
			||||||
 | 
						data[i] = 0x22
 | 
				
			||||||
 | 
						i++
 | 
				
			||||||
 | 
						i = encodeVarintGenerated(data, i, uint64(len(m.ResourceVersion)))
 | 
				
			||||||
 | 
						i += copy(data[i:], m.ResourceVersion)
 | 
				
			||||||
 | 
						if m.TimeoutSeconds != nil {
 | 
				
			||||||
 | 
							data[i] = 0x28
 | 
				
			||||||
 | 
							i++
 | 
				
			||||||
 | 
							i = encodeVarintGenerated(data, i, uint64(*m.TimeoutSeconds))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return i, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *ObjectMeta) Marshal() (data []byte, err error) {
 | 
					func (m *ObjectMeta) Marshal() (data []byte, err error) {
 | 
				
			||||||
	size := m.Size()
 | 
						size := m.Size()
 | 
				
			||||||
	data = make([]byte, size)
 | 
						data = make([]byte, size)
 | 
				
			||||||
@@ -1510,6 +1559,22 @@ func (m *ListMeta) Size() (n int) {
 | 
				
			|||||||
	return n
 | 
						return n
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m *ListOptions) Size() (n int) {
 | 
				
			||||||
 | 
						var l int
 | 
				
			||||||
 | 
						_ = l
 | 
				
			||||||
 | 
						l = len(m.LabelSelector)
 | 
				
			||||||
 | 
						n += 1 + l + sovGenerated(uint64(l))
 | 
				
			||||||
 | 
						l = len(m.FieldSelector)
 | 
				
			||||||
 | 
						n += 1 + l + sovGenerated(uint64(l))
 | 
				
			||||||
 | 
						n += 2
 | 
				
			||||||
 | 
						l = len(m.ResourceVersion)
 | 
				
			||||||
 | 
						n += 1 + l + sovGenerated(uint64(l))
 | 
				
			||||||
 | 
						if m.TimeoutSeconds != nil {
 | 
				
			||||||
 | 
							n += 1 + sovGenerated(uint64(*m.TimeoutSeconds))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return n
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *ObjectMeta) Size() (n int) {
 | 
					func (m *ObjectMeta) Size() (n int) {
 | 
				
			||||||
	var l int
 | 
						var l int
 | 
				
			||||||
	_ = l
 | 
						_ = l
 | 
				
			||||||
@@ -1843,6 +1908,20 @@ func (this *ListMeta) String() string {
 | 
				
			|||||||
	}, "")
 | 
						}, "")
 | 
				
			||||||
	return s
 | 
						return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					func (this *ListOptions) String() string {
 | 
				
			||||||
 | 
						if this == nil {
 | 
				
			||||||
 | 
							return "nil"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						s := strings.Join([]string{`&ListOptions{`,
 | 
				
			||||||
 | 
							`LabelSelector:` + fmt.Sprintf("%v", this.LabelSelector) + `,`,
 | 
				
			||||||
 | 
							`FieldSelector:` + fmt.Sprintf("%v", this.FieldSelector) + `,`,
 | 
				
			||||||
 | 
							`Watch:` + fmt.Sprintf("%v", this.Watch) + `,`,
 | 
				
			||||||
 | 
							`ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`,
 | 
				
			||||||
 | 
							`TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`,
 | 
				
			||||||
 | 
							`}`,
 | 
				
			||||||
 | 
						}, "")
 | 
				
			||||||
 | 
						return s
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
func (this *ObjectMeta) String() string {
 | 
					func (this *ObjectMeta) String() string {
 | 
				
			||||||
	if this == nil {
 | 
						if this == nil {
 | 
				
			||||||
		return "nil"
 | 
							return "nil"
 | 
				
			||||||
@@ -4018,6 +4097,183 @@ func (m *ListMeta) Unmarshal(data []byte) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					func (m *ListOptions) Unmarshal(data []byte) error {
 | 
				
			||||||
 | 
						l := len(data)
 | 
				
			||||||
 | 
						iNdEx := 0
 | 
				
			||||||
 | 
						for iNdEx < l {
 | 
				
			||||||
 | 
							preIndex := iNdEx
 | 
				
			||||||
 | 
							var wire uint64
 | 
				
			||||||
 | 
							for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
								if shift >= 64 {
 | 
				
			||||||
 | 
									return ErrIntOverflowGenerated
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if iNdEx >= l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								b := data[iNdEx]
 | 
				
			||||||
 | 
								iNdEx++
 | 
				
			||||||
 | 
								wire |= (uint64(b) & 0x7F) << shift
 | 
				
			||||||
 | 
								if b < 0x80 {
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fieldNum := int32(wire >> 3)
 | 
				
			||||||
 | 
							wireType := int(wire & 0x7)
 | 
				
			||||||
 | 
							if wireType == 4 {
 | 
				
			||||||
 | 
								return fmt.Errorf("proto: ListOptions: wiretype end group for non-group")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if fieldNum <= 0 {
 | 
				
			||||||
 | 
								return fmt.Errorf("proto: ListOptions: illegal tag %d (wire type %d)", fieldNum, wire)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							switch fieldNum {
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
								if wireType != 2 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var stringLen uint64
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowGenerated
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := data[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									stringLen |= (uint64(b) & 0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								intStringLen := int(stringLen)
 | 
				
			||||||
 | 
								if intStringLen < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthGenerated
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								postIndex := iNdEx + intStringLen
 | 
				
			||||||
 | 
								if postIndex > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.LabelSelector = string(data[iNdEx:postIndex])
 | 
				
			||||||
 | 
								iNdEx = postIndex
 | 
				
			||||||
 | 
							case 2:
 | 
				
			||||||
 | 
								if wireType != 2 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field FieldSelector", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var stringLen uint64
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowGenerated
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := data[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									stringLen |= (uint64(b) & 0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								intStringLen := int(stringLen)
 | 
				
			||||||
 | 
								if intStringLen < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthGenerated
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								postIndex := iNdEx + intStringLen
 | 
				
			||||||
 | 
								if postIndex > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.FieldSelector = string(data[iNdEx:postIndex])
 | 
				
			||||||
 | 
								iNdEx = postIndex
 | 
				
			||||||
 | 
							case 3:
 | 
				
			||||||
 | 
								if wireType != 0 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field Watch", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var v int
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowGenerated
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := data[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									v |= (int(b) & 0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.Watch = bool(v != 0)
 | 
				
			||||||
 | 
							case 4:
 | 
				
			||||||
 | 
								if wireType != 2 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var stringLen uint64
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowGenerated
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := data[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									stringLen |= (uint64(b) & 0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								intStringLen := int(stringLen)
 | 
				
			||||||
 | 
								if intStringLen < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthGenerated
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								postIndex := iNdEx + intStringLen
 | 
				
			||||||
 | 
								if postIndex > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.ResourceVersion = string(data[iNdEx:postIndex])
 | 
				
			||||||
 | 
								iNdEx = postIndex
 | 
				
			||||||
 | 
							case 5:
 | 
				
			||||||
 | 
								if wireType != 0 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var v int64
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowGenerated
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := data[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									v |= (int64(b) & 0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.TimeoutSeconds = &v
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								iNdEx = preIndex
 | 
				
			||||||
 | 
								skippy, err := skipGenerated(data[iNdEx:])
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if skippy < 0 {
 | 
				
			||||||
 | 
									return ErrInvalidLengthGenerated
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (iNdEx + skippy) > l {
 | 
				
			||||||
 | 
									return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								iNdEx += skippy
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if iNdEx > l {
 | 
				
			||||||
 | 
							return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
func (m *ObjectMeta) Unmarshal(data []byte) error {
 | 
					func (m *ObjectMeta) Unmarshal(data []byte) error {
 | 
				
			||||||
	l := len(data)
 | 
						l := len(data)
 | 
				
			||||||
	iNdEx := 0
 | 
						iNdEx := 0
 | 
				
			||||||
@@ -6062,126 +6318,130 @@ var (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fileDescriptorGenerated = []byte{
 | 
					var fileDescriptorGenerated = []byte{
 | 
				
			||||||
	// 1922 bytes of a gzipped FileDescriptorProto
 | 
						// 1992 bytes of a gzipped FileDescriptorProto
 | 
				
			||||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x58, 0x4f, 0x6f, 0x23, 0x49,
 | 
						0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x19, 0x4d, 0x6f, 0x23, 0x49,
 | 
				
			||||||
	0x15, 0x77, 0xdb, 0xb1, 0xc7, 0x7e, 0x8e, 0x27, 0x49, 0x31, 0x23, 0xbc, 0x91, 0xb0, 0xb3, 0xbd,
 | 
						0xd5, 0xed, 0xaf, 0xb1, 0x9f, 0xf3, 0x59, 0xcc, 0x08, 0x6f, 0x24, 0xec, 0x6c, 0xef, 0x0a, 0xcd,
 | 
				
			||||||
	0x2b, 0x34, 0x0b, 0xbb, 0x36, 0x09, 0xb0, 0x1a, 0x06, 0x58, 0x14, 0xc7, 0x99, 0x28, 0xda, 0xc9,
 | 
						0xc2, 0xae, 0x4d, 0x02, 0xac, 0x86, 0x01, 0x16, 0xc5, 0x71, 0x26, 0x8a, 0x76, 0x32, 0x13, 0x55,
 | 
				
			||||||
	0x4c, 0x54, 0xd9, 0x19, 0xc4, 0x32, 0x42, 0x74, 0xba, 0x2b, 0x4e, 0x93, 0x76, 0x77, 0x53, 0x55,
 | 
						0x76, 0x06, 0xb1, 0x8c, 0x10, 0x9d, 0xee, 0x8a, 0xd3, 0xa4, 0xdd, 0x6d, 0xaa, 0xca, 0x9e, 0x98,
 | 
				
			||||||
	0xf6, 0xc4, 0xec, 0x81, 0x95, 0x00, 0x89, 0x03, 0x42, 0x73, 0xe4, 0x80, 0xd0, 0x8e, 0xe0, 0x13,
 | 
						0x3d, 0xb0, 0x12, 0x20, 0x71, 0x40, 0x68, 0x8e, 0x1c, 0x10, 0xda, 0x11, 0xdc, 0xb8, 0xf1, 0x27,
 | 
				
			||||||
	0xf0, 0x25, 0x98, 0xe3, 0x4a, 0x7b, 0xe1, 0x80, 0x22, 0x26, 0x1c, 0x38, 0x72, 0x8f, 0x38, 0xa0,
 | 
						0x98, 0xe3, 0x4a, 0x7b, 0xe1, 0x80, 0x2c, 0x26, 0x1c, 0x38, 0x72, 0x8f, 0x38, 0xa0, 0xaa, 0xae,
 | 
				
			||||||
	0xaa, 0xae, 0xea, 0x3f, 0xce, 0x78, 0xd3, 0x66, 0xf7, 0xb0, 0x27, 0x77, 0xbd, 0x3f, 0xbf, 0xf7,
 | 
						0xea, 0x0f, 0x27, 0xde, 0xb4, 0xd9, 0x3d, 0x70, 0x4a, 0xd7, 0xfb, 0xae, 0xf7, 0x5e, 0xbd, 0x0f,
 | 
				
			||||||
	0xea, 0xd5, 0xab, 0x57, 0xef, 0x19, 0xf6, 0x4e, 0x6e, 0xb3, 0x8e, 0x1b, 0x74, 0x4f, 0x46, 0x87,
 | 
						0x07, 0xf6, 0x4f, 0xef, 0xb0, 0x96, 0x1b, 0xb4, 0x4f, 0x87, 0x47, 0x84, 0xfa, 0x84, 0x13, 0xd6,
 | 
				
			||||||
	0x84, 0xfa, 0x84, 0x13, 0xd6, 0x1d, 0x13, 0xdf, 0x09, 0x68, 0x57, 0x31, 0xac, 0xd0, 0x1d, 0x5a,
 | 
						0x1e, 0x11, 0xdf, 0x09, 0x68, 0x5b, 0x21, 0xac, 0x81, 0xdb, 0xb7, 0xec, 0x13, 0xd7, 0x27, 0x74,
 | 
				
			||||||
	0xf6, 0xb1, 0xeb, 0x13, 0x3a, 0xe9, 0x86, 0x27, 0x03, 0x41, 0x60, 0xdd, 0x21, 0xe1, 0x56, 0x77,
 | 
						0xdc, 0x1e, 0x9c, 0xf6, 0x04, 0x80, 0xb5, 0xfb, 0x84, 0x5b, 0xed, 0xd1, 0x46, 0xbb, 0x47, 0x7c,
 | 
				
			||||||
	0xbc, 0xde, 0x1d, 0x10, 0x9f, 0x50, 0x8b, 0x13, 0xa7, 0x13, 0xd2, 0x80, 0x07, 0xe8, 0xf5, 0x48,
 | 
						0x42, 0x2d, 0x4e, 0x9c, 0xd6, 0x80, 0x06, 0x3c, 0x40, 0xaf, 0x87, 0x5c, 0xad, 0x24, 0x57, 0x6b,
 | 
				
			||||||
	0xab, 0x93, 0xd6, 0xea, 0x84, 0x27, 0x03, 0x41, 0x60, 0x1d, 0xa1, 0xd5, 0x19, 0xaf, 0xaf, 0xbe,
 | 
						0x70, 0xda, 0x13, 0x00, 0xd6, 0x12, 0x5c, 0xad, 0xd1, 0xc6, 0xda, 0x5b, 0x3d, 0x97, 0x9f, 0x0c,
 | 
				
			||||||
	0x35, 0x70, 0xf9, 0xf1, 0xe8, 0xb0, 0x63, 0x07, 0xc3, 0xee, 0x20, 0x18, 0x04, 0x5d, 0xa9, 0x7c,
 | 
						0x8f, 0x5a, 0x76, 0xd0, 0x6f, 0xf7, 0x82, 0x5e, 0xd0, 0x96, 0xcc, 0x47, 0xc3, 0x63, 0x79, 0x92,
 | 
				
			||||||
	0x38, 0x3a, 0x92, 0x2b, 0xb9, 0x90, 0x5f, 0x11, 0xe8, 0xea, 0x4c, 0x57, 0xe8, 0xc8, 0xe7, 0xee,
 | 
						0x07, 0xf9, 0x15, 0x0a, 0x5d, 0x9b, 0x69, 0x0a, 0x1d, 0xfa, 0xdc, 0xed, 0x93, 0x69, 0x2b, 0xd6,
 | 
				
			||||||
	0x90, 0x4c, 0x7b, 0xb1, 0xfa, 0xf6, 0x55, 0x0a, 0xcc, 0x3e, 0x26, 0x43, 0xeb, 0x92, 0xde, 0xc6,
 | 
						0xde, 0xbe, 0x8e, 0x81, 0xd9, 0x27, 0xa4, 0x6f, 0x5d, 0xe2, 0xdb, 0xbc, 0xec, 0x0c, 0x75, 0xe3,
 | 
				
			||||||
	0xe5, 0x60, 0xa8, 0x1d, 0x77, 0x29, 0x61, 0xc1, 0x88, 0xda, 0x97, 0x6d, 0xad, 0xbf, 0x5c, 0x67,
 | 
						0x36, 0x25, 0x2c, 0x18, 0x52, 0xfb, 0xb2, 0xae, 0x8d, 0xab, 0x79, 0x86, 0xdc, 0xf5, 0xda, 0xae,
 | 
				
			||||||
	0xc4, 0x5d, 0xaf, 0xeb, 0xfa, 0x9c, 0x71, 0x3a, 0xad, 0x62, 0xfe, 0xad, 0x04, 0xd5, 0xcd, 0xfd,
 | 
						0xcf, 0x19, 0xa7, 0xd3, 0x2c, 0xe6, 0x5f, 0x0b, 0x50, 0xd9, 0x3a, 0xd8, 0xdb, 0xa5, 0xc1, 0x70,
 | 
				
			||||||
	0xdd, 0x1d, 0x1a, 0x8c, 0x42, 0xb4, 0x06, 0x0b, 0xbe, 0x35, 0x24, 0x4d, 0x63, 0xcd, 0xb8, 0x55,
 | 
						0x80, 0xd6, 0xa1, 0xe8, 0x5b, 0x7d, 0x52, 0x37, 0xd6, 0x8d, 0xdb, 0xd5, 0xce, 0xc2, 0x8b, 0x49,
 | 
				
			||||||
	0xeb, 0x2d, 0x3e, 0x3f, 0x6b, 0x17, 0xce, 0xcf, 0xda, 0x0b, 0xf7, 0xad, 0x21, 0xc1, 0x92, 0x83,
 | 
						0x33, 0x77, 0x3e, 0x69, 0x16, 0x1f, 0x58, 0x7d, 0x82, 0x25, 0x06, 0x79, 0x50, 0x19, 0x11, 0xca,
 | 
				
			||||||
	0x3c, 0xa8, 0x8e, 0x09, 0x65, 0x6e, 0xe0, 0xb3, 0x66, 0x71, 0xad, 0x74, 0xab, 0xbe, 0xf1, 0x4e,
 | 
						0xdc, 0xc0, 0x67, 0xf5, 0xfc, 0x7a, 0xe1, 0x76, 0x6d, 0xf3, 0x9d, 0x56, 0x16, 0x37, 0xb7, 0xa4,
 | 
				
			||||||
	0x27, 0x4f, 0x98, 0x3b, 0xd2, 0xc0, 0xa3, 0x48, 0xf5, 0x6e, 0x40, 0xfb, 0x2e, 0xb3, 0x83, 0x31,
 | 
						0x82, 0xc7, 0x21, 0xeb, 0xbd, 0x80, 0x76, 0x5d, 0x66, 0x07, 0x23, 0x42, 0xc7, 0x9d, 0x15, 0xa5,
 | 
				
			||||||
	0xa1, 0x93, 0xde, 0xb2, 0xb2, 0x52, 0x55, 0x4c, 0x86, 0x63, 0x0b, 0xe8, 0xd7, 0x06, 0x2c, 0x87,
 | 
						0xa5, 0xa2, 0x90, 0x0c, 0x47, 0x1a, 0xd0, 0x2f, 0x0d, 0x58, 0x19, 0x50, 0x72, 0x4c, 0x28, 0x25,
 | 
				
			||||||
	0x94, 0x1c, 0x11, 0x4a, 0x89, 0xa3, 0xf8, 0xcd, 0xd2, 0x9a, 0xf1, 0x39, 0x98, 0x6d, 0x2a, 0xb3,
 | 
						0x8e, 0xc2, 0xd7, 0x0b, 0xeb, 0xc6, 0xe7, 0xa0, 0xb6, 0xae, 0xd4, 0xae, 0x1c, 0x4c, 0xc9, 0xc7,
 | 
				
			||||||
	0xcb, 0xfb, 0x53, 0xf8, 0xf8, 0x92, 0x45, 0xf4, 0x67, 0x03, 0x56, 0x19, 0xa1, 0x63, 0x42, 0x37,
 | 
						0x97, 0x34, 0xa2, 0x3f, 0x1a, 0xb0, 0xc6, 0x08, 0x1d, 0x11, 0xba, 0xe5, 0x38, 0x94, 0x30, 0xd6,
 | 
				
			||||||
	0x1d, 0x87, 0x12, 0xc6, 0x7a, 0x93, 0x2d, 0xcf, 0x25, 0x3e, 0xdf, 0xda, 0xed, 0x63, 0xd6, 0x5c,
 | 
						0x19, 0x6f, 0x7b, 0x2e, 0xf1, 0xf9, 0xf6, 0x5e, 0x17, 0xb3, 0x7a, 0x51, 0xfa, 0xe1, 0x7b, 0xd9,
 | 
				
			||||||
	0x90, 0x71, 0xf8, 0x41, 0x3e, 0x87, 0x0e, 0x66, 0xe1, 0xf4, 0x4c, 0xe5, 0xd1, 0xea, 0x4c, 0x11,
 | 
						0x0c, 0x3a, 0x9c, 0x25, 0xa7, 0x63, 0x2a, 0x8b, 0xd6, 0x66, 0x92, 0x30, 0xfc, 0x29, 0x66, 0x98,
 | 
				
			||||||
	0x86, 0x3f, 0xc5, 0x0d, 0xf3, 0x08, 0x16, 0xf5, 0x41, 0xde, 0x73, 0x19, 0x47, 0x8f, 0xa0, 0x32,
 | 
						0xc7, 0xb0, 0xa0, 0x03, 0x79, 0xdf, 0x65, 0x1c, 0x3d, 0x86, 0x72, 0x4f, 0x1c, 0x58, 0xdd, 0x90,
 | 
				
			||||||
	0x10, 0x0b, 0xd6, 0x34, 0xa4, 0x83, 0x9d, 0x7c, 0x0e, 0x6a, 0x8c, 0xde, 0x75, 0xe5, 0x4f, 0x45,
 | 
						0x06, 0xb6, 0xb2, 0x19, 0xa8, 0x65, 0x74, 0x96, 0x94, 0x3d, 0x65, 0x79, 0x64, 0x58, 0x49, 0x33,
 | 
				
			||||||
	0x2e, 0x19, 0x56, 0x68, 0xe6, 0x27, 0x06, 0xd4, 0x37, 0xf7, 0x77, 0xb1, 0x4a, 0xc2, 0x1c, 0x49,
 | 
						0x3f, 0x31, 0xa0, 0xb6, 0x75, 0xb0, 0x87, 0x55, 0x12, 0x66, 0x48, 0x9a, 0x4d, 0x00, 0xf1, 0x97,
 | 
				
			||||||
	0xb3, 0x01, 0x20, 0x7e, 0x59, 0x68, 0xd9, 0xc4, 0x69, 0x16, 0xd7, 0x8c, 0x5b, 0xd5, 0x1e, 0x52,
 | 
						0x0d, 0x2c, 0x9b, 0x38, 0xf5, 0xfc, 0xba, 0x71, 0xbb, 0xd2, 0x41, 0x8a, 0x0e, 0x1e, 0x44, 0x18,
 | 
				
			||||||
	0x72, 0x70, 0x3f, 0xe6, 0xe0, 0x94, 0x94, 0x40, 0x3d, 0x71, 0x7d, 0x47, 0x9e, 0x76, 0x0a, 0xf5,
 | 
						0x9c, 0xa0, 0x12, 0x52, 0x4f, 0x5d, 0xdf, 0x91, 0xd1, 0x4e, 0x48, 0x7d, 0xd7, 0xf5, 0x1d, 0x2c,
 | 
				
			||||||
	0x5d, 0xd7, 0x77, 0xb0, 0xe4, 0xa0, 0x7b, 0x50, 0x1e, 0x13, 0x7a, 0x28, 0xe2, 0x2f, 0x12, 0xe2,
 | 
						0x31, 0xe8, 0x3e, 0x94, 0x46, 0x84, 0x1e, 0x09, 0xff, 0x8b, 0x84, 0xf8, 0x6a, 0xb6, 0xeb, 0x3d,
 | 
				
			||||||
	0xeb, 0xf9, 0xb6, 0xf7, 0x48, 0xa8, 0xf4, 0x6a, 0xe7, 0x67, 0xed, 0xb2, 0xfc, 0xc4, 0x11, 0x88,
 | 
						0x16, 0x2c, 0x9d, 0xea, 0xf9, 0xa4, 0x59, 0x92, 0x9f, 0x38, 0x14, 0x62, 0xfe, 0xc5, 0x80, 0xe5,
 | 
				
			||||||
	0xf9, 0x57, 0x03, 0x96, 0x52, 0xbb, 0x92, 0x11, 0xbc, 0x0d, 0x8b, 0x83, 0x54, 0xfe, 0xa8, 0x1d,
 | 
						0xc4, 0xad, 0xa4, 0x07, 0xef, 0xc0, 0x42, 0x2f, 0x91, 0x3f, 0xea, 0x86, 0x37, 0x95, 0x2d, 0x0b,
 | 
				
			||||||
	0xde, 0x50, 0xbe, 0x2c, 0xa6, 0x73, 0x0b, 0x67, 0x24, 0x11, 0x81, 0x9a, 0xbe, 0xa4, 0xfa, 0x9e,
 | 
						0xc9, 0xdc, 0xc2, 0x29, 0x4a, 0x44, 0xa0, 0xaa, 0x1f, 0xa9, 0x7e, 0x27, 0x1b, 0x99, 0xdd, 0xaf,
 | 
				
			||||||
	0xac, 0xe7, 0x0e, 0xbf, 0xf6, 0x21, 0xb1, 0x94, 0x22, 0x32, 0x9c, 0x20, 0x9b, 0xff, 0x8e, 0x8e,
 | 
						0x6d, 0x88, 0x35, 0x25, 0x80, 0x0c, 0xc7, 0x92, 0xcd, 0x7f, 0x85, 0xa1, 0xd0, 0x2f, 0x07, 0xdd,
 | 
				
			||||||
	0x42, 0xdf, 0x1c, 0x74, 0x2b, 0x75, 0x3b, 0xc5, 0xa1, 0xd7, 0x7a, 0x8b, 0x33, 0x6e, 0xd6, 0x15,
 | 
						0x4e, 0xbc, 0x4e, 0x11, 0xf4, 0x6a, 0x67, 0x61, 0xc6, 0xcb, 0xba, 0x26, 0xa5, 0xf3, 0xff, 0x17,
 | 
				
			||||||
	0x29, 0x5d, 0xfc, 0x42, 0xa4, 0xf4, 0x9d, 0xea, 0x1f, 0x3e, 0x6a, 0x17, 0x3e, 0xfc, 0xc7, 0x5a,
 | 
						0x29, 0x7d, 0xb7, 0xf2, 0xbb, 0x8f, 0x9a, 0xb9, 0x0f, 0xff, 0xbe, 0x9e, 0x33, 0xf7, 0xa0, 0xd2,
 | 
				
			||||||
	0xc1, 0xdc, 0x85, 0x6a, 0x7f, 0x44, 0x2d, 0x2e, 0x82, 0xfb, 0x7d, 0xa8, 0x3a, 0xea, 0x5b, 0x1e,
 | 
						0x1d, 0x52, 0x8b, 0x0b, 0xe7, 0x7e, 0x17, 0x2a, 0x8e, 0xfa, 0x96, 0x21, 0x29, 0x74, 0x5e, 0xd5,
 | 
				
			||||||
	0x49, 0xa9, 0xf7, 0xaa, 0xae, 0x21, 0x5a, 0xe6, 0xe2, 0xac, 0xdd, 0x10, 0xc5, 0xb5, 0xa3, 0x09,
 | 
						0x35, 0x44, 0xd3, 0x5c, 0x4c, 0x9a, 0x8b, 0xa2, 0xb8, 0xb6, 0x34, 0x00, 0x47, 0x2c, 0xe6, 0x13,
 | 
				
			||||||
	0x38, 0x56, 0x31, 0x1f, 0x43, 0x63, 0xfb, 0x34, 0x0c, 0x28, 0x7f, 0x10, 0x72, 0x19, 0x8b, 0xaf,
 | 
						0x58, 0xdc, 0x39, 0x1b, 0x04, 0x94, 0x3f, 0x1c, 0x70, 0xe9, 0x8b, 0x2f, 0x43, 0x99, 0x48, 0x80,
 | 
				
			||||||
	0x42, 0x85, 0x48, 0x82, 0x44, 0xab, 0x26, 0x89, 0x1f, 0x89, 0x61, 0xc5, 0x45, 0xaf, 0x41, 0x99,
 | 
						0x94, 0x56, 0x89, 0x13, 0x3f, 0x24, 0xc3, 0x0a, 0x8b, 0x5e, 0x83, 0x12, 0x39, 0xb3, 0x6c, 0xae,
 | 
				
			||||||
	0x9c, 0x5a, 0x36, 0x57, 0x19, 0xdc, 0x50, 0x62, 0xe5, 0x6d, 0x41, 0xc4, 0x11, 0xcf, 0x7c, 0x00,
 | 
						0x32, 0x78, 0x51, 0x91, 0x95, 0x76, 0x04, 0x10, 0x87, 0x38, 0xf3, 0x21, 0xc0, 0x2e, 0x89, 0x44,
 | 
				
			||||||
	0xb0, 0x43, 0x62, 0xe8, 0x4d, 0x58, 0xd2, 0xa7, 0x95, 0x4d, 0xa2, 0x2f, 0x2b, 0xe5, 0x25, 0x9c,
 | 
						0x6f, 0xc1, 0xb2, 0x8e, 0x56, 0x3a, 0x89, 0xbe, 0xa8, 0x98, 0x97, 0x71, 0x1a, 0x8d, 0xa7, 0xe9,
 | 
				
			||||||
	0x65, 0xe3, 0x69, 0x79, 0xf3, 0x31, 0xd4, 0x64, 0xa2, 0x89, 0xcc, 0x17, 0x2e, 0xc8, 0x3c, 0x53,
 | 
						0xcd, 0x27, 0x50, 0x95, 0x89, 0x26, 0x32, 0x5f, 0x98, 0x20, 0xf3, 0x4c, 0x49, 0x89, 0x4c, 0x90,
 | 
				
			||||||
	0x28, 0xb1, 0x0b, 0x52, 0x02, 0x47, 0xbc, 0xf8, 0xea, 0x14, 0x67, 0x5d, 0x9d, 0x54, 0x5c, 0x3d,
 | 
						0x14, 0x38, 0xc4, 0x45, 0x4f, 0x27, 0x3f, 0xeb, 0xe9, 0x24, 0xfc, 0xea, 0xc1, 0x62, 0xc8, 0xab,
 | 
				
			||||||
	0x68, 0x44, 0xba, 0xfa, 0x36, 0xe7, 0xb2, 0xf0, 0x26, 0x54, 0xb5, 0x9b, 0xca, 0x4a, 0x5c, 0xc5,
 | 
						0x5f, 0x73, 0x26, 0x0d, 0x6f, 0x42, 0x45, 0x9b, 0xa9, 0xb4, 0x44, 0x55, 0x5c, 0x0b, 0xc2, 0x11,
 | 
				
			||||||
	0x35, 0x10, 0x8e, 0x25, 0x52, 0xd6, 0x8e, 0x21, 0x73, 0x69, 0xf2, 0x19, 0x7b, 0x03, 0xae, 0xa9,
 | 
						0x45, 0x42, 0xdb, 0x09, 0xa4, 0x1e, 0x4d, 0x36, 0x65, 0x6f, 0xc0, 0x0d, 0x95, 0xb6, 0x4a, 0xd7,
 | 
				
			||||||
	0xb4, 0x55, 0xb6, 0x96, 0x94, 0xd8, 0x35, 0x1d, 0x33, 0xcd, 0x4f, 0x59, 0xfa, 0x25, 0x34, 0x67,
 | 
						0xb2, 0x22, 0xbb, 0xa1, 0x7d, 0xa6, 0xf1, 0x09, 0x4d, 0x3f, 0x87, 0xfa, 0xac, 0xd2, 0xff, 0x19,
 | 
				
			||||||
	0x95, 0xfe, 0xcf, 0x70, 0xad, 0xf3, 0xbb, 0x62, 0xfe, 0xde, 0x80, 0xe5, 0x34, 0x52, 0xfe, 0xe3,
 | 
						0x9e, 0x75, 0x76, 0x53, 0xcc, 0xdf, 0x1a, 0xb0, 0x92, 0x94, 0x94, 0x3d, 0x7c, 0xd9, 0x95, 0x5c,
 | 
				
			||||||
	0xcb, 0x6f, 0xe4, 0xea, 0x22, 0x99, 0x8a, 0xc8, 0x9f, 0x0c, 0xb8, 0x91, 0xd9, 0xda, 0x5c, 0x27,
 | 
						0x5f, 0x24, 0x13, 0x1e, 0xf9, 0x83, 0x01, 0x37, 0x53, 0x57, 0x9b, 0x2b, 0xe2, 0x73, 0x18, 0x95,
 | 
				
			||||||
	0x3e, 0x87, 0x53, 0xe9, 0xe4, 0x28, 0xcd, 0x91, 0x1c, 0x9f, 0x14, 0xa1, 0x71, 0xcf, 0x3a, 0x24,
 | 
						0x4c, 0x8e, 0xc2, 0x1c, 0xc9, 0xf1, 0x49, 0x1e, 0x16, 0xef, 0x5b, 0x47, 0xc4, 0x3b, 0x24, 0x1e,
 | 
				
			||||||
	0xde, 0x01, 0xf1, 0x88, 0xcd, 0x03, 0x8a, 0x3e, 0x80, 0xfa, 0xd0, 0xe2, 0xf6, 0xb1, 0xa4, 0xea,
 | 
						0xb1, 0x79, 0x40, 0xd1, 0x07, 0x50, 0xeb, 0x5b, 0xdc, 0x3e, 0x91, 0x50, 0xdd, 0xc6, 0xba, 0xd9,
 | 
				
			||||||
	0x67, 0xac, 0x9f, 0xaf, 0x28, 0x65, 0x90, 0x3a, 0x7b, 0x09, 0xcc, 0xb6, 0xcf, 0xe9, 0xa4, 0xf7,
 | 
						0x8a, 0x52, 0x4a, 0x52, 0x6b, 0x3f, 0x16, 0xb3, 0xe3, 0x73, 0x3a, 0xee, 0x7c, 0x41, 0x99, 0x54,
 | 
				
			||||||
	0x25, 0xe5, 0x52, 0x3d, 0xc5, 0xc1, 0x69, 0x6b, 0xb2, 0xf7, 0x90, 0xeb, 0xed, 0xd3, 0x50, 0x54,
 | 
						0x4b, 0x60, 0x70, 0x52, 0x9b, 0x9c, 0x3d, 0xe4, 0x79, 0xe7, 0x6c, 0x20, 0x2a, 0xd3, 0xfc, 0x23,
 | 
				
			||||||
	0xa6, 0xf9, 0x5b, 0x9e, 0x8c, 0x0b, 0x98, 0xfc, 0x7c, 0xe4, 0x52, 0x32, 0x24, 0x3e, 0x4f, 0x7a,
 | 
						0x4f, 0xca, 0x04, 0x4c, 0x7e, 0x3a, 0x74, 0x29, 0xe9, 0x13, 0x9f, 0xc7, 0xb3, 0xc7, 0xfe, 0x94,
 | 
				
			||||||
	0x8f, 0xbd, 0x29, 0x7c, 0x7c, 0xc9, 0xe2, 0xea, 0x3b, 0xb0, 0x3c, 0xed, 0x3c, 0x5a, 0x86, 0xd2,
 | 
						0x7c, 0x7c, 0x49, 0xe3, 0xda, 0x3b, 0xb0, 0x32, 0x6d, 0x3c, 0x5a, 0x81, 0xc2, 0x29, 0x19, 0x87,
 | 
				
			||||||
	0x09, 0x99, 0x44, 0xe7, 0x85, 0xc5, 0x27, 0xba, 0x01, 0xe5, 0xb1, 0xe5, 0x8d, 0xd4, 0x6d, 0xc4,
 | 
						0xf1, 0xc2, 0xe2, 0x13, 0xdd, 0x84, 0xd2, 0xc8, 0xf2, 0x86, 0xea, 0x35, 0xe2, 0xf0, 0x70, 0x37,
 | 
				
			||||||
	0xd1, 0xe2, 0x4e, 0xf1, 0xb6, 0x61, 0xfe, 0xc5, 0x80, 0xe6, 0x2c, 0x47, 0xd0, 0x57, 0x52, 0x40,
 | 
						0x7f, 0xc7, 0x30, 0xff, 0x64, 0x40, 0x7d, 0x96, 0x21, 0xe8, 0x4b, 0x09, 0x41, 0x9d, 0x9a, 0xb2,
 | 
				
			||||||
	0xbd, 0xba, 0xf2, 0xaa, 0xf4, 0x2e, 0x99, 0x44, 0xa8, 0xdb, 0x50, 0x0d, 0x42, 0xd1, 0x2d, 0x06,
 | 
						0xaa, 0xf0, 0x2e, 0x19, 0x87, 0x52, 0x77, 0xa0, 0x12, 0x0c, 0xc4, 0xb4, 0x18, 0x50, 0x15, 0xf5,
 | 
				
			||||||
	0x54, 0x9d, 0xfa, 0x1b, 0xfa, 0x24, 0x1f, 0x28, 0xfa, 0xc5, 0x59, 0xfb, 0x66, 0x06, 0x5e, 0x33,
 | 
						0x37, 0x74, 0x24, 0x1f, 0x2a, 0xf8, 0xc5, 0xa4, 0x79, 0x2b, 0x25, 0x5e, 0x23, 0x70, 0xc4, 0x8a,
 | 
				
			||||||
	0x70, 0xac, 0x8a, 0x4c, 0xa8, 0x48, 0x7f, 0x58, 0xb3, 0x24, 0xdf, 0x24, 0x10, 0xb5, 0xf5, 0x91,
 | 
						0x4c, 0x28, 0x4b, 0x7b, 0x58, 0xbd, 0x20, 0x7b, 0x12, 0x88, 0xda, 0xfa, 0x58, 0x42, 0xb0, 0xc2,
 | 
				
			||||||
	0xa4, 0x60, 0xc5, 0x31, 0x3f, 0x80, 0xaa, 0x78, 0x72, 0xf7, 0x08, 0xb7, 0x44, 0x02, 0x31, 0xe2,
 | 
						0x98, 0x1f, 0x40, 0x45, 0xb4, 0xdc, 0x7d, 0xc2, 0x2d, 0x91, 0x40, 0x8c, 0x78, 0xc7, 0xf7, 0x5d,
 | 
				
			||||||
	0x1d, 0xdd, 0x73, 0xfd, 0x13, 0xe5, 0x5a, 0x9c, 0x40, 0x07, 0x8a, 0x8e, 0x63, 0x89, 0x97, 0x95,
 | 
						0xff, 0x54, 0x99, 0x16, 0x25, 0xd0, 0xa1, 0x82, 0xe3, 0x88, 0xe2, 0xaa, 0x12, 0x9b, 0x9f, 0xb3,
 | 
				
			||||||
	0xd8, 0xe2, 0x9c, 0x25, 0xf6, 0x57, 0x00, 0xf0, 0xe0, 0xf0, 0x67, 0xc4, 0x8e, 0xec, 0x5f, 0xdd,
 | 
						0xc4, 0xfe, 0x39, 0x0f, 0x35, 0xa1, 0x5d, 0x57, 0xed, 0x6f, 0xc3, 0xa2, 0x97, 0xbc, 0x93, 0xb2,
 | 
				
			||||||
	0xd0, 0x88, 0x0a, 0xa2, 0xfa, 0x68, 0x41, 0x55, 0x06, 0x93, 0x0a, 0x92, 0xe2, 0xe1, 0x8c, 0x24,
 | 
						0xe2, 0x96, 0x12, 0x98, 0xce, 0x52, 0x9c, 0xa6, 0x15, 0xcc, 0xc7, 0x2e, 0xf1, 0x9c, 0x88, 0x39,
 | 
				
			||||||
	0xea, 0x42, 0x2d, 0x6e, 0x72, 0xd4, 0xed, 0x58, 0x51, 0x6a, 0xb5, 0xb8, 0x13, 0xc2, 0x89, 0x4c,
 | 
						0x9f, 0x66, 0xbe, 0x97, 0x44, 0xe2, 0x34, 0xad, 0x78, 0x8b, 0x4f, 0x45, 0xb4, 0xe5, 0xc3, 0x49,
 | 
				
			||||||
	0x26, 0x18, 0x0b, 0x57, 0x06, 0xa3, 0x07, 0xa5, 0x91, 0xeb, 0x34, 0xcb, 0x52, 0xf0, 0x1b, 0xfa,
 | 
						0xb4, 0x98, 0xef, 0x0b, 0x20, 0x0e, 0x71, 0x57, 0xdd, 0xb8, 0x38, 0xdf, 0x8d, 0xd1, 0x5d, 0x58,
 | 
				
			||||||
	0x40, 0x1f, 0xee, 0xf6, 0x2f, 0xce, 0xda, 0xaf, 0xce, 0x1a, 0x44, 0xf8, 0x24, 0x24, 0xac, 0xf3,
 | 
						0x12, 0xed, 0x31, 0x18, 0xf2, 0x43, 0x62, 0x07, 0xbe, 0xc3, 0xea, 0x25, 0xd9, 0x48, 0xd1, 0xf9,
 | 
				
			||||||
	0x70, 0xb7, 0x8f, 0x85, 0xf2, 0xcb, 0x02, 0x5a, 0x99, 0x2f, 0xa0, 0xa2, 0xe1, 0x53, 0xbb, 0x16,
 | 
						0xa4, 0xb9, 0xf4, 0x5e, 0x0a, 0x83, 0xa7, 0x28, 0xcd, 0x5f, 0x00, 0xc0, 0xc3, 0xa3, 0x9f, 0x10,
 | 
				
			||||||
	0xda, 0xd7, 0xe4, 0x1b, 0x1d, 0x37, 0x7c, 0x3b, 0x31, 0x07, 0xa7, 0xa4, 0x10, 0x83, 0x15, 0x9b,
 | 
						0x3b, 0x8c, 0xd6, 0xf5, 0xe3, 0x9f, 0xa8, 0xb7, 0x6a, 0xeb, 0x10, 0x50, 0xe5, 0x90, 0xb8, 0xde,
 | 
				
			||||||
	0x12, 0xf9, 0xfd, 0x9e, 0x3b, 0x24, 0x8c, 0x5b, 0xc3, 0xb0, 0x59, 0x95, 0xad, 0xdd, 0xd7, 0xf2,
 | 
						0x26, 0x70, 0x38, 0x45, 0x89, 0xda, 0x50, 0x8d, 0x46, 0x42, 0x55, 0x4b, 0x56, 0x15, 0x5b, 0x35,
 | 
				
			||||||
	0xdd, 0x37, 0xa1, 0xd6, 0x7b, 0x45, 0x99, 0x59, 0xd9, 0x9a, 0x06, 0xc3, 0x97, 0xf1, 0x51, 0x00,
 | 
						0x9a, 0x1b, 0x71, 0x4c, 0x93, 0x4a, 0x9d, 0xe2, 0xb5, 0xa9, 0xd3, 0x81, 0xc2, 0xd0, 0x75, 0xe4,
 | 
				
			||||||
	0x2b, 0x0e, 0xf1, 0x48, 0xd6, 0x68, 0x6d, 0x6e, 0xa3, 0x37, 0x85, 0xc1, 0xfe, 0x34, 0x10, 0xbe,
 | 
						0xd5, 0xab, 0x9d, 0xaf, 0xe9, 0xf4, 0x7f, 0xb4, 0xd7, 0xbd, 0x98, 0x34, 0x5f, 0x9d, 0xb5, 0xb6,
 | 
				
			||||||
	0x8c, 0x8d, 0x7e, 0x02, 0xab, 0x9a, 0xb8, 0x43, 0x2d, 0x9b, 0xec, 0x13, 0xea, 0x06, 0xce, 0x01,
 | 
						0xf1, 0xf1, 0x80, 0xb0, 0xd6, 0xa3, 0xbd, 0x2e, 0x16, 0xcc, 0x57, 0x05, 0xa3, 0x3c, 0x67, 0x30,
 | 
				
			||||||
	0xb1, 0x03, 0xdf, 0x61, 0x4d, 0x90, 0x91, 0x6a, 0x89, 0x8e, 0xa9, 0x3f, 0x53, 0x0a, 0x7f, 0x0a,
 | 
						0x36, 0x01, 0xd4, 0xad, 0x05, 0xf7, 0x8d, 0x30, 0x10, 0x7a, 0x3c, 0xde, 0x8d, 0x30, 0x38, 0x41,
 | 
				
			||||||
	0x02, 0x72, 0xa0, 0xe2, 0x45, 0xd5, 0xb2, 0x2e, 0x4b, 0xd5, 0xf7, 0xf2, 0xed, 0x22, 0xc9, 0xfe,
 | 
						0x85, 0x18, 0xac, 0xda, 0x94, 0xc8, 0x6f, 0x11, 0x2e, 0xc6, 0xad, 0xfe, 0xa0, 0x5e, 0x91, 0x83,
 | 
				
			||||||
	0x4e, 0xba, 0x4a, 0xc6, 0x9d, 0x90, 0x2a, 0x90, 0x0a, 0x1b, 0x9d, 0x42, 0xdd, 0xf2, 0xfd, 0x80,
 | 
						0xf0, 0x57, 0xb2, 0x55, 0x27, 0xc1, 0xd6, 0x79, 0x45, 0xa9, 0x59, 0xdd, 0x9e, 0x16, 0x86, 0x2f,
 | 
				
			||||||
	0xcb, 0x68, 0xb2, 0xe6, 0xa2, 0x34, 0xb5, 0x39, 0xb7, 0xa9, 0xcd, 0x04, 0x63, 0xaa, 0x2a, 0xa7,
 | 
						0xcb, 0x47, 0x01, 0xac, 0x3a, 0xc4, 0x23, 0x69, 0xa5, 0xd5, 0xb9, 0x95, 0xde, 0x12, 0x0a, 0xbb,
 | 
				
			||||||
	0x38, 0x38, 0x6d, 0x0a, 0x3d, 0x81, 0xa5, 0xe0, 0x89, 0x4f, 0x28, 0x16, 0x23, 0x1a, 0xf1, 0x45,
 | 
						0xd3, 0x82, 0xf0, 0x65, 0xd9, 0xe8, 0x47, 0xb0, 0xa6, 0x81, 0xbb, 0xd4, 0xb2, 0xc9, 0x01, 0xa1,
 | 
				
			||||||
	0x7b, 0xdd, 0x90, 0xd6, 0xbf, 0x95, 0xd3, 0x7a, 0x46, 0x39, 0x49, 0xe9, 0x2c, 0x9d, 0xe1, 0x69,
 | 
						0x6e, 0xe0, 0xe8, 0x94, 0x05, 0xe9, 0xa9, 0x86, 0x98, 0x2f, 0xbb, 0x33, 0xa9, 0xf0, 0xa7, 0x48,
 | 
				
			||||||
	0x2b, 0xa8, 0x03, 0x70, 0xe4, 0xfa, 0x96, 0xe7, 0xfe, 0x82, 0x50, 0xd6, 0xbc, 0x2e, 0x0b, 0xd9,
 | 
						0x40, 0x0e, 0x94, 0xbd, 0xb0, 0xb7, 0xd4, 0x64, 0x61, 0xff, 0x4e, 0xb6, 0x5b, 0xc4, 0xd9, 0xdf,
 | 
				
			||||||
	0x75, 0x91, 0xce, 0x77, 0x63, 0x2a, 0x4e, 0x49, 0xa0, 0x6f, 0x43, 0xdd, 0xf6, 0x46, 0x8c, 0x13,
 | 
						0x4a, 0xf6, 0x94, 0x68, 0x6e, 0x54, 0xed, 0x44, 0xc9, 0x46, 0x67, 0x50, 0xb3, 0x7c, 0x3f, 0xe0,
 | 
				
			||||||
	0x2a, 0x2b, 0xc4, 0x92, 0xbc, 0x41, 0xf1, 0xfe, 0xb6, 0x12, 0x16, 0x4e, 0xcb, 0xad, 0x7e, 0x07,
 | 
						0xd2, 0x9b, 0xac, 0xbe, 0x20, 0x55, 0x6d, 0xcd, 0xad, 0x6a, 0x2b, 0x96, 0x31, 0xd5, 0xc3, 0x12,
 | 
				
			||||||
	0xea, 0xff, 0x67, 0xa5, 0x17, 0x2f, 0xc5, 0x74, 0x40, 0xe7, 0x7a, 0x29, 0xfe, 0x6b, 0xc0, 0xf5,
 | 
						0x18, 0x9c, 0x54, 0x85, 0x9e, 0xc2, 0x72, 0xf0, 0xd4, 0x27, 0x14, 0x8b, 0x85, 0x96, 0xf8, 0x62,
 | 
				
			||||||
	0x6c, 0x18, 0xe2, 0xfe, 0xc2, 0x98, 0x39, 0x84, 0xe9, 0x5a, 0x59, 0x9a, 0x59, 0x2b, 0x55, 0x49,
 | 
						0x19, 0x59, 0x94, 0xda, 0xbf, 0x91, 0x51, 0x7b, 0x8a, 0x39, 0x4e, 0xe9, 0x34, 0x9c, 0xe1, 0x69,
 | 
				
			||||||
	0x5a, 0xf8, 0x2c, 0x25, 0x69, 0x03, 0xc0, 0x0a, 0x5d, 0x5d, 0x8d, 0xa2, 0xea, 0x16, 0xd7, 0x93,
 | 
						0x2d, 0xa8, 0x05, 0x70, 0xec, 0xfa, 0x96, 0xe7, 0xfe, 0x8c, 0x50, 0x56, 0x5f, 0x92, 0x65, 0x7f,
 | 
				
			||||||
	0x64, 0x00, 0xc2, 0x29, 0x29, 0x71, 0x60, 0x76, 0xe0, 0x73, 0x1a, 0x78, 0x1e, 0xa1, 0xb2, 0x82,
 | 
						0x49, 0xa4, 0xf3, 0xbd, 0x08, 0x8a, 0x13, 0x14, 0xe8, 0x9b, 0x50, 0xb3, 0xbd, 0x21, 0xe3, 0x84,
 | 
				
			||||||
	0x55, 0xa3, 0x03, 0xdb, 0x8a, 0xa9, 0x38, 0x25, 0x61, 0xbe, 0x09, 0x35, 0x1c, 0x04, 0x7c, 0xdf,
 | 
						0xca, 0x0a, 0xb1, 0x2c, 0x5f, 0x50, 0x74, 0xbf, 0xed, 0x18, 0x85, 0x93, 0x74, 0x6b, 0xdf, 0x82,
 | 
				
			||||||
	0xe2, 0xc7, 0x0c, 0xb5, 0xa1, 0x1c, 0x8a, 0x0f, 0x35, 0x45, 0xc9, 0x71, 0x51, 0x72, 0x70, 0x44,
 | 
						0xda, 0xff, 0xd8, 0x17, 0x45, 0x5f, 0x9d, 0x76, 0xe8, 0x5c, 0x7d, 0xf5, 0x3f, 0x06, 0x2c, 0xa5,
 | 
				
			||||||
	0x37, 0x7f, 0x67, 0xc0, 0x2b, 0x33, 0x87, 0x1a, 0xe1, 0xaf, 0x1d, 0xaf, 0x54, 0xf4, 0x62, 0x7f,
 | 
						0xdd, 0x10, 0x4d, 0x63, 0xc6, 0xcc, 0x95, 0x55, 0xd7, 0xca, 0xc2, 0xcc, 0x5a, 0xa9, 0x4a, 0x52,
 | 
				
			||||||
	0x13, 0x39, 0x9c, 0x92, 0x42, 0xdf, 0x85, 0x46, 0x66, 0x12, 0x52, 0x8f, 0xca, 0x4d, 0xa5, 0xd6,
 | 
						0xf1, 0xb3, 0x94, 0xa4, 0x4d, 0x00, 0x6b, 0xe0, 0xea, 0x6a, 0x14, 0x56, 0xb7, 0xa8, 0x9e, 0xc4,
 | 
				
			||||||
	0xc8, 0x58, 0xc3, 0x59, 0x59, 0xf3, 0x3f, 0x45, 0xa8, 0x1c, 0x70, 0x8b, 0x8f, 0x18, 0x7a, 0x0c,
 | 
						0xeb, 0x22, 0x4e, 0x50, 0x89, 0x80, 0xd9, 0x81, 0xcf, 0x69, 0xe0, 0x79, 0x84, 0xca, 0x0a, 0x56,
 | 
				
			||||||
	0x55, 0x91, 0xec, 0x8e, 0xc5, 0x2d, 0x69, 0x39, 0xf7, 0xe0, 0xaf, 0xdf, 0xdf, 0xe4, 0x81, 0xd1,
 | 
						0x09, 0x03, 0xb6, 0x1d, 0x41, 0x71, 0x82, 0xc2, 0x7c, 0x13, 0xaa, 0x38, 0x08, 0xf8, 0x81, 0xc5,
 | 
				
			||||||
	0x14, 0x1c, 0x23, 0x8a, 0x59, 0x89, 0x49, 0x3b, 0xca, 0xbd, 0xb8, 0x42, 0x44, 0xd6, 0xb1, 0xe2,
 | 
						0x4f, 0x18, 0x6a, 0x42, 0x69, 0x20, 0x3e, 0xd4, 0xce, 0x29, 0x97, 0x6b, 0x89, 0xc1, 0x21, 0xdc,
 | 
				
			||||||
	0x8a, 0x7e, 0x71, 0x48, 0x18, 0xb3, 0x06, 0x3a, 0x35, 0xe2, 0x7e, 0x71, 0x2f, 0x22, 0x63, 0xcd,
 | 
						0xfc, 0x8d, 0x01, 0xaf, 0xcc, 0x5c, 0x01, 0x85, 0xbd, 0x76, 0x74, 0x52, 0xde, 0x8b, 0xec, 0x8d,
 | 
				
			||||||
	0x47, 0x6f, 0x43, 0x85, 0x12, 0x8b, 0x05, 0xbe, 0xca, 0x91, 0x96, 0x86, 0xc4, 0x92, 0x7a, 0x71,
 | 
						0xe9, 0x70, 0x82, 0x4a, 0x74, 0xd9, 0xd4, 0xde, 0x38, 0xdd, 0x65, 0x53, 0xda, 0x70, 0x9a, 0xd6,
 | 
				
			||||||
	0xd6, 0x5e, 0x54, 0xe0, 0x72, 0x8d, 0x95, 0x34, 0x7a, 0x1f, 0xae, 0x39, 0x84, 0x5b, 0xae, 0xc7,
 | 
						0xfc, 0x77, 0x1e, 0xca, 0x87, 0xdc, 0xe2, 0x43, 0x86, 0x9e, 0x40, 0x45, 0x24, 0xbb, 0x63, 0x71,
 | 
				
			||||||
	0x64, 0x46, 0xd4, 0x37, 0xbe, 0x99, 0x73, 0x5c, 0x95, 0x60, 0xfd, 0x48, 0xb5, 0x57, 0x17, 0x3e,
 | 
						0x4b, 0x6a, 0xce, 0xfc, 0x33, 0x89, 0x9e, 0x56, 0xe2, 0x06, 0xa3, 0x21, 0x38, 0x92, 0x28, 0x36,
 | 
				
			||||||
	0xa9, 0x05, 0xd6, 0x80, 0x22, 0xad, 0xed, 0xc0, 0x21, 0x32, 0x6d, 0xca, 0x49, 0x5a, 0x6f, 0x05,
 | 
						0x4b, 0x26, 0xf5, 0x28, 0xf3, 0xa2, 0x0a, 0x11, 0x6a, 0xc7, 0x0a, 0x2b, 0xa6, 0xeb, 0x3e, 0x61,
 | 
				
			||||||
	0x0e, 0xc1, 0x92, 0x63, 0x3e, 0x35, 0xa0, 0x1e, 0x21, 0x6d, 0x59, 0x23, 0x46, 0xd0, 0x7a, 0xbc,
 | 
						0xcc, 0xea, 0xe9, 0xd4, 0x88, 0xa6, 0xeb, 0xfd, 0x10, 0x8c, 0x35, 0x1e, 0xbd, 0x0d, 0x65, 0x4a,
 | 
				
			||||||
	0x8b, 0xe8, 0xb8, 0xf5, 0x3b, 0xb4, 0xf0, 0xde, 0x24, 0x24, 0x17, 0x67, 0xed, 0x9a, 0x14, 0x13,
 | 
						0x2c, 0x16, 0xf5, 0xfc, 0x86, 0x16, 0x89, 0x25, 0xf4, 0x62, 0xd2, 0x5c, 0x50, 0xc2, 0xe5, 0x19,
 | 
				
			||||||
	0x8b, 0x78, 0x03, 0xa9, 0x18, 0x15, 0xaf, 0x88, 0xd1, 0x6b, 0x50, 0x3e, 0x72, 0x89, 0xa7, 0x3b,
 | 
						0x2b, 0x6a, 0xf4, 0x3e, 0xdc, 0x70, 0x08, 0xb7, 0x5c, 0x2f, 0x6c, 0xf5, 0xb5, 0xcd, 0xaf, 0x67,
 | 
				
			||||||
	0xfd, 0xb8, 0x47, 0xbf, 0x2b, 0x88, 0x38, 0xe2, 0x99, 0x7f, 0x2c, 0x42, 0x23, 0xb3, 0xb9, 0x1c,
 | 
						0x5c, 0xee, 0xa5, 0xb0, 0x6e, 0xc8, 0xda, 0xa9, 0x09, 0x9b, 0xd4, 0x01, 0x6b, 0x81, 0x22, 0xad,
 | 
				
			||||||
	0x9d, 0x4c, 0xdc, 0xfc, 0x17, 0x73, 0x0c, 0x94, 0xb3, 0xff, 0x8b, 0xf9, 0x11, 0x54, 0x6c, 0xb1,
 | 
						0xed, 0xc0, 0x21, 0x32, 0x6d, 0x4a, 0x71, 0x5a, 0x6f, 0x07, 0x0e, 0xc1, 0x12, 0x63, 0x3e, 0x33,
 | 
				
			||||||
	0x3f, 0xfd, 0x67, 0xd8, 0xfa, 0x3c, 0x47, 0x21, 0x23, 0x93, 0x64, 0x92, 0x5c, 0x32, 0xac, 0x00,
 | 
						0xa0, 0x16, 0x4a, 0xda, 0xb6, 0x86, 0x8c, 0xa0, 0x8d, 0xe8, 0x16, 0x61, 0xb8, 0x75, 0x1f, 0x2a,
 | 
				
			||||||
	0xd1, 0x0e, 0xac, 0x50, 0xc2, 0xe9, 0x64, 0xf3, 0x88, 0x13, 0xaa, 0x1f, 0xca, 0xb2, 0x3c, 0x97,
 | 
						0xbe, 0x37, 0x1e, 0x90, 0x8b, 0x49, 0xb3, 0x2a, 0xc9, 0xc4, 0x21, 0xba, 0x40, 0xc2, 0x47, 0xf9,
 | 
				
			||||||
	0xf8, 0xad, 0xc7, 0xd3, 0x02, 0xf8, 0xb2, 0x8e, 0xe9, 0xc1, 0x82, 0x78, 0x87, 0x45, 0xd8, 0x99,
 | 
						0x6b, 0x7c, 0xf4, 0x1a, 0x94, 0xe4, 0x58, 0xa5, 0x9c, 0x19, 0x4d, 0x51, 0x72, 0xf4, 0xc2, 0x21,
 | 
				
			||||||
	0x82, 0x89, 0xfe, 0x3d, 0x88, 0xc3, 0xae, 0x95, 0x35, 0x5f, 0x44, 0xc7, 0xb7, 0xfc, 0x20, 0x4a,
 | 
						0xce, 0xfc, 0x7d, 0x1e, 0x16, 0x53, 0x97, 0xcb, 0x30, 0xc9, 0x44, 0xab, 0x52, 0x3e, 0xc3, 0xfa,
 | 
				
			||||||
	0xf6, 0x72, 0x12, 0x9d, 0xfb, 0x82, 0x88, 0x23, 0xde, 0x9d, 0x1b, 0x62, 0x82, 0xf9, 0xed, 0xb3,
 | 
						0x3d, 0xfb, 0x97, 0xab, 0x1f, 0x40, 0xd9, 0x16, 0xf7, 0xd3, 0x3f, 0x1d, 0x6e, 0xcc, 0x13, 0x0a,
 | 
				
			||||||
	0x76, 0xe1, 0xe9, 0xb3, 0x76, 0xe1, 0xa3, 0x67, 0x6a, 0x9a, 0xf9, 0x31, 0xd4, 0x92, 0x57, 0xff,
 | 
						0xe9, 0x99, 0x38, 0x93, 0xe4, 0x91, 0x61, 0x25, 0x10, 0xed, 0xc2, 0x2a, 0x25, 0x9c, 0x8e, 0xb7,
 | 
				
			||||||
	0x73, 0x36, 0x69, 0xfe, 0x14, 0xaa, 0x22, 0x93, 0x74, 0xb7, 0x7a, 0x45, 0x8d, 0xce, 0x56, 0xcf,
 | 
						0x8e, 0x39, 0xa1, 0xc9, 0xd9, 0xae, 0x14, 0xf7, 0x7a, 0x3c, 0x4d, 0x80, 0x2f, 0xf3, 0x98, 0x1e,
 | 
				
			||||||
	0x62, 0x9e, 0xea, 0x69, 0x6e, 0x40, 0xf4, 0xf7, 0x98, 0xa8, 0x84, 0x2e, 0x27, 0xc3, 0x4c, 0x25,
 | 
						0x14, 0x45, 0x1f, 0x16, 0x6e, 0x67, 0x4a, 0x4c, 0xf8, 0x5b, 0x4b, 0xe4, 0x76, 0xcd, 0xac, 0xf1,
 | 
				
			||||||
	0xdc, 0x15, 0x04, 0x1c, 0xd1, 0x53, 0x03, 0xdc, 0x6f, 0x0c, 0x80, 0x1f, 0xca, 0xf9, 0x65, 0x2c,
 | 
						0xc2, 0x3b, 0xbe, 0xe5, 0x07, 0x61, 0xb2, 0x97, 0x62, 0xef, 0x3c, 0x10, 0x40, 0x1c, 0xe2, 0xee,
 | 
				
			||||||
	0x86, 0x8b, 0x35, 0x58, 0x10, 0x65, 0x7c, 0xda, 0x31, 0x79, 0x05, 0x24, 0x07, 0x3d, 0x84, 0x4a,
 | 
						0xde, 0x14, 0xfb, 0xde, 0xaf, 0x9f, 0x37, 0x73, 0xcf, 0x9e, 0x37, 0x73, 0x1f, 0x3d, 0x57, 0xbb,
 | 
				
			||||||
	0x20, 0xbb, 0x01, 0xe9, 0x54, 0x7d, 0xe3, 0xad, 0x99, 0x59, 0xa3, 0xfe, 0x2b, 0xef, 0x60, 0xeb,
 | 
						0xdf, 0x0f, 0xa1, 0x1a, 0x77, 0xfd, 0xcf, 0x59, 0xa5, 0xf9, 0x63, 0xa8, 0x88, 0x4c, 0xd2, 0xd3,
 | 
				
			||||||
	0xc9, 0xf6, 0x29, 0x27, 0xbe, 0xf0, 0x31, 0xc9, 0x98, 0xa8, 0xa5, 0xc0, 0x0a, 0xac, 0xf7, 0xfa,
 | 
						0xea, 0x35, 0x35, 0x3a, 0x5d, 0x3d, 0xf3, 0x59, 0xaa, 0xa7, 0xb9, 0x09, 0xe1, 0x8f, 0x89, 0xa2,
 | 
				
			||||||
	0xf3, 0x17, 0xad, 0xc2, 0xc7, 0x2f, 0x5a, 0x85, 0xbf, 0xbf, 0x68, 0x15, 0x3e, 0x3c, 0x6f, 0x19,
 | 
						0x12, 0xba, 0x9c, 0xf4, 0x53, 0x95, 0x70, 0x4f, 0x00, 0x70, 0x08, 0x4f, 0xac, 0xbb, 0xbf, 0x32,
 | 
				
			||||||
	0xcf, 0xcf, 0x5b, 0xc6, 0xc7, 0xe7, 0x2d, 0xe3, 0x9f, 0xe7, 0x2d, 0xe3, 0xe9, 0xbf, 0x5a, 0x85,
 | 
						0x00, 0xe4, 0x58, 0xbf, 0x33, 0x12, 0xab, 0xd8, 0x3a, 0x14, 0x45, 0x19, 0x9f, 0x36, 0x4c, 0x3e,
 | 
				
			||||||
	0xf7, 0x8b, 0xe3, 0xf5, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xcd, 0x08, 0x9f, 0x6d, 0x18,
 | 
						0x01, 0x89, 0x41, 0x8f, 0xa0, 0x1c, 0xc8, 0x69, 0x40, 0x1a, 0x55, 0xdb, 0x7c, 0x6b, 0x66, 0xd6,
 | 
				
			||||||
	0x00, 0x00,
 | 
						0xa8, 0xff, 0x2c, 0xb4, 0xb0, 0xf5, 0x74, 0xe7, 0x8c, 0x13, 0x5f, 0xd8, 0x18, 0x67, 0x4c, 0x38,
 | 
				
			||||||
 | 
						0x52, 0x60, 0x25, 0xac, 0xf3, 0xfa, 0x8b, 0x97, 0x8d, 0xdc, 0xc7, 0x2f, 0x1b, 0xb9, 0xbf, 0xbd,
 | 
				
			||||||
 | 
						0x6c, 0xe4, 0x3e, 0x3c, 0x6f, 0x18, 0x2f, 0xce, 0x1b, 0xc6, 0xc7, 0xe7, 0x0d, 0xe3, 0x1f, 0xe7,
 | 
				
			||||||
 | 
						0x0d, 0xe3, 0xd9, 0x3f, 0x1b, 0xb9, 0xf7, 0xf3, 0xa3, 0x8d, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
 | 
				
			||||||
 | 
						0x01, 0xac, 0x25, 0xfa, 0x9b, 0x19, 0x00, 0x00,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -246,6 +246,37 @@ message ListMeta {
 | 
				
			|||||||
  optional string resourceVersion = 2;
 | 
					  optional string resourceVersion = 2;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ListOptions is the query options to a standard REST list call.
 | 
				
			||||||
 | 
					message ListOptions {
 | 
				
			||||||
 | 
					  // A selector to restrict the list of returned objects by their labels.
 | 
				
			||||||
 | 
					  // Defaults to everything.
 | 
				
			||||||
 | 
					  // +optional
 | 
				
			||||||
 | 
					  optional string labelSelector = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // A selector to restrict the list of returned objects by their fields.
 | 
				
			||||||
 | 
					  // Defaults to everything.
 | 
				
			||||||
 | 
					  // +optional
 | 
				
			||||||
 | 
					  optional string fieldSelector = 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Watch for changes to the described resources and return them as a stream of
 | 
				
			||||||
 | 
					  // add, update, and remove notifications. Specify resourceVersion.
 | 
				
			||||||
 | 
					  // +optional
 | 
				
			||||||
 | 
					  optional bool watch = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // When specified with a watch call, shows changes that occur after that particular version of a resource.
 | 
				
			||||||
 | 
					  // Defaults to changes from the beginning of history.
 | 
				
			||||||
 | 
					  // When specified for list:
 | 
				
			||||||
 | 
					  // - if unset, then the result is returned from remote storage based on quorum-read flag;
 | 
				
			||||||
 | 
					  // - if it's 0, then we simply return what we currently have in cache, no guarantee;
 | 
				
			||||||
 | 
					  // - if set to non zero, then the result is at least as fresh as given rv.
 | 
				
			||||||
 | 
					  // +optional
 | 
				
			||||||
 | 
					  optional string resourceVersion = 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Timeout for the list/watch call.
 | 
				
			||||||
 | 
					  // +optional
 | 
				
			||||||
 | 
					  optional int64 timeoutSeconds = 5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ObjectMeta is metadata that all persisted resources must have, which includes all objects
 | 
					// ObjectMeta is metadata that all persisted resources must have, which includes all objects
 | 
				
			||||||
// users must create.
 | 
					// users must create.
 | 
				
			||||||
message ObjectMeta {
 | 
					message ObjectMeta {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ package v1
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/fields"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/selection"
 | 
						"k8s.io/apimachinery/pkg/selection"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -195,3 +196,11 @@ func SetMetaDataAnnotation(obj *ObjectMeta, ann string, value string) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	obj.Annotations[ann] = value
 | 
						obj.Annotations[ann] = value
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SingleObject returns a ListOptions for watching a single object.
 | 
				
			||||||
 | 
					func SingleObject(meta ObjectMeta) ListOptions {
 | 
				
			||||||
 | 
						return ListOptions{
 | 
				
			||||||
 | 
							FieldSelector:   fields.OneTermEqualSelector("metadata.name", meta.Name).String(),
 | 
				
			||||||
 | 
							ResourceVersion: meta.ResourceVersion,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										75
									
								
								staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/labels.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/labels.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2016 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 v1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Clones the given selector and returns a new selector with the given key and value added.
 | 
				
			||||||
 | 
					// Returns the given selector, if labelKey is empty.
 | 
				
			||||||
 | 
					func CloneSelectorAndAddLabel(selector *LabelSelector, labelKey, labelValue string) *LabelSelector {
 | 
				
			||||||
 | 
						if labelKey == "" {
 | 
				
			||||||
 | 
							// Don't need to add a label.
 | 
				
			||||||
 | 
							return selector
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Clone.
 | 
				
			||||||
 | 
						newSelector := new(LabelSelector)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// TODO(madhusudancs): Check if you can use deepCopy_extensions_LabelSelector here.
 | 
				
			||||||
 | 
						newSelector.MatchLabels = make(map[string]string)
 | 
				
			||||||
 | 
						if selector.MatchLabels != nil {
 | 
				
			||||||
 | 
							for key, val := range selector.MatchLabels {
 | 
				
			||||||
 | 
								newSelector.MatchLabels[key] = val
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						newSelector.MatchLabels[labelKey] = labelValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if selector.MatchExpressions != nil {
 | 
				
			||||||
 | 
							newMExps := make([]LabelSelectorRequirement, len(selector.MatchExpressions))
 | 
				
			||||||
 | 
							for i, me := range selector.MatchExpressions {
 | 
				
			||||||
 | 
								newMExps[i].Key = me.Key
 | 
				
			||||||
 | 
								newMExps[i].Operator = me.Operator
 | 
				
			||||||
 | 
								if me.Values != nil {
 | 
				
			||||||
 | 
									newMExps[i].Values = make([]string, len(me.Values))
 | 
				
			||||||
 | 
									copy(newMExps[i].Values, me.Values)
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									newMExps[i].Values = nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							newSelector.MatchExpressions = newMExps
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							newSelector.MatchExpressions = nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return newSelector
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AddLabelToSelector returns a selector with the given key and value added to the given selector's MatchLabels.
 | 
				
			||||||
 | 
					func AddLabelToSelector(selector *LabelSelector, labelKey, labelValue string) *LabelSelector {
 | 
				
			||||||
 | 
						if labelKey == "" {
 | 
				
			||||||
 | 
							// Don't need to add a label.
 | 
				
			||||||
 | 
							return selector
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if selector.MatchLabels == nil {
 | 
				
			||||||
 | 
							selector.MatchLabels = make(map[string]string)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						selector.MatchLabels[labelKey] = labelValue
 | 
				
			||||||
 | 
						return selector
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SelectorHasLabel checks if the given selector contains the given label key in its MatchLabels
 | 
				
			||||||
 | 
					func SelectorHasLabel(selector *LabelSelector, labelKey string) bool {
 | 
				
			||||||
 | 
						return len(selector.MatchLabels[labelKey]) > 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										120
									
								
								staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/labels_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/labels_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2016 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 v1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"reflect"
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestCloneSelectorAndAddLabel(t *testing.T) {
 | 
				
			||||||
 | 
						labels := map[string]string{
 | 
				
			||||||
 | 
							"foo1": "bar1",
 | 
				
			||||||
 | 
							"foo2": "bar2",
 | 
				
			||||||
 | 
							"foo3": "bar3",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cases := []struct {
 | 
				
			||||||
 | 
							labels     map[string]string
 | 
				
			||||||
 | 
							labelKey   string
 | 
				
			||||||
 | 
							labelValue string
 | 
				
			||||||
 | 
							want       map[string]string
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								labels: labels,
 | 
				
			||||||
 | 
								want:   labels,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								labels:     labels,
 | 
				
			||||||
 | 
								labelKey:   "foo4",
 | 
				
			||||||
 | 
								labelValue: "89",
 | 
				
			||||||
 | 
								want: map[string]string{
 | 
				
			||||||
 | 
									"foo1": "bar1",
 | 
				
			||||||
 | 
									"foo2": "bar2",
 | 
				
			||||||
 | 
									"foo3": "bar3",
 | 
				
			||||||
 | 
									"foo4": "89",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								labels:     nil,
 | 
				
			||||||
 | 
								labelKey:   "foo4",
 | 
				
			||||||
 | 
								labelValue: "12",
 | 
				
			||||||
 | 
								want: map[string]string{
 | 
				
			||||||
 | 
									"foo4": "12",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, tc := range cases {
 | 
				
			||||||
 | 
							ls_in := LabelSelector{MatchLabels: tc.labels}
 | 
				
			||||||
 | 
							ls_out := LabelSelector{MatchLabels: tc.want}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							got := CloneSelectorAndAddLabel(&ls_in, tc.labelKey, tc.labelValue)
 | 
				
			||||||
 | 
							if !reflect.DeepEqual(got, &ls_out) {
 | 
				
			||||||
 | 
								t.Errorf("got %v, want %v", got, tc.want)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestAddLabelToSelector(t *testing.T) {
 | 
				
			||||||
 | 
						labels := map[string]string{
 | 
				
			||||||
 | 
							"foo1": "bar1",
 | 
				
			||||||
 | 
							"foo2": "bar2",
 | 
				
			||||||
 | 
							"foo3": "bar3",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cases := []struct {
 | 
				
			||||||
 | 
							labels     map[string]string
 | 
				
			||||||
 | 
							labelKey   string
 | 
				
			||||||
 | 
							labelValue string
 | 
				
			||||||
 | 
							want       map[string]string
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								labels: labels,
 | 
				
			||||||
 | 
								want:   labels,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								labels:     labels,
 | 
				
			||||||
 | 
								labelKey:   "foo4",
 | 
				
			||||||
 | 
								labelValue: "89",
 | 
				
			||||||
 | 
								want: map[string]string{
 | 
				
			||||||
 | 
									"foo1": "bar1",
 | 
				
			||||||
 | 
									"foo2": "bar2",
 | 
				
			||||||
 | 
									"foo3": "bar3",
 | 
				
			||||||
 | 
									"foo4": "89",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								labels:     nil,
 | 
				
			||||||
 | 
								labelKey:   "foo4",
 | 
				
			||||||
 | 
								labelValue: "12",
 | 
				
			||||||
 | 
								want: map[string]string{
 | 
				
			||||||
 | 
									"foo4": "12",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, tc := range cases {
 | 
				
			||||||
 | 
							ls_in := LabelSelector{MatchLabels: tc.labels}
 | 
				
			||||||
 | 
							ls_out := LabelSelector{MatchLabels: tc.want}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							got := AddLabelToSelector(&ls_in, tc.labelKey, tc.labelValue)
 | 
				
			||||||
 | 
							if !reflect.DeepEqual(got, &ls_out) {
 | 
				
			||||||
 | 
								t.Errorf("got %v, want %v", got, tc.want)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -25,7 +25,7 @@ import (
 | 
				
			|||||||
const GroupName = "meta.k8s.io"
 | 
					const GroupName = "meta.k8s.io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SchemeGroupVersion is group version used to register these objects
 | 
					// SchemeGroupVersion is group version used to register these objects
 | 
				
			||||||
var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: ""}
 | 
					var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// WatchEventKind is name reserved for serializing watch events.
 | 
					// WatchEventKind is name reserved for serializing watch events.
 | 
				
			||||||
const WatchEventKind = "WatchEvent"
 | 
					const WatchEventKind = "WatchEvent"
 | 
				
			||||||
@@ -42,6 +42,7 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
 | 
				
			|||||||
		schema.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal}.WithKind(WatchEventKind),
 | 
							schema.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal}.WithKind(WatchEventKind),
 | 
				
			||||||
		&InternalEvent{},
 | 
							&InternalEvent{},
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
						scheme.AddKnownTypes(groupVersion, &ListOptions{})
 | 
				
			||||||
	scheme.AddConversionFuncs(
 | 
						scheme.AddConversionFuncs(
 | 
				
			||||||
		Convert_versioned_Event_to_watch_Event,
 | 
							Convert_versioned_Event_to_watch_Event,
 | 
				
			||||||
		Convert_versioned_InternalEvent_to_versioned_Event,
 | 
							Convert_versioned_InternalEvent_to_versioned_Event,
 | 
				
			||||||
@@ -49,3 +50,15 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
 | 
				
			|||||||
		Convert_versioned_Event_to_versioned_InternalEvent,
 | 
							Convert_versioned_Event_to_versioned_InternalEvent,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// scheme is the registry for the common types that adhere to the meta v1 API spec.
 | 
				
			||||||
 | 
					var scheme = runtime.NewScheme()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ParameterCodec knows about query parameters used with the meta v1 API spec.
 | 
				
			||||||
 | 
					var ParameterCodec = runtime.NewParameterCodec(scheme)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func init() {
 | 
				
			||||||
 | 
						scheme.AddUnversionedTypes(SchemeGroupVersion,
 | 
				
			||||||
 | 
							&ListOptions{},
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -219,6 +219,17 @@ type ObjectMeta struct {
 | 
				
			|||||||
	ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"`
 | 
						ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// NamespaceDefault means the object is in the default namespace which is applied when not specified by clients
 | 
				
			||||||
 | 
						NamespaceDefault string = "default"
 | 
				
			||||||
 | 
						// NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
 | 
				
			||||||
 | 
						NamespaceAll string = ""
 | 
				
			||||||
 | 
						// NamespaceNone is the argument for a context when there is no namespace.
 | 
				
			||||||
 | 
						NamespaceNone string = ""
 | 
				
			||||||
 | 
						// NamespaceSystem is the system namespace where we place system components.
 | 
				
			||||||
 | 
						NamespaceSystem string = "kube-system"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// OwnerReference contains enough information to let you identify an owning
 | 
					// OwnerReference contains enough information to let you identify an owning
 | 
				
			||||||
// object. Currently, an owning object must be in the same namespace, so there
 | 
					// object. Currently, an owning object must be in the same namespace, so there
 | 
				
			||||||
// is no namespace field.
 | 
					// is no namespace field.
 | 
				
			||||||
@@ -239,6 +250,35 @@ type OwnerReference struct {
 | 
				
			|||||||
	Controller *bool `json:"controller,omitempty" protobuf:"varint,6,opt,name=controller"`
 | 
						Controller *bool `json:"controller,omitempty" protobuf:"varint,6,opt,name=controller"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ListOptions is the query options to a standard REST list call.
 | 
				
			||||||
 | 
					type ListOptions struct {
 | 
				
			||||||
 | 
						TypeMeta `json:",inline"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// A selector to restrict the list of returned objects by their labels.
 | 
				
			||||||
 | 
						// Defaults to everything.
 | 
				
			||||||
 | 
						// +optional
 | 
				
			||||||
 | 
						LabelSelector string `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"`
 | 
				
			||||||
 | 
						// A selector to restrict the list of returned objects by their fields.
 | 
				
			||||||
 | 
						// Defaults to everything.
 | 
				
			||||||
 | 
						// +optional
 | 
				
			||||||
 | 
						FieldSelector string `json:"fieldSelector,omitempty" protobuf:"bytes,2,opt,name=fieldSelector"`
 | 
				
			||||||
 | 
						// Watch for changes to the described resources and return them as a stream of
 | 
				
			||||||
 | 
						// add, update, and remove notifications. Specify resourceVersion.
 | 
				
			||||||
 | 
						// +optional
 | 
				
			||||||
 | 
						Watch bool `json:"watch,omitempty" protobuf:"varint,3,opt,name=watch"`
 | 
				
			||||||
 | 
						// When specified with a watch call, shows changes that occur after that particular version of a resource.
 | 
				
			||||||
 | 
						// Defaults to changes from the beginning of history.
 | 
				
			||||||
 | 
						// When specified for list:
 | 
				
			||||||
 | 
						// - if unset, then the result is returned from remote storage based on quorum-read flag;
 | 
				
			||||||
 | 
						// - if it's 0, then we simply return what we currently have in cache, no guarantee;
 | 
				
			||||||
 | 
						// - if set to non zero, then the result is at least as fresh as given rv.
 | 
				
			||||||
 | 
						// +optional
 | 
				
			||||||
 | 
						ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,4,opt,name=resourceVersion"`
 | 
				
			||||||
 | 
						// Timeout for the list/watch call.
 | 
				
			||||||
 | 
						// +optional
 | 
				
			||||||
 | 
						TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty" protobuf:"varint,5,opt,name=timeoutSeconds"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ExportOptions is the query options to the standard REST get call.
 | 
					// ExportOptions is the query options to the standard REST get call.
 | 
				
			||||||
type ExportOptions struct {
 | 
					type ExportOptions struct {
 | 
				
			||||||
	TypeMeta `json:",inline"`
 | 
						TypeMeta `json:",inline"`
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user