From 4aa8b1a66aa90609a26c5a07748efad71a2d76a8 Mon Sep 17 00:00:00 2001 From: Michail Kargakis Date: Fri, 21 Apr 2017 16:29:17 +0200 Subject: [PATCH 1/5] Add collisionCount api field in DeploymentStatus Signed-off-by: Michail Kargakis --- pkg/apis/apps/v1beta1/types.go | 6 ++ pkg/apis/extensions/types.go | 6 ++ pkg/apis/extensions/v1beta1/types.go | 6 ++ pkg/apis/extensions/validation/validation.go | 24 ++++- .../extensions/validation/validation_test.go | 91 ++++++++++++++++++- 5 files changed, 130 insertions(+), 3 deletions(-) diff --git a/pkg/apis/apps/v1beta1/types.go b/pkg/apis/apps/v1beta1/types.go index e3cb013acda..a4b1cdc6695 100644 --- a/pkg/apis/apps/v1beta1/types.go +++ b/pkg/apis/apps/v1beta1/types.go @@ -356,6 +356,12 @@ type DeploymentStatus struct { // +patchMergeKey=type // +patchStrategy=merge Conditions []DeploymentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,6,rep,name=conditions"` + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + CollisionCount *int64 `json:"collisionCount,omitempty"` } type DeploymentConditionType string diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go index 71731a41623..7c2c1c2856e 100644 --- a/pkg/apis/extensions/types.go +++ b/pkg/apis/extensions/types.go @@ -327,6 +327,12 @@ type DeploymentStatus struct { // Represents the latest available observations of a deployment's current state. Conditions []DeploymentCondition + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + CollisionCount *int64 } type DeploymentConditionType string diff --git a/pkg/apis/extensions/v1beta1/types.go b/pkg/apis/extensions/v1beta1/types.go index 17838877c3c..f9eaf75437f 100644 --- a/pkg/apis/extensions/v1beta1/types.go +++ b/pkg/apis/extensions/v1beta1/types.go @@ -325,6 +325,12 @@ type DeploymentStatus struct { // +patchMergeKey=type // +patchStrategy=merge Conditions []DeploymentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,6,rep,name=conditions"` + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + CollisionCount *int64 `json:"collisionCount,omitempty"` } type DeploymentConditionType string diff --git a/pkg/apis/extensions/validation/validation.go b/pkg/apis/extensions/validation/validation.go index fa5cefca5cd..514faa2adbc 100644 --- a/pkg/apis/extensions/validation/validation.go +++ b/pkg/apis/extensions/validation/validation.go @@ -346,6 +346,9 @@ func ValidateDeploymentStatus(status *extensions.DeploymentStatus, fldPath *fiel allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.ReadyReplicas), fldPath.Child("readyReplicas"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.AvailableReplicas), fldPath.Child("availableReplicas"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.UnavailableReplicas), fldPath.Child("unavailableReplicas"))...) + if status.CollisionCount != nil { + allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(*status.CollisionCount, fldPath.Child("collisionCount"))...) + } msg := "cannot be greater than status.replicas" if status.UpdatedReplicas > status.Replicas { allErrs = append(allErrs, field.Invalid(fldPath.Child("updatedReplicas"), status.UpdatedReplicas, msg)) @@ -372,10 +375,29 @@ func ValidateDeploymentUpdate(update, old *extensions.Deployment) field.ErrorLis func ValidateDeploymentStatusUpdate(update, old *extensions.Deployment) field.ErrorList { allErrs := apivalidation.ValidateObjectMetaUpdate(&update.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata")) - allErrs = append(allErrs, ValidateDeploymentStatus(&update.Status, field.NewPath("status"))...) + fldPath := field.NewPath("status") + allErrs = append(allErrs, ValidateDeploymentStatus(&update.Status, fldPath)...) + if isDecremented(update.Status.CollisionCount, old.Status.CollisionCount) { + value := int64(0) + if update.Status.CollisionCount != nil { + value = *update.Status.CollisionCount + } + allErrs = append(allErrs, field.Invalid(fldPath.Child("collisionCount"), value, "cannot be decremented")) + } return allErrs } +// TODO: Move in "k8s.io/kubernetes/pkg/api/validation" +func isDecremented(update, old *int64) bool { + if update == nil && old != nil { + return true + } + if update == nil || old == nil { + return false + } + return *update < *old +} + func ValidateDeployment(obj *extensions.Deployment) field.ErrorList { allErrs := apivalidation.ValidateObjectMeta(&obj.ObjectMeta, true, ValidateDeploymentName, field.NewPath("metadata")) allErrs = append(allErrs, ValidateDeploymentSpec(&obj.Spec, field.NewPath("spec"))...) diff --git a/pkg/apis/extensions/validation/validation_test.go b/pkg/apis/extensions/validation/validation_test.go index 8ded02a59ba..1ec5e8b0834 100644 --- a/pkg/apis/extensions/validation/validation_test.go +++ b/pkg/apis/extensions/validation/validation_test.go @@ -21,6 +21,8 @@ import ( "strings" "testing" + "github.com/davecgh/go-spew/spew" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/validation/field" @@ -1230,6 +1232,11 @@ func TestValidateDeployment(t *testing.T) { } } +func int64p(i int) *int64 { + i64 := int64(i) + return &i64 +} + func TestValidateDeploymentStatus(t *testing.T) { tests := []struct { name string @@ -1239,6 +1246,7 @@ func TestValidateDeploymentStatus(t *testing.T) { readyReplicas int32 availableReplicas int32 observedGeneration int64 + collisionCount *int64 expectedErr bool }{ @@ -1335,6 +1343,13 @@ func TestValidateDeploymentStatus(t *testing.T) { observedGeneration: 1, expectedErr: false, }, + { + name: "invalid collisionCount", + replicas: 3, + observedGeneration: 1, + collisionCount: int64p(-3), + expectedErr: true, + }, } for _, test := range tests { @@ -1344,10 +1359,82 @@ func TestValidateDeploymentStatus(t *testing.T) { ReadyReplicas: test.readyReplicas, AvailableReplicas: test.availableReplicas, ObservedGeneration: test.observedGeneration, + CollisionCount: test.collisionCount, } - if hasErr := len(ValidateDeploymentStatus(&status, field.NewPath("status"))) > 0; hasErr != test.expectedErr { - t.Errorf("%s: expected error: %t, got error: %t", test.name, test.expectedErr, hasErr) + errs := ValidateDeploymentStatus(&status, field.NewPath("status")) + if hasErr := len(errs) > 0; hasErr != test.expectedErr { + errString := spew.Sprintf("%#v", errs) + t.Errorf("%s: expected error: %t, got error: %t\nerrors: %s", test.name, test.expectedErr, hasErr, errString) + } + } +} + +func TestValidateDeploymentStatusUpdate(t *testing.T) { + tests := []struct { + name string + + from, to extensions.DeploymentStatus + + expectedErr bool + }{ + { + name: "increase: valid update", + from: extensions.DeploymentStatus{ + CollisionCount: nil, + }, + to: extensions.DeploymentStatus{ + CollisionCount: int64p(1), + }, + expectedErr: false, + }, + { + name: "stable: valid update", + from: extensions.DeploymentStatus{ + CollisionCount: int64p(1), + }, + to: extensions.DeploymentStatus{ + CollisionCount: int64p(1), + }, + expectedErr: false, + }, + { + name: "unset: invalid update", + from: extensions.DeploymentStatus{ + CollisionCount: int64p(1), + }, + to: extensions.DeploymentStatus{ + CollisionCount: nil, + }, + expectedErr: true, + }, + { + name: "decrease: invalid update", + from: extensions.DeploymentStatus{ + CollisionCount: int64p(2), + }, + to: extensions.DeploymentStatus{ + CollisionCount: int64p(1), + }, + expectedErr: true, + }, + } + + for _, test := range tests { + meta := metav1.ObjectMeta{Name: "foo", Namespace: metav1.NamespaceDefault, ResourceVersion: "1"} + from := &extensions.Deployment{ + ObjectMeta: meta, + Status: test.from, + } + to := &extensions.Deployment{ + ObjectMeta: meta, + Status: test.to, + } + + errs := ValidateDeploymentStatusUpdate(to, from) + if hasErr := len(errs) > 0; hasErr != test.expectedErr { + errString := spew.Sprintf("%#v", errs) + t.Errorf("%s: expected error: %t, got error: %t\nerrors: %s", test.name, test.expectedErr, hasErr, errString) } } } From fcf68ba7a759c852522cd50fd01c49dc96ca3228 Mon Sep 17 00:00:00 2001 From: Michail Kargakis Date: Fri, 21 Apr 2017 16:47:32 +0200 Subject: [PATCH 2/5] Remove obsolete deployment helpers Signed-off-by: Michail Kargakis --- .../deployment/util/deployment_util.go | 25 -------------- pkg/controller/deployment/util/hash_test.go | 34 ++++++------------- pkg/controller/deployment/util/pod_util.go | 14 -------- .../deployment/util/replicaset_util.go | 10 ------ pkg/kubectl/stop_test.go | 15 ++------ 5 files changed, 13 insertions(+), 85 deletions(-) diff --git a/pkg/controller/deployment/util/deployment_util.go b/pkg/controller/deployment/util/deployment_util.go index bea58726571..1355d3eda05 100644 --- a/pkg/controller/deployment/util/deployment_util.go +++ b/pkg/controller/deployment/util/deployment_util.go @@ -746,31 +746,6 @@ func LabelPodsWithHash(podList *v1.PodList, c clientset.Interface, podLister cor return nil } -// GetNewReplicaSetTemplate returns the desired PodTemplateSpec for the new ReplicaSet corresponding to the given ReplicaSet. -// Callers of this helper need to set the DefaultDeploymentUniqueLabelKey k/v pair. -func GetNewReplicaSetTemplate(deployment *extensions.Deployment) v1.PodTemplateSpec { - // newRS will have the same template as in deployment spec. - return v1.PodTemplateSpec{ - ObjectMeta: deployment.Spec.Template.ObjectMeta, - Spec: deployment.Spec.Template.Spec, - } -} - -// TODO: remove the duplicate -// GetNewReplicaSetTemplateInternal returns the desired PodTemplateSpec for the new ReplicaSet corresponding to the given ReplicaSet. -func GetNewReplicaSetTemplateInternal(deployment *internalextensions.Deployment) api.PodTemplateSpec { - // newRS will have the same template as in deployment spec, plus a unique label in some cases. - newRSTemplate := api.PodTemplateSpec{ - ObjectMeta: deployment.Spec.Template.ObjectMeta, - Spec: deployment.Spec.Template.Spec, - } - newRSTemplate.ObjectMeta.Labels = labelsutil.CloneAndAddLabel( - deployment.Spec.Template.ObjectMeta.Labels, - internalextensions.DefaultDeploymentUniqueLabelKey, - fmt.Sprintf("%d", GetInternalPodTemplateSpecHash(newRSTemplate))) - return newRSTemplate -} - // SetFromReplicaSetTemplate sets the desired PodTemplateSpec from a replica set template to the given deployment. func SetFromReplicaSetTemplate(deployment *extensions.Deployment, template v1.PodTemplateSpec) *extensions.Deployment { deployment.Spec.Template.ObjectMeta = template.ObjectMeta diff --git a/pkg/controller/deployment/util/hash_test.go b/pkg/controller/deployment/util/hash_test.go index cdabe488876..b337540bfc6 100644 --- a/pkg/controller/deployment/util/hash_test.go +++ b/pkg/controller/deployment/util/hash_test.go @@ -18,11 +18,13 @@ package util import ( "encoding/json" + "hash/adler32" "strconv" "strings" "testing" "k8s.io/kubernetes/pkg/api/v1" + hashutil "k8s.io/kubernetes/pkg/util/hash" ) var podSpec string = ` @@ -103,34 +105,12 @@ var podSpec string = ` func TestPodTemplateSpecHash(t *testing.T) { seenHashes := make(map[uint32]int) - broken := false for i := 0; i < 1000; i++ { specJson := strings.Replace(podSpec, "@@VERSION@@", strconv.Itoa(i), 1) spec := v1.PodTemplateSpec{} json.Unmarshal([]byte(specJson), &spec) hash := GetPodTemplateSpecHash(spec) - if v, ok := seenHashes[hash]; ok { - broken = true - t.Logf("Hash collision, old: %d new: %d", v, i) - break - } - seenHashes[hash] = i - } - - if !broken { - t.Errorf("expected adler to break but it didn't") - } -} - -func TestPodTemplateSpecHashFnv(t *testing.T) { - seenHashes := make(map[uint32]int) - - for i := 0; i < 1000; i++ { - specJson := strings.Replace(podSpec, "@@VERSION@@", strconv.Itoa(i), 1) - spec := v1.PodTemplateSpec{} - json.Unmarshal([]byte(specJson), &spec) - hash := GetPodTemplateSpecHashFnv(spec) if v, ok := seenHashes[hash]; ok { t.Errorf("Hash collision, old: %d new: %d", v, i) break @@ -144,15 +124,21 @@ func BenchmarkAdler(b *testing.B) { json.Unmarshal([]byte(podSpec), &spec) for i := 0; i < b.N; i++ { - GetPodTemplateSpecHash(spec) + getPodTemplateSpecOldHash(spec) } } +func getPodTemplateSpecOldHash(template v1.PodTemplateSpec) uint32 { + podTemplateSpecHasher := adler32.New() + hashutil.DeepHashObject(podTemplateSpecHasher, template) + return podTemplateSpecHasher.Sum32() +} + func BenchmarkFnv(b *testing.B) { spec := v1.PodTemplateSpec{} json.Unmarshal([]byte(podSpec), &spec) for i := 0; i < b.N; i++ { - GetPodTemplateSpecHashFnv(spec) + GetPodTemplateSpecHash(spec) } } diff --git a/pkg/controller/deployment/util/pod_util.go b/pkg/controller/deployment/util/pod_util.go index b2d4e8464eb..80f7adc94f8 100644 --- a/pkg/controller/deployment/util/pod_util.go +++ b/pkg/controller/deployment/util/pod_util.go @@ -17,7 +17,6 @@ limitations under the License. package util import ( - "hash/adler32" "hash/fnv" "github.com/golang/glog" @@ -32,19 +31,6 @@ import ( ) func GetPodTemplateSpecHash(template v1.PodTemplateSpec) uint32 { - podTemplateSpecHasher := adler32.New() - hashutil.DeepHashObject(podTemplateSpecHasher, template) - return podTemplateSpecHasher.Sum32() -} - -// TODO: remove the duplicate -func GetInternalPodTemplateSpecHash(template api.PodTemplateSpec) uint32 { - podTemplateSpecHasher := adler32.New() - hashutil.DeepHashObject(podTemplateSpecHasher, template) - return podTemplateSpecHasher.Sum32() -} - -func GetPodTemplateSpecHashFnv(template v1.PodTemplateSpec) uint32 { podTemplateSpecHasher := fnv.New32a() hashutil.DeepHashObject(podTemplateSpecHasher, template) return podTemplateSpecHasher.Sum32() diff --git a/pkg/controller/deployment/util/replicaset_util.go b/pkg/controller/deployment/util/replicaset_util.go index 52f68eb9627..1e8b5f26993 100644 --- a/pkg/controller/deployment/util/replicaset_util.go +++ b/pkg/controller/deployment/util/replicaset_util.go @@ -77,13 +77,3 @@ func GetReplicaSetHash(rs *extensions.ReplicaSet) string { Spec: rs.Spec.Template.Spec, })) } - -// GetReplicaSetHashFnv returns the pod template hash of a ReplicaSet's pod template spec. -func GetReplicaSetHashFnv(rs *extensions.ReplicaSet) string { - meta := rs.Spec.Template.ObjectMeta - meta.Labels = labelsutil.CloneAndRemoveLabel(meta.Labels, extensions.DefaultDeploymentUniqueLabelKey) - return fmt.Sprintf("%d", GetPodTemplateSpecHashFnv(v1.PodTemplateSpec{ - ObjectMeta: meta, - Spec: rs.Spec.Template.Spec, - })) -} diff --git a/pkg/kubectl/stop_test.go b/pkg/kubectl/stop_test.go index 18db58da2f0..dd8752903e7 100644 --- a/pkg/kubectl/stop_test.go +++ b/pkg/kubectl/stop_test.go @@ -35,7 +35,6 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" - deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" ) func TestReplicationControllerStop(t *testing.T) { @@ -441,7 +440,6 @@ func TestDeploymentStop(t *testing.T) { Replicas: 0, }, } - template := deploymentutil.GetNewReplicaSetTemplateInternal(&deployment) trueVar := true tests := []struct { Name string @@ -492,9 +490,7 @@ func TestDeploymentStop(t *testing.T) { }, }, }, - Spec: extensions.ReplicaSetSpec{ - Template: template, - }, + Spec: extensions.ReplicaSetSpec{}, }, // ReplicaSet owned by something else (should be ignored). { @@ -512,9 +508,7 @@ func TestDeploymentStop(t *testing.T) { }, }, }, - Spec: extensions.ReplicaSetSpec{ - Template: template, - }, + Spec: extensions.ReplicaSetSpec{}, }, }, }, @@ -709,7 +703,6 @@ func TestDeploymentNotFoundError(t *testing.T) { Replicas: 0, }, } - template := deploymentutil.GetNewReplicaSetTemplateInternal(deployment) fake := fake.NewSimpleClientset( deployment, @@ -719,9 +712,7 @@ func TestDeploymentNotFoundError(t *testing.T) { Name: name, Namespace: ns, }, - Spec: extensions.ReplicaSetSpec{ - Template: template, - }, + Spec: extensions.ReplicaSetSpec{}, }, }, }, From aeb2d9b9b4c587543b7eb39c2b78ae6578aa756b Mon Sep 17 00:00:00 2001 From: Michail Kargakis Date: Fri, 21 Apr 2017 17:59:01 +0200 Subject: [PATCH 3/5] Deep equality helper should not mutate state Signed-off-by: Michail Kargakis --- pkg/controller/deployment/rollback.go | 6 ++++- .../deployment/util/deployment_util.go | 27 ++++++++++++++----- .../deployment/util/deployment_util_test.go | 24 ++++++----------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/pkg/controller/deployment/rollback.go b/pkg/controller/deployment/rollback.go index 703cf682b19..acc2bc45980 100644 --- a/pkg/controller/deployment/rollback.go +++ b/pkg/controller/deployment/rollback.go @@ -73,7 +73,11 @@ func (dc *DeploymentController) rollback(d *extensions.Deployment, rsList []*ext // cleans up the rollback spec so subsequent requeues of the deployment won't end up in here. func (dc *DeploymentController) rollbackToTemplate(d *extensions.Deployment, rs *extensions.ReplicaSet) (bool, error) { performedRollback := false - if !deploymentutil.EqualIgnoreHash(d.Spec.Template, rs.Spec.Template) { + isEqual, err := deploymentutil.EqualIgnoreHash(&d.Spec.Template, &rs.Spec.Template) + if err != nil { + return false, err + } + if !isEqual { glog.V(4).Infof("Rolling back deployment %q to template spec %+v", d.Name, rs.Spec.Template.Spec) deploymentutil.SetFromReplicaSetTemplate(d, rs.Spec.Template) // set RS (the old RS we'll rolling back to) annotations back to the deployment; diff --git a/pkg/controller/deployment/util/deployment_util.go b/pkg/controller/deployment/util/deployment_util.go index 1355d3eda05..ea6ff569a99 100644 --- a/pkg/controller/deployment/util/deployment_util.go +++ b/pkg/controller/deployment/util/deployment_util.go @@ -640,29 +640,42 @@ func ListPods(deployment *extensions.Deployment, rsList []*extensions.ReplicaSet // We ignore pod-template-hash because the hash result would be different upon podTemplateSpec API changes // (e.g. the addition of a new field will cause the hash code to change) // Note that we assume input podTemplateSpecs contain non-empty labels -func EqualIgnoreHash(template1, template2 v1.PodTemplateSpec) bool { +func EqualIgnoreHash(template1, template2 *v1.PodTemplateSpec) (bool, error) { + cp, err := api.Scheme.DeepCopy(template1) + if err != nil { + return false, err + } + t1Copy := cp.(*v1.PodTemplateSpec) + cp, err = api.Scheme.DeepCopy(template2) + if err != nil { + return false, err + } + t2Copy := cp.(*v1.PodTemplateSpec) // First, compare template.Labels (ignoring hash) - labels1, labels2 := template1.Labels, template2.Labels + labels1, labels2 := t1Copy.Labels, t2Copy.Labels if len(labels1) > len(labels2) { labels1, labels2 = labels2, labels1 } // We make sure len(labels2) >= len(labels1) for k, v := range labels2 { if labels1[k] != v && k != extensions.DefaultDeploymentUniqueLabelKey { - return false + return false, nil } } // Then, compare the templates without comparing their labels - template1.Labels, template2.Labels = nil, nil - return apiequality.Semantic.DeepEqual(template1, template2) + t1Copy.Labels, t2Copy.Labels = nil, nil + return apiequality.Semantic.DeepEqual(t1Copy, t2Copy), nil } // FindNewReplicaSet returns the new RS this given deployment targets (the one with the same pod template). func FindNewReplicaSet(deployment *extensions.Deployment, rsList []*extensions.ReplicaSet) (*extensions.ReplicaSet, error) { - newRSTemplate := GetNewReplicaSetTemplate(deployment) sort.Sort(controller.ReplicaSetsByCreationTimestamp(rsList)) for i := range rsList { - if EqualIgnoreHash(rsList[i].Spec.Template, newRSTemplate) { + equal, err := EqualIgnoreHash(&rsList[i].Spec.Template, &deployment.Spec.Template) + if err != nil { + return nil, err + } + if equal { // In rare cases, such as after cluster upgrades, Deployment may end up with // having more than one new ReplicaSets that have the same template as its template, // see https://github.com/kubernetes/kubernetes/issues/40415 diff --git a/pkg/controller/deployment/util/deployment_util_test.go b/pkg/controller/deployment/util/deployment_util_test.go index b9e9c10d30f..d3d0b591077 100644 --- a/pkg/controller/deployment/util/deployment_util_test.go +++ b/pkg/controller/deployment/util/deployment_util_test.go @@ -31,7 +31,6 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" core "k8s.io/client-go/testing" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" @@ -444,29 +443,22 @@ func TestEqualIgnoreHash(t *testing.T) { for _, test := range tests { runTest := func(t1, t2 *v1.PodTemplateSpec, reversed bool) { - // Set up - t1Copy, err := api.Scheme.DeepCopy(t1) - if err != nil { - t.Errorf("Failed setting up the test: %v", err) - } - t2Copy, err := api.Scheme.DeepCopy(t2) - if err != nil { - t.Errorf("Failed setting up the test: %v", err) - } reverseString := "" if reversed { reverseString = " (reverse order)" } // Run - equal := EqualIgnoreHash(*t1, *t2) + equal, err := EqualIgnoreHash(t1, t2) + if err != nil { + t.Errorf("%s: unexpected error: %v", err, test.test) + return + } if equal != test.expected { - t.Errorf("In test case %q%s, expected %v", test.test, reverseString, test.expected) + t.Errorf("%q%s: expected %v", test.test, reverseString, test.expected) + return } if t1.Labels == nil || t2.Labels == nil { - t.Errorf("In test case %q%s, unexpected labels becomes nil", test.test, reverseString) - } - if !reflect.DeepEqual(t1, t1Copy) || !reflect.DeepEqual(t2, t2Copy) { - t.Errorf("In test case %q%s, unexpected input template modified", test.test, reverseString) + t.Errorf("%q%s: unexpected labels becomes nil", test.test, reverseString) } } runTest(&test.former, &test.latter, false) From 4a2c5eae92fd3d53c34e384e4dad189797db4978 Mon Sep 17 00:00:00 2001 From: Michail Kargakis Date: Fri, 21 Apr 2017 19:49:30 +0200 Subject: [PATCH 4/5] Implement hash collision avoidance mechanism Signed-off-by: Michail Kargakis --- .../deployment/deployment_controller.go | 1 - pkg/controller/deployment/sync.go | 129 ++++++++++++------ .../deployment/util/deployment_util_test.go | 6 +- pkg/controller/deployment/util/hash_test.go | 4 +- pkg/controller/deployment/util/pod_util.go | 13 +- .../deployment/util/pod_util_test.go | 59 ++++++++ .../deployment/util/replicaset_util.go | 15 +- test/e2e/deployment.go | 49 +++++++ test/e2e/framework/util.go | 18 +-- 9 files changed, 227 insertions(+), 67 deletions(-) create mode 100644 pkg/controller/deployment/util/pod_util_test.go diff --git a/pkg/controller/deployment/deployment_controller.go b/pkg/controller/deployment/deployment_controller.go index 0064b286fe9..f5963acba3d 100644 --- a/pkg/controller/deployment/deployment_controller.go +++ b/pkg/controller/deployment/deployment_controller.go @@ -574,7 +574,6 @@ func (dc *DeploymentController) syncDeployment(key string) error { return nil } if err != nil { - utilruntime.HandleError(fmt.Errorf("Unable to retrieve deployment %v from store: %v", key, err)) return err } diff --git a/pkg/controller/deployment/sync.go b/pkg/controller/deployment/sync.go index 70fa10246cf..0268572fcd8 100644 --- a/pkg/controller/deployment/sync.go +++ b/pkg/controller/deployment/sync.go @@ -140,7 +140,7 @@ func (dc *DeploymentController) rsAndPodsWithHashKeySynced(d *extensions.Deploym // Add pod-template-hash information if it's not in the RS. // Otherwise, new RS produced by Deployment will overlap with pre-existing ones // that aren't constrained by the pod-template-hash. - syncedRS, err := dc.addHashKeyToRSAndPods(rs, podMap[rs.UID]) + syncedRS, err := dc.addHashKeyToRSAndPods(rs, podMap[rs.UID], d.Status.CollisionCount) if err != nil { return nil, err } @@ -153,12 +153,15 @@ func (dc *DeploymentController) rsAndPodsWithHashKeySynced(d *extensions.Deploym // 1. Add hash label to the rs's pod template, and make sure the controller sees this update so that no orphaned pods will be created // 2. Add hash label to all pods this rs owns, wait until replicaset controller reports rs.Status.FullyLabeledReplicas equal to the desired number of replicas // 3. Add hash label to the rs's label and selector -func (dc *DeploymentController) addHashKeyToRSAndPods(rs *extensions.ReplicaSet, podList *v1.PodList) (*extensions.ReplicaSet, error) { +func (dc *DeploymentController) addHashKeyToRSAndPods(rs *extensions.ReplicaSet, podList *v1.PodList, collisionCount *int64) (*extensions.ReplicaSet, error) { // If the rs already has the new hash label in its selector, it's done syncing if labelsutil.SelectorHasLabel(rs.Spec.Selector, extensions.DefaultDeploymentUniqueLabelKey) { return rs, nil } - hash := deploymentutil.GetReplicaSetHash(rs) + hash, err := deploymentutil.GetReplicaSetHash(rs, collisionCount) + if err != nil { + return nil, err + } // 1. Add hash template label to the rs. This ensures that any newly created pods will have the new label. updatedRS, err := deploymentutil.UpdateRSWithRetries(dc.client.Extensions().ReplicaSets(rs.Namespace), dc.rsLister, rs.Namespace, rs.Name, func(updated *extensions.ReplicaSet) error { @@ -224,8 +227,8 @@ func (dc *DeploymentController) addHashKeyToRSAndPods(rs *extensions.ReplicaSet, // 2. If there's existing new RS, update its revision number if it's smaller than (maxOldRevision + 1), where maxOldRevision is the max revision number among all old RSes. // 3. If there's no existing new RS and createIfNotExisted is true, create one with appropriate revision number (maxOldRevision + 1) and replicas. // Note that the pod-template-hash will be added to adopted RSes and pods. -func (dc *DeploymentController) getNewReplicaSet(deployment *extensions.Deployment, rsList, oldRSs []*extensions.ReplicaSet, createIfNotExisted bool) (*extensions.ReplicaSet, error) { - existingNewRS, err := deploymentutil.FindNewReplicaSet(deployment, rsList) +func (dc *DeploymentController) getNewReplicaSet(d *extensions.Deployment, rsList, oldRSs []*extensions.ReplicaSet, createIfNotExisted bool) (*extensions.ReplicaSet, error) { + existingNewRS, err := deploymentutil.FindNewReplicaSet(d, rsList) if err != nil { return nil, err } @@ -247,28 +250,28 @@ func (dc *DeploymentController) getNewReplicaSet(deployment *extensions.Deployme rsCopy := objCopy.(*extensions.ReplicaSet) // Set existing new replica set's annotation - annotationsUpdated := deploymentutil.SetNewReplicaSetAnnotations(deployment, rsCopy, newRevision, true) - minReadySecondsNeedsUpdate := rsCopy.Spec.MinReadySeconds != deployment.Spec.MinReadySeconds + annotationsUpdated := deploymentutil.SetNewReplicaSetAnnotations(d, rsCopy, newRevision, true) + minReadySecondsNeedsUpdate := rsCopy.Spec.MinReadySeconds != d.Spec.MinReadySeconds if annotationsUpdated || minReadySecondsNeedsUpdate { - rsCopy.Spec.MinReadySeconds = deployment.Spec.MinReadySeconds + rsCopy.Spec.MinReadySeconds = d.Spec.MinReadySeconds return dc.client.Extensions().ReplicaSets(rsCopy.ObjectMeta.Namespace).Update(rsCopy) } // Should use the revision in existingNewRS's annotation, since it set by before - updateConditions := deploymentutil.SetDeploymentRevision(deployment, rsCopy.Annotations[deploymentutil.RevisionAnnotation]) + needsUpdate := deploymentutil.SetDeploymentRevision(d, rsCopy.Annotations[deploymentutil.RevisionAnnotation]) // If no other Progressing condition has been recorded and we need to estimate the progress // of this deployment then it is likely that old users started caring about progress. In that // case we need to take into account the first time we noticed their new replica set. - cond := deploymentutil.GetDeploymentCondition(deployment.Status, extensions.DeploymentProgressing) - if deployment.Spec.ProgressDeadlineSeconds != nil && cond == nil { + cond := deploymentutil.GetDeploymentCondition(d.Status, extensions.DeploymentProgressing) + if d.Spec.ProgressDeadlineSeconds != nil && cond == nil { msg := fmt.Sprintf("Found new replica set %q", rsCopy.Name) condition := deploymentutil.NewDeploymentCondition(extensions.DeploymentProgressing, v1.ConditionTrue, deploymentutil.FoundNewRSReason, msg) - deploymentutil.SetDeploymentCondition(&deployment.Status, *condition) - updateConditions = true + deploymentutil.SetDeploymentCondition(&d.Status, *condition) + needsUpdate = true } - if updateConditions { - if deployment, err = dc.client.Extensions().Deployments(deployment.Namespace).UpdateStatus(deployment); err != nil { + if needsUpdate { + if d, err = dc.client.Extensions().Deployments(d.Namespace).UpdateStatus(d); err != nil { return nil, err } } @@ -280,72 +283,107 @@ func (dc *DeploymentController) getNewReplicaSet(deployment *extensions.Deployme } // new ReplicaSet does not exist, create one. - namespace := deployment.Namespace - podTemplateSpecHash := fmt.Sprintf("%d", deploymentutil.GetPodTemplateSpecHash(deployment.Spec.Template)) - newRSTemplate := deploymentutil.GetNewReplicaSetTemplate(deployment) - newRSTemplate.Labels = labelsutil.CloneAndAddLabel(deployment.Spec.Template.Labels, extensions.DefaultDeploymentUniqueLabelKey, podTemplateSpecHash) + templateCopy, err := api.Scheme.DeepCopy(d.Spec.Template) + if err != nil { + return nil, err + } + newRSTemplate := templateCopy.(v1.PodTemplateSpec) + podTemplateSpecHash := fmt.Sprintf("%d", deploymentutil.GetPodTemplateSpecHash(&newRSTemplate, d.Status.CollisionCount)) + newRSTemplate.Labels = labelsutil.CloneAndAddLabel(d.Spec.Template.Labels, extensions.DefaultDeploymentUniqueLabelKey, podTemplateSpecHash) // Add podTemplateHash label to selector. - newRSSelector := labelsutil.CloneSelectorAndAddLabel(deployment.Spec.Selector, extensions.DefaultDeploymentUniqueLabelKey, podTemplateSpecHash) + newRSSelector := labelsutil.CloneSelectorAndAddLabel(d.Spec.Selector, extensions.DefaultDeploymentUniqueLabelKey, podTemplateSpecHash) // Create new ReplicaSet newRS := extensions.ReplicaSet{ ObjectMeta: metav1.ObjectMeta{ // Make the name deterministic, to ensure idempotence - Name: deployment.Name + "-" + podTemplateSpecHash, - Namespace: namespace, - OwnerReferences: []metav1.OwnerReference{*newControllerRef(deployment)}, + Name: d.Name + "-" + podTemplateSpecHash, + Namespace: d.Namespace, + OwnerReferences: []metav1.OwnerReference{*newControllerRef(d)}, }, Spec: extensions.ReplicaSetSpec{ Replicas: new(int32), - MinReadySeconds: deployment.Spec.MinReadySeconds, + MinReadySeconds: d.Spec.MinReadySeconds, Selector: newRSSelector, Template: newRSTemplate, }, } allRSs := append(oldRSs, &newRS) - newReplicasCount, err := deploymentutil.NewRSNewReplicas(deployment, allRSs, &newRS) + newReplicasCount, err := deploymentutil.NewRSNewReplicas(d, allRSs, &newRS) if err != nil { return nil, err } *(newRS.Spec.Replicas) = newReplicasCount // Set new replica set's annotation - deploymentutil.SetNewReplicaSetAnnotations(deployment, &newRS, newRevision, false) - createdRS, err := dc.client.Extensions().ReplicaSets(namespace).Create(&newRS) + deploymentutil.SetNewReplicaSetAnnotations(d, &newRS, newRevision, false) + // Create the new ReplicaSet. If it already exists, then we need to check for possible + // hash collisions. If there is any other error, we need to report it in the status of + // the Deployment. + alreadyExists := false + createdRS, err := dc.client.Extensions().ReplicaSets(d.Namespace).Create(&newRS) switch { - // We may end up hitting this due to a slow cache or a fast resync of the deployment. - // TODO: Restore once https://github.com/kubernetes/kubernetes/issues/29735 is fixed - // ie. we start using a new hashing algorithm. + // We may end up hitting this due to a slow cache or a fast resync of the Deployment. + // Fetch a copy of the ReplicaSet. If its PodTemplateSpec is semantically deep equal + // with the PodTemplateSpec of the Deployment, then that is our new ReplicaSet. Otherwise, + // this is a hash collision and we need to increment the collisionCount field in the + // status of the Deployment and try the creation again. case errors.IsAlreadyExists(err): - return nil, err - // return dc.rsLister.ReplicaSets(namespace).Get(newRS.Name) + alreadyExists = true + rs, rsErr := dc.rsLister.ReplicaSets(newRS.Namespace).Get(newRS.Name) + if rsErr != nil { + return nil, rsErr + } + isEqual, equalErr := deploymentutil.EqualIgnoreHash(&d.Spec.Template, &rs.Spec.Template) + if equalErr != nil { + return nil, equalErr + } + // Matching ReplicaSet is not equal - increment the collisionCount in the DeploymentStatus + // and requeue the Deployment. + if !isEqual { + if d.Status.CollisionCount == nil { + d.Status.CollisionCount = new(int64) + } + preCollisionCount := *d.Status.CollisionCount + *d.Status.CollisionCount++ + // Update the collisionCount for the Deployment and let it requeue by returning the original + // error. + _, dErr := dc.client.Extensions().Deployments(d.Namespace).UpdateStatus(d) + if dErr == nil { + glog.V(2).Infof("Found a hash collision for deployment %q - bumping collisionCount (%d->%d) to resolve it", d.Name, preCollisionCount, *d.Status.CollisionCount) + } + return nil, err + } + // Pass through the matching ReplicaSet as the new ReplicaSet. + createdRS = rs + err = nil case err != nil: msg := fmt.Sprintf("Failed to create new replica set %q: %v", newRS.Name, err) - if deployment.Spec.ProgressDeadlineSeconds != nil { + if d.Spec.ProgressDeadlineSeconds != nil { cond := deploymentutil.NewDeploymentCondition(extensions.DeploymentProgressing, v1.ConditionFalse, deploymentutil.FailedRSCreateReason, msg) - deploymentutil.SetDeploymentCondition(&deployment.Status, *cond) + deploymentutil.SetDeploymentCondition(&d.Status, *cond) // We don't really care about this error at this point, since we have a bigger issue to report. - // TODO: Update the rest of the Deployment status, too. We may need to do this every time we - // error out in all other places in the controller so that we let users know that their deployments - // have been noticed by the controller, albeit with errors. // TODO: Identify which errors are permanent and switch DeploymentIsFailed to take into account // these reasons as well. Related issue: https://github.com/kubernetes/kubernetes/issues/18568 - _, _ = dc.client.Extensions().Deployments(deployment.ObjectMeta.Namespace).UpdateStatus(deployment) + _, _ = dc.client.Extensions().Deployments(d.Namespace).UpdateStatus(d) } - dc.eventRecorder.Eventf(deployment, v1.EventTypeWarning, deploymentutil.FailedRSCreateReason, msg) + dc.eventRecorder.Eventf(d, v1.EventTypeWarning, deploymentutil.FailedRSCreateReason, msg) return nil, err } - if newReplicasCount > 0 { - dc.eventRecorder.Eventf(deployment, v1.EventTypeNormal, "ScalingReplicaSet", "Scaled up replica set %s to %d", createdRS.Name, newReplicasCount) + if !alreadyExists && newReplicasCount > 0 { + dc.eventRecorder.Eventf(d, v1.EventTypeNormal, "ScalingReplicaSet", "Scaled up replica set %s to %d", createdRS.Name, newReplicasCount) } - deploymentutil.SetDeploymentRevision(deployment, newRevision) - if deployment.Spec.ProgressDeadlineSeconds != nil { + needsUpdate := deploymentutil.SetDeploymentRevision(d, newRevision) + if !alreadyExists && d.Spec.ProgressDeadlineSeconds != nil { msg := fmt.Sprintf("Created new replica set %q", createdRS.Name) condition := deploymentutil.NewDeploymentCondition(extensions.DeploymentProgressing, v1.ConditionTrue, deploymentutil.NewReplicaSetReason, msg) - deploymentutil.SetDeploymentCondition(&deployment.Status, *condition) + deploymentutil.SetDeploymentCondition(&d.Status, *condition) + needsUpdate = true + } + if needsUpdate { + _, err = dc.client.Extensions().Deployments(d.Namespace).UpdateStatus(d) } - _, err = dc.client.Extensions().Deployments(deployment.Namespace).UpdateStatus(deployment) return createdRS, err } @@ -564,6 +602,7 @@ func calculateStatus(allRSs []*extensions.ReplicaSet, newRS *extensions.ReplicaS ReadyReplicas: deploymentutil.GetReadyReplicaCountForReplicaSets(allRSs), AvailableReplicas: availableReplicas, UnavailableReplicas: unavailableReplicas, + CollisionCount: deployment.Status.CollisionCount, } // Copy conditions one by one so we won't mutate the original object. diff --git a/pkg/controller/deployment/util/deployment_util_test.go b/pkg/controller/deployment/util/deployment_util_test.go index d3d0b591077..f6c2308a923 100644 --- a/pkg/controller/deployment/util/deployment_util_test.go +++ b/pkg/controller/deployment/util/deployment_util_test.go @@ -31,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" core "k8s.io/client-go/testing" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" @@ -183,7 +184,8 @@ func newDControllerRef(d *extensions.Deployment) *metav1.OwnerReference { // generateRS creates a replica set, with the input deployment's template as its template func generateRS(deployment extensions.Deployment) extensions.ReplicaSet { - template := GetNewReplicaSetTemplate(&deployment) + cp, _ := api.Scheme.DeepCopy(deployment.Spec.Template) + template := cp.(v1.PodTemplateSpec) return extensions.ReplicaSet{ ObjectMeta: metav1.ObjectMeta{ UID: randomUID(), @@ -192,7 +194,7 @@ func generateRS(deployment extensions.Deployment) extensions.ReplicaSet { OwnerReferences: []metav1.OwnerReference{*newDControllerRef(&deployment)}, }, Spec: extensions.ReplicaSetSpec{ - Replicas: func() *int32 { i := int32(0); return &i }(), + Replicas: new(int32), Template: template, Selector: &metav1.LabelSelector{MatchLabels: template.Labels}, }, diff --git a/pkg/controller/deployment/util/hash_test.go b/pkg/controller/deployment/util/hash_test.go index b337540bfc6..d1d944df6d1 100644 --- a/pkg/controller/deployment/util/hash_test.go +++ b/pkg/controller/deployment/util/hash_test.go @@ -110,7 +110,7 @@ func TestPodTemplateSpecHash(t *testing.T) { specJson := strings.Replace(podSpec, "@@VERSION@@", strconv.Itoa(i), 1) spec := v1.PodTemplateSpec{} json.Unmarshal([]byte(specJson), &spec) - hash := GetPodTemplateSpecHash(spec) + hash := GetPodTemplateSpecHash(&spec, nil) if v, ok := seenHashes[hash]; ok { t.Errorf("Hash collision, old: %d new: %d", v, i) break @@ -139,6 +139,6 @@ func BenchmarkFnv(b *testing.B) { json.Unmarshal([]byte(podSpec), &spec) for i := 0; i < b.N; i++ { - GetPodTemplateSpecHash(spec) + GetPodTemplateSpecHash(&spec, nil) } } diff --git a/pkg/controller/deployment/util/pod_util.go b/pkg/controller/deployment/util/pod_util.go index 80f7adc94f8..1954ef7076d 100644 --- a/pkg/controller/deployment/util/pod_util.go +++ b/pkg/controller/deployment/util/pod_util.go @@ -17,6 +17,7 @@ limitations under the License. package util import ( + "encoding/binary" "hash/fnv" "github.com/golang/glog" @@ -30,9 +31,17 @@ import ( hashutil "k8s.io/kubernetes/pkg/util/hash" ) -func GetPodTemplateSpecHash(template v1.PodTemplateSpec) uint32 { +func GetPodTemplateSpecHash(template *v1.PodTemplateSpec, uniquifier *int64) uint32 { podTemplateSpecHasher := fnv.New32a() - hashutil.DeepHashObject(podTemplateSpecHasher, template) + hashutil.DeepHashObject(podTemplateSpecHasher, *template) + + // Add uniquifier in the hash if it exists. + if uniquifier != nil { + uniquifierBytes := make([]byte, 8) + binary.LittleEndian.PutUint64(uniquifierBytes, uint64(*uniquifier)) + podTemplateSpecHasher.Write(uniquifierBytes) + } + return podTemplateSpecHasher.Sum32() } diff --git a/pkg/controller/deployment/util/pod_util_test.go b/pkg/controller/deployment/util/pod_util_test.go new file mode 100644 index 00000000000..c312a372fb1 --- /dev/null +++ b/pkg/controller/deployment/util/pod_util_test.go @@ -0,0 +1,59 @@ +/* +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 util + +import ( + "math" + "testing" + + "k8s.io/kubernetes/pkg/api/v1" +) + +func int64P(num int64) *int64 { + return &num +} + +func TestGetPodTemplateSpecHash(t *testing.T) { + tests := []struct { + name string + template *v1.PodTemplateSpec + collisionCount *int64 + otherCollisionCount *int64 + }{ + { + name: "simple", + template: &v1.PodTemplateSpec{}, + collisionCount: int64P(1), + otherCollisionCount: int64P(2), + }, + { + name: "using math.MaxInt64", + template: &v1.PodTemplateSpec{}, + collisionCount: nil, + otherCollisionCount: int64P(int64(math.MaxInt64)), + }, + } + + for _, test := range tests { + hash := GetPodTemplateSpecHash(test.template, test.collisionCount) + otherHash := GetPodTemplateSpecHash(test.template, test.otherCollisionCount) + + if hash == otherHash { + t.Errorf("expected different hashes but got the same: %d", hash) + } + } +} diff --git a/pkg/controller/deployment/util/replicaset_util.go b/pkg/controller/deployment/util/replicaset_util.go index 1e8b5f26993..a816e2522c3 100644 --- a/pkg/controller/deployment/util/replicaset_util.go +++ b/pkg/controller/deployment/util/replicaset_util.go @@ -69,11 +69,12 @@ func UpdateRSWithRetries(rsClient unversionedextensions.ReplicaSetInterface, rsL } // GetReplicaSetHash returns the pod template hash of a ReplicaSet's pod template space -func GetReplicaSetHash(rs *extensions.ReplicaSet) string { - meta := rs.Spec.Template.ObjectMeta - meta.Labels = labelsutil.CloneAndRemoveLabel(meta.Labels, extensions.DefaultDeploymentUniqueLabelKey) - return fmt.Sprintf("%d", GetPodTemplateSpecHash(v1.PodTemplateSpec{ - ObjectMeta: meta, - Spec: rs.Spec.Template.Spec, - })) +func GetReplicaSetHash(rs *extensions.ReplicaSet, uniquifier *int64) (string, error) { + template, err := api.Scheme.DeepCopy(rs.Spec.Template) + if err != nil { + return "", err + } + rsTemplate := template.(v1.PodTemplateSpec) + rsTemplate.Labels = labelsutil.CloneAndRemoveLabel(rsTemplate.Labels, extensions.DefaultDeploymentUniqueLabelKey) + return fmt.Sprintf("%d", GetPodTemplateSpecHash(&rsTemplate, uniquifier)), nil } diff --git a/test/e2e/deployment.go b/test/e2e/deployment.go index 4d2bd3fd779..822d18d9f6e 100644 --- a/test/e2e/deployment.go +++ b/test/e2e/deployment.go @@ -21,8 +21,10 @@ import ( "math/rand" "time" + "github.com/davecgh/go-spew/spew" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -108,6 +110,9 @@ var _ = framework.KubeDescribe("Deployment", func() { It("test Deployment ReplicaSet orphaning and adoption regarding controllerRef", func() { testDeploymentsControllerRef(f) }) + It("deployment can avoid hash collisions", func() { + testDeploymentHashCollisionAvoidance(f) + }) // TODO: add tests that cover deployment.Spec.MinReadySeconds once we solved clock-skew issues // See https://github.com/kubernetes/kubernetes/issues/29229 }) @@ -1359,3 +1364,47 @@ func orphanDeploymentReplicaSets(c clientset.Interface, d *extensions.Deployment deleteOptions.Preconditions = metav1.NewUIDPreconditions(string(d.UID)) return c.Extensions().Deployments(d.Namespace).Delete(d.Name, deleteOptions) } + +func testDeploymentHashCollisionAvoidance(f *framework.Framework) { + ns := f.Namespace.Name + c := f.ClientSet + + deploymentName := "test-hash-collision" + framework.Logf("Creating Deployment %q", deploymentName) + podLabels := map[string]string{"name": nginxImageName} + d := framework.NewDeployment(deploymentName, int32(0), podLabels, nginxImageName, nginxImage, extensions.RollingUpdateDeploymentStrategyType) + deployment, err := c.Extensions().Deployments(ns).Create(d) + Expect(err).NotTo(HaveOccurred()) + err = framework.WaitForDeploymentRevisionAndImage(c, ns, deploymentName, "1", nginxImage) + Expect(err).NotTo(HaveOccurred()) + + // TODO: Switch this to do a non-cascading deletion of the Deployment, mutate the ReplicaSet + // once it has no owner reference, then recreate the Deployment if we ever proceed with + // https://github.com/kubernetes/kubernetes/issues/44237 + framework.Logf("Mock a hash collision") + newRS, err := deploymentutil.GetNewReplicaSet(deployment, c) + Expect(err).NotTo(HaveOccurred()) + var nilRs *extensions.ReplicaSet + Expect(newRS).NotTo(Equal(nilRs)) + _, err = framework.UpdateReplicaSetWithRetries(c, ns, newRS.Name, func(update *extensions.ReplicaSet) { + *update.Spec.Template.Spec.TerminationGracePeriodSeconds = int64(5) + }) + Expect(err).NotTo(HaveOccurred()) + + framework.Logf("Expect deployment collision counter to increment") + if err := wait.PollImmediate(time.Second, time.Minute, func() (bool, error) { + d, err := c.Extensions().Deployments(ns).Get(deploymentName, metav1.GetOptions{}) + if err != nil { + framework.Logf("cannot get deployment %q: %v", deploymentName, err) + return false, nil + } + framework.Logf(spew.Sprintf("deployment status: %#v", d.Status)) + return d.Status.CollisionCount != nil && *d.Status.CollisionCount == int64(1), nil + }); err != nil { + framework.Failf("Failed to increment collision counter for deployment %q: %v", deploymentName, err) + } + + framework.Logf("Expect a new ReplicaSet to be created") + err = framework.WaitForDeploymentRevisionAndImage(c, ns, deploymentName, "2", nginxImage) + Expect(err).NotTo(HaveOccurred()) +} diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 16e280b08b9..55986ae2f3d 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -3348,9 +3348,10 @@ func WatchRecreateDeployment(c clientset.Interface, d *extensions.Deployment) er } // WaitForDeploymentRevisionAndImage waits for the deployment's and its new RS's revision and container image to match the given revision and image. -// Note that deployment revision and its new RS revision should be updated shortly, so we only wait for 1 minute here to fail early. +// Note that deployment revision and its new RS revision should be updated shortly most of the time, but an overwhelmed RS controller +// may result in taking longer to relabel a RS. func WaitForDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName string, revision, image string) error { - return testutil.WaitForDeploymentRevisionAndImage(c, ns, deploymentName, revision, image, Logf, Poll, pollShortTimeout) + return testutil.WaitForDeploymentRevisionAndImage(c, ns, deploymentName, revision, image, Logf, Poll, pollLongTimeout) } // CheckNewRSAnnotations check if the new RS's annotation is as expected @@ -3486,16 +3487,17 @@ func WaitForPartialEvents(c clientset.Interface, ns string, objOrRef runtime.Obj type updateDeploymentFunc func(d *extensions.Deployment) -func UpdateDeploymentWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateDeploymentFunc) (deployment *extensions.Deployment, err error) { - deployments := c.Extensions().Deployments(namespace) +func UpdateDeploymentWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateDeploymentFunc) (*extensions.Deployment, error) { + var deployment *extensions.Deployment var updateErr error - pollErr := wait.Poll(10*time.Millisecond, 1*time.Minute, func() (bool, error) { - if deployment, err = deployments.Get(name, metav1.GetOptions{}); err != nil { + pollErr := wait.PollImmediate(1*time.Second, 1*time.Minute, func() (bool, error) { + var err error + if deployment, err = c.Extensions().Deployments(namespace).Get(name, metav1.GetOptions{}); err != nil { return false, err } // Apply the update, then attempt to push it to the apiserver. applyUpdate(deployment) - if deployment, err = deployments.Update(deployment); err == nil { + if deployment, err = c.Extensions().Deployments(namespace).Update(deployment); err == nil { Logf("Updating deployment %s", name) return true, nil } @@ -3513,7 +3515,7 @@ type updateRsFunc func(d *extensions.ReplicaSet) func UpdateReplicaSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateRsFunc) (*extensions.ReplicaSet, error) { var rs *extensions.ReplicaSet var updateErr error - pollErr := wait.PollImmediate(10*time.Millisecond, 1*time.Minute, func() (bool, error) { + pollErr := wait.PollImmediate(1*time.Second, 1*time.Minute, func() (bool, error) { var err error if rs, err = c.Extensions().ReplicaSets(namespace).Get(name, metav1.GetOptions{}); err != nil { return false, err From 9190a47c3769c329ed8b29844a667a1c959307df Mon Sep 17 00:00:00 2001 From: Michail Kargakis Date: Thu, 25 May 2017 11:45:44 +0200 Subject: [PATCH 5/5] Generated changes for collision count Signed-off-by: Michail Kargakis --- api/openapi-spec/swagger.json | 10 + api/swagger-spec/apps_v1beta1.json | 5 + api/swagger-spec/extensions_v1beta1.json | 5 + .../apps/v1beta1/definitions.html | 9 +- .../extensions/v1beta1/definitions.html | 9 +- federation/apis/openapi-spec/swagger.json | 5 + .../apis/swagger-spec/extensions_v1beta1.json | 5 + .../extensions/v1beta1/definitions.html | 9 +- pkg/apis/apps/v1beta1/generated.pb.go | 225 +++++---- pkg/apis/apps/v1beta1/generated.proto | 6 + pkg/apis/apps/v1beta1/types.generated.go | 236 ++++++--- pkg/apis/apps/v1beta1/types.go | 2 +- .../v1beta1/types_swagger_doc_generated.go | 1 + .../apps/v1beta1/zz_generated.deepcopy.go | 5 + pkg/apis/extensions/v1beta1/generated.pb.go | 448 ++++++++++-------- pkg/apis/extensions/v1beta1/generated.proto | 6 + .../extensions/v1beta1/types.generated.go | 236 ++++++--- pkg/apis/extensions/v1beta1/types.go | 2 +- .../v1beta1/types_swagger_doc_generated.go | 1 + .../v1beta1/zz_generated.conversion.go | 2 + .../v1beta1/zz_generated.deepcopy.go | 5 + pkg/apis/extensions/validation/BUILD | 1 + pkg/apis/extensions/zz_generated.deepcopy.go | 5 + pkg/controller/deployment/util/BUILD | 2 + pkg/kubectl/BUILD | 1 - .../src/k8s.io/client-go/Godeps/Godeps.json | 2 +- .../pkg/apis/apps/v1beta1/generated.pb.go | 225 +++++---- .../pkg/apis/apps/v1beta1/generated.proto | 6 + .../pkg/apis/apps/v1beta1/types.generated.go | 236 ++++++--- .../client-go/pkg/apis/apps/v1beta1/types.go | 6 + .../v1beta1/types_swagger_doc_generated.go | 1 + .../apps/v1beta1/zz_generated.deepcopy.go | 5 + .../client-go/pkg/apis/extensions/types.go | 6 + .../apis/extensions/v1beta1/generated.pb.go | 448 ++++++++++-------- .../apis/extensions/v1beta1/generated.proto | 6 + .../extensions/v1beta1/types.generated.go | 236 ++++++--- .../pkg/apis/extensions/v1beta1/types.go | 6 + .../v1beta1/types_swagger_doc_generated.go | 1 + .../v1beta1/zz_generated.conversion.go | 2 + .../v1beta1/zz_generated.deepcopy.go | 5 + .../apis/extensions/zz_generated.deepcopy.go | 5 + test/e2e/BUILD | 1 + 42 files changed, 1503 insertions(+), 935 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index b3aeda73c39..8e3ac81abe9 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -47259,6 +47259,11 @@ "type": "integer", "format": "int32" }, + "collisionCount": { + "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", + "type": "integer", + "format": "int64" + }, "conditions": { "description": "Represents the latest available observations of a deployment's current state.", "type": "array", @@ -49477,6 +49482,11 @@ "type": "integer", "format": "int32" }, + "collisionCount": { + "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", + "type": "integer", + "format": "int64" + }, "conditions": { "description": "Represents the latest available observations of a deployment's current state.", "type": "array", diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json index 34636f0e6ab..3110d33c32a 100644 --- a/api/swagger-spec/apps_v1beta1.json +++ b/api/swagger-spec/apps_v1beta1.json @@ -4706,6 +4706,11 @@ "$ref": "v1beta1.DeploymentCondition" }, "description": "Represents the latest available observations of a deployment's current state." + }, + "collisionCount": { + "type": "integer", + "format": "int64", + "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet." } } }, diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json index 96aa3b435b1..22473d5265e 100644 --- a/api/swagger-spec/extensions_v1beta1.json +++ b/api/swagger-spec/extensions_v1beta1.json @@ -9408,6 +9408,11 @@ "$ref": "v1beta1.DeploymentCondition" }, "description": "Represents the latest available observations of a deployment's current state." + }, + "collisionCount": { + "type": "integer", + "format": "int64", + "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet." } } }, diff --git a/docs/api-reference/apps/v1beta1/definitions.html b/docs/api-reference/apps/v1beta1/definitions.html index 41557e7d96c..eb12ea5f5d4 100755 --- a/docs/api-reference/apps/v1beta1/definitions.html +++ b/docs/api-reference/apps/v1beta1/definitions.html @@ -466,6 +466,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

v1beta1.DeploymentCondition array

+ +

collisionCount

+

Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.

+

false

+

integer (int64)

+ + @@ -6470,7 +6477,7 @@ Examples:
diff --git a/docs/api-reference/extensions/v1beta1/definitions.html b/docs/api-reference/extensions/v1beta1/definitions.html index 3c202598444..36d660a86b1 100755 --- a/docs/api-reference/extensions/v1beta1/definitions.html +++ b/docs/api-reference/extensions/v1beta1/definitions.html @@ -496,6 +496,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

v1beta1.DeploymentCondition array

+ +

collisionCount

+

Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.

+

false

+

integer (int64)

+ + @@ -8110,7 +8117,7 @@ Both these may change in the future. Incoming requests are matched against the h diff --git a/federation/apis/openapi-spec/swagger.json b/federation/apis/openapi-spec/swagger.json index eb37710dd70..4d7bf450db1 100644 --- a/federation/apis/openapi-spec/swagger.json +++ b/federation/apis/openapi-spec/swagger.json @@ -13315,6 +13315,11 @@ "type": "integer", "format": "int32" }, + "collisionCount": { + "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", + "type": "integer", + "format": "int64" + }, "conditions": { "description": "Represents the latest available observations of a deployment's current state.", "type": "array", diff --git a/federation/apis/swagger-spec/extensions_v1beta1.json b/federation/apis/swagger-spec/extensions_v1beta1.json index db43660abe1..d7ea4a687d1 100644 --- a/federation/apis/swagger-spec/extensions_v1beta1.json +++ b/federation/apis/swagger-spec/extensions_v1beta1.json @@ -7152,6 +7152,11 @@ "$ref": "v1beta1.DeploymentCondition" }, "description": "Represents the latest available observations of a deployment's current state." + }, + "collisionCount": { + "type": "integer", + "format": "int64", + "description": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet." } } }, diff --git a/federation/docs/api-reference/extensions/v1beta1/definitions.html b/federation/docs/api-reference/extensions/v1beta1/definitions.html index 1b17a0792f5..4201aa6580c 100755 --- a/federation/docs/api-reference/extensions/v1beta1/definitions.html +++ b/federation/docs/api-reference/extensions/v1beta1/definitions.html @@ -478,6 +478,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

v1beta1.DeploymentCondition array

+ +

collisionCount

+

Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.

+

false

+

integer (int64)

+ + @@ -7190,7 +7197,7 @@ Both these may change in the future. Incoming requests are matched against the h diff --git a/pkg/apis/apps/v1beta1/generated.pb.go b/pkg/apis/apps/v1beta1/generated.pb.go index 16fe69f1ebf..cc4cde6a858 100644 --- a/pkg/apis/apps/v1beta1/generated.pb.go +++ b/pkg/apis/apps/v1beta1/generated.pb.go @@ -455,6 +455,11 @@ func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x38 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + dAtA[i] = 0x40 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + } return i, nil } @@ -954,6 +959,9 @@ func (m *DeploymentStatus) Size() (n int) { } } n += 1 + sovGenerated(uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + n += 1 + sovGenerated(uint64(*m.CollisionCount)) + } return n } @@ -1190,6 +1198,7 @@ func (this *DeploymentStatus) String() string { `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, }, "") return s @@ -2478,6 +2487,26 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { break } } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CollisionCount", 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.CollisionCount = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3891,103 +3920,105 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 1561 bytes of a gzipped FileDescriptorProto + // 1585 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x6f, 0x1b, 0xb7, 0x12, 0xf7, 0xda, 0x92, 0x2d, 0xd3, 0xb1, 0x1c, 0xd3, 0x7e, 0xb1, 0x9e, 0xf3, 0x20, 0x07, 0x3a, - 0xe4, 0xe3, 0x21, 0x59, 0xbd, 0x38, 0x79, 0xf9, 0x72, 0x11, 0xd4, 0x4a, 0xd2, 0x34, 0x85, 0xdd, - 0x18, 0x94, 0x1d, 0x34, 0x69, 0x0a, 0x94, 0x5a, 0x31, 0x6b, 0xc6, 0xfb, 0x85, 0x25, 0x25, 0x44, - 0xb7, 0x5e, 0x7a, 0x28, 0xd0, 0x43, 0x4f, 0xbd, 0x15, 0xed, 0xb9, 0x28, 0xd0, 0x7f, 0xc3, 0x68, - 0x2f, 0x39, 0x16, 0x3d, 0x18, 0xb5, 0xf3, 0x5f, 0xe4, 0x54, 0x90, 0xcb, 0xfd, 0xd2, 0xae, 0xfc, - 0xa1, 0xa2, 0xb9, 0xf4, 0xa6, 0xe5, 0xcc, 0xef, 0x37, 0x43, 0x72, 0x66, 0x38, 0x23, 0x70, 0x73, - 0xe7, 0x16, 0xd3, 0xa9, 0x5b, 0xdf, 0xe9, 0xb4, 0x88, 0xef, 0x10, 0x4e, 0x58, 0xdd, 0xdb, 0x31, - 0xeb, 0xd8, 0xa3, 0xac, 0x8e, 0x3d, 0x8f, 0xd5, 0xbb, 0x57, 0x5b, 0x84, 0xe3, 0xab, 0x75, 0x93, - 0x38, 0xc4, 0xc7, 0x9c, 0xb4, 0x75, 0xcf, 0x77, 0xb9, 0x0b, 0x2f, 0x04, 0x40, 0x3d, 0x06, 0xea, - 0xde, 0x8e, 0xa9, 0x0b, 0xa0, 0x2e, 0x80, 0xba, 0x02, 0x2e, 0x5e, 0x31, 0x29, 0xdf, 0xee, 0xb4, - 0x74, 0xc3, 0xb5, 0xeb, 0xa6, 0x6b, 0xba, 0x75, 0x89, 0x6f, 0x75, 0x5e, 0xc8, 0x2f, 0xf9, 0x21, - 0x7f, 0x05, 0xbc, 0x8b, 0xd7, 0x95, 0x43, 0xd8, 0xa3, 0x36, 0x36, 0xb6, 0xa9, 0x43, 0xfc, 0x5e, - 0xec, 0x92, 0x4d, 0x38, 0xae, 0x77, 0x33, 0xde, 0x2c, 0xd6, 0x07, 0xa1, 0xfc, 0x8e, 0xc3, 0xa9, - 0x4d, 0x32, 0x80, 0x1b, 0x47, 0x01, 0x98, 0xb1, 0x4d, 0x6c, 0x9c, 0xc1, 0x5d, 0x1b, 0x84, 0xeb, - 0x70, 0x6a, 0xd5, 0xa9, 0xc3, 0x19, 0xf7, 0x33, 0xa0, 0xc4, 0x9e, 0x18, 0xf1, 0xbb, 0xc4, 0x8f, - 0x37, 0x44, 0x5e, 0x61, 0xdb, 0xb3, 0x48, 0xde, 0x9e, 0x2e, 0x0f, 0xbc, 0x9a, 0x3c, 0xed, 0xdb, - 0x87, 0x5c, 0xa4, 0xe7, 0x5a, 0xd4, 0xe8, 0x0d, 0xba, 0xca, 0xda, 0x4f, 0xa3, 0x00, 0xdc, 0x27, - 0x9e, 0xe5, 0xf6, 0x6c, 0xe2, 0x70, 0xf8, 0x39, 0x28, 0x89, 0x63, 0x6e, 0x63, 0x8e, 0x2b, 0xda, - 0x39, 0xed, 0xe2, 0xd4, 0xf2, 0xff, 0x74, 0x75, 0xd9, 0xc9, 0x5d, 0xc7, 0xd7, 0x2d, 0xb4, 0xf5, - 0xee, 0x55, 0xfd, 0x71, 0xeb, 0x25, 0x31, 0xf8, 0x3a, 0xe1, 0xb8, 0x01, 0x77, 0xf7, 0x96, 0x46, - 0x0e, 0xf6, 0x96, 0x40, 0xbc, 0x86, 0x22, 0x56, 0xf8, 0x14, 0x14, 0x98, 0x47, 0x8c, 0xca, 0xa8, - 0x64, 0xbf, 0xa9, 0x1f, 0x33, 0x94, 0xf4, 0xd8, 0xc9, 0xa6, 0x47, 0x8c, 0xc6, 0x29, 0x65, 0xa4, - 0x20, 0xbe, 0x90, 0xa4, 0x84, 0x18, 0x8c, 0x33, 0x8e, 0x79, 0x87, 0x55, 0xc6, 0x24, 0xf9, 0xed, - 0x61, 0xc8, 0x25, 0x41, 0xa3, 0xac, 0xe8, 0xc7, 0x83, 0x6f, 0xa4, 0x88, 0x6b, 0xfb, 0x63, 0x60, - 0x2e, 0x56, 0xbe, 0xe7, 0x3a, 0x6d, 0xca, 0xa9, 0xeb, 0xc0, 0x15, 0x50, 0xe0, 0x3d, 0x8f, 0xc8, - 0x33, 0x9b, 0x6c, 0x5c, 0x08, 0x9d, 0xdb, 0xec, 0x79, 0xe4, 0xed, 0xde, 0xd2, 0x42, 0x0e, 0x44, - 0x88, 0x90, 0x04, 0xc1, 0x27, 0x91, 0xdf, 0xa3, 0x12, 0x7e, 0x37, 0x6d, 0xfc, 0xed, 0xde, 0xd2, - 0xa1, 0xe1, 0xa0, 0x47, 0x9c, 0x69, 0x67, 0xe1, 0x79, 0x30, 0xee, 0x13, 0xcc, 0x5c, 0xa7, 0x52, - 0x90, 0xbc, 0xd1, 0xa6, 0x90, 0x5c, 0x45, 0x4a, 0x0a, 0x2f, 0x81, 0x09, 0x9b, 0x30, 0x86, 0x4d, - 0x52, 0x29, 0x4a, 0xc5, 0x19, 0xa5, 0x38, 0xb1, 0x1e, 0x2c, 0xa3, 0x50, 0x0e, 0x5f, 0x82, 0xb2, - 0x85, 0x19, 0xdf, 0xf2, 0xda, 0x98, 0x93, 0x4d, 0x6a, 0x93, 0xca, 0xb8, 0x3c, 0xea, 0xff, 0x1e, - 0x2f, 0x4a, 0x04, 0xa2, 0x71, 0x46, 0xb1, 0x97, 0xd7, 0x52, 0x4c, 0xa8, 0x8f, 0x19, 0x76, 0x01, - 0x14, 0x2b, 0x9b, 0x3e, 0x76, 0x58, 0x70, 0x64, 0xc2, 0xde, 0xc4, 0x89, 0xed, 0x2d, 0x2a, 0x7b, - 0x70, 0x2d, 0xc3, 0x86, 0x72, 0x2c, 0xd4, 0x76, 0x35, 0x50, 0x8e, 0x2f, 0x6c, 0x8d, 0x32, 0x0e, - 0x9f, 0x67, 0xd2, 0x42, 0x3f, 0x9e, 0x03, 0x02, 0x2d, 0x93, 0xe2, 0xb4, 0x72, 0xa2, 0x14, 0xae, - 0x24, 0x52, 0xe2, 0x13, 0x50, 0xa4, 0x9c, 0xd8, 0xe2, 0xfa, 0xc7, 0x2e, 0x4e, 0x2d, 0x5f, 0x1b, - 0x22, 0x6c, 0x1b, 0xd3, 0x8a, 0xbf, 0xf8, 0x48, 0x30, 0xa1, 0x80, 0xb0, 0xf6, 0xf5, 0x18, 0x80, - 0xb1, 0x12, 0x72, 0x2d, 0xab, 0x85, 0x8d, 0x1d, 0x78, 0x0e, 0x14, 0x1c, 0x6c, 0x87, 0xd1, 0x1a, - 0xa5, 0xd2, 0xc7, 0xd8, 0x26, 0x48, 0x4a, 0xe0, 0xf7, 0x1a, 0x80, 0x1d, 0x79, 0x15, 0xed, 0x55, - 0xc7, 0x71, 0x39, 0x16, 0xa7, 0x13, 0x3a, 0xd8, 0x1c, 0xc2, 0xc1, 0xd0, 0xb6, 0xbe, 0x95, 0x61, - 0x7d, 0xe0, 0x70, 0xbf, 0x17, 0xdf, 0x52, 0x56, 0x01, 0xe5, 0xb8, 0x02, 0x77, 0x00, 0xf0, 0x15, - 0xe7, 0xa6, 0xab, 0x12, 0xfe, 0xf8, 0xd5, 0x24, 0x74, 0xe7, 0x9e, 0xeb, 0xbc, 0xa0, 0x66, 0x5c, - 0xb2, 0x50, 0x44, 0x89, 0x12, 0xf4, 0x8b, 0x0f, 0xc0, 0xc2, 0x00, 0xbf, 0xe1, 0x69, 0x30, 0xb6, - 0x43, 0x7a, 0xc1, 0x51, 0x22, 0xf1, 0x13, 0xce, 0x83, 0x62, 0x17, 0x5b, 0x1d, 0x12, 0x64, 0x33, - 0x0a, 0x3e, 0xee, 0x8c, 0xde, 0xd2, 0x6a, 0xbf, 0x17, 0x93, 0x91, 0x25, 0x2a, 0x17, 0xbc, 0x08, - 0x4a, 0x3e, 0xf1, 0x2c, 0x6a, 0x60, 0x26, 0x39, 0x8a, 0x8d, 0x53, 0x22, 0x4a, 0x90, 0x5a, 0x43, - 0x91, 0x14, 0x7e, 0x06, 0x4a, 0x8c, 0x58, 0xc4, 0xe0, 0xae, 0xaf, 0x8a, 0xe7, 0xb5, 0x63, 0xc6, - 0x20, 0x6e, 0x11, 0xab, 0xa9, 0xa0, 0x01, 0x7d, 0xf8, 0x85, 0x22, 0x4a, 0xf8, 0x29, 0x28, 0x71, - 0x62, 0x7b, 0x16, 0xe6, 0x44, 0x9d, 0xe6, 0x95, 0xc1, 0xa7, 0x29, 0x68, 0x37, 0xdc, 0xf6, 0xa6, - 0x02, 0xc8, 0x8a, 0x1c, 0x45, 0x78, 0xb8, 0x8a, 0x22, 0x42, 0x48, 0x41, 0x89, 0x71, 0xf1, 0xec, - 0x98, 0x3d, 0x59, 0x8b, 0xa6, 0x96, 0x57, 0x86, 0xaa, 0xcd, 0x01, 0x45, 0x6c, 0x2a, 0x5c, 0x41, - 0x11, 0x3d, 0x5c, 0x05, 0x33, 0x36, 0x75, 0x10, 0xc1, 0xed, 0x5e, 0x93, 0x18, 0xae, 0xd3, 0x66, - 0xb2, 0xa8, 0x15, 0x1b, 0x0b, 0x0a, 0x34, 0xb3, 0x9e, 0x16, 0xa3, 0x7e, 0x7d, 0xb8, 0x06, 0xe6, - 0x7d, 0xd2, 0xa5, 0x8c, 0xba, 0xce, 0x87, 0x94, 0x71, 0xd7, 0xef, 0xad, 0x51, 0x9b, 0x72, 0x59, - 0xea, 0x8a, 0x8d, 0xca, 0xc1, 0xde, 0xd2, 0x3c, 0xca, 0x91, 0xa3, 0x5c, 0x94, 0xa8, 0xc2, 0x1e, - 0xee, 0x30, 0xd2, 0x96, 0xa5, 0xab, 0x14, 0x57, 0xe1, 0x0d, 0xb9, 0x8a, 0x94, 0x14, 0x9a, 0xa9, - 0x80, 0x2e, 0xfd, 0xb5, 0x80, 0x2e, 0x0f, 0x0e, 0x66, 0xb8, 0x05, 0x16, 0x3c, 0xdf, 0x35, 0x7d, - 0xc2, 0xd8, 0x7d, 0x82, 0xdb, 0x16, 0x75, 0x48, 0x78, 0x52, 0x93, 0x72, 0x87, 0x67, 0x0f, 0xf6, - 0x96, 0x16, 0x36, 0xf2, 0x55, 0xd0, 0x20, 0x6c, 0xed, 0xdb, 0x02, 0x38, 0xdd, 0xff, 0x8e, 0xc2, - 0x8f, 0x00, 0x74, 0x5b, 0xb2, 0xef, 0x69, 0x3f, 0x0c, 0x3a, 0x0f, 0xea, 0x3a, 0x32, 0xd0, 0xc7, - 0xe2, 0x8c, 0x7f, 0x9c, 0xd1, 0x40, 0x39, 0x28, 0x78, 0x39, 0x91, 0x2a, 0xa3, 0xd2, 0xd1, 0x28, - 0x0e, 0x72, 0xd2, 0x65, 0x15, 0xcc, 0xa8, 0xaa, 0x11, 0x0a, 0x65, 0x58, 0x27, 0xe2, 0x60, 0x2b, - 0x2d, 0x46, 0xfd, 0xfa, 0xf0, 0x21, 0x98, 0xc5, 0x5d, 0x4c, 0x2d, 0xdc, 0xb2, 0x48, 0x44, 0x52, - 0x90, 0x24, 0xff, 0x56, 0x24, 0xb3, 0xab, 0xfd, 0x0a, 0x28, 0x8b, 0x81, 0xeb, 0x60, 0xae, 0xe3, - 0x64, 0xa9, 0x82, 0xb8, 0x3c, 0xab, 0xa8, 0xe6, 0xb6, 0xb2, 0x2a, 0x28, 0x0f, 0x07, 0x3d, 0x00, - 0x8c, 0xf0, 0xc9, 0x67, 0x95, 0x71, 0x59, 0x93, 0xdf, 0x1b, 0x22, 0x9f, 0xa2, 0xbe, 0x21, 0xae, - 0x7f, 0xd1, 0x12, 0x43, 0x09, 0x1b, 0x70, 0x05, 0x4c, 0xfb, 0x22, 0x43, 0x22, 0xd7, 0x27, 0xa4, - 0xeb, 0xff, 0x52, 0xb0, 0x69, 0x94, 0x14, 0xa2, 0xb4, 0x6e, 0xed, 0x57, 0x2d, 0xf9, 0x08, 0x85, - 0x29, 0x0b, 0xef, 0xa4, 0x5a, 0xa6, 0xf3, 0x7d, 0x2d, 0xd3, 0x99, 0x2c, 0x22, 0xd1, 0x31, 0xf5, - 0xc0, 0xb4, 0x08, 0x68, 0xea, 0x98, 0xc1, 0x25, 0xaa, 0x82, 0xf8, 0xfe, 0x89, 0xd2, 0x25, 0x42, - 0x27, 0x9e, 0xd1, 0x59, 0xb9, 0x9b, 0xa4, 0x10, 0xa5, 0x2d, 0xd5, 0xee, 0x82, 0x72, 0x3a, 0xd7, - 0x82, 0xb8, 0x0c, 0x12, 0x5f, 0x45, 0x76, 0x22, 0x2e, 0x83, 0x75, 0x14, 0x69, 0xd4, 0xde, 0x68, - 0x60, 0x61, 0x80, 0x75, 0x68, 0x81, 0xb2, 0x8d, 0x5f, 0x25, 0xe2, 0xe0, 0xc8, 0x1e, 0x5c, 0x4c, - 0x1e, 0x7a, 0x30, 0x79, 0xe8, 0x8f, 0x1c, 0xfe, 0xd8, 0x6f, 0x72, 0x9f, 0x3a, 0x66, 0x03, 0x8a, - 0xfe, 0x6a, 0x3d, 0xc5, 0x85, 0xfa, 0xb8, 0xe1, 0x33, 0x50, 0xb2, 0xf1, 0xab, 0x66, 0xc7, 0x37, - 0xc3, 0xf3, 0x3b, 0xb9, 0x1d, 0xf9, 0x9a, 0xac, 0x2b, 0x16, 0x14, 0xf1, 0xd5, 0xbe, 0x1b, 0x05, - 0xc5, 0xa6, 0x81, 0x2d, 0xf2, 0x0e, 0x26, 0x8a, 0xcd, 0xd4, 0x44, 0xb1, 0x7c, 0xec, 0x18, 0x90, - 0xfe, 0x0d, 0x1c, 0x26, 0x9e, 0xf7, 0x0d, 0x13, 0xd7, 0x4f, 0xc8, 0x7b, 0xf8, 0x1c, 0x71, 0x1b, - 0x4c, 0x46, 0xe6, 0x53, 0x85, 0x4d, 0x3b, 0xaa, 0xb0, 0xd5, 0x7e, 0x1c, 0x05, 0x53, 0x09, 0x13, - 0x27, 0x43, 0x43, 0x2f, 0xd5, 0x45, 0x88, 0xca, 0xd1, 0x18, 0x66, 0x63, 0x7a, 0xd8, 0x41, 0x04, - 0xcd, 0x5b, 0xfc, 0x20, 0x67, 0x1b, 0x8b, 0xbb, 0xa0, 0xcc, 0xb1, 0x6f, 0x12, 0x1e, 0xca, 0xe4, - 0x81, 0x4e, 0xc6, 0x63, 0xc0, 0x66, 0x4a, 0x8a, 0xfa, 0xb4, 0x17, 0x57, 0xc0, 0x74, 0xca, 0xd8, - 0x89, 0x3a, 0xae, 0x9f, 0xc5, 0x61, 0x71, 0xcc, 0xc9, 0x8b, 0x8e, 0xd5, 0x24, 0xef, 0x62, 0xbe, - 0x7d, 0x96, 0x8a, 0xc6, 0x5b, 0xc7, 0x3f, 0xdc, 0xd8, 0xcb, 0x81, 0x31, 0xd9, 0xea, 0x8b, 0xc9, - 0x3b, 0x43, 0xb1, 0x1f, 0x1e, 0x99, 0xbf, 0x68, 0x60, 0x26, 0xa1, 0xfd, 0x0e, 0xc6, 0x9f, 0xa7, - 0xe9, 0xf1, 0xe7, 0xfa, 0x30, 0x9b, 0x1a, 0x30, 0xff, 0xfc, 0x50, 0x48, 0x6d, 0xe6, 0x1f, 0xd4, - 0x71, 0x7f, 0xa9, 0x81, 0xf9, 0xae, 0x6b, 0x75, 0x6c, 0x72, 0xcf, 0xc2, 0xd4, 0x0e, 0x35, 0x44, - 0xff, 0x72, 0xc4, 0x8c, 0x29, 0x2d, 0x11, 0x9f, 0x51, 0xc6, 0x89, 0xc3, 0x9f, 0xc4, 0x1c, 0x8d, - 0xff, 0x28, 0x7b, 0xf3, 0x4f, 0x72, 0x88, 0x51, 0xae, 0x39, 0xf8, 0x7f, 0x30, 0x25, 0x1a, 0x39, - 0x6a, 0x10, 0x31, 0x5d, 0xaa, 0xff, 0x17, 0xe6, 0x14, 0xd1, 0x54, 0x33, 0x16, 0xa1, 0xa4, 0x1e, - 0xdc, 0x06, 0x73, 0x9e, 0xdb, 0x5e, 0xc7, 0x0e, 0x36, 0x89, 0x78, 0x1a, 0x37, 0xe4, 0xbf, 0x58, - 0xb2, 0x03, 0x9f, 0x6c, 0xdc, 0x08, 0x3b, 0xa6, 0x8d, 0xac, 0xca, 0x5b, 0xd1, 0xba, 0x66, 0x97, - 0x65, 0xef, 0x90, 0x47, 0x59, 0xfb, 0x4a, 0x03, 0xb3, 0x99, 0xec, 0x80, 0x1f, 0x1c, 0xd2, 0xb7, - 0x9e, 0xf9, 0xbb, 0x7a, 0xd6, 0xc6, 0xa5, 0xdd, 0xfd, 0xea, 0xc8, 0xeb, 0xfd, 0xea, 0xc8, 0x6f, - 0xfb, 0xd5, 0x91, 0x2f, 0x0e, 0xaa, 0xda, 0xee, 0x41, 0x55, 0x7b, 0x7d, 0x50, 0xd5, 0xfe, 0x38, - 0xa8, 0x6a, 0xdf, 0xbc, 0xa9, 0x8e, 0x3c, 0x9b, 0x50, 0xb1, 0xff, 0x67, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xdb, 0x8b, 0x00, 0x6d, 0xbc, 0x15, 0x00, 0x00, + 0xe4, 0xe3, 0x21, 0x59, 0xbd, 0x38, 0x79, 0xf9, 0xb0, 0x8b, 0xa0, 0x96, 0x93, 0xa6, 0x29, 0xec, + 0xc6, 0xa0, 0xec, 0xa0, 0x49, 0x53, 0xa0, 0xd4, 0x8a, 0x59, 0x33, 0xde, 0x2f, 0x2c, 0x29, 0x21, + 0xba, 0xf5, 0xd2, 0x43, 0x81, 0x1e, 0xfa, 0x0f, 0x14, 0xed, 0xb9, 0x28, 0xd0, 0x7f, 0xc3, 0x68, + 0x2f, 0x41, 0x4f, 0x45, 0x0f, 0x46, 0xed, 0xfc, 0x17, 0x39, 0x15, 0xe4, 0x72, 0xbf, 0xb4, 0x92, + 0x2d, 0xab, 0x68, 0x2e, 0xbd, 0x69, 0x39, 0xf3, 0xfb, 0xcd, 0x90, 0x9c, 0x19, 0xce, 0x08, 0xdc, + 0xde, 0xbb, 0xc3, 0x74, 0xea, 0x56, 0xf7, 0x5a, 0x0d, 0xe2, 0x3b, 0x84, 0x13, 0x56, 0xf5, 0xf6, + 0xcc, 0x2a, 0xf6, 0x28, 0xab, 0x62, 0xcf, 0x63, 0xd5, 0xf6, 0xf5, 0x06, 0xe1, 0xf8, 0x7a, 0xd5, + 0x24, 0x0e, 0xf1, 0x31, 0x27, 0x4d, 0xdd, 0xf3, 0x5d, 0xee, 0xc2, 0x4b, 0x01, 0x50, 0x8f, 0x81, + 0xba, 0xb7, 0x67, 0xea, 0x02, 0xa8, 0x0b, 0xa0, 0xae, 0x80, 0x8b, 0xd7, 0x4c, 0xca, 0x77, 0x5b, + 0x0d, 0xdd, 0x70, 0xed, 0xaa, 0xe9, 0x9a, 0x6e, 0x55, 0xe2, 0x1b, 0xad, 0x17, 0xf2, 0x4b, 0x7e, + 0xc8, 0x5f, 0x01, 0xef, 0xe2, 0x4d, 0xe5, 0x10, 0xf6, 0xa8, 0x8d, 0x8d, 0x5d, 0xea, 0x10, 0xbf, + 0x13, 0xbb, 0x64, 0x13, 0x8e, 0xab, 0xed, 0x8c, 0x37, 0x8b, 0xd5, 0x7e, 0x28, 0xbf, 0xe5, 0x70, + 0x6a, 0x93, 0x0c, 0xe0, 0xd6, 0x49, 0x00, 0x66, 0xec, 0x12, 0x1b, 0x67, 0x70, 0x37, 0xfa, 0xe1, + 0x5a, 0x9c, 0x5a, 0x55, 0xea, 0x70, 0xc6, 0xfd, 0x0c, 0x28, 0xb1, 0x27, 0x46, 0xfc, 0x36, 0xf1, + 0xe3, 0x0d, 0x91, 0x57, 0xd8, 0xf6, 0x2c, 0xd2, 0x6b, 0x4f, 0x57, 0xfb, 0x5e, 0x4d, 0x2f, 0xed, + 0xbb, 0xc7, 0x5c, 0xa4, 0xe7, 0x5a, 0xd4, 0xe8, 0xf4, 0xbb, 0xca, 0xca, 0x8f, 0xa3, 0x00, 0xdc, + 0x27, 0x9e, 0xe5, 0x76, 0x6c, 0xe2, 0x70, 0xf8, 0x39, 0x28, 0x88, 0x63, 0x6e, 0x62, 0x8e, 0x4b, + 0xda, 0x05, 0xed, 0xf2, 0xd4, 0xf2, 0xff, 0x74, 0x75, 0xd9, 0xc9, 0x5d, 0xc7, 0xd7, 0x2d, 0xb4, + 0xf5, 0xf6, 0x75, 0xfd, 0x71, 0xe3, 0x25, 0x31, 0xf8, 0x26, 0xe1, 0xb8, 0x06, 0xf7, 0x0f, 0x96, + 0x46, 0x8e, 0x0e, 0x96, 0x40, 0xbc, 0x86, 0x22, 0x56, 0xf8, 0x14, 0xe4, 0x98, 0x47, 0x8c, 0xd2, + 0xa8, 0x64, 0xbf, 0xad, 0x0f, 0x18, 0x4a, 0x7a, 0xec, 0x64, 0xdd, 0x23, 0x46, 0xed, 0x8c, 0x32, + 0x92, 0x13, 0x5f, 0x48, 0x52, 0x42, 0x0c, 0xc6, 0x19, 0xc7, 0xbc, 0xc5, 0x4a, 0x63, 0x92, 0xfc, + 0xee, 0x30, 0xe4, 0x92, 0xa0, 0x56, 0x54, 0xf4, 0xe3, 0xc1, 0x37, 0x52, 0xc4, 0x95, 0xc3, 0x31, + 0x30, 0x17, 0x2b, 0xaf, 0xbb, 0x4e, 0x93, 0x72, 0xea, 0x3a, 0x70, 0x15, 0xe4, 0x78, 0xc7, 0x23, + 0xf2, 0xcc, 0x26, 0x6b, 0x97, 0x42, 0xe7, 0xb6, 0x3b, 0x1e, 0x79, 0x7b, 0xb0, 0xb4, 0xd0, 0x03, + 0x22, 0x44, 0x48, 0x82, 0xe0, 0x93, 0xc8, 0xef, 0x51, 0x09, 0xbf, 0x97, 0x36, 0xfe, 0xf6, 0x60, + 0xe9, 0xd8, 0x70, 0xd0, 0x23, 0xce, 0xb4, 0xb3, 0xf0, 0x22, 0x18, 0xf7, 0x09, 0x66, 0xae, 0x53, + 0xca, 0x49, 0xde, 0x68, 0x53, 0x48, 0xae, 0x22, 0x25, 0x85, 0x57, 0xc0, 0x84, 0x4d, 0x18, 0xc3, + 0x26, 0x29, 0xe5, 0xa5, 0xe2, 0x8c, 0x52, 0x9c, 0xd8, 0x0c, 0x96, 0x51, 0x28, 0x87, 0x2f, 0x41, + 0xd1, 0xc2, 0x8c, 0xef, 0x78, 0x4d, 0xcc, 0xc9, 0x36, 0xb5, 0x49, 0x69, 0x5c, 0x1e, 0xf5, 0x7f, + 0x07, 0x8b, 0x12, 0x81, 0xa8, 0x9d, 0x53, 0xec, 0xc5, 0x8d, 0x14, 0x13, 0xea, 0x62, 0x86, 0x6d, + 0x00, 0xc5, 0xca, 0xb6, 0x8f, 0x1d, 0x16, 0x1c, 0x99, 0xb0, 0x37, 0x71, 0x6a, 0x7b, 0x8b, 0xca, + 0x1e, 0xdc, 0xc8, 0xb0, 0xa1, 0x1e, 0x16, 0x2a, 0xfb, 0x1a, 0x28, 0xc6, 0x17, 0xb6, 0x41, 0x19, + 0x87, 0xcf, 0x33, 0x69, 0xa1, 0x0f, 0xe6, 0x80, 0x40, 0xcb, 0xa4, 0x38, 0xab, 0x9c, 0x28, 0x84, + 0x2b, 0x89, 0x94, 0xf8, 0x04, 0xe4, 0x29, 0x27, 0xb6, 0xb8, 0xfe, 0xb1, 0xcb, 0x53, 0xcb, 0x37, + 0x86, 0x08, 0xdb, 0xda, 0xb4, 0xe2, 0xcf, 0x3f, 0x12, 0x4c, 0x28, 0x20, 0xac, 0x7c, 0x3d, 0x06, + 0x60, 0xac, 0x84, 0x5c, 0xcb, 0x6a, 0x60, 0x63, 0x0f, 0x5e, 0x00, 0x39, 0x07, 0xdb, 0x61, 0xb4, + 0x46, 0xa9, 0xf4, 0x31, 0xb6, 0x09, 0x92, 0x12, 0xf8, 0x9d, 0x06, 0x60, 0x4b, 0x5e, 0x45, 0x73, + 0xcd, 0x71, 0x5c, 0x8e, 0xc5, 0xe9, 0x84, 0x0e, 0xd6, 0x87, 0x70, 0x30, 0xb4, 0xad, 0xef, 0x64, + 0x58, 0x1f, 0x38, 0xdc, 0xef, 0xc4, 0xb7, 0x94, 0x55, 0x40, 0x3d, 0x5c, 0x81, 0x7b, 0x00, 0xf8, + 0x8a, 0x73, 0xdb, 0x55, 0x09, 0x3f, 0x78, 0x35, 0x09, 0xdd, 0x59, 0x77, 0x9d, 0x17, 0xd4, 0x8c, + 0x4b, 0x16, 0x8a, 0x28, 0x51, 0x82, 0x7e, 0xf1, 0x01, 0x58, 0xe8, 0xe3, 0x37, 0x3c, 0x0b, 0xc6, + 0xf6, 0x48, 0x27, 0x38, 0x4a, 0x24, 0x7e, 0xc2, 0x79, 0x90, 0x6f, 0x63, 0xab, 0x45, 0x82, 0x6c, + 0x46, 0xc1, 0xc7, 0xca, 0xe8, 0x1d, 0xad, 0xf2, 0x7b, 0x3e, 0x19, 0x59, 0xa2, 0x72, 0xc1, 0xcb, + 0xa0, 0xe0, 0x13, 0xcf, 0xa2, 0x06, 0x66, 0x92, 0x23, 0x5f, 0x3b, 0x23, 0xa2, 0x04, 0xa9, 0x35, + 0x14, 0x49, 0xe1, 0x67, 0xa0, 0xc0, 0x88, 0x45, 0x0c, 0xee, 0xfa, 0xaa, 0x78, 0xde, 0x18, 0x30, + 0x06, 0x71, 0x83, 0x58, 0x75, 0x05, 0x0d, 0xe8, 0xc3, 0x2f, 0x14, 0x51, 0xc2, 0x4f, 0x41, 0x81, + 0x13, 0xdb, 0xb3, 0x30, 0x27, 0xea, 0x34, 0xaf, 0xf5, 0x3f, 0x4d, 0x41, 0xbb, 0xe5, 0x36, 0xb7, + 0x15, 0x40, 0x56, 0xe4, 0x28, 0xc2, 0xc3, 0x55, 0x14, 0x11, 0x42, 0x0a, 0x0a, 0x8c, 0x8b, 0x67, + 0xc7, 0xec, 0xc8, 0x5a, 0x34, 0xb5, 0xbc, 0x3a, 0x54, 0x6d, 0x0e, 0x28, 0x62, 0x53, 0xe1, 0x0a, + 0x8a, 0xe8, 0xe1, 0x1a, 0x98, 0xb1, 0xa9, 0x83, 0x08, 0x6e, 0x76, 0xea, 0xc4, 0x70, 0x9d, 0x26, + 0x93, 0x45, 0x2d, 0x5f, 0x5b, 0x50, 0xa0, 0x99, 0xcd, 0xb4, 0x18, 0x75, 0xeb, 0xc3, 0x0d, 0x30, + 0xef, 0x93, 0x36, 0x65, 0xd4, 0x75, 0x3e, 0xa4, 0x8c, 0xbb, 0x7e, 0x67, 0x83, 0xda, 0x94, 0xcb, + 0x52, 0x97, 0xaf, 0x95, 0x8e, 0x0e, 0x96, 0xe6, 0x51, 0x0f, 0x39, 0xea, 0x89, 0x12, 0x55, 0xd8, + 0xc3, 0x2d, 0x46, 0x9a, 0xb2, 0x74, 0x15, 0xe2, 0x2a, 0xbc, 0x25, 0x57, 0x91, 0x92, 0x42, 0x33, + 0x15, 0xd0, 0x85, 0xbf, 0x16, 0xd0, 0xc5, 0xfe, 0xc1, 0x0c, 0x77, 0xc0, 0x82, 0xe7, 0xbb, 0xa6, + 0x4f, 0x18, 0xbb, 0x4f, 0x70, 0xd3, 0xa2, 0x0e, 0x09, 0x4f, 0x6a, 0x52, 0xee, 0xf0, 0xfc, 0xd1, + 0xc1, 0xd2, 0xc2, 0x56, 0x6f, 0x15, 0xd4, 0x0f, 0x5b, 0xf9, 0x35, 0x07, 0xce, 0x76, 0xbf, 0xa3, + 0xf0, 0x23, 0x00, 0xdd, 0x86, 0xec, 0x7b, 0x9a, 0x0f, 0x83, 0xce, 0x83, 0xba, 0x8e, 0x0c, 0xf4, + 0xb1, 0x38, 0xe3, 0x1f, 0x67, 0x34, 0x50, 0x0f, 0x14, 0xbc, 0x9a, 0x48, 0x95, 0x51, 0xe9, 0x68, + 0x14, 0x07, 0x3d, 0xd2, 0x65, 0x0d, 0xcc, 0xa8, 0xaa, 0x11, 0x0a, 0x65, 0x58, 0x27, 0xe2, 0x60, + 0x27, 0x2d, 0x46, 0xdd, 0xfa, 0xf0, 0x21, 0x98, 0xc5, 0x6d, 0x4c, 0x2d, 0xdc, 0xb0, 0x48, 0x44, + 0x92, 0x93, 0x24, 0xff, 0x56, 0x24, 0xb3, 0x6b, 0xdd, 0x0a, 0x28, 0x8b, 0x81, 0x9b, 0x60, 0xae, + 0xe5, 0x64, 0xa9, 0x82, 0xb8, 0x3c, 0xaf, 0xa8, 0xe6, 0x76, 0xb2, 0x2a, 0xa8, 0x17, 0x0e, 0x7a, + 0x00, 0x18, 0xe1, 0x93, 0xcf, 0x4a, 0xe3, 0xb2, 0x26, 0xbf, 0x37, 0x44, 0x3e, 0x45, 0x7d, 0x43, + 0x5c, 0xff, 0xa2, 0x25, 0x86, 0x12, 0x36, 0xe0, 0x2a, 0x98, 0xf6, 0x45, 0x86, 0x44, 0xae, 0x4f, + 0x48, 0xd7, 0xff, 0xa5, 0x60, 0xd3, 0x28, 0x29, 0x44, 0x69, 0x5d, 0xb8, 0x02, 0x8a, 0x86, 0x6b, + 0x59, 0x32, 0x33, 0xd6, 0xdd, 0x96, 0xc3, 0x65, 0x70, 0x8f, 0xd5, 0xa0, 0xe8, 0x01, 0xd6, 0x53, + 0x12, 0xd4, 0xa5, 0x59, 0xf9, 0x45, 0x4b, 0x3e, 0x60, 0x61, 0xba, 0xc3, 0x95, 0x54, 0xbb, 0x75, + 0xb1, 0xab, 0xdd, 0x3a, 0x97, 0x45, 0x24, 0xba, 0xad, 0x0e, 0x98, 0x16, 0xc9, 0x40, 0x1d, 0x33, + 0x08, 0x00, 0x55, 0x4c, 0xdf, 0x3f, 0x55, 0xaa, 0x45, 0xe8, 0xc4, 0x13, 0x3c, 0x2b, 0x4f, 0x22, + 0x29, 0x44, 0x69, 0x4b, 0x95, 0x7b, 0xa0, 0x98, 0xce, 0xd3, 0x20, 0xa6, 0x83, 0xa2, 0xa1, 0xb2, + 0x22, 0x11, 0xd3, 0xc1, 0x3a, 0x8a, 0x34, 0x2a, 0x6f, 0x34, 0xb0, 0xd0, 0xc7, 0x3a, 0xb4, 0x40, + 0xd1, 0xc6, 0xaf, 0x12, 0x31, 0x74, 0x62, 0xff, 0x2e, 0xa6, 0x16, 0x3d, 0x98, 0x5a, 0xf4, 0x47, + 0x0e, 0x7f, 0xec, 0xd7, 0xb9, 0x4f, 0x1d, 0x33, 0xb8, 0x97, 0xcd, 0x14, 0x17, 0xea, 0xe2, 0x86, + 0xcf, 0x40, 0xc1, 0xc6, 0xaf, 0xea, 0x2d, 0xdf, 0x0c, 0xcf, 0xef, 0xf4, 0x76, 0xe4, 0x4b, 0xb4, + 0xa9, 0x58, 0x50, 0xc4, 0x57, 0xf9, 0x76, 0x14, 0xe4, 0xeb, 0x06, 0xb6, 0xc8, 0x3b, 0x98, 0x46, + 0xb6, 0x53, 0xd3, 0xc8, 0xf2, 0xc0, 0x31, 0x20, 0xfd, 0xeb, 0x3b, 0x88, 0x3c, 0xef, 0x1a, 0x44, + 0x6e, 0x9e, 0x92, 0xf7, 0xf8, 0x19, 0xe4, 0x2e, 0x98, 0x8c, 0xcc, 0xa7, 0x8a, 0xa2, 0x76, 0x52, + 0x51, 0xac, 0xfc, 0x30, 0x0a, 0xa6, 0x12, 0x26, 0x4e, 0x87, 0x86, 0x5e, 0xaa, 0x03, 0x11, 0x55, + 0xa7, 0x36, 0xcc, 0xc6, 0xf4, 0xb0, 0xfb, 0x08, 0x1a, 0xbf, 0xf8, 0x31, 0xcf, 0x36, 0x25, 0xf7, + 0x40, 0x91, 0x63, 0xdf, 0x24, 0x3c, 0x94, 0xc9, 0x03, 0x9d, 0x8c, 0x47, 0x88, 0xed, 0x94, 0x14, + 0x75, 0x69, 0x2f, 0xae, 0x82, 0xe9, 0x94, 0xb1, 0x53, 0x75, 0x6b, 0x3f, 0x89, 0xc3, 0xe2, 0x98, + 0x93, 0x17, 0x2d, 0xab, 0x4e, 0xde, 0xc5, 0x6c, 0xfc, 0x2c, 0x15, 0x8d, 0x77, 0x06, 0x3f, 0xdc, + 0xd8, 0xcb, 0xbe, 0x31, 0xd9, 0xe8, 0x8a, 0xc9, 0x95, 0xa1, 0xd8, 0x8f, 0x8f, 0xcc, 0x9f, 0x35, + 0x30, 0x93, 0xd0, 0x7e, 0x07, 0xa3, 0xd3, 0xd3, 0xf4, 0xe8, 0x74, 0x73, 0x98, 0x4d, 0xf5, 0x99, + 0x9d, 0xbe, 0xcf, 0xa5, 0x36, 0xf3, 0x0f, 0xea, 0xd6, 0xbf, 0xd4, 0xc0, 0x7c, 0xdb, 0xb5, 0x5a, + 0x36, 0x59, 0xb7, 0x30, 0xb5, 0x43, 0x0d, 0xd1, 0xfb, 0x9c, 0x30, 0x9f, 0x4a, 0x4b, 0xc4, 0x67, + 0x94, 0x71, 0xe2, 0xf0, 0x27, 0x31, 0x47, 0xed, 0x3f, 0xca, 0xde, 0xfc, 0x93, 0x1e, 0xc4, 0xa8, + 0xa7, 0x39, 0xf8, 0x7f, 0x30, 0x25, 0x9a, 0x40, 0x6a, 0x10, 0x31, 0x99, 0xaa, 0xff, 0x26, 0xe6, + 0x14, 0xd1, 0x54, 0x3d, 0x16, 0xa1, 0xa4, 0x1e, 0xdc, 0x05, 0x73, 0x9e, 0xdb, 0xdc, 0xc4, 0x0e, + 0x36, 0x89, 0x78, 0x1a, 0xb7, 0xe4, 0x3f, 0x60, 0xb2, 0x7b, 0x9f, 0xac, 0xdd, 0x0a, 0xbb, 0xad, + 0xad, 0xac, 0xca, 0x5b, 0xd1, 0xf6, 0x66, 0x97, 0x65, 0xef, 0xd0, 0x8b, 0xb2, 0xf2, 0x95, 0x06, + 0x66, 0x33, 0xd9, 0x01, 0x3f, 0x38, 0xa6, 0xe7, 0x3d, 0xf7, 0x77, 0xf5, 0xbb, 0xb5, 0x2b, 0xfb, + 0x87, 0xe5, 0x91, 0xd7, 0x87, 0xe5, 0x91, 0xdf, 0x0e, 0xcb, 0x23, 0x5f, 0x1c, 0x95, 0xb5, 0xfd, + 0xa3, 0xb2, 0xf6, 0xfa, 0xa8, 0xac, 0xfd, 0x71, 0x54, 0xd6, 0xbe, 0x79, 0x53, 0x1e, 0x79, 0x36, + 0xa1, 0x62, 0xff, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf2, 0xdb, 0x2f, 0x40, 0xf8, 0x15, 0x00, + 0x00, } diff --git a/pkg/apis/apps/v1beta1/generated.proto b/pkg/apis/apps/v1beta1/generated.proto index ad1d271464c..5e3d4b99fe2 100644 --- a/pkg/apis/apps/v1beta1/generated.proto +++ b/pkg/apis/apps/v1beta1/generated.proto @@ -170,6 +170,12 @@ message DeploymentStatus { // +patchMergeKey=type // +patchStrategy=merge repeated DeploymentCondition conditions = 6; + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + optional int64 collisionCount = 8; } // DeploymentStrategy describes how to replace existing pods with new ones. diff --git a/pkg/apis/apps/v1beta1/types.generated.go b/pkg/apis/apps/v1beta1/types.generated.go index db45c0fa258..4ee127c438f 100644 --- a/pkg/apis/apps/v1beta1/types.generated.go +++ b/pkg/apis/apps/v1beta1/types.generated.go @@ -4672,7 +4672,7 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [7]bool + var yyq2 [8]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.ObservedGeneration != 0 @@ -4682,9 +4682,10 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[4] = x.AvailableReplicas != 0 yyq2[5] = x.UnavailableReplicas != 0 yyq2[6] = len(x.Conditions) != 0 + yyq2[7] = x.CollisionCount != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(7) + r.EncodeArrayStart(8) } else { yynn2 = 0 for _, b := range yyq2 { @@ -4878,6 +4879,41 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[7] { + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy25 := *x.CollisionCount + yym26 := z.EncBinary() + _ = yym26 + if false { + } else { + r.EncodeInt(int64(yy25)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("collisionCount")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy27 := *x.CollisionCount + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeInt(int64(yy27)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -5023,6 +5059,22 @@ func (x *DeploymentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv16), d) } } + case "collisionCount": + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym19 := z.DecBinary() + _ = yym19 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -5034,16 +5086,16 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj18 int - var yyb18 bool - var yyhl18 bool = l >= 0 - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + var yyj20 int + var yyb20 bool + var yyhl20 bool = l >= 0 + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5051,21 +5103,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.ObservedGeneration = 0 } else { - yyv19 := &x.ObservedGeneration - yym20 := z.DecBinary() - _ = yym20 + yyv21 := &x.ObservedGeneration + yym22 := z.DecBinary() + _ = yym22 if false { } else { - *((*int64)(yyv19)) = int64(r.DecodeInt(64)) + *((*int64)(yyv21)) = int64(r.DecodeInt(64)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5073,29 +5125,7 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Replicas = 0 } else { - yyv21 := &x.Replicas - yym22 := z.DecBinary() - _ = yym22 - if false { - } else { - *((*int32)(yyv21)) = int32(r.DecodeInt(32)) - } - } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l - } else { - yyb18 = r.CheckBreak() - } - if yyb18 { - z.DecSendContainerState(codecSelfer_containerArrayEnd1234) - return - } - z.DecSendContainerState(codecSelfer_containerArrayElem1234) - if r.TryDecodeAsNil() { - x.UpdatedReplicas = 0 - } else { - yyv23 := &x.UpdatedReplicas + yyv23 := &x.Replicas yym24 := z.DecBinary() _ = yym24 if false { @@ -5103,21 +5133,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv23)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.ReadyReplicas = 0 + x.UpdatedReplicas = 0 } else { - yyv25 := &x.ReadyReplicas + yyv25 := &x.UpdatedReplicas yym26 := z.DecBinary() _ = yym26 if false { @@ -5125,21 +5155,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv25)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.AvailableReplicas = 0 + x.ReadyReplicas = 0 } else { - yyv27 := &x.AvailableReplicas + yyv27 := &x.ReadyReplicas yym28 := z.DecBinary() _ = yym28 if false { @@ -5147,21 +5177,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv27)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.UnavailableReplicas = 0 + x.AvailableReplicas = 0 } else { - yyv29 := &x.UnavailableReplicas + yyv29 := &x.AvailableReplicas yym30 := z.DecBinary() _ = yym30 if false { @@ -5169,13 +5199,35 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv29)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UnavailableReplicas = 0 + } else { + yyv31 := &x.UnavailableReplicas + yym32 := z.DecBinary() + _ = yym32 + if false { + } else { + *((*int32)(yyv31)) = int32(r.DecodeInt(32)) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5183,26 +5235,52 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Conditions = nil } else { - yyv31 := &x.Conditions - yym32 := z.DecBinary() - _ = yym32 + yyv33 := &x.Conditions + yym34 := z.DecBinary() + _ = yym34 if false { } else { - h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv31), d) + h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv33), d) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym36 := z.DecBinary() + _ = yym36 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) } } for { - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj18-1, "") + z.DecStructFieldNotFound(yyj20-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -6470,7 +6548,7 @@ func (x codecSelfer1234) decSliceDeployment(v *[]Deployment, d *codec1978.Decode yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 960) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 968) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/pkg/apis/apps/v1beta1/types.go b/pkg/apis/apps/v1beta1/types.go index a4b1cdc6695..c9843eed7da 100644 --- a/pkg/apis/apps/v1beta1/types.go +++ b/pkg/apis/apps/v1beta1/types.go @@ -361,7 +361,7 @@ type DeploymentStatus struct { // field as a collision avoidance mechanism when it needs to create the name for the // newest ReplicaSet. // +optional - CollisionCount *int64 `json:"collisionCount,omitempty"` + CollisionCount *int64 `json:"collisionCount,omitempty" protobuf:"varint,8,opt,name=collisionCount"` } type DeploymentConditionType string diff --git a/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go b/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go index f40254cb749..fffd81c3168 100644 --- a/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go +++ b/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go @@ -99,6 +99,7 @@ var map_DeploymentStatus = map[string]string{ "availableReplicas": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", "unavailableReplicas": "Total number of unavailable pods targeted by this deployment.", "conditions": "Represents the latest available observations of a deployment's current state.", + "collisionCount": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", } func (DeploymentStatus) SwaggerDoc() map[string]string { diff --git a/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go b/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go index f83ca377c94..cc348e2aa77 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go @@ -184,6 +184,11 @@ func DeepCopy_v1beta1_DeploymentStatus(in interface{}, out interface{}, c *conve } } } + if in.CollisionCount != nil { + in, out := &in.CollisionCount, &out.CollisionCount + *out = new(int64) + **out = **in + } return nil } } diff --git a/pkg/apis/extensions/v1beta1/generated.pb.go b/pkg/apis/extensions/v1beta1/generated.pb.go index 8f2cb49842a..a9cd040c461 100644 --- a/pkg/apis/extensions/v1beta1/generated.pb.go +++ b/pkg/apis/extensions/v1beta1/generated.pb.go @@ -1069,6 +1069,11 @@ func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x38 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + dAtA[i] = 0x40 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + } return i, nil } @@ -2911,6 +2916,9 @@ func (m *DeploymentStatus) Size() (n int) { } } n += 1 + sovGenerated(uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + n += 1 + sovGenerated(uint64(*m.CollisionCount)) + } return n } @@ -3699,6 +3707,7 @@ func (this *DeploymentStatus) String() string { `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, }, "") return s @@ -6558,6 +6567,26 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { break } } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CollisionCount", 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.CollisionCount = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -11794,217 +11823,218 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 3379 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xdb, 0x6f, 0x1b, 0xc7, - 0xd5, 0xf7, 0x8a, 0xa4, 0x45, 0x1d, 0x59, 0x92, 0x35, 0x72, 0x64, 0x46, 0x49, 0x44, 0x67, 0x3f, - 0x7c, 0x89, 0xf3, 0x7d, 0x09, 0xf5, 0xc5, 0xf9, 0x9c, 0x26, 0x4e, 0xe2, 0x44, 0x94, 0x7c, 0x51, - 0x21, 0xc9, 0xcc, 0x90, 0x32, 0x1a, 0xe7, 0xd6, 0x15, 0x39, 0xa2, 0xd6, 0xde, 0x5b, 0x76, 0x67, - 0x15, 0x11, 0x41, 0xdb, 0x00, 0x45, 0xf3, 0x58, 0xb4, 0x2f, 0x45, 0x0a, 0xa4, 0x8f, 0x7d, 0xe8, - 0x4b, 0x9b, 0x3c, 0xb4, 0x69, 0xff, 0x82, 0xfa, 0xa1, 0x28, 0x52, 0xa0, 0x05, 0x8a, 0x22, 0x15, - 0x6a, 0x05, 0xcd, 0x3f, 0xd0, 0xe6, 0xc5, 0x4f, 0xc5, 0xcc, 0xce, 0xde, 0x77, 0x65, 0x93, 0xb2, - 0x89, 0x02, 0x7d, 0xe3, 0xce, 0x9c, 0xf3, 0x3b, 0x97, 0x39, 0x73, 0xe6, 0xcc, 0x85, 0xf0, 0xd2, + // 3402 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4b, 0x6f, 0x1c, 0xc7, + 0xb5, 0x56, 0xcf, 0x43, 0x1c, 0x1e, 0x8a, 0xa4, 0x58, 0x94, 0xa9, 0x31, 0x6d, 0x93, 0x72, 0x5f, + 0x5c, 0x5b, 0xbe, 0xd7, 0x1e, 0x5e, 0xcb, 0x57, 0x8e, 0x2d, 0xdb, 0xb2, 0x39, 0xa4, 0x1e, 0x0c, + 0x48, 0x6a, 0x5c, 0x33, 0x14, 0x62, 0xf9, 0x95, 0xe6, 0x4c, 0x71, 0xd8, 0x52, 0xbf, 0xdc, 0x5d, + 0x4d, 0x73, 0x60, 0x24, 0x31, 0x10, 0xc4, 0xcb, 0x20, 0xd9, 0x04, 0x0e, 0x90, 0x2c, 0xb3, 0xc8, + 0x26, 0xb1, 0x17, 0x89, 0x93, 0x5f, 0x10, 0x2d, 0x82, 0xc0, 0x01, 0x12, 0xc0, 0x08, 0x1c, 0x22, + 0xa2, 0x11, 0xff, 0x81, 0xc4, 0x1b, 0xad, 0x82, 0xaa, 0xae, 0x7e, 0x77, 0x53, 0x9a, 0xa1, 0x34, + 0x08, 0x90, 0x1d, 0xa7, 0xea, 0x9c, 0xef, 0x3c, 0xea, 0xd4, 0xa9, 0x53, 0x75, 0x9a, 0xf0, 0xd2, 0x8d, 0xe7, 0x9c, 0x9a, 0x6a, 0x2e, 0xdc, 0x70, 0x37, 0x89, 0x6d, 0x10, 0x4a, 0x9c, 0x05, 0xeb, 0x46, 0x77, 0x41, 0xb1, 0x54, 0x67, 0x81, 0xec, 0x52, 0x62, 0x38, 0xaa, 0x69, 0x38, 0x0b, 0x3b, 0x4f, 0x6f, 0x12, 0xaa, 0x3c, 0xbd, 0xd0, 0x25, 0x06, 0xb1, 0x15, 0x4a, 0x3a, 0x35, 0xcb, 0x36, 0xa9, 0x89, 0x9e, 0xf2, 0xd8, 0x6b, 0x21, 0x7b, 0xcd, 0xba, 0xd1, 0xad, 0x31, 0xf6, 0x5a, 0xc8, - 0x5e, 0x13, 0xec, 0x73, 0x4f, 0x75, 0x55, 0xba, 0xed, 0x6e, 0xd6, 0xda, 0xa6, 0xbe, 0xd0, 0x35, - 0xbb, 0xe6, 0x02, 0x47, 0xd9, 0x74, 0xb7, 0xf8, 0x17, 0xff, 0xe0, 0xbf, 0x3c, 0xf4, 0xb9, 0xff, - 0x17, 0xca, 0x29, 0x96, 0xaa, 0x2b, 0xed, 0x6d, 0xd5, 0x20, 0x76, 0xcf, 0x57, 0x6f, 0xc1, 0x26, - 0x8e, 0xe9, 0xda, 0x6d, 0x92, 0xd4, 0xe9, 0x40, 0x2e, 0x67, 0x41, 0x27, 0x54, 0x59, 0xd8, 0x49, - 0x59, 0x32, 0xb7, 0x90, 0xc7, 0x65, 0xbb, 0x06, 0x55, 0xf5, 0xb4, 0x98, 0x67, 0xef, 0xc4, 0xe0, - 0xb4, 0xb7, 0x89, 0xae, 0xa4, 0xf8, 0x9e, 0xc9, 0xe3, 0x73, 0xa9, 0xaa, 0x2d, 0xa8, 0x06, 0x75, - 0xa8, 0x7d, 0x90, 0x4d, 0x0e, 0xb1, 0x77, 0x88, 0x1d, 0x1d, 0x25, 0x45, 0xb7, 0x34, 0x92, 0x65, - 0xd3, 0x93, 0xb9, 0x83, 0x9b, 0x45, 0xfd, 0xfc, 0x01, 0xa1, 0x60, 0x99, 0x9a, 0xda, 0xee, 0xe5, - 0x85, 0x81, 0x5c, 0x03, 0x58, 0x6c, 0xac, 0x5c, 0x25, 0x36, 0x1b, 0x6e, 0x74, 0x0a, 0x8a, 0x86, - 0xa2, 0x93, 0x8a, 0x74, 0x4a, 0x3a, 0x3d, 0x56, 0x3f, 0x76, 0x73, 0xaf, 0x7a, 0x64, 0x7f, 0xaf, - 0x5a, 0x5c, 0x57, 0x74, 0x82, 0x79, 0x8f, 0xfc, 0x63, 0x09, 0x1e, 0x5c, 0x72, 0x1d, 0x6a, 0xea, - 0x6b, 0x84, 0xda, 0x6a, 0x7b, 0xc9, 0xb5, 0x6d, 0x62, 0xd0, 0x26, 0x55, 0xa8, 0xeb, 0xdc, 0x99, - 0x1f, 0x5d, 0x83, 0xd2, 0x8e, 0xa2, 0xb9, 0xa4, 0x32, 0x72, 0x4a, 0x3a, 0x3d, 0x7e, 0xa6, 0x56, - 0x13, 0x61, 0x18, 0xf5, 0xa9, 0x1f, 0x88, 0x35, 0x3f, 0x50, 0x6a, 0xaf, 0xba, 0x8a, 0x41, 0x55, - 0xda, 0xab, 0x9f, 0x10, 0x90, 0xc7, 0x84, 0xdc, 0xab, 0x0c, 0x0b, 0x7b, 0x90, 0xf2, 0xf7, 0x25, - 0x78, 0x24, 0x57, 0xb7, 0x55, 0xd5, 0xa1, 0x48, 0x87, 0x92, 0x4a, 0x89, 0xee, 0x54, 0xa4, 0x53, - 0x85, 0xd3, 0xe3, 0x67, 0x2e, 0xd7, 0xfa, 0x9a, 0x04, 0xb5, 0x5c, 0xf0, 0xfa, 0x84, 0xd0, 0xab, - 0xb4, 0xc2, 0xe0, 0xb1, 0x27, 0x45, 0xfe, 0xa1, 0x04, 0x28, 0xca, 0xd3, 0x52, 0xec, 0x2e, 0xa1, - 0x77, 0xe1, 0xa5, 0xd7, 0x0e, 0xe7, 0xa5, 0x19, 0x01, 0x39, 0xee, 0x09, 0x8c, 0x39, 0xe9, 0x7d, - 0x09, 0x66, 0xd3, 0x3a, 0x71, 0xef, 0x6c, 0xc5, 0xbd, 0xb3, 0x78, 0x08, 0xef, 0x78, 0xa8, 0x39, - 0x6e, 0xf9, 0xe5, 0x08, 0x8c, 0x2d, 0x2b, 0x44, 0x37, 0x8d, 0x26, 0xa1, 0xe8, 0x9b, 0x50, 0x66, - 0x33, 0xbb, 0xa3, 0x50, 0x85, 0x7b, 0x64, 0xfc, 0xcc, 0xff, 0x1d, 0x64, 0xae, 0x53, 0x63, 0xd4, - 0xb5, 0x9d, 0xa7, 0x6b, 0x57, 0x36, 0xaf, 0x93, 0x36, 0x5d, 0x23, 0x54, 0xa9, 0x23, 0x21, 0x07, - 0xc2, 0x36, 0x1c, 0xa0, 0xa2, 0xb7, 0xa0, 0xe8, 0x58, 0xa4, 0x2d, 0x9c, 0xf9, 0x62, 0x9f, 0x66, - 0x05, 0x9a, 0x36, 0x2d, 0xd2, 0x0e, 0x47, 0x8b, 0x7d, 0x61, 0x8e, 0x8b, 0xb6, 0xe0, 0xa8, 0xc3, - 0xc3, 0xa0, 0x52, 0xe0, 0x12, 0xce, 0x0f, 0x2c, 0xc1, 0x0b, 0xa6, 0x49, 0x21, 0xe3, 0xa8, 0xf7, - 0x8d, 0x05, 0xba, 0xfc, 0x3b, 0x09, 0x26, 0x02, 0x5a, 0x3e, 0x62, 0x6f, 0xa4, 0x7c, 0x57, 0xbb, - 0x3b, 0xdf, 0x31, 0x6e, 0xee, 0xb9, 0xe3, 0x42, 0x56, 0xd9, 0x6f, 0x89, 0xf8, 0xed, 0x4d, 0x3f, - 0x1e, 0x46, 0x78, 0x3c, 0x3c, 0x37, 0xa8, 0x59, 0x39, 0x61, 0xf0, 0x45, 0x21, 0x62, 0x0e, 0x73, - 0x27, 0x7a, 0x13, 0xca, 0x0e, 0xd1, 0x48, 0x9b, 0x9a, 0xb6, 0x30, 0xe7, 0x99, 0xbb, 0x34, 0x47, - 0xd9, 0x24, 0x5a, 0x53, 0xb0, 0xd6, 0x8f, 0x31, 0x7b, 0xfc, 0x2f, 0x1c, 0x40, 0xa2, 0xd7, 0xa1, - 0x4c, 0x89, 0x6e, 0x69, 0x0a, 0xf5, 0x27, 0xd6, 0x53, 0xf9, 0x26, 0x31, 0xd8, 0x86, 0xd9, 0x69, - 0x09, 0x06, 0x3e, 0xf8, 0x81, 0xb3, 0xfc, 0x56, 0x1c, 0x00, 0xa2, 0x0f, 0x24, 0x98, 0x74, 0xad, - 0x0e, 0x23, 0xa5, 0x2c, 0xc1, 0x76, 0x7b, 0x22, 0x1a, 0x2e, 0x0e, 0xea, 0xb6, 0x8d, 0x18, 0x5a, - 0x7d, 0x56, 0x08, 0x9f, 0x8c, 0xb7, 0xe3, 0x84, 0x54, 0xb4, 0x08, 0x53, 0xba, 0x6a, 0x60, 0xa2, - 0x74, 0x7a, 0x4d, 0xd2, 0x36, 0x8d, 0x8e, 0x53, 0x29, 0x9e, 0x92, 0x4e, 0x97, 0xea, 0x27, 0x05, - 0xc0, 0xd4, 0x5a, 0xbc, 0x1b, 0x27, 0xe9, 0xd1, 0xd7, 0x01, 0xf9, 0x76, 0x5d, 0xf2, 0xd6, 0x0b, - 0xd5, 0x34, 0x2a, 0xa5, 0x53, 0xd2, 0xe9, 0x42, 0x7d, 0x4e, 0xa0, 0xa0, 0x56, 0x8a, 0x02, 0x67, - 0x70, 0xc9, 0xff, 0x2c, 0xc2, 0x54, 0x22, 0xc0, 0xd1, 0x55, 0x98, 0x6d, 0x7b, 0xe9, 0x73, 0xdd, - 0xd5, 0x37, 0x89, 0xdd, 0x6c, 0x6f, 0x93, 0x8e, 0xab, 0x91, 0x0e, 0x1f, 0xf5, 0x52, 0x7d, 0x5e, - 0xc8, 0x98, 0x5d, 0xca, 0xa4, 0xc2, 0x39, 0xdc, 0x4c, 0x6f, 0x83, 0x37, 0xad, 0xa9, 0x8e, 0x13, - 0x60, 0x8e, 0x70, 0xcc, 0x40, 0xef, 0xf5, 0x14, 0x05, 0xce, 0xe0, 0x62, 0x3a, 0x76, 0x88, 0xa3, - 0xda, 0xa4, 0x93, 0xd4, 0xb1, 0x10, 0xd7, 0x71, 0x39, 0x93, 0x0a, 0xe7, 0x70, 0xa3, 0xb3, 0x30, - 0xee, 0x49, 0xe3, 0x1e, 0x17, 0x43, 0x13, 0x24, 0xec, 0xf5, 0xb0, 0x0b, 0x47, 0xe9, 0x98, 0x69, - 0xe6, 0x26, 0x2f, 0x20, 0x3a, 0xf9, 0x43, 0x72, 0x25, 0x45, 0x81, 0x33, 0xb8, 0x98, 0x69, 0x5e, - 0xcc, 0xa4, 0x4c, 0x3b, 0x1a, 0x37, 0x6d, 0x23, 0x93, 0x0a, 0xe7, 0x70, 0xb3, 0xc8, 0xf3, 0x54, - 0x5e, 0xdc, 0x51, 0x54, 0x4d, 0xd9, 0xd4, 0x48, 0x65, 0x34, 0x1e, 0x79, 0xeb, 0xf1, 0x6e, 0x9c, - 0xa4, 0x47, 0x97, 0x60, 0xda, 0x6b, 0xda, 0x30, 0x94, 0x00, 0xa4, 0xcc, 0x41, 0x1e, 0x14, 0x20, - 0xd3, 0xeb, 0x49, 0x02, 0x9c, 0xe6, 0x91, 0xff, 0x22, 0xc1, 0xc9, 0x9c, 0x99, 0x84, 0x5e, 0x86, - 0x22, 0xed, 0x59, 0xfe, 0xfa, 0xfb, 0xbf, 0x7e, 0x46, 0x6f, 0xf5, 0x2c, 0x72, 0x7b, 0xaf, 0xfa, - 0x50, 0x0e, 0x1b, 0xeb, 0xc6, 0x9c, 0x11, 0x7d, 0x1b, 0x26, 0x6c, 0x53, 0xd3, 0x54, 0xa3, 0xeb, - 0x91, 0x88, 0x6c, 0x72, 0xa1, 0xcf, 0x99, 0x8e, 0xa3, 0x18, 0x61, 0xb6, 0x9c, 0xde, 0xdf, 0xab, - 0x4e, 0xc4, 0xfa, 0x70, 0x5c, 0x9c, 0xfc, 0xeb, 0x11, 0x80, 0x65, 0x62, 0x69, 0x66, 0x4f, 0x27, - 0xc6, 0x30, 0x56, 0xd0, 0xb7, 0x63, 0x2b, 0xe8, 0x4b, 0xfd, 0x66, 0xb4, 0x40, 0xd5, 0xdc, 0x25, - 0xb4, 0x9b, 0x58, 0x42, 0x5f, 0x1e, 0x5c, 0xc4, 0xc1, 0x6b, 0xe8, 0xad, 0x02, 0xcc, 0x84, 0xc4, - 0x4b, 0xa6, 0xd1, 0x51, 0xf9, 0x9c, 0x78, 0x21, 0x16, 0x13, 0x8f, 0x27, 0x62, 0xe2, 0x64, 0x06, - 0x4b, 0x24, 0x1e, 0xae, 0x06, 0xda, 0x8f, 0x70, 0xf6, 0xf3, 0x71, 0xe1, 0xb7, 0xf7, 0xaa, 0x07, - 0xd6, 0xf3, 0xb5, 0x00, 0x33, 0xae, 0x2c, 0x7a, 0x0c, 0x8e, 0xda, 0x44, 0x71, 0x4c, 0x83, 0xa7, - 0x89, 0xb1, 0xd0, 0x28, 0xcc, 0x5b, 0xb1, 0xe8, 0x45, 0x4f, 0xc0, 0xa8, 0x4e, 0x1c, 0x47, 0xe9, - 0x12, 0x9e, 0x11, 0xc6, 0xea, 0x53, 0x82, 0x70, 0x74, 0xcd, 0x6b, 0xc6, 0x7e, 0x3f, 0xba, 0x0e, - 0x93, 0x9a, 0xe2, 0x88, 0xd0, 0x6e, 0xa9, 0x3a, 0xe1, 0x73, 0x7e, 0xfc, 0xcc, 0xff, 0xdc, 0x5d, - 0xc4, 0x30, 0x8e, 0x70, 0x25, 0x5a, 0x8d, 0x21, 0xe1, 0x04, 0x32, 0xda, 0x01, 0xc4, 0x5a, 0x5a, - 0xb6, 0x62, 0x38, 0x9e, 0xcb, 0x98, 0xbc, 0xd1, 0xbe, 0xe5, 0x05, 0xf9, 0x6d, 0x35, 0x85, 0x86, - 0x33, 0x24, 0xc8, 0xbf, 0x97, 0x60, 0x32, 0x1c, 0xb0, 0x21, 0x14, 0x4a, 0x6f, 0xc5, 0x0b, 0xa5, - 0xe7, 0x07, 0x0e, 0xde, 0x9c, 0x4a, 0xe9, 0xc3, 0x02, 0xa0, 0x90, 0x88, 0xa5, 0x86, 0x4d, 0xa5, - 0x7d, 0xe3, 0x2e, 0xf6, 0x11, 0x3f, 0x95, 0x00, 0x89, 0x64, 0xbd, 0x68, 0x18, 0x26, 0xe5, 0xf9, - 0xdf, 0x57, 0xf3, 0xb5, 0x81, 0xd5, 0xf4, 0x35, 0xa8, 0x6d, 0xa4, 0xb0, 0x2f, 0x18, 0xd4, 0xee, - 0x85, 0x23, 0x96, 0x26, 0xc0, 0x19, 0x0a, 0xa1, 0x77, 0x00, 0x6c, 0x81, 0xd9, 0x32, 0x45, 0x0a, - 0x78, 0x69, 0x80, 0x6c, 0xca, 0x00, 0x96, 0x4c, 0x63, 0x4b, 0xed, 0x86, 0x09, 0x0d, 0x07, 0xc0, - 0x38, 0x22, 0x64, 0xee, 0x02, 0x9c, 0xcc, 0xd1, 0x1e, 0x1d, 0x87, 0xc2, 0x0d, 0xd2, 0xf3, 0xdc, - 0x8a, 0xd9, 0x4f, 0x74, 0x22, 0xba, 0x1f, 0x1b, 0x13, 0x5b, 0xa9, 0x73, 0x23, 0xcf, 0x49, 0xf2, - 0x97, 0xa5, 0x68, 0xac, 0xf1, 0x2a, 0xf6, 0x34, 0x94, 0x6d, 0x62, 0x69, 0x6a, 0x5b, 0x71, 0x44, - 0x3d, 0xc3, 0x0b, 0x52, 0x2c, 0xda, 0x70, 0xd0, 0x1b, 0xab, 0x77, 0x47, 0xee, 0x6f, 0xbd, 0x5b, - 0xb8, 0xd7, 0xf5, 0xae, 0x09, 0x65, 0xc7, 0x2f, 0x74, 0x8b, 0x1c, 0x7c, 0xf1, 0x10, 0x39, 0x5b, - 0xd4, 0xb8, 0x81, 0xc0, 0xa0, 0xba, 0x0d, 0x84, 0x64, 0xd5, 0xb5, 0xa5, 0x3e, 0xeb, 0xda, 0x55, - 0x38, 0x61, 0x93, 0x1d, 0x95, 0xa9, 0x71, 0x59, 0x75, 0xa8, 0x69, 0xf7, 0x56, 0x55, 0x5d, 0xa5, - 0xa2, 0xec, 0xa9, 0xec, 0xef, 0x55, 0x4f, 0xe0, 0x8c, 0x7e, 0x9c, 0xc9, 0xc5, 0xb2, 0xb3, 0xa5, - 0xb8, 0x0e, 0xe9, 0xf0, 0x94, 0x56, 0x0e, 0xb3, 0x73, 0x83, 0xb7, 0x62, 0xd1, 0x8b, 0xf4, 0x58, - 0x70, 0x97, 0xef, 0x45, 0x70, 0x4f, 0xe6, 0x07, 0x36, 0xda, 0x80, 0x93, 0x96, 0x6d, 0x76, 0x6d, - 0xe2, 0x38, 0xcb, 0x44, 0xe9, 0x68, 0xaa, 0x41, 0x7c, 0x7f, 0x8d, 0x71, 0x3b, 0x1f, 0xda, 0xdf, - 0xab, 0x9e, 0x6c, 0x64, 0x93, 0xe0, 0x3c, 0x5e, 0xf9, 0xa3, 0x22, 0x1c, 0x4f, 0xae, 0xb2, 0x39, - 0x55, 0xa9, 0x34, 0x50, 0x55, 0xfa, 0x64, 0x64, 0xda, 0x78, 0x25, 0x7b, 0x10, 0x0d, 0x19, 0x53, - 0x67, 0x11, 0xa6, 0x44, 0x1e, 0xf1, 0x3b, 0x45, 0x5d, 0x1e, 0x44, 0xc3, 0x46, 0xbc, 0x1b, 0x27, - 0xe9, 0x59, 0xad, 0x19, 0x96, 0x90, 0x3e, 0x48, 0x31, 0x5e, 0x6b, 0x2e, 0x26, 0x09, 0x70, 0x9a, - 0x07, 0xad, 0xc1, 0x8c, 0x6b, 0xa4, 0xa1, 0xbc, 0xe8, 0x7c, 0x48, 0x40, 0xcd, 0x6c, 0xa4, 0x49, - 0x70, 0x16, 0x1f, 0xda, 0x01, 0x68, 0xfb, 0x05, 0x81, 0x53, 0x39, 0xca, 0x73, 0x75, 0x7d, 0xe0, - 0xb9, 0x15, 0xd4, 0x16, 0x61, 0x46, 0x0c, 0x9a, 0x1c, 0x1c, 0x91, 0x84, 0x5e, 0x80, 0x09, 0x9b, - 0x6f, 0x3c, 0x7c, 0x03, 0xbc, 0xe2, 0xfd, 0x01, 0xc1, 0x36, 0x81, 0xa3, 0x9d, 0x38, 0x4e, 0x2b, - 0xff, 0x41, 0x8a, 0x2e, 0x51, 0x41, 0xa9, 0x7d, 0x2e, 0x56, 0x56, 0x3d, 0x96, 0x28, 0xab, 0x66, - 0xd3, 0x1c, 0x91, 0xaa, 0xea, 0x3b, 0xd9, 0x55, 0xf6, 0xc5, 0x43, 0x55, 0xd9, 0xe1, 0x52, 0x7b, - 0xe7, 0x32, 0xfb, 0x13, 0x09, 0x66, 0x2f, 0x36, 0x2f, 0xd9, 0xa6, 0x6b, 0xf9, 0xea, 0x5d, 0xb1, - 0x3c, 0x5f, 0x7d, 0x0d, 0x8a, 0xb6, 0xab, 0xf9, 0x76, 0xfd, 0x97, 0x6f, 0x17, 0x76, 0x35, 0x66, - 0xd7, 0x4c, 0x82, 0xcb, 0x33, 0x8a, 0x31, 0xa0, 0xb7, 0xe0, 0xa8, 0xad, 0x18, 0x5d, 0xe2, 0x2f, - 0xc2, 0xcf, 0xf6, 0x69, 0xcd, 0xca, 0x32, 0x66, 0xec, 0x91, 0x52, 0x90, 0xa3, 0x61, 0x81, 0x2a, - 0xff, 0x44, 0x82, 0xa9, 0xcb, 0xad, 0x56, 0x63, 0xc5, 0xe0, 0xb3, 0xb8, 0xa1, 0xd0, 0x6d, 0x56, - 0x27, 0x58, 0x0a, 0xdd, 0x4e, 0xd6, 0x09, 0xac, 0x0f, 0xf3, 0x1e, 0xb4, 0x0d, 0xa3, 0x2c, 0x7b, - 0x10, 0xa3, 0x33, 0x60, 0x89, 0x2f, 0xc4, 0xd5, 0x3d, 0x90, 0xb0, 0xfe, 0x14, 0x0d, 0xd8, 0x87, - 0x97, 0xdf, 0x83, 0x13, 0x11, 0xf5, 0x98, 0xbf, 0xf8, 0xe9, 0x24, 0x6a, 0x43, 0x89, 0x69, 0xe2, - 0x9f, 0x3d, 0xf6, 0x7b, 0x84, 0x96, 0x30, 0x39, 0xac, 0xa3, 0xd8, 0x97, 0x83, 0x3d, 0x6c, 0x79, - 0x0d, 0x26, 0x2e, 0x9b, 0x0e, 0x6d, 0x98, 0x36, 0xe5, 0x6e, 0x43, 0x8f, 0x40, 0x41, 0x57, 0x0d, - 0xb1, 0x4a, 0x8f, 0x0b, 0x9e, 0x02, 0x5b, 0x47, 0x58, 0x3b, 0xef, 0x56, 0x76, 0x45, 0x36, 0x0a, - 0xbb, 0x95, 0x5d, 0xcc, 0xda, 0xe5, 0x4b, 0x30, 0x2a, 0x86, 0x23, 0x0a, 0x54, 0x38, 0x18, 0xa8, - 0x90, 0x01, 0xf4, 0x8b, 0x11, 0x18, 0x15, 0xda, 0x0f, 0x61, 0x33, 0xf7, 0x46, 0x6c, 0x33, 0x77, - 0x6e, 0xb0, 0x91, 0xce, 0xdd, 0xc9, 0x75, 0x12, 0x3b, 0xb9, 0x17, 0x07, 0xc4, 0x3f, 0x78, 0x1b, - 0xf7, 0xb1, 0x04, 0x93, 0xf1, 0x98, 0x43, 0x67, 0x61, 0x9c, 0xad, 0x29, 0x6a, 0x9b, 0xac, 0x87, - 0x45, 0x71, 0x70, 0xb0, 0xd2, 0x0c, 0xbb, 0x70, 0x94, 0x0e, 0x75, 0x03, 0x36, 0x16, 0x16, 0xc2, - 0x29, 0xf9, 0x2e, 0x77, 0xa9, 0xaa, 0xd5, 0xbc, 0xab, 0x9e, 0xda, 0x8a, 0x41, 0xaf, 0xd8, 0x4d, - 0x6a, 0xab, 0x46, 0x37, 0x25, 0x88, 0xc7, 0x58, 0x14, 0x59, 0xbe, 0x29, 0xc1, 0xb8, 0x50, 0x79, - 0x08, 0x5b, 0x92, 0xd7, 0xe3, 0x5b, 0x92, 0x67, 0x07, 0x9c, 0xcf, 0xd9, 0xfb, 0x91, 0x4f, 0x43, - 0x53, 0xd8, 0x0c, 0x66, 0x09, 0x66, 0xdb, 0x74, 0x68, 0x32, 0xc1, 0xb0, 0xb9, 0x86, 0x79, 0x0f, - 0xfa, 0x9e, 0x04, 0xc7, 0xd5, 0xc4, 0x9c, 0x17, 0xbe, 0x7e, 0x79, 0x30, 0xd5, 0x02, 0x98, 0x7a, - 0x45, 0xc8, 0x3b, 0x9e, 0xec, 0xc1, 0x29, 0x91, 0xb2, 0x0b, 0x29, 0x2a, 0xa4, 0x40, 0x71, 0x9b, - 0x52, 0x4b, 0x0c, 0xc2, 0xd2, 0xe0, 0x99, 0x27, 0x54, 0xa9, 0xcc, 0xcd, 0x6f, 0xb5, 0x1a, 0x98, - 0x43, 0xcb, 0x3f, 0x1f, 0x09, 0x1c, 0xd6, 0xf4, 0x26, 0x49, 0x90, 0x6f, 0xa5, 0x7b, 0x91, 0x6f, - 0xc7, 0xb3, 0x72, 0x2d, 0xfa, 0x06, 0x14, 0xa8, 0x36, 0xe8, 0xa6, 0x54, 0x48, 0x68, 0xad, 0x36, - 0xc3, 0x84, 0xd5, 0x5a, 0x6d, 0x62, 0x06, 0x89, 0xde, 0x86, 0x12, 0x5b, 0xcd, 0xd8, 0x1c, 0x2f, - 0x0c, 0x9e, 0x43, 0x98, 0xbf, 0xc2, 0x08, 0x63, 0x5f, 0x0e, 0xf6, 0x70, 0xe5, 0xf7, 0x60, 0x22, - 0x96, 0x08, 0xd0, 0x75, 0x38, 0xa6, 0x99, 0x4a, 0xa7, 0xae, 0x68, 0x8a, 0xd1, 0x26, 0x76, 0x32, - 0x35, 0x66, 0xef, 0x67, 0x56, 0x23, 0x1c, 0x22, 0xa1, 0x04, 0x17, 0x88, 0xd1, 0x3e, 0x1c, 0xc3, - 0x96, 0x15, 0x80, 0xd0, 0x7a, 0x54, 0x85, 0x12, 0x0b, 0x61, 0x6f, 0x65, 0x1a, 0xab, 0x8f, 0x31, - 0x5d, 0x59, 0x64, 0x3b, 0xd8, 0x6b, 0x47, 0x67, 0x00, 0x1c, 0xd2, 0xb6, 0x09, 0xe5, 0x79, 0xc7, - 0x3b, 0x01, 0x0a, 0x32, 0x70, 0x33, 0xe8, 0xc1, 0x11, 0x2a, 0xf9, 0x4f, 0x12, 0x4c, 0xac, 0x13, - 0xfa, 0xae, 0x69, 0xdf, 0x68, 0xf0, 0x0b, 0xda, 0x21, 0xe4, 0xfd, 0xcd, 0x58, 0xde, 0x7f, 0xa5, - 0xcf, 0x31, 0x8b, 0x69, 0x9b, 0x97, 0xfd, 0xe5, 0xbf, 0x4b, 0x50, 0x89, 0x51, 0x46, 0xd3, 0x04, - 0x81, 0x92, 0x65, 0xda, 0xd4, 0x5f, 0xe3, 0x0f, 0xa5, 0x01, 0x4b, 0xa9, 0x91, 0x55, 0x9e, 0xc1, - 0x62, 0x0f, 0x9d, 0xd9, 0xb9, 0x65, 0x9b, 0xba, 0x88, 0xfb, 0xc3, 0x49, 0x21, 0xc4, 0x0e, 0xed, - 0xbc, 0x68, 0x9b, 0x3a, 0xe6, 0xd8, 0xf2, 0x1f, 0x25, 0x98, 0x8e, 0x51, 0x0e, 0x21, 0xa5, 0x2b, - 0xf1, 0x94, 0xfe, 0xe2, 0x61, 0x0c, 0xcb, 0x49, 0xec, 0x5f, 0x25, 0xcd, 0x62, 0x0e, 0x40, 0x5b, - 0x30, 0x6e, 0x99, 0x9d, 0xe6, 0x3d, 0xb8, 0x99, 0x9b, 0x62, 0x2b, 0x64, 0x23, 0xc4, 0xc2, 0x51, - 0x60, 0xb4, 0x0b, 0xd3, 0x86, 0xa2, 0x13, 0xc7, 0x52, 0xda, 0xa4, 0x79, 0x0f, 0xce, 0x45, 0x1e, - 0xe0, 0xb7, 0x05, 0x49, 0x44, 0x9c, 0x16, 0x22, 0xff, 0x2a, 0x65, 0xb7, 0x69, 0x53, 0xf4, 0x2a, - 0x94, 0xf9, 0x23, 0x89, 0xb6, 0xa9, 0x89, 0xa5, 0xed, 0x2c, 0x1b, 0x9a, 0x86, 0x68, 0xbb, 0xbd, - 0x57, 0xfd, 0xef, 0x03, 0x8f, 0x75, 0x7d, 0x42, 0x1c, 0xc0, 0xa0, 0x75, 0x28, 0x5a, 0x87, 0x29, - 0x33, 0xf8, 0xc2, 0xc2, 0x6b, 0x0b, 0x8e, 0x23, 0xff, 0x23, 0xa9, 0x38, 0x5f, 0x5e, 0xae, 0xdf, - 0xb3, 0x01, 0x0b, 0xca, 0x9a, 0xdc, 0x41, 0xb3, 0x61, 0x54, 0xac, 0xb2, 0x22, 0x2e, 0x2f, 0x1d, - 0x26, 0x2e, 0xa3, 0x2b, 0x43, 0xb0, 0x89, 0xf0, 0x1b, 0x7d, 0x41, 0xf2, 0x5f, 0x25, 0x98, 0xe6, - 0x0a, 0xb5, 0x5d, 0x5b, 0xa5, 0xbd, 0xa1, 0x65, 0xd0, 0xad, 0x58, 0x06, 0x5d, 0xee, 0xd3, 0xd0, - 0x94, 0xc6, 0xb9, 0x59, 0xf4, 0x73, 0x09, 0x1e, 0x48, 0x51, 0x0f, 0x21, 0xc3, 0x90, 0x78, 0x86, - 0x79, 0xe5, 0xb0, 0x06, 0xe6, 0x64, 0x99, 0x9b, 0x90, 0x61, 0x1e, 0x0f, 0xdc, 0x33, 0x00, 0x96, - 0xad, 0xee, 0xa8, 0x1a, 0xe9, 0x8a, 0xcb, 0xe0, 0x72, 0x38, 0x24, 0x8d, 0xa0, 0x07, 0x47, 0xa8, - 0xd0, 0xb7, 0x60, 0xb6, 0x43, 0xb6, 0x14, 0x57, 0xa3, 0x8b, 0x9d, 0xce, 0x92, 0x62, 0x29, 0x9b, - 0xaa, 0xa6, 0x52, 0x55, 0xec, 0xb0, 0xc7, 0xea, 0x17, 0xbc, 0x4b, 0xda, 0x2c, 0x8a, 0xdb, 0x7b, - 0xd5, 0xc7, 0x0f, 0xbe, 0x98, 0xf1, 0x89, 0x7b, 0x38, 0x47, 0x08, 0xfa, 0xae, 0x04, 0x15, 0x9b, - 0xbc, 0xe3, 0xaa, 0x36, 0xe9, 0x2c, 0xdb, 0xa6, 0x15, 0xd3, 0xa0, 0xc0, 0x35, 0xb8, 0xb4, 0xbf, - 0x57, 0xad, 0xe0, 0x1c, 0x9a, 0x7e, 0x74, 0xc8, 0x15, 0x84, 0x28, 0xcc, 0x28, 0x9a, 0x66, 0xbe, - 0x4b, 0xe2, 0x1e, 0x28, 0x72, 0xf9, 0xf5, 0xfd, 0xbd, 0xea, 0xcc, 0x62, 0xba, 0xbb, 0x1f, 0xd1, - 0x59, 0xf0, 0x68, 0x01, 0x46, 0x77, 0x4c, 0xcd, 0xd5, 0x89, 0x53, 0x29, 0x71, 0x49, 0x2c, 0xe3, - 0x8e, 0x5e, 0xf5, 0x9a, 0x6e, 0xef, 0x55, 0x8f, 0x5e, 0x6c, 0xf2, 0xa3, 0x0f, 0x9f, 0x8a, 0xed, - 0xd1, 0x58, 0xcd, 0x24, 0xa6, 0x3c, 0x3f, 0x77, 0x2d, 0x87, 0x39, 0xe6, 0x72, 0xd8, 0x85, 0xa3, - 0x74, 0x48, 0x87, 0xb1, 0x6d, 0xb1, 0x6f, 0x77, 0x2a, 0xa3, 0x03, 0xad, 0x7e, 0xb1, 0x7d, 0x7f, - 0x7d, 0x5a, 0x88, 0x1c, 0xf3, 0x9b, 0x1d, 0x1c, 0x4a, 0x40, 0x4f, 0xc0, 0x28, 0xff, 0x58, 0x59, - 0xe6, 0xa7, 0xb5, 0xe5, 0x30, 0x13, 0x5d, 0xf6, 0x9a, 0xb1, 0xdf, 0xef, 0x93, 0xae, 0x34, 0x96, - 0xf8, 0xe1, 0x6a, 0x82, 0x74, 0xa5, 0xb1, 0x84, 0xfd, 0x7e, 0x64, 0xc1, 0xa8, 0x43, 0x56, 0x55, - 0xc3, 0xdd, 0xad, 0xc0, 0x40, 0xd7, 0xc5, 0xcd, 0x0b, 0x9c, 0x3b, 0x71, 0x14, 0x15, 0x4a, 0x14, - 0xfd, 0xd8, 0x17, 0x83, 0x76, 0x61, 0xcc, 0x76, 0x8d, 0x45, 0x67, 0xc3, 0x21, 0x76, 0x65, 0x9c, - 0xcb, 0xec, 0x37, 0x39, 0x63, 0x9f, 0x3f, 0x29, 0x35, 0xf0, 0x60, 0x40, 0x81, 0x43, 0x61, 0xe8, - 0x23, 0x09, 0x90, 0xe3, 0x5a, 0x96, 0x46, 0x74, 0x62, 0x50, 0x45, 0xe3, 0xa7, 0x61, 0x4e, 0xe5, - 0x18, 0xd7, 0xa1, 0xd1, 0xaf, 0xdd, 0x29, 0xa0, 0xa4, 0x32, 0xc1, 0x51, 0x73, 0x9a, 0x14, 0x67, - 0xe8, 0xc1, 0x86, 0x62, 0xcb, 0xe1, 0xbf, 0x2b, 0x13, 0x03, 0x0d, 0x45, 0xf6, 0xa9, 0x60, 0x38, - 0x14, 0xa2, 0x1f, 0xfb, 0x62, 0xd0, 0x55, 0x98, 0xb5, 0x89, 0xd2, 0xb9, 0x62, 0x68, 0x3d, 0x6c, - 0x9a, 0xf4, 0xa2, 0xaa, 0x11, 0xa7, 0xe7, 0x50, 0xa2, 0x57, 0x26, 0x79, 0xd8, 0x04, 0x4f, 0x2e, - 0x70, 0x26, 0x15, 0xce, 0xe1, 0xe6, 0x2f, 0x01, 0xc4, 0x19, 0xec, 0x70, 0xde, 0xd2, 0x1d, 0xee, - 0x25, 0x40, 0xa8, 0xea, 0x7d, 0x7b, 0x09, 0x10, 0x11, 0x71, 0xf0, 0x11, 0xd2, 0x57, 0x23, 0x30, - 0x13, 0x12, 0xdf, 0xf5, 0x4b, 0x80, 0x0c, 0x96, 0x21, 0xbc, 0x04, 0xc8, 0xbe, 0x4a, 0x2f, 0xdc, - 0xef, 0xab, 0xf4, 0xfb, 0xf0, 0x02, 0x81, 0xdf, 0xce, 0x87, 0x4e, 0xfc, 0xf7, 0xbf, 0x9d, 0x0f, - 0x75, 0xcd, 0x29, 0x67, 0x7e, 0x33, 0x12, 0x35, 0xe8, 0x3f, 0xe8, 0x0a, 0xf8, 0xf0, 0x2f, 0x0d, - 0xe5, 0xcf, 0x0b, 0x70, 0x3c, 0x39, 0x63, 0x63, 0x37, 0x81, 0xd2, 0x1d, 0x6f, 0x02, 0x1b, 0x70, - 0x62, 0xcb, 0xd5, 0xb4, 0x1e, 0x77, 0x48, 0xe4, 0x3a, 0xd0, 0x3b, 0xb5, 0x7f, 0x58, 0x70, 0x9e, - 0xb8, 0x98, 0x41, 0x83, 0x33, 0x39, 0x73, 0x6e, 0x35, 0x0b, 0x03, 0xdd, 0x6a, 0xa6, 0x2e, 0xd5, - 0x8a, 0x77, 0x7f, 0xa9, 0x96, 0x7d, 0x43, 0x59, 0x1a, 0xe0, 0x86, 0xf2, 0x5e, 0x5c, 0x29, 0x66, - 0x24, 0xbe, 0x3b, 0x5d, 0x29, 0xca, 0x0f, 0xc3, 0x9c, 0x60, 0x63, 0xdf, 0x4b, 0xa6, 0x41, 0x6d, - 0x53, 0xd3, 0x88, 0xbd, 0xec, 0xea, 0x7a, 0x4f, 0x3e, 0x0f, 0x93, 0xf1, 0x7b, 0x6d, 0x6f, 0xe4, - 0xbd, 0xab, 0x76, 0x71, 0x97, 0x12, 0x19, 0x79, 0xaf, 0x1d, 0x07, 0x14, 0xf2, 0x07, 0x12, 0xcc, - 0x66, 0xbf, 0xa1, 0x43, 0x1a, 0x4c, 0xea, 0xca, 0x6e, 0xf4, 0x11, 0xa1, 0x34, 0xe0, 0x8e, 0x1b, - 0xed, 0xef, 0x55, 0x27, 0xd7, 0x62, 0x58, 0x38, 0x81, 0x2d, 0x7f, 0x21, 0xc1, 0xc9, 0x9c, 0x6b, - 0xc6, 0xe1, 0x6a, 0x82, 0xae, 0x41, 0x59, 0x57, 0x76, 0x9b, 0xae, 0xdd, 0x25, 0x03, 0x9f, 0x31, - 0xf0, 0x5c, 0xb2, 0x26, 0x50, 0x70, 0x80, 0x27, 0x7f, 0x22, 0x41, 0x25, 0xaf, 0x1e, 0x44, 0x67, - 0x63, 0x17, 0xa2, 0x8f, 0x26, 0x2e, 0x44, 0xa7, 0x53, 0x7c, 0x43, 0xba, 0x0e, 0xfd, 0x54, 0x82, - 0xd9, 0xec, 0xba, 0x19, 0x3d, 0x13, 0xd3, 0xb8, 0x9a, 0xd0, 0x78, 0x2a, 0xc1, 0x25, 0xf4, 0xdd, - 0x86, 0x49, 0x51, 0x5d, 0x0b, 0x18, 0xe1, 0xe5, 0x27, 0x0f, 0xce, 0xaa, 0x02, 0xcc, 0xaf, 0x13, - 0xf9, 0x48, 0xc6, 0xdb, 0x70, 0x02, 0x57, 0xfe, 0xd9, 0x08, 0x94, 0x9a, 0x6d, 0x45, 0x23, 0x43, - 0x28, 0xea, 0xae, 0xc5, 0x8a, 0xba, 0x7e, 0xdf, 0xf9, 0x73, 0x2d, 0x73, 0xeb, 0xb9, 0xcd, 0x44, - 0x3d, 0x77, 0x6e, 0x20, 0xf4, 0x83, 0x4b, 0xb9, 0xe7, 0x61, 0x2c, 0x50, 0xa2, 0xbf, 0xd5, 0x43, - 0xfe, 0x78, 0x04, 0xc6, 0x23, 0x22, 0xfa, 0x5c, 0x7b, 0x76, 0x62, 0xab, 0xf7, 0x20, 0x7f, 0x29, - 0x8a, 0xc8, 0xae, 0xf9, 0xeb, 0xb7, 0xf7, 0x86, 0x2e, 0x7c, 0x0b, 0x95, 0x5e, 0xd6, 0xcf, 0xc3, - 0x24, 0xe5, 0xff, 0xb0, 0x09, 0xce, 0xf8, 0x0a, 0x3c, 0x8a, 0x83, 0x97, 0x99, 0xad, 0x58, 0x2f, - 0x4e, 0x50, 0xcf, 0xbd, 0x00, 0x13, 0x31, 0x61, 0x7d, 0x3d, 0x79, 0xfb, 0xad, 0x04, 0x8f, 0xde, - 0x71, 0x4f, 0x86, 0xea, 0xb1, 0xe9, 0x55, 0x4b, 0x4c, 0xaf, 0xf9, 0x7c, 0x80, 0x21, 0x3e, 0x96, - 0xf8, 0xd1, 0x08, 0xa0, 0xd6, 0xb6, 0x6a, 0x77, 0x1a, 0x8a, 0x4d, 0x7b, 0x58, 0xfc, 0x8f, 0x6a, - 0x08, 0x13, 0xee, 0x2c, 0x8c, 0x77, 0x88, 0xd3, 0xb6, 0x55, 0xee, 0x2c, 0xb1, 0x57, 0x08, 0xce, - 0x41, 0x96, 0xc3, 0x2e, 0x1c, 0xa5, 0x43, 0x5d, 0x28, 0xef, 0x78, 0xff, 0xd4, 0xf3, 0x6f, 0xde, - 0xfa, 0x2d, 0x66, 0xc3, 0xff, 0xfa, 0x85, 0xf1, 0x25, 0x1a, 0x1c, 0x1c, 0x80, 0xcb, 0x1f, 0x4a, - 0x30, 0x9b, 0x76, 0xcc, 0x32, 0x53, 0xfd, 0xfe, 0x3b, 0xe7, 0x61, 0x28, 0x72, 0x74, 0xe6, 0x95, - 0x63, 0xde, 0x89, 0x37, 0x93, 0x8c, 0x79, 0xab, 0xfc, 0xa5, 0x04, 0x73, 0xd9, 0xaa, 0x0d, 0x61, - 0x2b, 0x71, 0x3d, 0xbe, 0x95, 0xe8, 0xf7, 0xd8, 0x20, 0x5b, 0xef, 0x9c, 0x6d, 0xc5, 0x5e, 0xe6, - 0x18, 0x0c, 0xc1, 0xc8, 0xad, 0xb8, 0x91, 0x8b, 0x87, 0x36, 0x32, 0xdb, 0xc0, 0xfa, 0x13, 0x37, - 0x6f, 0xcd, 0x1f, 0xf9, 0xec, 0xd6, 0xfc, 0x91, 0x3f, 0xdf, 0x9a, 0x3f, 0xf2, 0xfe, 0xfe, 0xbc, - 0x74, 0x73, 0x7f, 0x5e, 0xfa, 0x6c, 0x7f, 0x5e, 0xfa, 0xdb, 0xfe, 0xbc, 0xf4, 0x83, 0x2f, 0xe6, - 0x8f, 0x5c, 0x1b, 0x15, 0x98, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xfb, 0x34, 0x4b, 0xec, - 0x3c, 0x00, 0x00, + 0x5e, 0x13, 0xec, 0xb3, 0x4f, 0x75, 0x55, 0xba, 0xed, 0x6e, 0xd6, 0xda, 0xa6, 0xbe, 0xd0, 0x35, + 0xbb, 0xe6, 0x02, 0x47, 0xd9, 0x74, 0xb7, 0xf8, 0x2f, 0xfe, 0x83, 0xff, 0xe5, 0xa1, 0xcf, 0xfe, + 0xbf, 0x50, 0x4e, 0xb1, 0x54, 0x5d, 0x69, 0x6f, 0xab, 0x06, 0xb1, 0x7b, 0xbe, 0x7a, 0x0b, 0x36, + 0x71, 0x4c, 0xd7, 0x6e, 0x93, 0xa4, 0x4e, 0x07, 0x72, 0x39, 0x0b, 0x3a, 0xa1, 0xca, 0xc2, 0x4e, + 0xca, 0x92, 0xd9, 0x85, 0x3c, 0x2e, 0xdb, 0x35, 0xa8, 0xaa, 0xa7, 0xc5, 0x3c, 0x7b, 0x27, 0x06, + 0xa7, 0xbd, 0x4d, 0x74, 0x25, 0xc5, 0xf7, 0x4c, 0x1e, 0x9f, 0x4b, 0x55, 0x6d, 0x41, 0x35, 0xa8, + 0x43, 0xed, 0x83, 0x6c, 0x72, 0x88, 0xbd, 0x43, 0xec, 0xe8, 0x2a, 0x29, 0xba, 0xa5, 0x91, 0x2c, + 0x9b, 0x9e, 0xcc, 0x5d, 0xdc, 0x2c, 0xea, 0xe7, 0x0f, 0x08, 0x05, 0xcb, 0xd4, 0xd4, 0x76, 0x2f, + 0x2f, 0x0c, 0xe4, 0x1a, 0xc0, 0x62, 0x63, 0xe5, 0x2a, 0xb1, 0xd9, 0x72, 0xa3, 0x53, 0x50, 0x32, + 0x14, 0x9d, 0x54, 0xa5, 0x53, 0xd2, 0xe9, 0xd1, 0xfa, 0xb1, 0x9b, 0x7b, 0xf3, 0x47, 0xf6, 0xf7, + 0xe6, 0x4b, 0xeb, 0x8a, 0x4e, 0x30, 0x9f, 0x91, 0x7f, 0x2c, 0xc1, 0x83, 0x4b, 0xae, 0x43, 0x4d, + 0x7d, 0x8d, 0x50, 0x5b, 0x6d, 0x2f, 0xb9, 0xb6, 0x4d, 0x0c, 0xda, 0xa4, 0x0a, 0x75, 0x9d, 0x3b, + 0xf3, 0xa3, 0x6b, 0x50, 0xde, 0x51, 0x34, 0x97, 0x54, 0x0b, 0xa7, 0xa4, 0xd3, 0x63, 0x67, 0x6a, + 0x35, 0x11, 0x86, 0x51, 0x9f, 0xfa, 0x81, 0x58, 0xf3, 0x03, 0xa5, 0xf6, 0xaa, 0xab, 0x18, 0x54, + 0xa5, 0xbd, 0xfa, 0x09, 0x01, 0x79, 0x4c, 0xc8, 0xbd, 0xca, 0xb0, 0xb0, 0x07, 0x29, 0x7f, 0x5f, + 0x82, 0x47, 0x72, 0x75, 0x5b, 0x55, 0x1d, 0x8a, 0x74, 0x28, 0xab, 0x94, 0xe8, 0x4e, 0x55, 0x3a, + 0x55, 0x3c, 0x3d, 0x76, 0xe6, 0x72, 0xad, 0xaf, 0x4d, 0x50, 0xcb, 0x05, 0xaf, 0x8f, 0x0b, 0xbd, + 0xca, 0x2b, 0x0c, 0x1e, 0x7b, 0x52, 0xe4, 0x1f, 0x4a, 0x80, 0xa2, 0x3c, 0x2d, 0xc5, 0xee, 0x12, + 0x7a, 0x17, 0x5e, 0x7a, 0xed, 0x70, 0x5e, 0x9a, 0x16, 0x90, 0x63, 0x9e, 0xc0, 0x98, 0x93, 0xde, + 0x97, 0x60, 0x26, 0xad, 0x13, 0xf7, 0xce, 0x56, 0xdc, 0x3b, 0x8b, 0x87, 0xf0, 0x8e, 0x87, 0x9a, + 0xe3, 0x96, 0x5f, 0x15, 0x60, 0x74, 0x59, 0x21, 0xba, 0x69, 0x34, 0x09, 0x45, 0xdf, 0x84, 0x0a, + 0xdb, 0xd9, 0x1d, 0x85, 0x2a, 0xdc, 0x23, 0x63, 0x67, 0xfe, 0xef, 0x20, 0x73, 0x9d, 0x1a, 0xa3, + 0xae, 0xed, 0x3c, 0x5d, 0xbb, 0xb2, 0x79, 0x9d, 0xb4, 0xe9, 0x1a, 0xa1, 0x4a, 0x1d, 0x09, 0x39, + 0x10, 0x8e, 0xe1, 0x00, 0x15, 0xbd, 0x05, 0x25, 0xc7, 0x22, 0x6d, 0xe1, 0xcc, 0x17, 0xfb, 0x34, + 0x2b, 0xd0, 0xb4, 0x69, 0x91, 0x76, 0xb8, 0x5a, 0xec, 0x17, 0xe6, 0xb8, 0x68, 0x0b, 0x8e, 0x3a, + 0x3c, 0x0c, 0xaa, 0x45, 0x2e, 0xe1, 0xfc, 0xc0, 0x12, 0xbc, 0x60, 0x9a, 0x10, 0x32, 0x8e, 0x7a, + 0xbf, 0xb1, 0x40, 0x97, 0x7f, 0x2f, 0xc1, 0x78, 0x40, 0xcb, 0x57, 0xec, 0x8d, 0x94, 0xef, 0x6a, + 0x77, 0xe7, 0x3b, 0xc6, 0xcd, 0x3d, 0x77, 0x5c, 0xc8, 0xaa, 0xf8, 0x23, 0x11, 0xbf, 0xbd, 0xe9, + 0xc7, 0x43, 0x81, 0xc7, 0xc3, 0x73, 0x83, 0x9a, 0x95, 0x13, 0x06, 0x5f, 0x14, 0x23, 0xe6, 0x30, + 0x77, 0xa2, 0x37, 0xa1, 0xe2, 0x10, 0x8d, 0xb4, 0xa9, 0x69, 0x0b, 0x73, 0x9e, 0xb9, 0x4b, 0x73, + 0x94, 0x4d, 0xa2, 0x35, 0x05, 0x6b, 0xfd, 0x18, 0xb3, 0xc7, 0xff, 0x85, 0x03, 0x48, 0xf4, 0x3a, + 0x54, 0x28, 0xd1, 0x2d, 0x4d, 0xa1, 0xfe, 0xc6, 0x7a, 0x2a, 0xdf, 0x24, 0x06, 0xdb, 0x30, 0x3b, + 0x2d, 0xc1, 0xc0, 0x17, 0x3f, 0x70, 0x96, 0x3f, 0x8a, 0x03, 0x40, 0xf4, 0x81, 0x04, 0x13, 0xae, + 0xd5, 0x61, 0xa4, 0x94, 0x25, 0xd8, 0x6e, 0x4f, 0x44, 0xc3, 0xc5, 0x41, 0xdd, 0xb6, 0x11, 0x43, + 0xab, 0xcf, 0x08, 0xe1, 0x13, 0xf1, 0x71, 0x9c, 0x90, 0x8a, 0x16, 0x61, 0x52, 0x57, 0x0d, 0x4c, + 0x94, 0x4e, 0xaf, 0x49, 0xda, 0xa6, 0xd1, 0x71, 0xaa, 0xa5, 0x53, 0xd2, 0xe9, 0x72, 0xfd, 0xa4, + 0x00, 0x98, 0x5c, 0x8b, 0x4f, 0xe3, 0x24, 0x3d, 0xfa, 0x3a, 0x20, 0xdf, 0xae, 0x4b, 0xde, 0x79, + 0xa1, 0x9a, 0x46, 0xb5, 0x7c, 0x4a, 0x3a, 0x5d, 0xac, 0xcf, 0x0a, 0x14, 0xd4, 0x4a, 0x51, 0xe0, + 0x0c, 0x2e, 0xf9, 0x9f, 0x25, 0x98, 0x4c, 0x04, 0x38, 0xba, 0x0a, 0x33, 0x6d, 0x2f, 0x7d, 0xae, + 0xbb, 0xfa, 0x26, 0xb1, 0x9b, 0xed, 0x6d, 0xd2, 0x71, 0x35, 0xd2, 0xe1, 0xab, 0x5e, 0xae, 0xcf, + 0x09, 0x19, 0x33, 0x4b, 0x99, 0x54, 0x38, 0x87, 0x9b, 0xe9, 0x6d, 0xf0, 0xa1, 0x35, 0xd5, 0x71, + 0x02, 0xcc, 0x02, 0xc7, 0x0c, 0xf4, 0x5e, 0x4f, 0x51, 0xe0, 0x0c, 0x2e, 0xa6, 0x63, 0x87, 0x38, + 0xaa, 0x4d, 0x3a, 0x49, 0x1d, 0x8b, 0x71, 0x1d, 0x97, 0x33, 0xa9, 0x70, 0x0e, 0x37, 0x3a, 0x0b, + 0x63, 0x9e, 0x34, 0xee, 0x71, 0xb1, 0x34, 0x41, 0xc2, 0x5e, 0x0f, 0xa7, 0x70, 0x94, 0x8e, 0x99, + 0x66, 0x6e, 0xf2, 0x02, 0xa2, 0x93, 0xbf, 0x24, 0x57, 0x52, 0x14, 0x38, 0x83, 0x8b, 0x99, 0xe6, + 0xc5, 0x4c, 0xca, 0xb4, 0xa3, 0x71, 0xd3, 0x36, 0x32, 0xa9, 0x70, 0x0e, 0x37, 0x8b, 0x3c, 0x4f, + 0xe5, 0xc5, 0x1d, 0x45, 0xd5, 0x94, 0x4d, 0x8d, 0x54, 0x47, 0xe2, 0x91, 0xb7, 0x1e, 0x9f, 0xc6, + 0x49, 0x7a, 0x74, 0x09, 0xa6, 0xbc, 0xa1, 0x0d, 0x43, 0x09, 0x40, 0x2a, 0x1c, 0xe4, 0x41, 0x01, + 0x32, 0xb5, 0x9e, 0x24, 0xc0, 0x69, 0x1e, 0xf9, 0x2f, 0x12, 0x9c, 0xcc, 0xd9, 0x49, 0xe8, 0x65, + 0x28, 0xd1, 0x9e, 0xe5, 0x9f, 0xbf, 0xff, 0xeb, 0x67, 0xf4, 0x56, 0xcf, 0x22, 0xb7, 0xf7, 0xe6, + 0x1f, 0xca, 0x61, 0x63, 0xd3, 0x98, 0x33, 0xa2, 0x6f, 0xc3, 0xb8, 0x6d, 0x6a, 0x9a, 0x6a, 0x74, + 0x3d, 0x12, 0x91, 0x4d, 0x2e, 0xf4, 0xb9, 0xd3, 0x71, 0x14, 0x23, 0xcc, 0x96, 0x53, 0xfb, 0x7b, + 0xf3, 0xe3, 0xb1, 0x39, 0x1c, 0x17, 0x27, 0xff, 0xa6, 0x00, 0xb0, 0x4c, 0x2c, 0xcd, 0xec, 0xe9, + 0xc4, 0x18, 0xc6, 0x09, 0xfa, 0x76, 0xec, 0x04, 0x7d, 0xa9, 0xdf, 0x8c, 0x16, 0xa8, 0x9a, 0x7b, + 0x84, 0x76, 0x13, 0x47, 0xe8, 0xcb, 0x83, 0x8b, 0x38, 0xf8, 0x0c, 0xbd, 0x55, 0x84, 0xe9, 0x90, + 0x78, 0xc9, 0x34, 0x3a, 0x2a, 0xdf, 0x13, 0x2f, 0xc4, 0x62, 0xe2, 0xf1, 0x44, 0x4c, 0x9c, 0xcc, + 0x60, 0x89, 0xc4, 0xc3, 0xd5, 0x40, 0xfb, 0x02, 0x67, 0x3f, 0x1f, 0x17, 0x7e, 0x7b, 0x6f, 0xfe, + 0xc0, 0x7a, 0xbe, 0x16, 0x60, 0xc6, 0x95, 0x45, 0x8f, 0xc1, 0x51, 0x9b, 0x28, 0x8e, 0x69, 0xf0, + 0x34, 0x31, 0x1a, 0x1a, 0x85, 0xf9, 0x28, 0x16, 0xb3, 0xe8, 0x09, 0x18, 0xd1, 0x89, 0xe3, 0x28, + 0x5d, 0xc2, 0x33, 0xc2, 0x68, 0x7d, 0x52, 0x10, 0x8e, 0xac, 0x79, 0xc3, 0xd8, 0x9f, 0x47, 0xd7, + 0x61, 0x42, 0x53, 0x1c, 0x11, 0xda, 0x2d, 0x55, 0x27, 0x7c, 0xcf, 0x8f, 0x9d, 0xf9, 0x9f, 0xbb, + 0x8b, 0x18, 0xc6, 0x11, 0x9e, 0x44, 0xab, 0x31, 0x24, 0x9c, 0x40, 0x46, 0x3b, 0x80, 0xd8, 0x48, + 0xcb, 0x56, 0x0c, 0xc7, 0x73, 0x19, 0x93, 0x37, 0xd2, 0xb7, 0xbc, 0x20, 0xbf, 0xad, 0xa6, 0xd0, + 0x70, 0x86, 0x04, 0xf9, 0x0f, 0x12, 0x4c, 0x84, 0x0b, 0x36, 0x84, 0x42, 0xe9, 0xad, 0x78, 0xa1, + 0xf4, 0xfc, 0xc0, 0xc1, 0x9b, 0x53, 0x29, 0x7d, 0x58, 0x04, 0x14, 0x12, 0xb1, 0xd4, 0xb0, 0xa9, + 0xb4, 0x6f, 0xdc, 0xc5, 0x3d, 0xe2, 0x67, 0x12, 0x20, 0x91, 0xac, 0x17, 0x0d, 0xc3, 0xa4, 0x3c, + 0xff, 0xfb, 0x6a, 0xbe, 0x36, 0xb0, 0x9a, 0xbe, 0x06, 0xb5, 0x8d, 0x14, 0xf6, 0x05, 0x83, 0xda, + 0xbd, 0x70, 0xc5, 0xd2, 0x04, 0x38, 0x43, 0x21, 0xf4, 0x0e, 0x80, 0x2d, 0x30, 0x5b, 0xa6, 0x48, + 0x01, 0x2f, 0x0d, 0x90, 0x4d, 0x19, 0xc0, 0x92, 0x69, 0x6c, 0xa9, 0xdd, 0x30, 0xa1, 0xe1, 0x00, + 0x18, 0x47, 0x84, 0xcc, 0x5e, 0x80, 0x93, 0x39, 0xda, 0xa3, 0xe3, 0x50, 0xbc, 0x41, 0x7a, 0x9e, + 0x5b, 0x31, 0xfb, 0x13, 0x9d, 0x88, 0xde, 0xc7, 0x46, 0xc5, 0x55, 0xea, 0x5c, 0xe1, 0x39, 0x49, + 0xfe, 0xb2, 0x1c, 0x8d, 0x35, 0x5e, 0xc5, 0x9e, 0x86, 0x8a, 0x4d, 0x2c, 0x4d, 0x6d, 0x2b, 0x8e, + 0xa8, 0x67, 0x78, 0x41, 0x8a, 0xc5, 0x18, 0x0e, 0x66, 0x63, 0xf5, 0x6e, 0xe1, 0xfe, 0xd6, 0xbb, + 0xc5, 0x7b, 0x5d, 0xef, 0x9a, 0x50, 0x71, 0xfc, 0x42, 0xb7, 0xc4, 0xc1, 0x17, 0x0f, 0x91, 0xb3, + 0x45, 0x8d, 0x1b, 0x08, 0x0c, 0xaa, 0xdb, 0x40, 0x48, 0x56, 0x5d, 0x5b, 0xee, 0xb3, 0xae, 0x5d, + 0x85, 0x13, 0x36, 0xd9, 0x51, 0x99, 0x1a, 0x97, 0x55, 0x87, 0x9a, 0x76, 0x6f, 0x55, 0xd5, 0x55, + 0x2a, 0xca, 0x9e, 0xea, 0xfe, 0xde, 0xfc, 0x09, 0x9c, 0x31, 0x8f, 0x33, 0xb9, 0x58, 0x76, 0xb6, + 0x14, 0xd7, 0x21, 0x1d, 0x9e, 0xd2, 0x2a, 0x61, 0x76, 0x6e, 0xf0, 0x51, 0x2c, 0x66, 0x91, 0x1e, + 0x0b, 0xee, 0xca, 0xbd, 0x08, 0xee, 0x89, 0xfc, 0xc0, 0x46, 0x1b, 0x70, 0xd2, 0xb2, 0xcd, 0xae, + 0x4d, 0x1c, 0x67, 0x99, 0x28, 0x1d, 0x4d, 0x35, 0x88, 0xef, 0xaf, 0x51, 0x6e, 0xe7, 0x43, 0xfb, + 0x7b, 0xf3, 0x27, 0x1b, 0xd9, 0x24, 0x38, 0x8f, 0x57, 0xfe, 0xac, 0x04, 0xc7, 0x93, 0xa7, 0x6c, + 0x4e, 0x55, 0x2a, 0x0d, 0x54, 0x95, 0x3e, 0x19, 0xd9, 0x36, 0x5e, 0xc9, 0x1e, 0x44, 0x43, 0xc6, + 0xd6, 0x59, 0x84, 0x49, 0x91, 0x47, 0xfc, 0x49, 0x51, 0x97, 0x07, 0xd1, 0xb0, 0x11, 0x9f, 0xc6, + 0x49, 0x7a, 0x56, 0x6b, 0x86, 0x25, 0xa4, 0x0f, 0x52, 0x8a, 0xd7, 0x9a, 0x8b, 0x49, 0x02, 0x9c, + 0xe6, 0x41, 0x6b, 0x30, 0xed, 0x1a, 0x69, 0x28, 0x2f, 0x3a, 0x1f, 0x12, 0x50, 0xd3, 0x1b, 0x69, + 0x12, 0x9c, 0xc5, 0x87, 0x76, 0x00, 0xda, 0x7e, 0x41, 0xe0, 0x54, 0x8f, 0xf2, 0x5c, 0x5d, 0x1f, + 0x78, 0x6f, 0x05, 0xb5, 0x45, 0x98, 0x11, 0x83, 0x21, 0x07, 0x47, 0x24, 0xa1, 0x17, 0x60, 0xdc, + 0xe6, 0x17, 0x0f, 0xdf, 0x00, 0xaf, 0x78, 0x7f, 0x40, 0xb0, 0x8d, 0xe3, 0xe8, 0x24, 0x8e, 0xd3, + 0xa2, 0x73, 0x30, 0xd1, 0x66, 0x35, 0x2a, 0x53, 0x63, 0xc9, 0x74, 0x0d, 0xca, 0x03, 0xbd, 0x58, + 0x47, 0xac, 0x4e, 0x58, 0x8a, 0xcd, 0xe0, 0x04, 0xa5, 0xfc, 0x47, 0x29, 0x7a, 0xbc, 0x05, 0x65, + 0xfa, 0xb9, 0x58, 0x49, 0xf6, 0x58, 0xa2, 0x24, 0x9b, 0x49, 0x73, 0x44, 0x2a, 0xb2, 0xef, 0x64, + 0x57, 0xe8, 0x17, 0x0f, 0x55, 0xa1, 0x87, 0xc7, 0xf4, 0x9d, 0x4b, 0xf4, 0x8f, 0x25, 0x98, 0xb9, + 0xd8, 0xbc, 0x64, 0x9b, 0xae, 0xe5, 0xab, 0x77, 0xc5, 0xf2, 0xfc, 0xfc, 0x35, 0x28, 0xd9, 0xae, + 0xe6, 0xdb, 0xf5, 0x5f, 0xbe, 0x5d, 0xd8, 0xd5, 0x98, 0x5d, 0xd3, 0x09, 0x2e, 0xcf, 0x28, 0xc6, + 0x80, 0xde, 0x82, 0xa3, 0xb6, 0x62, 0x74, 0x89, 0x7f, 0x80, 0x3f, 0xdb, 0xa7, 0x35, 0x2b, 0xcb, + 0x98, 0xb1, 0x47, 0xca, 0x48, 0x8e, 0x86, 0x05, 0xaa, 0xfc, 0x53, 0x09, 0x26, 0x2f, 0xb7, 0x5a, + 0x8d, 0x15, 0x83, 0x67, 0x80, 0x86, 0x42, 0xb7, 0x59, 0x8d, 0x61, 0x29, 0x74, 0x3b, 0x59, 0x63, + 0xb0, 0x39, 0xcc, 0x67, 0xd0, 0x36, 0x8c, 0xb0, 0xcc, 0x43, 0x8c, 0xce, 0x80, 0xd7, 0x03, 0x21, + 0xae, 0xee, 0x81, 0x84, 0xb5, 0xab, 0x18, 0xc0, 0x3e, 0xbc, 0xfc, 0x1e, 0x9c, 0x88, 0xa8, 0xc7, + 0xfc, 0xc5, 0x5f, 0x36, 0x51, 0x1b, 0xca, 0x4c, 0x13, 0xff, 0xdd, 0xb2, 0xdf, 0xe7, 0xb7, 0x84, + 0xc9, 0x61, 0x0d, 0xc6, 0x7e, 0x39, 0xd8, 0xc3, 0x96, 0xd7, 0x60, 0xfc, 0xb2, 0xe9, 0xd0, 0x86, + 0x69, 0x53, 0xee, 0x36, 0xf4, 0x08, 0x14, 0x75, 0xd5, 0x10, 0x27, 0xfc, 0x98, 0xe0, 0x29, 0xb2, + 0x33, 0x88, 0x8d, 0xf3, 0x69, 0x65, 0x57, 0x64, 0xb2, 0x70, 0x5a, 0xd9, 0xc5, 0x6c, 0x5c, 0xbe, + 0x04, 0x23, 0x62, 0x39, 0xa2, 0x40, 0xc5, 0x83, 0x81, 0x8a, 0x19, 0x40, 0xbf, 0x2c, 0xc0, 0x88, + 0xd0, 0x7e, 0x08, 0x17, 0xc1, 0x37, 0x62, 0x17, 0xc1, 0x73, 0x83, 0xad, 0x74, 0xee, 0x2d, 0xb0, + 0x93, 0xb8, 0x05, 0xbe, 0x38, 0x20, 0xfe, 0xc1, 0x57, 0xc0, 0x8f, 0x24, 0x98, 0x88, 0xc7, 0x1c, + 0x3a, 0x0b, 0x63, 0xec, 0x3c, 0x52, 0xdb, 0x64, 0x3d, 0x2c, 0xa8, 0x83, 0x47, 0x99, 0x66, 0x38, + 0x85, 0xa3, 0x74, 0xa8, 0x1b, 0xb0, 0xb1, 0xb0, 0x10, 0x4e, 0xc9, 0x77, 0xb9, 0x4b, 0x55, 0xad, + 0xe6, 0xb5, 0x89, 0x6a, 0x2b, 0x06, 0xbd, 0x62, 0x37, 0xa9, 0xad, 0x1a, 0xdd, 0x94, 0x20, 0x1e, + 0x63, 0x51, 0x64, 0xf9, 0xa6, 0x04, 0x63, 0x42, 0xe5, 0x21, 0x5c, 0x67, 0x5e, 0x8f, 0x5f, 0x67, + 0x9e, 0x1d, 0x70, 0x3f, 0x67, 0xdf, 0x65, 0x3e, 0x09, 0x4d, 0x61, 0x3b, 0x98, 0x25, 0x98, 0x6d, + 0xd3, 0xa1, 0xc9, 0x04, 0xc3, 0xf6, 0x1a, 0xe6, 0x33, 0xe8, 0x7b, 0x12, 0x1c, 0x57, 0x13, 0x7b, + 0x5e, 0xf8, 0xfa, 0xe5, 0xc1, 0x54, 0x0b, 0x60, 0xea, 0x55, 0x21, 0xef, 0x78, 0x72, 0x06, 0xa7, + 0x44, 0xca, 0x2e, 0xa4, 0xa8, 0x90, 0x02, 0xa5, 0x6d, 0x4a, 0x2d, 0xb1, 0x08, 0x4b, 0x83, 0x67, + 0x9e, 0x50, 0xa5, 0x0a, 0x37, 0xbf, 0xd5, 0x6a, 0x60, 0x0e, 0x2d, 0xff, 0xa2, 0x10, 0x38, 0xac, + 0xe9, 0x6d, 0x92, 0x20, 0xdf, 0x4a, 0xf7, 0x22, 0xdf, 0x8e, 0x65, 0xe5, 0x5a, 0xf4, 0x0d, 0x28, + 0x52, 0x6d, 0xd0, 0x0b, 0xad, 0x90, 0xd0, 0x5a, 0x6d, 0x86, 0x09, 0xab, 0xb5, 0xda, 0xc4, 0x0c, + 0x12, 0xbd, 0x0d, 0x65, 0x76, 0x9a, 0xb1, 0x3d, 0x5e, 0x1c, 0x3c, 0x87, 0x30, 0x7f, 0x85, 0x11, + 0xc6, 0x7e, 0x39, 0xd8, 0xc3, 0x95, 0xdf, 0x83, 0xf1, 0x58, 0x22, 0x40, 0xd7, 0xe1, 0x98, 0x66, + 0x2a, 0x9d, 0xba, 0xa2, 0x29, 0x46, 0x9b, 0xd8, 0xc9, 0xd4, 0x98, 0x7d, 0x17, 0x5a, 0x8d, 0x70, + 0x88, 0x84, 0x12, 0x34, 0x1f, 0xa3, 0x73, 0x38, 0x86, 0x2d, 0x2b, 0x00, 0xa1, 0xf5, 0x68, 0x1e, + 0xca, 0x2c, 0x84, 0xbd, 0x93, 0x69, 0xb4, 0x3e, 0xca, 0x74, 0x65, 0x91, 0xed, 0x60, 0x6f, 0x1c, + 0x9d, 0x01, 0x70, 0x48, 0xdb, 0x26, 0x94, 0xe7, 0x1d, 0xef, 0xf5, 0x28, 0xc8, 0xc0, 0xcd, 0x60, + 0x06, 0x47, 0xa8, 0xe4, 0x3f, 0x4b, 0x30, 0xbe, 0x4e, 0xe8, 0xbb, 0xa6, 0x7d, 0xa3, 0xc1, 0x9b, + 0xbb, 0x43, 0xc8, 0xfb, 0x9b, 0xb1, 0xbc, 0xff, 0x4a, 0x9f, 0x6b, 0x16, 0xd3, 0x36, 0x2f, 0xfb, + 0xcb, 0x7f, 0x97, 0xa0, 0x1a, 0xa3, 0x8c, 0xa6, 0x09, 0x02, 0x65, 0xcb, 0xb4, 0xa9, 0x7f, 0xc6, + 0x1f, 0x4a, 0x03, 0x96, 0x52, 0x23, 0xa7, 0x3c, 0x83, 0xc5, 0x1e, 0x3a, 0xb3, 0x73, 0xcb, 0x36, + 0x75, 0x11, 0xf7, 0x87, 0x93, 0x42, 0x88, 0x1d, 0xda, 0x79, 0xd1, 0x36, 0x75, 0xcc, 0xb1, 0xe5, + 0x3f, 0x49, 0x30, 0x15, 0xa3, 0x1c, 0x42, 0x4a, 0x57, 0xe2, 0x29, 0xfd, 0xc5, 0xc3, 0x18, 0x96, + 0x93, 0xd8, 0xbf, 0x4a, 0x9a, 0xc5, 0x1c, 0x80, 0xb6, 0x60, 0xcc, 0x32, 0x3b, 0xcd, 0x7b, 0xd0, + 0xd5, 0x9b, 0x64, 0x27, 0x64, 0x23, 0xc4, 0xc2, 0x51, 0x60, 0xb4, 0x0b, 0x53, 0x86, 0xa2, 0x13, + 0xc7, 0x52, 0xda, 0xa4, 0x79, 0x0f, 0xde, 0x54, 0x1e, 0xe0, 0x9d, 0x86, 0x24, 0x22, 0x4e, 0x0b, + 0x91, 0x7f, 0x9d, 0xb2, 0xdb, 0xb4, 0x29, 0x7a, 0x15, 0x2a, 0xfc, 0x03, 0x8b, 0xb6, 0xa9, 0x89, + 0xa3, 0xed, 0x2c, 0x5b, 0x9a, 0x86, 0x18, 0xbb, 0xbd, 0x37, 0xff, 0xdf, 0x07, 0x3e, 0x09, 0xfb, + 0x84, 0x38, 0x80, 0x41, 0xeb, 0x50, 0xb2, 0x0e, 0x53, 0x66, 0xf0, 0x83, 0x85, 0xd7, 0x16, 0x1c, + 0x47, 0xfe, 0x47, 0x52, 0x71, 0x7e, 0xbc, 0x5c, 0xbf, 0x67, 0x0b, 0x16, 0x94, 0x35, 0xb9, 0x8b, + 0x66, 0xc3, 0x88, 0x38, 0x65, 0x45, 0x5c, 0x5e, 0x3a, 0x4c, 0x5c, 0x46, 0x4f, 0x86, 0xe0, 0x12, + 0xe1, 0x0f, 0xfa, 0x82, 0xe4, 0xbf, 0x4a, 0x30, 0xc5, 0x15, 0x6a, 0xbb, 0xb6, 0x4a, 0x7b, 0x43, + 0xcb, 0xa0, 0x5b, 0xb1, 0x0c, 0xba, 0xdc, 0xa7, 0xa1, 0x29, 0x8d, 0x73, 0xb3, 0xe8, 0xe7, 0x12, + 0x3c, 0x90, 0xa2, 0x1e, 0x42, 0x86, 0x21, 0xf1, 0x0c, 0xf3, 0xca, 0x61, 0x0d, 0xcc, 0xc9, 0x32, + 0x37, 0x21, 0xc3, 0x3c, 0x1e, 0xb8, 0x67, 0x00, 0x2c, 0x5b, 0xdd, 0x51, 0x35, 0xd2, 0x15, 0x8d, + 0xe4, 0x4a, 0xb8, 0x24, 0x8d, 0x60, 0x06, 0x47, 0xa8, 0xd0, 0xb7, 0x60, 0xa6, 0x43, 0xb6, 0x14, + 0x57, 0xa3, 0x8b, 0x9d, 0xce, 0x92, 0x62, 0x29, 0x9b, 0xaa, 0xa6, 0x52, 0x55, 0xdc, 0xb0, 0x47, + 0xeb, 0x17, 0xbc, 0x06, 0x6f, 0x16, 0xc5, 0xed, 0xbd, 0xf9, 0xc7, 0x0f, 0x6e, 0xea, 0xf8, 0xc4, + 0x3d, 0x9c, 0x23, 0x04, 0x7d, 0x57, 0x82, 0xaa, 0x4d, 0xde, 0x71, 0x55, 0x9b, 0x74, 0x96, 0x6d, + 0xd3, 0x8a, 0x69, 0x50, 0xe4, 0x1a, 0x5c, 0xda, 0xdf, 0x9b, 0xaf, 0xe2, 0x1c, 0x9a, 0x7e, 0x74, + 0xc8, 0x15, 0x84, 0x28, 0x4c, 0x2b, 0x9a, 0x66, 0xbe, 0x4b, 0xe2, 0x1e, 0x28, 0x71, 0xf9, 0xf5, + 0xfd, 0xbd, 0xf9, 0xe9, 0xc5, 0xf4, 0x74, 0x3f, 0xa2, 0xb3, 0xe0, 0xd1, 0x02, 0x8c, 0xec, 0x98, + 0x9a, 0xab, 0x13, 0xa7, 0x5a, 0xe6, 0x92, 0x58, 0xc6, 0x1d, 0xb9, 0xea, 0x0d, 0xdd, 0xde, 0x9b, + 0x3f, 0x7a, 0xb1, 0xc9, 0x9f, 0x3e, 0x7c, 0x2a, 0x76, 0x47, 0x63, 0x35, 0x93, 0xd8, 0xf2, 0xfc, + 0xcd, 0xb6, 0x12, 0xe6, 0x98, 0xcb, 0xe1, 0x14, 0x8e, 0xd2, 0x21, 0x1d, 0x46, 0xb7, 0xc5, 0xbd, + 0xdd, 0xa9, 0x8e, 0x0c, 0x74, 0xfa, 0xc5, 0xee, 0xfd, 0xf5, 0x29, 0x21, 0x72, 0xd4, 0x1f, 0x76, + 0x70, 0x28, 0x01, 0x3d, 0x01, 0x23, 0xfc, 0xc7, 0xca, 0x32, 0x7f, 0x00, 0xab, 0x84, 0x99, 0xe8, + 0xb2, 0x37, 0x8c, 0xfd, 0x79, 0x9f, 0x74, 0xa5, 0xb1, 0xc4, 0x1f, 0x66, 0x13, 0xa4, 0x2b, 0x8d, + 0x25, 0xec, 0xcf, 0x23, 0x0b, 0x46, 0x1c, 0xb2, 0xaa, 0x1a, 0xee, 0x6e, 0x15, 0x06, 0x6a, 0x35, + 0x37, 0x2f, 0x70, 0xee, 0xc4, 0x53, 0x54, 0x28, 0x51, 0xcc, 0x63, 0x5f, 0x0c, 0xda, 0x85, 0x51, + 0xdb, 0x35, 0x16, 0x9d, 0x0d, 0x87, 0xd8, 0xd5, 0x31, 0x2e, 0xb3, 0xdf, 0xe4, 0x8c, 0x7d, 0xfe, + 0xa4, 0xd4, 0xc0, 0x83, 0x01, 0x05, 0x0e, 0x85, 0xa1, 0x9f, 0x48, 0x80, 0x1c, 0xd7, 0xb2, 0x34, + 0xa2, 0x13, 0x83, 0x2a, 0x1a, 0x7f, 0x0d, 0x73, 0xaa, 0xc7, 0xb8, 0x0e, 0x8d, 0x7e, 0xed, 0x4e, + 0x01, 0x25, 0x95, 0x09, 0x9e, 0xa9, 0xd3, 0xa4, 0x38, 0x43, 0x0f, 0xb6, 0x14, 0x5b, 0x0e, 0xff, + 0xbb, 0x3a, 0x3e, 0xd0, 0x52, 0x64, 0xbf, 0x0a, 0x86, 0x4b, 0x21, 0xe6, 0xb1, 0x2f, 0x06, 0x5d, + 0x85, 0x19, 0x9b, 0x28, 0x9d, 0x2b, 0x86, 0xd6, 0xc3, 0xa6, 0x49, 0x2f, 0xaa, 0x1a, 0x71, 0x7a, + 0x0e, 0x25, 0x7a, 0x75, 0x82, 0x87, 0x4d, 0xf0, 0xb9, 0x06, 0xce, 0xa4, 0xc2, 0x39, 0xdc, 0xfc, + 0x2b, 0x02, 0xf1, 0x7e, 0x3b, 0x9c, 0xef, 0xf0, 0x0e, 0xf7, 0x15, 0x41, 0xa8, 0xea, 0x7d, 0xfb, + 0x8a, 0x20, 0x22, 0xe2, 0xe0, 0x27, 0xa4, 0xaf, 0x0a, 0x30, 0x1d, 0x12, 0xdf, 0xf5, 0x57, 0x04, + 0x19, 0x2c, 0x43, 0xf8, 0x8a, 0x20, 0xbb, 0x0d, 0x5f, 0xbc, 0xdf, 0x6d, 0xf8, 0xfb, 0xf0, 0xf5, + 0x02, 0xef, 0xec, 0x87, 0x4e, 0xfc, 0xf7, 0xef, 0xec, 0x87, 0xba, 0xe6, 0x94, 0x33, 0xbf, 0x2d, + 0x44, 0x0d, 0xfa, 0x0f, 0x6a, 0x1f, 0x1f, 0xfe, 0x2b, 0x45, 0xf9, 0xf3, 0x22, 0x1c, 0x4f, 0xee, + 0xd8, 0x58, 0x17, 0x51, 0xba, 0x63, 0x17, 0xb1, 0x01, 0x27, 0xb6, 0x5c, 0x4d, 0xeb, 0x71, 0x87, + 0x44, 0x5a, 0x89, 0xde, 0xab, 0xfd, 0xc3, 0x82, 0xf3, 0xc4, 0xc5, 0x0c, 0x1a, 0x9c, 0xc9, 0x99, + 0xd3, 0x11, 0x2d, 0x0e, 0xd4, 0x11, 0x4d, 0x35, 0xe4, 0x4a, 0x7d, 0x34, 0xe4, 0x32, 0xbb, 0x9b, + 0xe5, 0x01, 0xba, 0x9b, 0xf7, 0xa2, 0x1d, 0x99, 0x91, 0xf8, 0xee, 0xd4, 0x8e, 0x94, 0x1f, 0x86, + 0x59, 0xc1, 0x46, 0x79, 0xa7, 0xd0, 0xa0, 0xb6, 0xa9, 0x69, 0xc4, 0x5e, 0x76, 0x75, 0xbd, 0x27, + 0x9f, 0x87, 0x89, 0x78, 0x4f, 0xdc, 0x5b, 0x79, 0xaf, 0x4d, 0x2f, 0x7a, 0x29, 0x91, 0x95, 0xf7, + 0xc6, 0x71, 0x40, 0x21, 0x7f, 0x20, 0xc1, 0x4c, 0xf6, 0xf7, 0x77, 0x48, 0x83, 0x09, 0x5d, 0xd9, + 0x8d, 0x7e, 0x80, 0x28, 0x0d, 0x78, 0xe3, 0xe6, 0xcd, 0xcf, 0xb5, 0x18, 0x16, 0x4e, 0x60, 0xcb, + 0x5f, 0x48, 0x70, 0x32, 0xa7, 0xcd, 0x38, 0x5c, 0x4d, 0xd0, 0x35, 0xa8, 0xe8, 0xca, 0x6e, 0xd3, + 0xb5, 0xbb, 0x64, 0xe0, 0x37, 0x06, 0x9e, 0x4b, 0xd6, 0x04, 0x0a, 0x0e, 0xf0, 0xe4, 0x8f, 0x25, + 0xa8, 0xe6, 0xd5, 0x83, 0xe8, 0x6c, 0xac, 0x21, 0xfa, 0x68, 0xa2, 0x21, 0x3a, 0x95, 0xe2, 0x1b, + 0x52, 0x3b, 0xf4, 0x13, 0x09, 0x66, 0xb2, 0xeb, 0x66, 0xf4, 0x4c, 0x4c, 0xe3, 0xf9, 0x84, 0xc6, + 0x93, 0x09, 0x2e, 0xa1, 0xef, 0x36, 0x4c, 0x88, 0xea, 0x5a, 0xc0, 0x08, 0x2f, 0x3f, 0x79, 0x70, + 0x56, 0x15, 0x60, 0x7e, 0x9d, 0xc8, 0x57, 0x32, 0x3e, 0x86, 0x13, 0xb8, 0xf2, 0xcf, 0x0b, 0x50, + 0x6e, 0xb6, 0x15, 0x8d, 0x0c, 0xa1, 0xa8, 0xbb, 0x16, 0x2b, 0xea, 0xfa, 0xfd, 0x1f, 0x01, 0xae, + 0x65, 0x6e, 0x3d, 0xb7, 0x99, 0xa8, 0xe7, 0xce, 0x0d, 0x84, 0x7e, 0x70, 0x29, 0xf7, 0x3c, 0x8c, + 0x06, 0x4a, 0xf4, 0x77, 0x7a, 0xc8, 0x1f, 0x15, 0x60, 0x2c, 0x22, 0xa2, 0xcf, 0xb3, 0x67, 0x27, + 0x76, 0x7a, 0x0f, 0xf2, 0xef, 0x48, 0x11, 0xd9, 0x35, 0xff, 0xfc, 0xf6, 0xbe, 0xbf, 0x0b, 0xbf, + 0xa3, 0x4a, 0x1f, 0xeb, 0xe7, 0x61, 0x82, 0xf2, 0xff, 0xce, 0x09, 0xde, 0xf8, 0x8a, 0x3c, 0x8a, + 0x83, 0xaf, 0x3a, 0x5b, 0xb1, 0x59, 0x9c, 0xa0, 0x9e, 0x7d, 0x01, 0xc6, 0x63, 0xc2, 0xfa, 0xfa, + 0x5c, 0xee, 0x77, 0x12, 0x3c, 0x7a, 0xc7, 0x3b, 0x19, 0xaa, 0xc7, 0xb6, 0x57, 0x2d, 0xb1, 0xbd, + 0xe6, 0xf2, 0x01, 0x86, 0xf8, 0xb1, 0xc4, 0x8f, 0x0a, 0x80, 0x5a, 0xdb, 0xaa, 0xdd, 0x69, 0x28, + 0x36, 0xed, 0x61, 0xf1, 0x3f, 0x58, 0x43, 0xd8, 0x70, 0x67, 0x61, 0xac, 0x43, 0x9c, 0xb6, 0xad, + 0x72, 0x67, 0x89, 0xbb, 0x42, 0xf0, 0x0e, 0xb2, 0x1c, 0x4e, 0xe1, 0x28, 0x1d, 0xea, 0x42, 0x65, + 0xc7, 0xfb, 0x2f, 0x3f, 0xbf, 0xf3, 0xd6, 0x6f, 0x31, 0x1b, 0xfe, 0x9f, 0x60, 0x18, 0x5f, 0x62, + 0xc0, 0xc1, 0x01, 0xb8, 0xfc, 0xa1, 0x04, 0x33, 0x69, 0xc7, 0x2c, 0x33, 0xd5, 0xef, 0xbf, 0x73, + 0x1e, 0x86, 0x12, 0x47, 0x67, 0x5e, 0x39, 0xe6, 0xbd, 0x78, 0x33, 0xc9, 0x98, 0x8f, 0xca, 0x5f, + 0x4a, 0x30, 0x9b, 0xad, 0xda, 0x10, 0xae, 0x12, 0xd7, 0xe3, 0x57, 0x89, 0x7e, 0x9f, 0x0d, 0xb2, + 0xf5, 0xce, 0xb9, 0x56, 0xec, 0x65, 0xae, 0xc1, 0x10, 0x8c, 0xdc, 0x8a, 0x1b, 0xb9, 0x78, 0x68, + 0x23, 0xb3, 0x0d, 0xac, 0x3f, 0x71, 0xf3, 0xd6, 0xdc, 0x91, 0x4f, 0x6f, 0xcd, 0x1d, 0xf9, 0xec, + 0xd6, 0xdc, 0x91, 0xf7, 0xf7, 0xe7, 0xa4, 0x9b, 0xfb, 0x73, 0xd2, 0xa7, 0xfb, 0x73, 0xd2, 0xdf, + 0xf6, 0xe7, 0xa4, 0x1f, 0x7c, 0x31, 0x77, 0xe4, 0xda, 0x88, 0xc0, 0xfc, 0x57, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x5a, 0xe3, 0x5a, 0x1b, 0x28, 0x3d, 0x00, 0x00, } diff --git a/pkg/apis/extensions/v1beta1/generated.proto b/pkg/apis/extensions/v1beta1/generated.proto index a7580703f50..6e12f519eef 100644 --- a/pkg/apis/extensions/v1beta1/generated.proto +++ b/pkg/apis/extensions/v1beta1/generated.proto @@ -325,6 +325,12 @@ message DeploymentStatus { // +patchMergeKey=type // +patchStrategy=merge repeated DeploymentCondition conditions = 6; + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + optional int64 collisionCount = 8; } // DeploymentStrategy describes how to replace existing pods with new ones. diff --git a/pkg/apis/extensions/v1beta1/types.generated.go b/pkg/apis/extensions/v1beta1/types.generated.go index b882c2eb5e7..513737be10c 100644 --- a/pkg/apis/extensions/v1beta1/types.generated.go +++ b/pkg/apis/extensions/v1beta1/types.generated.go @@ -5606,7 +5606,7 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [7]bool + var yyq2 [8]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.ObservedGeneration != 0 @@ -5616,9 +5616,10 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[4] = x.AvailableReplicas != 0 yyq2[5] = x.UnavailableReplicas != 0 yyq2[6] = len(x.Conditions) != 0 + yyq2[7] = x.CollisionCount != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(7) + r.EncodeArrayStart(8) } else { yynn2 = 0 for _, b := range yyq2 { @@ -5812,6 +5813,41 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[7] { + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy25 := *x.CollisionCount + yym26 := z.EncBinary() + _ = yym26 + if false { + } else { + r.EncodeInt(int64(yy25)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("collisionCount")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy27 := *x.CollisionCount + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeInt(int64(yy27)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -5957,6 +5993,22 @@ func (x *DeploymentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv16), d) } } + case "collisionCount": + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym19 := z.DecBinary() + _ = yym19 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -5968,16 +6020,16 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj18 int - var yyb18 bool - var yyhl18 bool = l >= 0 - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + var yyj20 int + var yyb20 bool + var yyhl20 bool = l >= 0 + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5985,21 +6037,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.ObservedGeneration = 0 } else { - yyv19 := &x.ObservedGeneration - yym20 := z.DecBinary() - _ = yym20 + yyv21 := &x.ObservedGeneration + yym22 := z.DecBinary() + _ = yym22 if false { } else { - *((*int64)(yyv19)) = int64(r.DecodeInt(64)) + *((*int64)(yyv21)) = int64(r.DecodeInt(64)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -6007,29 +6059,7 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Replicas = 0 } else { - yyv21 := &x.Replicas - yym22 := z.DecBinary() - _ = yym22 - if false { - } else { - *((*int32)(yyv21)) = int32(r.DecodeInt(32)) - } - } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l - } else { - yyb18 = r.CheckBreak() - } - if yyb18 { - z.DecSendContainerState(codecSelfer_containerArrayEnd1234) - return - } - z.DecSendContainerState(codecSelfer_containerArrayElem1234) - if r.TryDecodeAsNil() { - x.UpdatedReplicas = 0 - } else { - yyv23 := &x.UpdatedReplicas + yyv23 := &x.Replicas yym24 := z.DecBinary() _ = yym24 if false { @@ -6037,21 +6067,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv23)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.ReadyReplicas = 0 + x.UpdatedReplicas = 0 } else { - yyv25 := &x.ReadyReplicas + yyv25 := &x.UpdatedReplicas yym26 := z.DecBinary() _ = yym26 if false { @@ -6059,21 +6089,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv25)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.AvailableReplicas = 0 + x.ReadyReplicas = 0 } else { - yyv27 := &x.AvailableReplicas + yyv27 := &x.ReadyReplicas yym28 := z.DecBinary() _ = yym28 if false { @@ -6081,21 +6111,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv27)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.UnavailableReplicas = 0 + x.AvailableReplicas = 0 } else { - yyv29 := &x.UnavailableReplicas + yyv29 := &x.AvailableReplicas yym30 := z.DecBinary() _ = yym30 if false { @@ -6103,13 +6133,35 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv29)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UnavailableReplicas = 0 + } else { + yyv31 := &x.UnavailableReplicas + yym32 := z.DecBinary() + _ = yym32 + if false { + } else { + *((*int32)(yyv31)) = int32(r.DecodeInt(32)) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -6117,26 +6169,52 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Conditions = nil } else { - yyv31 := &x.Conditions - yym32 := z.DecBinary() - _ = yym32 + yyv33 := &x.Conditions + yym34 := z.DecBinary() + _ = yym34 if false { } else { - h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv31), d) + h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv33), d) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym36 := z.DecBinary() + _ = yym36 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) } } for { - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj18-1, "") + z.DecStructFieldNotFound(yyj20-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -19652,7 +19730,7 @@ func (x codecSelfer1234) decSliceDeployment(v *[]Deployment, d *codec1978.Decode yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 960) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 968) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/pkg/apis/extensions/v1beta1/types.go b/pkg/apis/extensions/v1beta1/types.go index f9eaf75437f..196f3137538 100644 --- a/pkg/apis/extensions/v1beta1/types.go +++ b/pkg/apis/extensions/v1beta1/types.go @@ -330,7 +330,7 @@ type DeploymentStatus struct { // field as a collision avoidance mechanism when it needs to create the name for the // newest ReplicaSet. // +optional - CollisionCount *int64 `json:"collisionCount,omitempty"` + CollisionCount *int64 `json:"collisionCount,omitempty" protobuf:"varint,8,opt,name=collisionCount"` } type DeploymentConditionType string diff --git a/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go b/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go index 9e9a03ffb14..d94bc009e9d 100644 --- a/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go +++ b/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go @@ -186,6 +186,7 @@ var map_DeploymentStatus = map[string]string{ "availableReplicas": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", "unavailableReplicas": "Total number of unavailable pods targeted by this deployment.", "conditions": "Represents the latest available observations of a deployment's current state.", + "collisionCount": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", } func (DeploymentStatus) SwaggerDoc() map[string]string { diff --git a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index f2032b2c462..42e080ff131 100644 --- a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -628,6 +628,7 @@ func autoConvert_v1beta1_DeploymentStatus_To_extensions_DeploymentStatus(in *Dep out.AvailableReplicas = in.AvailableReplicas out.UnavailableReplicas = in.UnavailableReplicas out.Conditions = *(*[]extensions.DeploymentCondition)(unsafe.Pointer(&in.Conditions)) + out.CollisionCount = (*int64)(unsafe.Pointer(in.CollisionCount)) return nil } @@ -644,6 +645,7 @@ func autoConvert_extensions_DeploymentStatus_To_v1beta1_DeploymentStatus(in *ext out.AvailableReplicas = in.AvailableReplicas out.UnavailableReplicas = in.UnavailableReplicas out.Conditions = *(*[]DeploymentCondition)(unsafe.Pointer(&in.Conditions)) + out.CollisionCount = (*int64)(unsafe.Pointer(in.CollisionCount)) return nil } diff --git a/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go b/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go index a386e3da40b..1228dab37b8 100644 --- a/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go @@ -384,6 +384,11 @@ func DeepCopy_v1beta1_DeploymentStatus(in interface{}, out interface{}, c *conve } } } + if in.CollisionCount != nil { + in, out := &in.CollisionCount, &out.CollisionCount + *out = new(int64) + **out = **in + } return nil } } diff --git a/pkg/apis/extensions/validation/BUILD b/pkg/apis/extensions/validation/BUILD index 56f432d91f3..5291abbf861 100644 --- a/pkg/apis/extensions/validation/BUILD +++ b/pkg/apis/extensions/validation/BUILD @@ -41,6 +41,7 @@ go_test( "//pkg/security/apparmor:go_default_library", "//pkg/security/podsecuritypolicy/seccomp:go_default_library", "//pkg/security/podsecuritypolicy/util:go_default_library", + "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", diff --git a/pkg/apis/extensions/zz_generated.deepcopy.go b/pkg/apis/extensions/zz_generated.deepcopy.go index 866c908c9df..829367c8e5b 100644 --- a/pkg/apis/extensions/zz_generated.deepcopy.go +++ b/pkg/apis/extensions/zz_generated.deepcopy.go @@ -378,6 +378,11 @@ func DeepCopy_extensions_DeploymentStatus(in interface{}, out interface{}, c *co } } } + if in.CollisionCount != nil { + in, out := &in.CollisionCount, &out.CollisionCount + *out = new(int64) + **out = **in + } return nil } } diff --git a/pkg/controller/deployment/util/BUILD b/pkg/controller/deployment/util/BUILD index eb9bf868d7e..9f55884588a 100644 --- a/pkg/controller/deployment/util/BUILD +++ b/pkg/controller/deployment/util/BUILD @@ -48,6 +48,7 @@ go_test( srcs = [ "deployment_util_test.go", "hash_test.go", + "pod_util_test.go", ], library = ":go_default_library", tags = ["automanaged"], @@ -57,6 +58,7 @@ go_test( "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", "//pkg/controller:go_default_library", + "//pkg/util/hash:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/pkg/kubectl/BUILD b/pkg/kubectl/BUILD index c008aa5623b..ec5d79ff3f1 100644 --- a/pkg/kubectl/BUILD +++ b/pkg/kubectl/BUILD @@ -157,7 +157,6 @@ go_test( "//pkg/client/clientset_generated/internalclientset/typed/batch/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion:go_default_library", - "//pkg/controller/deployment/util:go_default_library", "//pkg/kubectl/util:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", diff --git a/staging/src/k8s.io/client-go/Godeps/Godeps.json b/staging/src/k8s.io/client-go/Godeps/Godeps.json index 45c6c593ca2..884b82a9f17 100644 --- a/staging/src/k8s.io/client-go/Godeps/Godeps.json +++ b/staging/src/k8s.io/client-go/Godeps/Godeps.json @@ -1,6 +1,6 @@ { "ImportPath": "k8s.io/client-go", - "GoVersion": "go1.7", + "GoVersion": "go1.8", "GodepVersion": "v79", "Packages": [ "./..." diff --git a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.pb.go b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.pb.go index aa8d9ad6468..19ee88edcdb 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.pb.go @@ -455,6 +455,11 @@ func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x38 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + dAtA[i] = 0x40 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + } return i, nil } @@ -954,6 +959,9 @@ func (m *DeploymentStatus) Size() (n int) { } } n += 1 + sovGenerated(uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + n += 1 + sovGenerated(uint64(*m.CollisionCount)) + } return n } @@ -1190,6 +1198,7 @@ func (this *DeploymentStatus) String() string { `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, }, "") return s @@ -2478,6 +2487,26 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { break } } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CollisionCount", 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.CollisionCount = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3891,103 +3920,105 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 1561 bytes of a gzipped FileDescriptorProto + // 1585 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x6f, 0x1b, 0xb7, 0x12, 0xf7, 0xda, 0x92, 0x2d, 0xd3, 0xb1, 0x1c, 0xd3, 0x7e, 0xb1, 0x9e, 0xf3, 0x20, 0x07, 0x3a, - 0xe4, 0xe3, 0x21, 0x59, 0xbd, 0x38, 0x79, 0xf9, 0x72, 0x11, 0xd4, 0x4a, 0xd2, 0x34, 0x85, 0xdd, - 0x18, 0x94, 0x1d, 0x34, 0x69, 0x0a, 0x94, 0x5a, 0x31, 0x6b, 0xc6, 0xfb, 0x85, 0x25, 0x25, 0x44, - 0xb7, 0x5e, 0x7a, 0x28, 0xd0, 0x43, 0x4f, 0xbd, 0x15, 0xed, 0xb9, 0x28, 0xd0, 0x7f, 0xc3, 0x68, - 0x2f, 0x39, 0x16, 0x3d, 0x18, 0xb5, 0xf3, 0x5f, 0xe4, 0x54, 0x90, 0xcb, 0xfd, 0xd2, 0xae, 0xfc, - 0xa1, 0xa2, 0xb9, 0xf4, 0xa6, 0xe5, 0xcc, 0xef, 0x37, 0x43, 0x72, 0x66, 0x38, 0x23, 0x70, 0x73, - 0xe7, 0x16, 0xd3, 0xa9, 0x5b, 0xdf, 0xe9, 0xb4, 0x88, 0xef, 0x10, 0x4e, 0x58, 0xdd, 0xdb, 0x31, - 0xeb, 0xd8, 0xa3, 0xac, 0x8e, 0x3d, 0x8f, 0xd5, 0xbb, 0x57, 0x5b, 0x84, 0xe3, 0xab, 0x75, 0x93, - 0x38, 0xc4, 0xc7, 0x9c, 0xb4, 0x75, 0xcf, 0x77, 0xb9, 0x0b, 0x2f, 0x04, 0x40, 0x3d, 0x06, 0xea, - 0xde, 0x8e, 0xa9, 0x0b, 0xa0, 0x2e, 0x80, 0xba, 0x02, 0x2e, 0x5e, 0x31, 0x29, 0xdf, 0xee, 0xb4, - 0x74, 0xc3, 0xb5, 0xeb, 0xa6, 0x6b, 0xba, 0x75, 0x89, 0x6f, 0x75, 0x5e, 0xc8, 0x2f, 0xf9, 0x21, - 0x7f, 0x05, 0xbc, 0x8b, 0xd7, 0x95, 0x43, 0xd8, 0xa3, 0x36, 0x36, 0xb6, 0xa9, 0x43, 0xfc, 0x5e, - 0xec, 0x92, 0x4d, 0x38, 0xae, 0x77, 0x33, 0xde, 0x2c, 0xd6, 0x07, 0xa1, 0xfc, 0x8e, 0xc3, 0xa9, - 0x4d, 0x32, 0x80, 0x1b, 0x47, 0x01, 0x98, 0xb1, 0x4d, 0x6c, 0x9c, 0xc1, 0x5d, 0x1b, 0x84, 0xeb, - 0x70, 0x6a, 0xd5, 0xa9, 0xc3, 0x19, 0xf7, 0x33, 0xa0, 0xc4, 0x9e, 0x18, 0xf1, 0xbb, 0xc4, 0x8f, - 0x37, 0x44, 0x5e, 0x61, 0xdb, 0xb3, 0x48, 0xde, 0x9e, 0x2e, 0x0f, 0xbc, 0x9a, 0x3c, 0xed, 0xdb, - 0x87, 0x5c, 0xa4, 0xe7, 0x5a, 0xd4, 0xe8, 0x0d, 0xba, 0xca, 0xda, 0x4f, 0xa3, 0x00, 0xdc, 0x27, - 0x9e, 0xe5, 0xf6, 0x6c, 0xe2, 0x70, 0xf8, 0x39, 0x28, 0x89, 0x63, 0x6e, 0x63, 0x8e, 0x2b, 0xda, - 0x39, 0xed, 0xe2, 0xd4, 0xf2, 0xff, 0x74, 0x75, 0xd9, 0xc9, 0x5d, 0xc7, 0xd7, 0x2d, 0xb4, 0xf5, - 0xee, 0x55, 0xfd, 0x71, 0xeb, 0x25, 0x31, 0xf8, 0x3a, 0xe1, 0xb8, 0x01, 0x77, 0xf7, 0x96, 0x46, - 0x0e, 0xf6, 0x96, 0x40, 0xbc, 0x86, 0x22, 0x56, 0xf8, 0x14, 0x14, 0x98, 0x47, 0x8c, 0xca, 0xa8, - 0x64, 0xbf, 0xa9, 0x1f, 0x33, 0x94, 0xf4, 0xd8, 0xc9, 0xa6, 0x47, 0x8c, 0xc6, 0x29, 0x65, 0xa4, - 0x20, 0xbe, 0x90, 0xa4, 0x84, 0x18, 0x8c, 0x33, 0x8e, 0x79, 0x87, 0x55, 0xc6, 0x24, 0xf9, 0xed, - 0x61, 0xc8, 0x25, 0x41, 0xa3, 0xac, 0xe8, 0xc7, 0x83, 0x6f, 0xa4, 0x88, 0x6b, 0xfb, 0x63, 0x60, - 0x2e, 0x56, 0xbe, 0xe7, 0x3a, 0x6d, 0xca, 0xa9, 0xeb, 0xc0, 0x15, 0x50, 0xe0, 0x3d, 0x8f, 0xc8, - 0x33, 0x9b, 0x6c, 0x5c, 0x08, 0x9d, 0xdb, 0xec, 0x79, 0xe4, 0xed, 0xde, 0xd2, 0x42, 0x0e, 0x44, - 0x88, 0x90, 0x04, 0xc1, 0x27, 0x91, 0xdf, 0xa3, 0x12, 0x7e, 0x37, 0x6d, 0xfc, 0xed, 0xde, 0xd2, - 0xa1, 0xe1, 0xa0, 0x47, 0x9c, 0x69, 0x67, 0xe1, 0x79, 0x30, 0xee, 0x13, 0xcc, 0x5c, 0xa7, 0x52, - 0x90, 0xbc, 0xd1, 0xa6, 0x90, 0x5c, 0x45, 0x4a, 0x0a, 0x2f, 0x81, 0x09, 0x9b, 0x30, 0x86, 0x4d, - 0x52, 0x29, 0x4a, 0xc5, 0x19, 0xa5, 0x38, 0xb1, 0x1e, 0x2c, 0xa3, 0x50, 0x0e, 0x5f, 0x82, 0xb2, - 0x85, 0x19, 0xdf, 0xf2, 0xda, 0x98, 0x93, 0x4d, 0x6a, 0x93, 0xca, 0xb8, 0x3c, 0xea, 0xff, 0x1e, - 0x2f, 0x4a, 0x04, 0xa2, 0x71, 0x46, 0xb1, 0x97, 0xd7, 0x52, 0x4c, 0xa8, 0x8f, 0x19, 0x76, 0x01, - 0x14, 0x2b, 0x9b, 0x3e, 0x76, 0x58, 0x70, 0x64, 0xc2, 0xde, 0xc4, 0x89, 0xed, 0x2d, 0x2a, 0x7b, - 0x70, 0x2d, 0xc3, 0x86, 0x72, 0x2c, 0xd4, 0x76, 0x35, 0x50, 0x8e, 0x2f, 0x6c, 0x8d, 0x32, 0x0e, - 0x9f, 0x67, 0xd2, 0x42, 0x3f, 0x9e, 0x03, 0x02, 0x2d, 0x93, 0xe2, 0xb4, 0x72, 0xa2, 0x14, 0xae, - 0x24, 0x52, 0xe2, 0x13, 0x50, 0xa4, 0x9c, 0xd8, 0xe2, 0xfa, 0xc7, 0x2e, 0x4e, 0x2d, 0x5f, 0x1b, - 0x22, 0x6c, 0x1b, 0xd3, 0x8a, 0xbf, 0xf8, 0x48, 0x30, 0xa1, 0x80, 0xb0, 0xf6, 0xf5, 0x18, 0x80, - 0xb1, 0x12, 0x72, 0x2d, 0xab, 0x85, 0x8d, 0x1d, 0x78, 0x0e, 0x14, 0x1c, 0x6c, 0x87, 0xd1, 0x1a, - 0xa5, 0xd2, 0xc7, 0xd8, 0x26, 0x48, 0x4a, 0xe0, 0xf7, 0x1a, 0x80, 0x1d, 0x79, 0x15, 0xed, 0x55, - 0xc7, 0x71, 0x39, 0x16, 0xa7, 0x13, 0x3a, 0xd8, 0x1c, 0xc2, 0xc1, 0xd0, 0xb6, 0xbe, 0x95, 0x61, - 0x7d, 0xe0, 0x70, 0xbf, 0x17, 0xdf, 0x52, 0x56, 0x01, 0xe5, 0xb8, 0x02, 0x77, 0x00, 0xf0, 0x15, - 0xe7, 0xa6, 0xab, 0x12, 0xfe, 0xf8, 0xd5, 0x24, 0x74, 0xe7, 0x9e, 0xeb, 0xbc, 0xa0, 0x66, 0x5c, - 0xb2, 0x50, 0x44, 0x89, 0x12, 0xf4, 0x8b, 0x0f, 0xc0, 0xc2, 0x00, 0xbf, 0xe1, 0x69, 0x30, 0xb6, - 0x43, 0x7a, 0xc1, 0x51, 0x22, 0xf1, 0x13, 0xce, 0x83, 0x62, 0x17, 0x5b, 0x1d, 0x12, 0x64, 0x33, - 0x0a, 0x3e, 0xee, 0x8c, 0xde, 0xd2, 0x6a, 0xbf, 0x17, 0x93, 0x91, 0x25, 0x2a, 0x17, 0xbc, 0x08, - 0x4a, 0x3e, 0xf1, 0x2c, 0x6a, 0x60, 0x26, 0x39, 0x8a, 0x8d, 0x53, 0x22, 0x4a, 0x90, 0x5a, 0x43, - 0x91, 0x14, 0x7e, 0x06, 0x4a, 0x8c, 0x58, 0xc4, 0xe0, 0xae, 0xaf, 0x8a, 0xe7, 0xb5, 0x63, 0xc6, - 0x20, 0x6e, 0x11, 0xab, 0xa9, 0xa0, 0x01, 0x7d, 0xf8, 0x85, 0x22, 0x4a, 0xf8, 0x29, 0x28, 0x71, - 0x62, 0x7b, 0x16, 0xe6, 0x44, 0x9d, 0xe6, 0x95, 0xc1, 0xa7, 0x29, 0x68, 0x37, 0xdc, 0xf6, 0xa6, - 0x02, 0xc8, 0x8a, 0x1c, 0x45, 0x78, 0xb8, 0x8a, 0x22, 0x42, 0x48, 0x41, 0x89, 0x71, 0xf1, 0xec, - 0x98, 0x3d, 0x59, 0x8b, 0xa6, 0x96, 0x57, 0x86, 0xaa, 0xcd, 0x01, 0x45, 0x6c, 0x2a, 0x5c, 0x41, - 0x11, 0x3d, 0x5c, 0x05, 0x33, 0x36, 0x75, 0x10, 0xc1, 0xed, 0x5e, 0x93, 0x18, 0xae, 0xd3, 0x66, - 0xb2, 0xa8, 0x15, 0x1b, 0x0b, 0x0a, 0x34, 0xb3, 0x9e, 0x16, 0xa3, 0x7e, 0x7d, 0xb8, 0x06, 0xe6, - 0x7d, 0xd2, 0xa5, 0x8c, 0xba, 0xce, 0x87, 0x94, 0x71, 0xd7, 0xef, 0xad, 0x51, 0x9b, 0x72, 0x59, - 0xea, 0x8a, 0x8d, 0xca, 0xc1, 0xde, 0xd2, 0x3c, 0xca, 0x91, 0xa3, 0x5c, 0x94, 0xa8, 0xc2, 0x1e, - 0xee, 0x30, 0xd2, 0x96, 0xa5, 0xab, 0x14, 0x57, 0xe1, 0x0d, 0xb9, 0x8a, 0x94, 0x14, 0x9a, 0xa9, - 0x80, 0x2e, 0xfd, 0xb5, 0x80, 0x2e, 0x0f, 0x0e, 0x66, 0xb8, 0x05, 0x16, 0x3c, 0xdf, 0x35, 0x7d, - 0xc2, 0xd8, 0x7d, 0x82, 0xdb, 0x16, 0x75, 0x48, 0x78, 0x52, 0x93, 0x72, 0x87, 0x67, 0x0f, 0xf6, - 0x96, 0x16, 0x36, 0xf2, 0x55, 0xd0, 0x20, 0x6c, 0xed, 0xdb, 0x02, 0x38, 0xdd, 0xff, 0x8e, 0xc2, - 0x8f, 0x00, 0x74, 0x5b, 0xb2, 0xef, 0x69, 0x3f, 0x0c, 0x3a, 0x0f, 0xea, 0x3a, 0x32, 0xd0, 0xc7, - 0xe2, 0x8c, 0x7f, 0x9c, 0xd1, 0x40, 0x39, 0x28, 0x78, 0x39, 0x91, 0x2a, 0xa3, 0xd2, 0xd1, 0x28, - 0x0e, 0x72, 0xd2, 0x65, 0x15, 0xcc, 0xa8, 0xaa, 0x11, 0x0a, 0x65, 0x58, 0x27, 0xe2, 0x60, 0x2b, - 0x2d, 0x46, 0xfd, 0xfa, 0xf0, 0x21, 0x98, 0xc5, 0x5d, 0x4c, 0x2d, 0xdc, 0xb2, 0x48, 0x44, 0x52, - 0x90, 0x24, 0xff, 0x56, 0x24, 0xb3, 0xab, 0xfd, 0x0a, 0x28, 0x8b, 0x81, 0xeb, 0x60, 0xae, 0xe3, - 0x64, 0xa9, 0x82, 0xb8, 0x3c, 0xab, 0xa8, 0xe6, 0xb6, 0xb2, 0x2a, 0x28, 0x0f, 0x07, 0x3d, 0x00, - 0x8c, 0xf0, 0xc9, 0x67, 0x95, 0x71, 0x59, 0x93, 0xdf, 0x1b, 0x22, 0x9f, 0xa2, 0xbe, 0x21, 0xae, - 0x7f, 0xd1, 0x12, 0x43, 0x09, 0x1b, 0x70, 0x05, 0x4c, 0xfb, 0x22, 0x43, 0x22, 0xd7, 0x27, 0xa4, - 0xeb, 0xff, 0x52, 0xb0, 0x69, 0x94, 0x14, 0xa2, 0xb4, 0x6e, 0xed, 0x57, 0x2d, 0xf9, 0x08, 0x85, - 0x29, 0x0b, 0xef, 0xa4, 0x5a, 0xa6, 0xf3, 0x7d, 0x2d, 0xd3, 0x99, 0x2c, 0x22, 0xd1, 0x31, 0xf5, - 0xc0, 0xb4, 0x08, 0x68, 0xea, 0x98, 0xc1, 0x25, 0xaa, 0x82, 0xf8, 0xfe, 0x89, 0xd2, 0x25, 0x42, - 0x27, 0x9e, 0xd1, 0x59, 0xb9, 0x9b, 0xa4, 0x10, 0xa5, 0x2d, 0xd5, 0xee, 0x82, 0x72, 0x3a, 0xd7, - 0x82, 0xb8, 0x0c, 0x12, 0x5f, 0x45, 0x76, 0x22, 0x2e, 0x83, 0x75, 0x14, 0x69, 0xd4, 0xde, 0x68, - 0x60, 0x61, 0x80, 0x75, 0x68, 0x81, 0xb2, 0x8d, 0x5f, 0x25, 0xe2, 0xe0, 0xc8, 0x1e, 0x5c, 0x4c, - 0x1e, 0x7a, 0x30, 0x79, 0xe8, 0x8f, 0x1c, 0xfe, 0xd8, 0x6f, 0x72, 0x9f, 0x3a, 0x66, 0x03, 0x8a, - 0xfe, 0x6a, 0x3d, 0xc5, 0x85, 0xfa, 0xb8, 0xe1, 0x33, 0x50, 0xb2, 0xf1, 0xab, 0x66, 0xc7, 0x37, - 0xc3, 0xf3, 0x3b, 0xb9, 0x1d, 0xf9, 0x9a, 0xac, 0x2b, 0x16, 0x14, 0xf1, 0xd5, 0xbe, 0x1b, 0x05, - 0xc5, 0xa6, 0x81, 0x2d, 0xf2, 0x0e, 0x26, 0x8a, 0xcd, 0xd4, 0x44, 0xb1, 0x7c, 0xec, 0x18, 0x90, - 0xfe, 0x0d, 0x1c, 0x26, 0x9e, 0xf7, 0x0d, 0x13, 0xd7, 0x4f, 0xc8, 0x7b, 0xf8, 0x1c, 0x71, 0x1b, - 0x4c, 0x46, 0xe6, 0x53, 0x85, 0x4d, 0x3b, 0xaa, 0xb0, 0xd5, 0x7e, 0x1c, 0x05, 0x53, 0x09, 0x13, - 0x27, 0x43, 0x43, 0x2f, 0xd5, 0x45, 0x88, 0xca, 0xd1, 0x18, 0x66, 0x63, 0x7a, 0xd8, 0x41, 0x04, - 0xcd, 0x5b, 0xfc, 0x20, 0x67, 0x1b, 0x8b, 0xbb, 0xa0, 0xcc, 0xb1, 0x6f, 0x12, 0x1e, 0xca, 0xe4, - 0x81, 0x4e, 0xc6, 0x63, 0xc0, 0x66, 0x4a, 0x8a, 0xfa, 0xb4, 0x17, 0x57, 0xc0, 0x74, 0xca, 0xd8, - 0x89, 0x3a, 0xae, 0x9f, 0xc5, 0x61, 0x71, 0xcc, 0xc9, 0x8b, 0x8e, 0xd5, 0x24, 0xef, 0x62, 0xbe, - 0x7d, 0x96, 0x8a, 0xc6, 0x5b, 0xc7, 0x3f, 0xdc, 0xd8, 0xcb, 0x81, 0x31, 0xd9, 0xea, 0x8b, 0xc9, - 0x3b, 0x43, 0xb1, 0x1f, 0x1e, 0x99, 0xbf, 0x68, 0x60, 0x26, 0xa1, 0xfd, 0x0e, 0xc6, 0x9f, 0xa7, - 0xe9, 0xf1, 0xe7, 0xfa, 0x30, 0x9b, 0x1a, 0x30, 0xff, 0xfc, 0x50, 0x48, 0x6d, 0xe6, 0x1f, 0xd4, - 0x71, 0x7f, 0xa9, 0x81, 0xf9, 0xae, 0x6b, 0x75, 0x6c, 0x72, 0xcf, 0xc2, 0xd4, 0x0e, 0x35, 0x44, - 0xff, 0x72, 0xc4, 0x8c, 0x29, 0x2d, 0x11, 0x9f, 0x51, 0xc6, 0x89, 0xc3, 0x9f, 0xc4, 0x1c, 0x8d, - 0xff, 0x28, 0x7b, 0xf3, 0x4f, 0x72, 0x88, 0x51, 0xae, 0x39, 0xf8, 0x7f, 0x30, 0x25, 0x1a, 0x39, - 0x6a, 0x10, 0x31, 0x5d, 0xaa, 0xff, 0x17, 0xe6, 0x14, 0xd1, 0x54, 0x33, 0x16, 0xa1, 0xa4, 0x1e, - 0xdc, 0x06, 0x73, 0x9e, 0xdb, 0x5e, 0xc7, 0x0e, 0x36, 0x89, 0x78, 0x1a, 0x37, 0xe4, 0xbf, 0x58, - 0xb2, 0x03, 0x9f, 0x6c, 0xdc, 0x08, 0x3b, 0xa6, 0x8d, 0xac, 0xca, 0x5b, 0xd1, 0xba, 0x66, 0x97, - 0x65, 0xef, 0x90, 0x47, 0x59, 0xfb, 0x4a, 0x03, 0xb3, 0x99, 0xec, 0x80, 0x1f, 0x1c, 0xd2, 0xb7, - 0x9e, 0xf9, 0xbb, 0x7a, 0xd6, 0xc6, 0xa5, 0xdd, 0xfd, 0xea, 0xc8, 0xeb, 0xfd, 0xea, 0xc8, 0x6f, - 0xfb, 0xd5, 0x91, 0x2f, 0x0e, 0xaa, 0xda, 0xee, 0x41, 0x55, 0x7b, 0x7d, 0x50, 0xd5, 0xfe, 0x38, - 0xa8, 0x6a, 0xdf, 0xbc, 0xa9, 0x8e, 0x3c, 0x9b, 0x50, 0xb1, 0xff, 0x67, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xdb, 0x8b, 0x00, 0x6d, 0xbc, 0x15, 0x00, 0x00, + 0xe4, 0xe3, 0x21, 0x59, 0xbd, 0x38, 0x79, 0xf9, 0xb0, 0x8b, 0xa0, 0x96, 0x93, 0xa6, 0x29, 0xec, + 0xc6, 0xa0, 0xec, 0xa0, 0x49, 0x53, 0xa0, 0xd4, 0x8a, 0x59, 0x33, 0xde, 0x2f, 0x2c, 0x29, 0x21, + 0xba, 0xf5, 0xd2, 0x43, 0x81, 0x1e, 0xfa, 0x0f, 0x14, 0xed, 0xb9, 0x28, 0xd0, 0x7f, 0xc3, 0x68, + 0x2f, 0x41, 0x4f, 0x45, 0x0f, 0x46, 0xed, 0xfc, 0x17, 0x39, 0x15, 0xe4, 0x72, 0xbf, 0xb4, 0x92, + 0x2d, 0xab, 0x68, 0x2e, 0xbd, 0x69, 0x39, 0xf3, 0xfb, 0xcd, 0x90, 0x9c, 0x19, 0xce, 0x08, 0xdc, + 0xde, 0xbb, 0xc3, 0x74, 0xea, 0x56, 0xf7, 0x5a, 0x0d, 0xe2, 0x3b, 0x84, 0x13, 0x56, 0xf5, 0xf6, + 0xcc, 0x2a, 0xf6, 0x28, 0xab, 0x62, 0xcf, 0x63, 0xd5, 0xf6, 0xf5, 0x06, 0xe1, 0xf8, 0x7a, 0xd5, + 0x24, 0x0e, 0xf1, 0x31, 0x27, 0x4d, 0xdd, 0xf3, 0x5d, 0xee, 0xc2, 0x4b, 0x01, 0x50, 0x8f, 0x81, + 0xba, 0xb7, 0x67, 0xea, 0x02, 0xa8, 0x0b, 0xa0, 0xae, 0x80, 0x8b, 0xd7, 0x4c, 0xca, 0x77, 0x5b, + 0x0d, 0xdd, 0x70, 0xed, 0xaa, 0xe9, 0x9a, 0x6e, 0x55, 0xe2, 0x1b, 0xad, 0x17, 0xf2, 0x4b, 0x7e, + 0xc8, 0x5f, 0x01, 0xef, 0xe2, 0x4d, 0xe5, 0x10, 0xf6, 0xa8, 0x8d, 0x8d, 0x5d, 0xea, 0x10, 0xbf, + 0x13, 0xbb, 0x64, 0x13, 0x8e, 0xab, 0xed, 0x8c, 0x37, 0x8b, 0xd5, 0x7e, 0x28, 0xbf, 0xe5, 0x70, + 0x6a, 0x93, 0x0c, 0xe0, 0xd6, 0x49, 0x00, 0x66, 0xec, 0x12, 0x1b, 0x67, 0x70, 0x37, 0xfa, 0xe1, + 0x5a, 0x9c, 0x5a, 0x55, 0xea, 0x70, 0xc6, 0xfd, 0x0c, 0x28, 0xb1, 0x27, 0x46, 0xfc, 0x36, 0xf1, + 0xe3, 0x0d, 0x91, 0x57, 0xd8, 0xf6, 0x2c, 0xd2, 0x6b, 0x4f, 0x57, 0xfb, 0x5e, 0x4d, 0x2f, 0xed, + 0xbb, 0xc7, 0x5c, 0xa4, 0xe7, 0x5a, 0xd4, 0xe8, 0xf4, 0xbb, 0xca, 0xca, 0x8f, 0xa3, 0x00, 0xdc, + 0x27, 0x9e, 0xe5, 0x76, 0x6c, 0xe2, 0x70, 0xf8, 0x39, 0x28, 0x88, 0x63, 0x6e, 0x62, 0x8e, 0x4b, + 0xda, 0x05, 0xed, 0xf2, 0xd4, 0xf2, 0xff, 0x74, 0x75, 0xd9, 0xc9, 0x5d, 0xc7, 0xd7, 0x2d, 0xb4, + 0xf5, 0xf6, 0x75, 0xfd, 0x71, 0xe3, 0x25, 0x31, 0xf8, 0x26, 0xe1, 0xb8, 0x06, 0xf7, 0x0f, 0x96, + 0x46, 0x8e, 0x0e, 0x96, 0x40, 0xbc, 0x86, 0x22, 0x56, 0xf8, 0x14, 0xe4, 0x98, 0x47, 0x8c, 0xd2, + 0xa8, 0x64, 0xbf, 0xad, 0x0f, 0x18, 0x4a, 0x7a, 0xec, 0x64, 0xdd, 0x23, 0x46, 0xed, 0x8c, 0x32, + 0x92, 0x13, 0x5f, 0x48, 0x52, 0x42, 0x0c, 0xc6, 0x19, 0xc7, 0xbc, 0xc5, 0x4a, 0x63, 0x92, 0xfc, + 0xee, 0x30, 0xe4, 0x92, 0xa0, 0x56, 0x54, 0xf4, 0xe3, 0xc1, 0x37, 0x52, 0xc4, 0x95, 0xc3, 0x31, + 0x30, 0x17, 0x2b, 0xaf, 0xbb, 0x4e, 0x93, 0x72, 0xea, 0x3a, 0x70, 0x15, 0xe4, 0x78, 0xc7, 0x23, + 0xf2, 0xcc, 0x26, 0x6b, 0x97, 0x42, 0xe7, 0xb6, 0x3b, 0x1e, 0x79, 0x7b, 0xb0, 0xb4, 0xd0, 0x03, + 0x22, 0x44, 0x48, 0x82, 0xe0, 0x93, 0xc8, 0xef, 0x51, 0x09, 0xbf, 0x97, 0x36, 0xfe, 0xf6, 0x60, + 0xe9, 0xd8, 0x70, 0xd0, 0x23, 0xce, 0xb4, 0xb3, 0xf0, 0x22, 0x18, 0xf7, 0x09, 0x66, 0xae, 0x53, + 0xca, 0x49, 0xde, 0x68, 0x53, 0x48, 0xae, 0x22, 0x25, 0x85, 0x57, 0xc0, 0x84, 0x4d, 0x18, 0xc3, + 0x26, 0x29, 0xe5, 0xa5, 0xe2, 0x8c, 0x52, 0x9c, 0xd8, 0x0c, 0x96, 0x51, 0x28, 0x87, 0x2f, 0x41, + 0xd1, 0xc2, 0x8c, 0xef, 0x78, 0x4d, 0xcc, 0xc9, 0x36, 0xb5, 0x49, 0x69, 0x5c, 0x1e, 0xf5, 0x7f, + 0x07, 0x8b, 0x12, 0x81, 0xa8, 0x9d, 0x53, 0xec, 0xc5, 0x8d, 0x14, 0x13, 0xea, 0x62, 0x86, 0x6d, + 0x00, 0xc5, 0xca, 0xb6, 0x8f, 0x1d, 0x16, 0x1c, 0x99, 0xb0, 0x37, 0x71, 0x6a, 0x7b, 0x8b, 0xca, + 0x1e, 0xdc, 0xc8, 0xb0, 0xa1, 0x1e, 0x16, 0x2a, 0xfb, 0x1a, 0x28, 0xc6, 0x17, 0xb6, 0x41, 0x19, + 0x87, 0xcf, 0x33, 0x69, 0xa1, 0x0f, 0xe6, 0x80, 0x40, 0xcb, 0xa4, 0x38, 0xab, 0x9c, 0x28, 0x84, + 0x2b, 0x89, 0x94, 0xf8, 0x04, 0xe4, 0x29, 0x27, 0xb6, 0xb8, 0xfe, 0xb1, 0xcb, 0x53, 0xcb, 0x37, + 0x86, 0x08, 0xdb, 0xda, 0xb4, 0xe2, 0xcf, 0x3f, 0x12, 0x4c, 0x28, 0x20, 0xac, 0x7c, 0x3d, 0x06, + 0x60, 0xac, 0x84, 0x5c, 0xcb, 0x6a, 0x60, 0x63, 0x0f, 0x5e, 0x00, 0x39, 0x07, 0xdb, 0x61, 0xb4, + 0x46, 0xa9, 0xf4, 0x31, 0xb6, 0x09, 0x92, 0x12, 0xf8, 0x9d, 0x06, 0x60, 0x4b, 0x5e, 0x45, 0x73, + 0xcd, 0x71, 0x5c, 0x8e, 0xc5, 0xe9, 0x84, 0x0e, 0xd6, 0x87, 0x70, 0x30, 0xb4, 0xad, 0xef, 0x64, + 0x58, 0x1f, 0x38, 0xdc, 0xef, 0xc4, 0xb7, 0x94, 0x55, 0x40, 0x3d, 0x5c, 0x81, 0x7b, 0x00, 0xf8, + 0x8a, 0x73, 0xdb, 0x55, 0x09, 0x3f, 0x78, 0x35, 0x09, 0xdd, 0x59, 0x77, 0x9d, 0x17, 0xd4, 0x8c, + 0x4b, 0x16, 0x8a, 0x28, 0x51, 0x82, 0x7e, 0xf1, 0x01, 0x58, 0xe8, 0xe3, 0x37, 0x3c, 0x0b, 0xc6, + 0xf6, 0x48, 0x27, 0x38, 0x4a, 0x24, 0x7e, 0xc2, 0x79, 0x90, 0x6f, 0x63, 0xab, 0x45, 0x82, 0x6c, + 0x46, 0xc1, 0xc7, 0xca, 0xe8, 0x1d, 0xad, 0xf2, 0x7b, 0x3e, 0x19, 0x59, 0xa2, 0x72, 0xc1, 0xcb, + 0xa0, 0xe0, 0x13, 0xcf, 0xa2, 0x06, 0x66, 0x92, 0x23, 0x5f, 0x3b, 0x23, 0xa2, 0x04, 0xa9, 0x35, + 0x14, 0x49, 0xe1, 0x67, 0xa0, 0xc0, 0x88, 0x45, 0x0c, 0xee, 0xfa, 0xaa, 0x78, 0xde, 0x18, 0x30, + 0x06, 0x71, 0x83, 0x58, 0x75, 0x05, 0x0d, 0xe8, 0xc3, 0x2f, 0x14, 0x51, 0xc2, 0x4f, 0x41, 0x81, + 0x13, 0xdb, 0xb3, 0x30, 0x27, 0xea, 0x34, 0xaf, 0xf5, 0x3f, 0x4d, 0x41, 0xbb, 0xe5, 0x36, 0xb7, + 0x15, 0x40, 0x56, 0xe4, 0x28, 0xc2, 0xc3, 0x55, 0x14, 0x11, 0x42, 0x0a, 0x0a, 0x8c, 0x8b, 0x67, + 0xc7, 0xec, 0xc8, 0x5a, 0x34, 0xb5, 0xbc, 0x3a, 0x54, 0x6d, 0x0e, 0x28, 0x62, 0x53, 0xe1, 0x0a, + 0x8a, 0xe8, 0xe1, 0x1a, 0x98, 0xb1, 0xa9, 0x83, 0x08, 0x6e, 0x76, 0xea, 0xc4, 0x70, 0x9d, 0x26, + 0x93, 0x45, 0x2d, 0x5f, 0x5b, 0x50, 0xa0, 0x99, 0xcd, 0xb4, 0x18, 0x75, 0xeb, 0xc3, 0x0d, 0x30, + 0xef, 0x93, 0x36, 0x65, 0xd4, 0x75, 0x3e, 0xa4, 0x8c, 0xbb, 0x7e, 0x67, 0x83, 0xda, 0x94, 0xcb, + 0x52, 0x97, 0xaf, 0x95, 0x8e, 0x0e, 0x96, 0xe6, 0x51, 0x0f, 0x39, 0xea, 0x89, 0x12, 0x55, 0xd8, + 0xc3, 0x2d, 0x46, 0x9a, 0xb2, 0x74, 0x15, 0xe2, 0x2a, 0xbc, 0x25, 0x57, 0x91, 0x92, 0x42, 0x33, + 0x15, 0xd0, 0x85, 0xbf, 0x16, 0xd0, 0xc5, 0xfe, 0xc1, 0x0c, 0x77, 0xc0, 0x82, 0xe7, 0xbb, 0xa6, + 0x4f, 0x18, 0xbb, 0x4f, 0x70, 0xd3, 0xa2, 0x0e, 0x09, 0x4f, 0x6a, 0x52, 0xee, 0xf0, 0xfc, 0xd1, + 0xc1, 0xd2, 0xc2, 0x56, 0x6f, 0x15, 0xd4, 0x0f, 0x5b, 0xf9, 0x35, 0x07, 0xce, 0x76, 0xbf, 0xa3, + 0xf0, 0x23, 0x00, 0xdd, 0x86, 0xec, 0x7b, 0x9a, 0x0f, 0x83, 0xce, 0x83, 0xba, 0x8e, 0x0c, 0xf4, + 0xb1, 0x38, 0xe3, 0x1f, 0x67, 0x34, 0x50, 0x0f, 0x14, 0xbc, 0x9a, 0x48, 0x95, 0x51, 0xe9, 0x68, + 0x14, 0x07, 0x3d, 0xd2, 0x65, 0x0d, 0xcc, 0xa8, 0xaa, 0x11, 0x0a, 0x65, 0x58, 0x27, 0xe2, 0x60, + 0x27, 0x2d, 0x46, 0xdd, 0xfa, 0xf0, 0x21, 0x98, 0xc5, 0x6d, 0x4c, 0x2d, 0xdc, 0xb0, 0x48, 0x44, + 0x92, 0x93, 0x24, 0xff, 0x56, 0x24, 0xb3, 0x6b, 0xdd, 0x0a, 0x28, 0x8b, 0x81, 0x9b, 0x60, 0xae, + 0xe5, 0x64, 0xa9, 0x82, 0xb8, 0x3c, 0xaf, 0xa8, 0xe6, 0x76, 0xb2, 0x2a, 0xa8, 0x17, 0x0e, 0x7a, + 0x00, 0x18, 0xe1, 0x93, 0xcf, 0x4a, 0xe3, 0xb2, 0x26, 0xbf, 0x37, 0x44, 0x3e, 0x45, 0x7d, 0x43, + 0x5c, 0xff, 0xa2, 0x25, 0x86, 0x12, 0x36, 0xe0, 0x2a, 0x98, 0xf6, 0x45, 0x86, 0x44, 0xae, 0x4f, + 0x48, 0xd7, 0xff, 0xa5, 0x60, 0xd3, 0x28, 0x29, 0x44, 0x69, 0x5d, 0xb8, 0x02, 0x8a, 0x86, 0x6b, + 0x59, 0x32, 0x33, 0xd6, 0xdd, 0x96, 0xc3, 0x65, 0x70, 0x8f, 0xd5, 0xa0, 0xe8, 0x01, 0xd6, 0x53, + 0x12, 0xd4, 0xa5, 0x59, 0xf9, 0x45, 0x4b, 0x3e, 0x60, 0x61, 0xba, 0xc3, 0x95, 0x54, 0xbb, 0x75, + 0xb1, 0xab, 0xdd, 0x3a, 0x97, 0x45, 0x24, 0xba, 0xad, 0x0e, 0x98, 0x16, 0xc9, 0x40, 0x1d, 0x33, + 0x08, 0x00, 0x55, 0x4c, 0xdf, 0x3f, 0x55, 0xaa, 0x45, 0xe8, 0xc4, 0x13, 0x3c, 0x2b, 0x4f, 0x22, + 0x29, 0x44, 0x69, 0x4b, 0x95, 0x7b, 0xa0, 0x98, 0xce, 0xd3, 0x20, 0xa6, 0x83, 0xa2, 0xa1, 0xb2, + 0x22, 0x11, 0xd3, 0xc1, 0x3a, 0x8a, 0x34, 0x2a, 0x6f, 0x34, 0xb0, 0xd0, 0xc7, 0x3a, 0xb4, 0x40, + 0xd1, 0xc6, 0xaf, 0x12, 0x31, 0x74, 0x62, 0xff, 0x2e, 0xa6, 0x16, 0x3d, 0x98, 0x5a, 0xf4, 0x47, + 0x0e, 0x7f, 0xec, 0xd7, 0xb9, 0x4f, 0x1d, 0x33, 0xb8, 0x97, 0xcd, 0x14, 0x17, 0xea, 0xe2, 0x86, + 0xcf, 0x40, 0xc1, 0xc6, 0xaf, 0xea, 0x2d, 0xdf, 0x0c, 0xcf, 0xef, 0xf4, 0x76, 0xe4, 0x4b, 0xb4, + 0xa9, 0x58, 0x50, 0xc4, 0x57, 0xf9, 0x76, 0x14, 0xe4, 0xeb, 0x06, 0xb6, 0xc8, 0x3b, 0x98, 0x46, + 0xb6, 0x53, 0xd3, 0xc8, 0xf2, 0xc0, 0x31, 0x20, 0xfd, 0xeb, 0x3b, 0x88, 0x3c, 0xef, 0x1a, 0x44, + 0x6e, 0x9e, 0x92, 0xf7, 0xf8, 0x19, 0xe4, 0x2e, 0x98, 0x8c, 0xcc, 0xa7, 0x8a, 0xa2, 0x76, 0x52, + 0x51, 0xac, 0xfc, 0x30, 0x0a, 0xa6, 0x12, 0x26, 0x4e, 0x87, 0x86, 0x5e, 0xaa, 0x03, 0x11, 0x55, + 0xa7, 0x36, 0xcc, 0xc6, 0xf4, 0xb0, 0xfb, 0x08, 0x1a, 0xbf, 0xf8, 0x31, 0xcf, 0x36, 0x25, 0xf7, + 0x40, 0x91, 0x63, 0xdf, 0x24, 0x3c, 0x94, 0xc9, 0x03, 0x9d, 0x8c, 0x47, 0x88, 0xed, 0x94, 0x14, + 0x75, 0x69, 0x2f, 0xae, 0x82, 0xe9, 0x94, 0xb1, 0x53, 0x75, 0x6b, 0x3f, 0x89, 0xc3, 0xe2, 0x98, + 0x93, 0x17, 0x2d, 0xab, 0x4e, 0xde, 0xc5, 0x6c, 0xfc, 0x2c, 0x15, 0x8d, 0x77, 0x06, 0x3f, 0xdc, + 0xd8, 0xcb, 0xbe, 0x31, 0xd9, 0xe8, 0x8a, 0xc9, 0x95, 0xa1, 0xd8, 0x8f, 0x8f, 0xcc, 0x9f, 0x35, + 0x30, 0x93, 0xd0, 0x7e, 0x07, 0xa3, 0xd3, 0xd3, 0xf4, 0xe8, 0x74, 0x73, 0x98, 0x4d, 0xf5, 0x99, + 0x9d, 0xbe, 0xcf, 0xa5, 0x36, 0xf3, 0x0f, 0xea, 0xd6, 0xbf, 0xd4, 0xc0, 0x7c, 0xdb, 0xb5, 0x5a, + 0x36, 0x59, 0xb7, 0x30, 0xb5, 0x43, 0x0d, 0xd1, 0xfb, 0x9c, 0x30, 0x9f, 0x4a, 0x4b, 0xc4, 0x67, + 0x94, 0x71, 0xe2, 0xf0, 0x27, 0x31, 0x47, 0xed, 0x3f, 0xca, 0xde, 0xfc, 0x93, 0x1e, 0xc4, 0xa8, + 0xa7, 0x39, 0xf8, 0x7f, 0x30, 0x25, 0x9a, 0x40, 0x6a, 0x10, 0x31, 0x99, 0xaa, 0xff, 0x26, 0xe6, + 0x14, 0xd1, 0x54, 0x3d, 0x16, 0xa1, 0xa4, 0x1e, 0xdc, 0x05, 0x73, 0x9e, 0xdb, 0xdc, 0xc4, 0x0e, + 0x36, 0x89, 0x78, 0x1a, 0xb7, 0xe4, 0x3f, 0x60, 0xb2, 0x7b, 0x9f, 0xac, 0xdd, 0x0a, 0xbb, 0xad, + 0xad, 0xac, 0xca, 0x5b, 0xd1, 0xf6, 0x66, 0x97, 0x65, 0xef, 0xd0, 0x8b, 0xb2, 0xf2, 0x95, 0x06, + 0x66, 0x33, 0xd9, 0x01, 0x3f, 0x38, 0xa6, 0xe7, 0x3d, 0xf7, 0x77, 0xf5, 0xbb, 0xb5, 0x2b, 0xfb, + 0x87, 0xe5, 0x91, 0xd7, 0x87, 0xe5, 0x91, 0xdf, 0x0e, 0xcb, 0x23, 0x5f, 0x1c, 0x95, 0xb5, 0xfd, + 0xa3, 0xb2, 0xf6, 0xfa, 0xa8, 0xac, 0xfd, 0x71, 0x54, 0xd6, 0xbe, 0x79, 0x53, 0x1e, 0x79, 0x36, + 0xa1, 0x62, 0xff, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf2, 0xdb, 0x2f, 0x40, 0xf8, 0x15, 0x00, + 0x00, } diff --git a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.proto b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.proto index ad1d271464c..5e3d4b99fe2 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.proto +++ b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/generated.proto @@ -170,6 +170,12 @@ message DeploymentStatus { // +patchMergeKey=type // +patchStrategy=merge repeated DeploymentCondition conditions = 6; + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + optional int64 collisionCount = 8; } // DeploymentStrategy describes how to replace existing pods with new ones. diff --git a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.generated.go b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.generated.go index 72d486de83c..7e8b15f174f 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.generated.go +++ b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.generated.go @@ -4672,7 +4672,7 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [7]bool + var yyq2 [8]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.ObservedGeneration != 0 @@ -4682,9 +4682,10 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[4] = x.AvailableReplicas != 0 yyq2[5] = x.UnavailableReplicas != 0 yyq2[6] = len(x.Conditions) != 0 + yyq2[7] = x.CollisionCount != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(7) + r.EncodeArrayStart(8) } else { yynn2 = 0 for _, b := range yyq2 { @@ -4878,6 +4879,41 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[7] { + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy25 := *x.CollisionCount + yym26 := z.EncBinary() + _ = yym26 + if false { + } else { + r.EncodeInt(int64(yy25)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("collisionCount")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy27 := *x.CollisionCount + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeInt(int64(yy27)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -5023,6 +5059,22 @@ func (x *DeploymentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv16), d) } } + case "collisionCount": + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym19 := z.DecBinary() + _ = yym19 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -5034,16 +5086,16 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj18 int - var yyb18 bool - var yyhl18 bool = l >= 0 - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + var yyj20 int + var yyb20 bool + var yyhl20 bool = l >= 0 + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5051,21 +5103,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.ObservedGeneration = 0 } else { - yyv19 := &x.ObservedGeneration - yym20 := z.DecBinary() - _ = yym20 + yyv21 := &x.ObservedGeneration + yym22 := z.DecBinary() + _ = yym22 if false { } else { - *((*int64)(yyv19)) = int64(r.DecodeInt(64)) + *((*int64)(yyv21)) = int64(r.DecodeInt(64)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5073,29 +5125,7 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Replicas = 0 } else { - yyv21 := &x.Replicas - yym22 := z.DecBinary() - _ = yym22 - if false { - } else { - *((*int32)(yyv21)) = int32(r.DecodeInt(32)) - } - } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l - } else { - yyb18 = r.CheckBreak() - } - if yyb18 { - z.DecSendContainerState(codecSelfer_containerArrayEnd1234) - return - } - z.DecSendContainerState(codecSelfer_containerArrayElem1234) - if r.TryDecodeAsNil() { - x.UpdatedReplicas = 0 - } else { - yyv23 := &x.UpdatedReplicas + yyv23 := &x.Replicas yym24 := z.DecBinary() _ = yym24 if false { @@ -5103,21 +5133,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv23)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.ReadyReplicas = 0 + x.UpdatedReplicas = 0 } else { - yyv25 := &x.ReadyReplicas + yyv25 := &x.UpdatedReplicas yym26 := z.DecBinary() _ = yym26 if false { @@ -5125,21 +5155,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv25)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.AvailableReplicas = 0 + x.ReadyReplicas = 0 } else { - yyv27 := &x.AvailableReplicas + yyv27 := &x.ReadyReplicas yym28 := z.DecBinary() _ = yym28 if false { @@ -5147,21 +5177,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv27)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.UnavailableReplicas = 0 + x.AvailableReplicas = 0 } else { - yyv29 := &x.UnavailableReplicas + yyv29 := &x.AvailableReplicas yym30 := z.DecBinary() _ = yym30 if false { @@ -5169,13 +5199,35 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv29)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UnavailableReplicas = 0 + } else { + yyv31 := &x.UnavailableReplicas + yym32 := z.DecBinary() + _ = yym32 + if false { + } else { + *((*int32)(yyv31)) = int32(r.DecodeInt(32)) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5183,26 +5235,52 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Conditions = nil } else { - yyv31 := &x.Conditions - yym32 := z.DecBinary() - _ = yym32 + yyv33 := &x.Conditions + yym34 := z.DecBinary() + _ = yym34 if false { } else { - h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv31), d) + h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv33), d) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym36 := z.DecBinary() + _ = yym36 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) } } for { - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj18-1, "") + z.DecStructFieldNotFound(yyj20-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -6470,7 +6548,7 @@ func (x codecSelfer1234) decSliceDeployment(v *[]Deployment, d *codec1978.Decode yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 960) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 968) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.go b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.go index cd1d2c2f205..ef76205acdb 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types.go @@ -356,6 +356,12 @@ type DeploymentStatus struct { // +patchMergeKey=type // +patchStrategy=merge Conditions []DeploymentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,6,rep,name=conditions"` + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + CollisionCount *int64 `json:"collisionCount,omitempty" protobuf:"varint,8,opt,name=collisionCount"` } type DeploymentConditionType string diff --git a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go index f40254cb749..fffd81c3168 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/types_swagger_doc_generated.go @@ -99,6 +99,7 @@ var map_DeploymentStatus = map[string]string{ "availableReplicas": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", "unavailableReplicas": "Total number of unavailable pods targeted by this deployment.", "conditions": "Represents the latest available observations of a deployment's current state.", + "collisionCount": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", } func (DeploymentStatus) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go index 6047da92140..5d9bbf1c273 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/apis/apps/v1beta1/zz_generated.deepcopy.go @@ -184,6 +184,11 @@ func DeepCopy_v1beta1_DeploymentStatus(in interface{}, out interface{}, c *conve } } } + if in.CollisionCount != nil { + in, out := &in.CollisionCount, &out.CollisionCount + *out = new(int64) + **out = **in + } return nil } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go index a1697cd8386..8cfbb3c7849 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go @@ -327,6 +327,12 @@ type DeploymentStatus struct { // Represents the latest available observations of a deployment's current state. Conditions []DeploymentCondition + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + CollisionCount *int64 } type DeploymentConditionType string diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.pb.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.pb.go index d6c39c2549b..d8a4effd128 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.pb.go @@ -1069,6 +1069,11 @@ func (m *DeploymentStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x38 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + dAtA[i] = 0x40 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + } return i, nil } @@ -2911,6 +2916,9 @@ func (m *DeploymentStatus) Size() (n int) { } } n += 1 + sovGenerated(uint64(m.ReadyReplicas)) + if m.CollisionCount != nil { + n += 1 + sovGenerated(uint64(*m.CollisionCount)) + } return n } @@ -3699,6 +3707,7 @@ func (this *DeploymentStatus) String() string { `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "DeploymentCondition", "DeploymentCondition", 1), `&`, ``, 1) + `,`, `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, `}`, }, "") return s @@ -6558,6 +6567,26 @@ func (m *DeploymentStatus) Unmarshal(dAtA []byte) error { break } } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CollisionCount", 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.CollisionCount = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -11794,217 +11823,218 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 3379 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xdb, 0x6f, 0x1b, 0xc7, - 0xd5, 0xf7, 0x8a, 0xa4, 0x45, 0x1d, 0x59, 0x92, 0x35, 0x72, 0x64, 0x46, 0x49, 0x44, 0x67, 0x3f, - 0x7c, 0x89, 0xf3, 0x7d, 0x09, 0xf5, 0xc5, 0xf9, 0x9c, 0x26, 0x4e, 0xe2, 0x44, 0x94, 0x7c, 0x51, - 0x21, 0xc9, 0xcc, 0x90, 0x32, 0x1a, 0xe7, 0xd6, 0x15, 0x39, 0xa2, 0xd6, 0xde, 0x5b, 0x76, 0x67, - 0x15, 0x11, 0x41, 0xdb, 0x00, 0x45, 0xf3, 0x58, 0xb4, 0x2f, 0x45, 0x0a, 0xa4, 0x8f, 0x7d, 0xe8, - 0x4b, 0x9b, 0x3c, 0xb4, 0x69, 0xff, 0x82, 0xfa, 0xa1, 0x28, 0x52, 0xa0, 0x05, 0x8a, 0x22, 0x15, - 0x6a, 0x05, 0xcd, 0x3f, 0xd0, 0xe6, 0xc5, 0x4f, 0xc5, 0xcc, 0xce, 0xde, 0x77, 0x65, 0x93, 0xb2, - 0x89, 0x02, 0x7d, 0xe3, 0xce, 0x9c, 0xf3, 0x3b, 0x97, 0x39, 0x73, 0xe6, 0xcc, 0x85, 0xf0, 0xd2, + // 3402 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4b, 0x6f, 0x1c, 0xc7, + 0xb5, 0x56, 0xcf, 0x43, 0x1c, 0x1e, 0x8a, 0xa4, 0x58, 0x94, 0xa9, 0x31, 0x6d, 0x93, 0x72, 0x5f, + 0x5c, 0x5b, 0xbe, 0xd7, 0x1e, 0x5e, 0xcb, 0x57, 0x8e, 0x2d, 0xdb, 0xb2, 0x39, 0xa4, 0x1e, 0x0c, + 0x48, 0x6a, 0x5c, 0x33, 0x14, 0x62, 0xf9, 0x95, 0xe6, 0x4c, 0x71, 0xd8, 0x52, 0xbf, 0xdc, 0x5d, + 0x4d, 0x73, 0x60, 0x24, 0x31, 0x10, 0xc4, 0xcb, 0x20, 0xd9, 0x04, 0x0e, 0x90, 0x2c, 0xb3, 0xc8, + 0x26, 0xb1, 0x17, 0x89, 0x93, 0x5f, 0x10, 0x2d, 0x82, 0xc0, 0x01, 0x12, 0xc0, 0x08, 0x1c, 0x22, + 0xa2, 0x11, 0xff, 0x81, 0xc4, 0x1b, 0xad, 0x82, 0xaa, 0xae, 0x7e, 0x77, 0x53, 0x9a, 0xa1, 0x34, + 0x08, 0x90, 0x1d, 0xa7, 0xea, 0x9c, 0xef, 0x3c, 0xea, 0xd4, 0xa9, 0x53, 0x75, 0x9a, 0xf0, 0xd2, 0x8d, 0xe7, 0x9c, 0x9a, 0x6a, 0x2e, 0xdc, 0x70, 0x37, 0x89, 0x6d, 0x10, 0x4a, 0x9c, 0x05, 0xeb, 0x46, 0x77, 0x41, 0xb1, 0x54, 0x67, 0x81, 0xec, 0x52, 0x62, 0x38, 0xaa, 0x69, 0x38, 0x0b, 0x3b, 0x4f, 0x6f, 0x12, 0xaa, 0x3c, 0xbd, 0xd0, 0x25, 0x06, 0xb1, 0x15, 0x4a, 0x3a, 0x35, 0xcb, 0x36, 0xa9, 0x89, 0x9e, 0xf2, 0xd8, 0x6b, 0x21, 0x7b, 0xcd, 0xba, 0xd1, 0xad, 0x31, 0xf6, 0x5a, 0xc8, - 0x5e, 0x13, 0xec, 0x73, 0x4f, 0x75, 0x55, 0xba, 0xed, 0x6e, 0xd6, 0xda, 0xa6, 0xbe, 0xd0, 0x35, - 0xbb, 0xe6, 0x02, 0x47, 0xd9, 0x74, 0xb7, 0xf8, 0x17, 0xff, 0xe0, 0xbf, 0x3c, 0xf4, 0xb9, 0xff, - 0x17, 0xca, 0x29, 0x96, 0xaa, 0x2b, 0xed, 0x6d, 0xd5, 0x20, 0x76, 0xcf, 0x57, 0x6f, 0xc1, 0x26, - 0x8e, 0xe9, 0xda, 0x6d, 0x92, 0xd4, 0xe9, 0x40, 0x2e, 0x67, 0x41, 0x27, 0x54, 0x59, 0xd8, 0x49, - 0x59, 0x32, 0xb7, 0x90, 0xc7, 0x65, 0xbb, 0x06, 0x55, 0xf5, 0xb4, 0x98, 0x67, 0xef, 0xc4, 0xe0, - 0xb4, 0xb7, 0x89, 0xae, 0xa4, 0xf8, 0x9e, 0xc9, 0xe3, 0x73, 0xa9, 0xaa, 0x2d, 0xa8, 0x06, 0x75, - 0xa8, 0x7d, 0x90, 0x4d, 0x0e, 0xb1, 0x77, 0x88, 0x1d, 0x1d, 0x25, 0x45, 0xb7, 0x34, 0x92, 0x65, - 0xd3, 0x93, 0xb9, 0x83, 0x9b, 0x45, 0xfd, 0xfc, 0x01, 0xa1, 0x60, 0x99, 0x9a, 0xda, 0xee, 0xe5, - 0x85, 0x81, 0x5c, 0x03, 0x58, 0x6c, 0xac, 0x5c, 0x25, 0x36, 0x1b, 0x6e, 0x74, 0x0a, 0x8a, 0x86, - 0xa2, 0x93, 0x8a, 0x74, 0x4a, 0x3a, 0x3d, 0x56, 0x3f, 0x76, 0x73, 0xaf, 0x7a, 0x64, 0x7f, 0xaf, - 0x5a, 0x5c, 0x57, 0x74, 0x82, 0x79, 0x8f, 0xfc, 0x63, 0x09, 0x1e, 0x5c, 0x72, 0x1d, 0x6a, 0xea, - 0x6b, 0x84, 0xda, 0x6a, 0x7b, 0xc9, 0xb5, 0x6d, 0x62, 0xd0, 0x26, 0x55, 0xa8, 0xeb, 0xdc, 0x99, - 0x1f, 0x5d, 0x83, 0xd2, 0x8e, 0xa2, 0xb9, 0xa4, 0x32, 0x72, 0x4a, 0x3a, 0x3d, 0x7e, 0xa6, 0x56, - 0x13, 0x61, 0x18, 0xf5, 0xa9, 0x1f, 0x88, 0x35, 0x3f, 0x50, 0x6a, 0xaf, 0xba, 0x8a, 0x41, 0x55, - 0xda, 0xab, 0x9f, 0x10, 0x90, 0xc7, 0x84, 0xdc, 0xab, 0x0c, 0x0b, 0x7b, 0x90, 0xf2, 0xf7, 0x25, - 0x78, 0x24, 0x57, 0xb7, 0x55, 0xd5, 0xa1, 0x48, 0x87, 0x92, 0x4a, 0x89, 0xee, 0x54, 0xa4, 0x53, - 0x85, 0xd3, 0xe3, 0x67, 0x2e, 0xd7, 0xfa, 0x9a, 0x04, 0xb5, 0x5c, 0xf0, 0xfa, 0x84, 0xd0, 0xab, - 0xb4, 0xc2, 0xe0, 0xb1, 0x27, 0x45, 0xfe, 0xa1, 0x04, 0x28, 0xca, 0xd3, 0x52, 0xec, 0x2e, 0xa1, - 0x77, 0xe1, 0xa5, 0xd7, 0x0e, 0xe7, 0xa5, 0x19, 0x01, 0x39, 0xee, 0x09, 0x8c, 0x39, 0xe9, 0x7d, - 0x09, 0x66, 0xd3, 0x3a, 0x71, 0xef, 0x6c, 0xc5, 0xbd, 0xb3, 0x78, 0x08, 0xef, 0x78, 0xa8, 0x39, - 0x6e, 0xf9, 0xe5, 0x08, 0x8c, 0x2d, 0x2b, 0x44, 0x37, 0x8d, 0x26, 0xa1, 0xe8, 0x9b, 0x50, 0x66, - 0x33, 0xbb, 0xa3, 0x50, 0x85, 0x7b, 0x64, 0xfc, 0xcc, 0xff, 0x1d, 0x64, 0xae, 0x53, 0x63, 0xd4, - 0xb5, 0x9d, 0xa7, 0x6b, 0x57, 0x36, 0xaf, 0x93, 0x36, 0x5d, 0x23, 0x54, 0xa9, 0x23, 0x21, 0x07, - 0xc2, 0x36, 0x1c, 0xa0, 0xa2, 0xb7, 0xa0, 0xe8, 0x58, 0xa4, 0x2d, 0x9c, 0xf9, 0x62, 0x9f, 0x66, - 0x05, 0x9a, 0x36, 0x2d, 0xd2, 0x0e, 0x47, 0x8b, 0x7d, 0x61, 0x8e, 0x8b, 0xb6, 0xe0, 0xa8, 0xc3, - 0xc3, 0xa0, 0x52, 0xe0, 0x12, 0xce, 0x0f, 0x2c, 0xc1, 0x0b, 0xa6, 0x49, 0x21, 0xe3, 0xa8, 0xf7, - 0x8d, 0x05, 0xba, 0xfc, 0x3b, 0x09, 0x26, 0x02, 0x5a, 0x3e, 0x62, 0x6f, 0xa4, 0x7c, 0x57, 0xbb, - 0x3b, 0xdf, 0x31, 0x6e, 0xee, 0xb9, 0xe3, 0x42, 0x56, 0xd9, 0x6f, 0x89, 0xf8, 0xed, 0x4d, 0x3f, - 0x1e, 0x46, 0x78, 0x3c, 0x3c, 0x37, 0xa8, 0x59, 0x39, 0x61, 0xf0, 0x45, 0x21, 0x62, 0x0e, 0x73, - 0x27, 0x7a, 0x13, 0xca, 0x0e, 0xd1, 0x48, 0x9b, 0x9a, 0xb6, 0x30, 0xe7, 0x99, 0xbb, 0x34, 0x47, - 0xd9, 0x24, 0x5a, 0x53, 0xb0, 0xd6, 0x8f, 0x31, 0x7b, 0xfc, 0x2f, 0x1c, 0x40, 0xa2, 0xd7, 0xa1, - 0x4c, 0x89, 0x6e, 0x69, 0x0a, 0xf5, 0x27, 0xd6, 0x53, 0xf9, 0x26, 0x31, 0xd8, 0x86, 0xd9, 0x69, - 0x09, 0x06, 0x3e, 0xf8, 0x81, 0xb3, 0xfc, 0x56, 0x1c, 0x00, 0xa2, 0x0f, 0x24, 0x98, 0x74, 0xad, - 0x0e, 0x23, 0xa5, 0x2c, 0xc1, 0x76, 0x7b, 0x22, 0x1a, 0x2e, 0x0e, 0xea, 0xb6, 0x8d, 0x18, 0x5a, - 0x7d, 0x56, 0x08, 0x9f, 0x8c, 0xb7, 0xe3, 0x84, 0x54, 0xb4, 0x08, 0x53, 0xba, 0x6a, 0x60, 0xa2, - 0x74, 0x7a, 0x4d, 0xd2, 0x36, 0x8d, 0x8e, 0x53, 0x29, 0x9e, 0x92, 0x4e, 0x97, 0xea, 0x27, 0x05, - 0xc0, 0xd4, 0x5a, 0xbc, 0x1b, 0x27, 0xe9, 0xd1, 0xd7, 0x01, 0xf9, 0x76, 0x5d, 0xf2, 0xd6, 0x0b, - 0xd5, 0x34, 0x2a, 0xa5, 0x53, 0xd2, 0xe9, 0x42, 0x7d, 0x4e, 0xa0, 0xa0, 0x56, 0x8a, 0x02, 0x67, - 0x70, 0xc9, 0xff, 0x2c, 0xc2, 0x54, 0x22, 0xc0, 0xd1, 0x55, 0x98, 0x6d, 0x7b, 0xe9, 0x73, 0xdd, - 0xd5, 0x37, 0x89, 0xdd, 0x6c, 0x6f, 0x93, 0x8e, 0xab, 0x91, 0x0e, 0x1f, 0xf5, 0x52, 0x7d, 0x5e, - 0xc8, 0x98, 0x5d, 0xca, 0xa4, 0xc2, 0x39, 0xdc, 0x4c, 0x6f, 0x83, 0x37, 0xad, 0xa9, 0x8e, 0x13, - 0x60, 0x8e, 0x70, 0xcc, 0x40, 0xef, 0xf5, 0x14, 0x05, 0xce, 0xe0, 0x62, 0x3a, 0x76, 0x88, 0xa3, - 0xda, 0xa4, 0x93, 0xd4, 0xb1, 0x10, 0xd7, 0x71, 0x39, 0x93, 0x0a, 0xe7, 0x70, 0xa3, 0xb3, 0x30, - 0xee, 0x49, 0xe3, 0x1e, 0x17, 0x43, 0x13, 0x24, 0xec, 0xf5, 0xb0, 0x0b, 0x47, 0xe9, 0x98, 0x69, - 0xe6, 0x26, 0x2f, 0x20, 0x3a, 0xf9, 0x43, 0x72, 0x25, 0x45, 0x81, 0x33, 0xb8, 0x98, 0x69, 0x5e, - 0xcc, 0xa4, 0x4c, 0x3b, 0x1a, 0x37, 0x6d, 0x23, 0x93, 0x0a, 0xe7, 0x70, 0xb3, 0xc8, 0xf3, 0x54, - 0x5e, 0xdc, 0x51, 0x54, 0x4d, 0xd9, 0xd4, 0x48, 0x65, 0x34, 0x1e, 0x79, 0xeb, 0xf1, 0x6e, 0x9c, - 0xa4, 0x47, 0x97, 0x60, 0xda, 0x6b, 0xda, 0x30, 0x94, 0x00, 0xa4, 0xcc, 0x41, 0x1e, 0x14, 0x20, - 0xd3, 0xeb, 0x49, 0x02, 0x9c, 0xe6, 0x91, 0xff, 0x22, 0xc1, 0xc9, 0x9c, 0x99, 0x84, 0x5e, 0x86, - 0x22, 0xed, 0x59, 0xfe, 0xfa, 0xfb, 0xbf, 0x7e, 0x46, 0x6f, 0xf5, 0x2c, 0x72, 0x7b, 0xaf, 0xfa, - 0x50, 0x0e, 0x1b, 0xeb, 0xc6, 0x9c, 0x11, 0x7d, 0x1b, 0x26, 0x6c, 0x53, 0xd3, 0x54, 0xa3, 0xeb, - 0x91, 0x88, 0x6c, 0x72, 0xa1, 0xcf, 0x99, 0x8e, 0xa3, 0x18, 0x61, 0xb6, 0x9c, 0xde, 0xdf, 0xab, - 0x4e, 0xc4, 0xfa, 0x70, 0x5c, 0x9c, 0xfc, 0xeb, 0x11, 0x80, 0x65, 0x62, 0x69, 0x66, 0x4f, 0x27, - 0xc6, 0x30, 0x56, 0xd0, 0xb7, 0x63, 0x2b, 0xe8, 0x4b, 0xfd, 0x66, 0xb4, 0x40, 0xd5, 0xdc, 0x25, - 0xb4, 0x9b, 0x58, 0x42, 0x5f, 0x1e, 0x5c, 0xc4, 0xc1, 0x6b, 0xe8, 0xad, 0x02, 0xcc, 0x84, 0xc4, - 0x4b, 0xa6, 0xd1, 0x51, 0xf9, 0x9c, 0x78, 0x21, 0x16, 0x13, 0x8f, 0x27, 0x62, 0xe2, 0x64, 0x06, - 0x4b, 0x24, 0x1e, 0xae, 0x06, 0xda, 0x8f, 0x70, 0xf6, 0xf3, 0x71, 0xe1, 0xb7, 0xf7, 0xaa, 0x07, - 0xd6, 0xf3, 0xb5, 0x00, 0x33, 0xae, 0x2c, 0x7a, 0x0c, 0x8e, 0xda, 0x44, 0x71, 0x4c, 0x83, 0xa7, - 0x89, 0xb1, 0xd0, 0x28, 0xcc, 0x5b, 0xb1, 0xe8, 0x45, 0x4f, 0xc0, 0xa8, 0x4e, 0x1c, 0x47, 0xe9, - 0x12, 0x9e, 0x11, 0xc6, 0xea, 0x53, 0x82, 0x70, 0x74, 0xcd, 0x6b, 0xc6, 0x7e, 0x3f, 0xba, 0x0e, - 0x93, 0x9a, 0xe2, 0x88, 0xd0, 0x6e, 0xa9, 0x3a, 0xe1, 0x73, 0x7e, 0xfc, 0xcc, 0xff, 0xdc, 0x5d, - 0xc4, 0x30, 0x8e, 0x70, 0x25, 0x5a, 0x8d, 0x21, 0xe1, 0x04, 0x32, 0xda, 0x01, 0xc4, 0x5a, 0x5a, - 0xb6, 0x62, 0x38, 0x9e, 0xcb, 0x98, 0xbc, 0xd1, 0xbe, 0xe5, 0x05, 0xf9, 0x6d, 0x35, 0x85, 0x86, - 0x33, 0x24, 0xc8, 0xbf, 0x97, 0x60, 0x32, 0x1c, 0xb0, 0x21, 0x14, 0x4a, 0x6f, 0xc5, 0x0b, 0xa5, - 0xe7, 0x07, 0x0e, 0xde, 0x9c, 0x4a, 0xe9, 0xc3, 0x02, 0xa0, 0x90, 0x88, 0xa5, 0x86, 0x4d, 0xa5, - 0x7d, 0xe3, 0x2e, 0xf6, 0x11, 0x3f, 0x95, 0x00, 0x89, 0x64, 0xbd, 0x68, 0x18, 0x26, 0xe5, 0xf9, - 0xdf, 0x57, 0xf3, 0xb5, 0x81, 0xd5, 0xf4, 0x35, 0xa8, 0x6d, 0xa4, 0xb0, 0x2f, 0x18, 0xd4, 0xee, - 0x85, 0x23, 0x96, 0x26, 0xc0, 0x19, 0x0a, 0xa1, 0x77, 0x00, 0x6c, 0x81, 0xd9, 0x32, 0x45, 0x0a, - 0x78, 0x69, 0x80, 0x6c, 0xca, 0x00, 0x96, 0x4c, 0x63, 0x4b, 0xed, 0x86, 0x09, 0x0d, 0x07, 0xc0, - 0x38, 0x22, 0x64, 0xee, 0x02, 0x9c, 0xcc, 0xd1, 0x1e, 0x1d, 0x87, 0xc2, 0x0d, 0xd2, 0xf3, 0xdc, - 0x8a, 0xd9, 0x4f, 0x74, 0x22, 0xba, 0x1f, 0x1b, 0x13, 0x5b, 0xa9, 0x73, 0x23, 0xcf, 0x49, 0xf2, - 0x97, 0xa5, 0x68, 0xac, 0xf1, 0x2a, 0xf6, 0x34, 0x94, 0x6d, 0x62, 0x69, 0x6a, 0x5b, 0x71, 0x44, - 0x3d, 0xc3, 0x0b, 0x52, 0x2c, 0xda, 0x70, 0xd0, 0x1b, 0xab, 0x77, 0x47, 0xee, 0x6f, 0xbd, 0x5b, - 0xb8, 0xd7, 0xf5, 0xae, 0x09, 0x65, 0xc7, 0x2f, 0x74, 0x8b, 0x1c, 0x7c, 0xf1, 0x10, 0x39, 0x5b, - 0xd4, 0xb8, 0x81, 0xc0, 0xa0, 0xba, 0x0d, 0x84, 0x64, 0xd5, 0xb5, 0xa5, 0x3e, 0xeb, 0xda, 0x55, - 0x38, 0x61, 0x93, 0x1d, 0x95, 0xa9, 0x71, 0x59, 0x75, 0xa8, 0x69, 0xf7, 0x56, 0x55, 0x5d, 0xa5, - 0xa2, 0xec, 0xa9, 0xec, 0xef, 0x55, 0x4f, 0xe0, 0x8c, 0x7e, 0x9c, 0xc9, 0xc5, 0xb2, 0xb3, 0xa5, - 0xb8, 0x0e, 0xe9, 0xf0, 0x94, 0x56, 0x0e, 0xb3, 0x73, 0x83, 0xb7, 0x62, 0xd1, 0x8b, 0xf4, 0x58, - 0x70, 0x97, 0xef, 0x45, 0x70, 0x4f, 0xe6, 0x07, 0x36, 0xda, 0x80, 0x93, 0x96, 0x6d, 0x76, 0x6d, - 0xe2, 0x38, 0xcb, 0x44, 0xe9, 0x68, 0xaa, 0x41, 0x7c, 0x7f, 0x8d, 0x71, 0x3b, 0x1f, 0xda, 0xdf, - 0xab, 0x9e, 0x6c, 0x64, 0x93, 0xe0, 0x3c, 0x5e, 0xf9, 0xa3, 0x22, 0x1c, 0x4f, 0xae, 0xb2, 0x39, - 0x55, 0xa9, 0x34, 0x50, 0x55, 0xfa, 0x64, 0x64, 0xda, 0x78, 0x25, 0x7b, 0x10, 0x0d, 0x19, 0x53, - 0x67, 0x11, 0xa6, 0x44, 0x1e, 0xf1, 0x3b, 0x45, 0x5d, 0x1e, 0x44, 0xc3, 0x46, 0xbc, 0x1b, 0x27, - 0xe9, 0x59, 0xad, 0x19, 0x96, 0x90, 0x3e, 0x48, 0x31, 0x5e, 0x6b, 0x2e, 0x26, 0x09, 0x70, 0x9a, - 0x07, 0xad, 0xc1, 0x8c, 0x6b, 0xa4, 0xa1, 0xbc, 0xe8, 0x7c, 0x48, 0x40, 0xcd, 0x6c, 0xa4, 0x49, - 0x70, 0x16, 0x1f, 0xda, 0x01, 0x68, 0xfb, 0x05, 0x81, 0x53, 0x39, 0xca, 0x73, 0x75, 0x7d, 0xe0, - 0xb9, 0x15, 0xd4, 0x16, 0x61, 0x46, 0x0c, 0x9a, 0x1c, 0x1c, 0x91, 0x84, 0x5e, 0x80, 0x09, 0x9b, - 0x6f, 0x3c, 0x7c, 0x03, 0xbc, 0xe2, 0xfd, 0x01, 0xc1, 0x36, 0x81, 0xa3, 0x9d, 0x38, 0x4e, 0x2b, - 0xff, 0x41, 0x8a, 0x2e, 0x51, 0x41, 0xa9, 0x7d, 0x2e, 0x56, 0x56, 0x3d, 0x96, 0x28, 0xab, 0x66, - 0xd3, 0x1c, 0x91, 0xaa, 0xea, 0x3b, 0xd9, 0x55, 0xf6, 0xc5, 0x43, 0x55, 0xd9, 0xe1, 0x52, 0x7b, - 0xe7, 0x32, 0xfb, 0x13, 0x09, 0x66, 0x2f, 0x36, 0x2f, 0xd9, 0xa6, 0x6b, 0xf9, 0xea, 0x5d, 0xb1, - 0x3c, 0x5f, 0x7d, 0x0d, 0x8a, 0xb6, 0xab, 0xf9, 0x76, 0xfd, 0x97, 0x6f, 0x17, 0x76, 0x35, 0x66, - 0xd7, 0x4c, 0x82, 0xcb, 0x33, 0x8a, 0x31, 0xa0, 0xb7, 0xe0, 0xa8, 0xad, 0x18, 0x5d, 0xe2, 0x2f, - 0xc2, 0xcf, 0xf6, 0x69, 0xcd, 0xca, 0x32, 0x66, 0xec, 0x91, 0x52, 0x90, 0xa3, 0x61, 0x81, 0x2a, - 0xff, 0x44, 0x82, 0xa9, 0xcb, 0xad, 0x56, 0x63, 0xc5, 0xe0, 0xb3, 0xb8, 0xa1, 0xd0, 0x6d, 0x56, - 0x27, 0x58, 0x0a, 0xdd, 0x4e, 0xd6, 0x09, 0xac, 0x0f, 0xf3, 0x1e, 0xb4, 0x0d, 0xa3, 0x2c, 0x7b, - 0x10, 0xa3, 0x33, 0x60, 0x89, 0x2f, 0xc4, 0xd5, 0x3d, 0x90, 0xb0, 0xfe, 0x14, 0x0d, 0xd8, 0x87, - 0x97, 0xdf, 0x83, 0x13, 0x11, 0xf5, 0x98, 0xbf, 0xf8, 0xe9, 0x24, 0x6a, 0x43, 0x89, 0x69, 0xe2, - 0x9f, 0x3d, 0xf6, 0x7b, 0x84, 0x96, 0x30, 0x39, 0xac, 0xa3, 0xd8, 0x97, 0x83, 0x3d, 0x6c, 0x79, - 0x0d, 0x26, 0x2e, 0x9b, 0x0e, 0x6d, 0x98, 0x36, 0xe5, 0x6e, 0x43, 0x8f, 0x40, 0x41, 0x57, 0x0d, - 0xb1, 0x4a, 0x8f, 0x0b, 0x9e, 0x02, 0x5b, 0x47, 0x58, 0x3b, 0xef, 0x56, 0x76, 0x45, 0x36, 0x0a, - 0xbb, 0x95, 0x5d, 0xcc, 0xda, 0xe5, 0x4b, 0x30, 0x2a, 0x86, 0x23, 0x0a, 0x54, 0x38, 0x18, 0xa8, - 0x90, 0x01, 0xf4, 0x8b, 0x11, 0x18, 0x15, 0xda, 0x0f, 0x61, 0x33, 0xf7, 0x46, 0x6c, 0x33, 0x77, - 0x6e, 0xb0, 0x91, 0xce, 0xdd, 0xc9, 0x75, 0x12, 0x3b, 0xb9, 0x17, 0x07, 0xc4, 0x3f, 0x78, 0x1b, - 0xf7, 0xb1, 0x04, 0x93, 0xf1, 0x98, 0x43, 0x67, 0x61, 0x9c, 0xad, 0x29, 0x6a, 0x9b, 0xac, 0x87, - 0x45, 0x71, 0x70, 0xb0, 0xd2, 0x0c, 0xbb, 0x70, 0x94, 0x0e, 0x75, 0x03, 0x36, 0x16, 0x16, 0xc2, - 0x29, 0xf9, 0x2e, 0x77, 0xa9, 0xaa, 0xd5, 0xbc, 0xab, 0x9e, 0xda, 0x8a, 0x41, 0xaf, 0xd8, 0x4d, - 0x6a, 0xab, 0x46, 0x37, 0x25, 0x88, 0xc7, 0x58, 0x14, 0x59, 0xbe, 0x29, 0xc1, 0xb8, 0x50, 0x79, - 0x08, 0x5b, 0x92, 0xd7, 0xe3, 0x5b, 0x92, 0x67, 0x07, 0x9c, 0xcf, 0xd9, 0xfb, 0x91, 0x4f, 0x43, - 0x53, 0xd8, 0x0c, 0x66, 0x09, 0x66, 0xdb, 0x74, 0x68, 0x32, 0xc1, 0xb0, 0xb9, 0x86, 0x79, 0x0f, - 0xfa, 0x9e, 0x04, 0xc7, 0xd5, 0xc4, 0x9c, 0x17, 0xbe, 0x7e, 0x79, 0x30, 0xd5, 0x02, 0x98, 0x7a, - 0x45, 0xc8, 0x3b, 0x9e, 0xec, 0xc1, 0x29, 0x91, 0xb2, 0x0b, 0x29, 0x2a, 0xa4, 0x40, 0x71, 0x9b, - 0x52, 0x4b, 0x0c, 0xc2, 0xd2, 0xe0, 0x99, 0x27, 0x54, 0xa9, 0xcc, 0xcd, 0x6f, 0xb5, 0x1a, 0x98, - 0x43, 0xcb, 0x3f, 0x1f, 0x09, 0x1c, 0xd6, 0xf4, 0x26, 0x49, 0x90, 0x6f, 0xa5, 0x7b, 0x91, 0x6f, - 0xc7, 0xb3, 0x72, 0x2d, 0xfa, 0x06, 0x14, 0xa8, 0x36, 0xe8, 0xa6, 0x54, 0x48, 0x68, 0xad, 0x36, - 0xc3, 0x84, 0xd5, 0x5a, 0x6d, 0x62, 0x06, 0x89, 0xde, 0x86, 0x12, 0x5b, 0xcd, 0xd8, 0x1c, 0x2f, - 0x0c, 0x9e, 0x43, 0x98, 0xbf, 0xc2, 0x08, 0x63, 0x5f, 0x0e, 0xf6, 0x70, 0xe5, 0xf7, 0x60, 0x22, - 0x96, 0x08, 0xd0, 0x75, 0x38, 0xa6, 0x99, 0x4a, 0xa7, 0xae, 0x68, 0x8a, 0xd1, 0x26, 0x76, 0x32, - 0x35, 0x66, 0xef, 0x67, 0x56, 0x23, 0x1c, 0x22, 0xa1, 0x04, 0x17, 0x88, 0xd1, 0x3e, 0x1c, 0xc3, - 0x96, 0x15, 0x80, 0xd0, 0x7a, 0x54, 0x85, 0x12, 0x0b, 0x61, 0x6f, 0x65, 0x1a, 0xab, 0x8f, 0x31, - 0x5d, 0x59, 0x64, 0x3b, 0xd8, 0x6b, 0x47, 0x67, 0x00, 0x1c, 0xd2, 0xb6, 0x09, 0xe5, 0x79, 0xc7, - 0x3b, 0x01, 0x0a, 0x32, 0x70, 0x33, 0xe8, 0xc1, 0x11, 0x2a, 0xf9, 0x4f, 0x12, 0x4c, 0xac, 0x13, - 0xfa, 0xae, 0x69, 0xdf, 0x68, 0xf0, 0x0b, 0xda, 0x21, 0xe4, 0xfd, 0xcd, 0x58, 0xde, 0x7f, 0xa5, - 0xcf, 0x31, 0x8b, 0x69, 0x9b, 0x97, 0xfd, 0xe5, 0xbf, 0x4b, 0x50, 0x89, 0x51, 0x46, 0xd3, 0x04, - 0x81, 0x92, 0x65, 0xda, 0xd4, 0x5f, 0xe3, 0x0f, 0xa5, 0x01, 0x4b, 0xa9, 0x91, 0x55, 0x9e, 0xc1, - 0x62, 0x0f, 0x9d, 0xd9, 0xb9, 0x65, 0x9b, 0xba, 0x88, 0xfb, 0xc3, 0x49, 0x21, 0xc4, 0x0e, 0xed, - 0xbc, 0x68, 0x9b, 0x3a, 0xe6, 0xd8, 0xf2, 0x1f, 0x25, 0x98, 0x8e, 0x51, 0x0e, 0x21, 0xa5, 0x2b, - 0xf1, 0x94, 0xfe, 0xe2, 0x61, 0x0c, 0xcb, 0x49, 0xec, 0x5f, 0x25, 0xcd, 0x62, 0x0e, 0x40, 0x5b, - 0x30, 0x6e, 0x99, 0x9d, 0xe6, 0x3d, 0xb8, 0x99, 0x9b, 0x62, 0x2b, 0x64, 0x23, 0xc4, 0xc2, 0x51, - 0x60, 0xb4, 0x0b, 0xd3, 0x86, 0xa2, 0x13, 0xc7, 0x52, 0xda, 0xa4, 0x79, 0x0f, 0xce, 0x45, 0x1e, - 0xe0, 0xb7, 0x05, 0x49, 0x44, 0x9c, 0x16, 0x22, 0xff, 0x2a, 0x65, 0xb7, 0x69, 0x53, 0xf4, 0x2a, - 0x94, 0xf9, 0x23, 0x89, 0xb6, 0xa9, 0x89, 0xa5, 0xed, 0x2c, 0x1b, 0x9a, 0x86, 0x68, 0xbb, 0xbd, - 0x57, 0xfd, 0xef, 0x03, 0x8f, 0x75, 0x7d, 0x42, 0x1c, 0xc0, 0xa0, 0x75, 0x28, 0x5a, 0x87, 0x29, - 0x33, 0xf8, 0xc2, 0xc2, 0x6b, 0x0b, 0x8e, 0x23, 0xff, 0x23, 0xa9, 0x38, 0x5f, 0x5e, 0xae, 0xdf, - 0xb3, 0x01, 0x0b, 0xca, 0x9a, 0xdc, 0x41, 0xb3, 0x61, 0x54, 0xac, 0xb2, 0x22, 0x2e, 0x2f, 0x1d, - 0x26, 0x2e, 0xa3, 0x2b, 0x43, 0xb0, 0x89, 0xf0, 0x1b, 0x7d, 0x41, 0xf2, 0x5f, 0x25, 0x98, 0xe6, - 0x0a, 0xb5, 0x5d, 0x5b, 0xa5, 0xbd, 0xa1, 0x65, 0xd0, 0xad, 0x58, 0x06, 0x5d, 0xee, 0xd3, 0xd0, - 0x94, 0xc6, 0xb9, 0x59, 0xf4, 0x73, 0x09, 0x1e, 0x48, 0x51, 0x0f, 0x21, 0xc3, 0x90, 0x78, 0x86, - 0x79, 0xe5, 0xb0, 0x06, 0xe6, 0x64, 0x99, 0x9b, 0x90, 0x61, 0x1e, 0x0f, 0xdc, 0x33, 0x00, 0x96, - 0xad, 0xee, 0xa8, 0x1a, 0xe9, 0x8a, 0xcb, 0xe0, 0x72, 0x38, 0x24, 0x8d, 0xa0, 0x07, 0x47, 0xa8, - 0xd0, 0xb7, 0x60, 0xb6, 0x43, 0xb6, 0x14, 0x57, 0xa3, 0x8b, 0x9d, 0xce, 0x92, 0x62, 0x29, 0x9b, - 0xaa, 0xa6, 0x52, 0x55, 0xec, 0xb0, 0xc7, 0xea, 0x17, 0xbc, 0x4b, 0xda, 0x2c, 0x8a, 0xdb, 0x7b, - 0xd5, 0xc7, 0x0f, 0xbe, 0x98, 0xf1, 0x89, 0x7b, 0x38, 0x47, 0x08, 0xfa, 0xae, 0x04, 0x15, 0x9b, - 0xbc, 0xe3, 0xaa, 0x36, 0xe9, 0x2c, 0xdb, 0xa6, 0x15, 0xd3, 0xa0, 0xc0, 0x35, 0xb8, 0xb4, 0xbf, - 0x57, 0xad, 0xe0, 0x1c, 0x9a, 0x7e, 0x74, 0xc8, 0x15, 0x84, 0x28, 0xcc, 0x28, 0x9a, 0x66, 0xbe, - 0x4b, 0xe2, 0x1e, 0x28, 0x72, 0xf9, 0xf5, 0xfd, 0xbd, 0xea, 0xcc, 0x62, 0xba, 0xbb, 0x1f, 0xd1, - 0x59, 0xf0, 0x68, 0x01, 0x46, 0x77, 0x4c, 0xcd, 0xd5, 0x89, 0x53, 0x29, 0x71, 0x49, 0x2c, 0xe3, - 0x8e, 0x5e, 0xf5, 0x9a, 0x6e, 0xef, 0x55, 0x8f, 0x5e, 0x6c, 0xf2, 0xa3, 0x0f, 0x9f, 0x8a, 0xed, - 0xd1, 0x58, 0xcd, 0x24, 0xa6, 0x3c, 0x3f, 0x77, 0x2d, 0x87, 0x39, 0xe6, 0x72, 0xd8, 0x85, 0xa3, - 0x74, 0x48, 0x87, 0xb1, 0x6d, 0xb1, 0x6f, 0x77, 0x2a, 0xa3, 0x03, 0xad, 0x7e, 0xb1, 0x7d, 0x7f, - 0x7d, 0x5a, 0x88, 0x1c, 0xf3, 0x9b, 0x1d, 0x1c, 0x4a, 0x40, 0x4f, 0xc0, 0x28, 0xff, 0x58, 0x59, - 0xe6, 0xa7, 0xb5, 0xe5, 0x30, 0x13, 0x5d, 0xf6, 0x9a, 0xb1, 0xdf, 0xef, 0x93, 0xae, 0x34, 0x96, - 0xf8, 0xe1, 0x6a, 0x82, 0x74, 0xa5, 0xb1, 0x84, 0xfd, 0x7e, 0x64, 0xc1, 0xa8, 0x43, 0x56, 0x55, - 0xc3, 0xdd, 0xad, 0xc0, 0x40, 0xd7, 0xc5, 0xcd, 0x0b, 0x9c, 0x3b, 0x71, 0x14, 0x15, 0x4a, 0x14, - 0xfd, 0xd8, 0x17, 0x83, 0x76, 0x61, 0xcc, 0x76, 0x8d, 0x45, 0x67, 0xc3, 0x21, 0x76, 0x65, 0x9c, - 0xcb, 0xec, 0x37, 0x39, 0x63, 0x9f, 0x3f, 0x29, 0x35, 0xf0, 0x60, 0x40, 0x81, 0x43, 0x61, 0xe8, - 0x23, 0x09, 0x90, 0xe3, 0x5a, 0x96, 0x46, 0x74, 0x62, 0x50, 0x45, 0xe3, 0xa7, 0x61, 0x4e, 0xe5, - 0x18, 0xd7, 0xa1, 0xd1, 0xaf, 0xdd, 0x29, 0xa0, 0xa4, 0x32, 0xc1, 0x51, 0x73, 0x9a, 0x14, 0x67, - 0xe8, 0xc1, 0x86, 0x62, 0xcb, 0xe1, 0xbf, 0x2b, 0x13, 0x03, 0x0d, 0x45, 0xf6, 0xa9, 0x60, 0x38, - 0x14, 0xa2, 0x1f, 0xfb, 0x62, 0xd0, 0x55, 0x98, 0xb5, 0x89, 0xd2, 0xb9, 0x62, 0x68, 0x3d, 0x6c, - 0x9a, 0xf4, 0xa2, 0xaa, 0x11, 0xa7, 0xe7, 0x50, 0xa2, 0x57, 0x26, 0x79, 0xd8, 0x04, 0x4f, 0x2e, - 0x70, 0x26, 0x15, 0xce, 0xe1, 0xe6, 0x2f, 0x01, 0xc4, 0x19, 0xec, 0x70, 0xde, 0xd2, 0x1d, 0xee, - 0x25, 0x40, 0xa8, 0xea, 0x7d, 0x7b, 0x09, 0x10, 0x11, 0x71, 0xf0, 0x11, 0xd2, 0x57, 0x23, 0x30, - 0x13, 0x12, 0xdf, 0xf5, 0x4b, 0x80, 0x0c, 0x96, 0x21, 0xbc, 0x04, 0xc8, 0xbe, 0x4a, 0x2f, 0xdc, - 0xef, 0xab, 0xf4, 0xfb, 0xf0, 0x02, 0x81, 0xdf, 0xce, 0x87, 0x4e, 0xfc, 0xf7, 0xbf, 0x9d, 0x0f, - 0x75, 0xcd, 0x29, 0x67, 0x7e, 0x33, 0x12, 0x35, 0xe8, 0x3f, 0xe8, 0x0a, 0xf8, 0xf0, 0x2f, 0x0d, - 0xe5, 0xcf, 0x0b, 0x70, 0x3c, 0x39, 0x63, 0x63, 0x37, 0x81, 0xd2, 0x1d, 0x6f, 0x02, 0x1b, 0x70, - 0x62, 0xcb, 0xd5, 0xb4, 0x1e, 0x77, 0x48, 0xe4, 0x3a, 0xd0, 0x3b, 0xb5, 0x7f, 0x58, 0x70, 0x9e, - 0xb8, 0x98, 0x41, 0x83, 0x33, 0x39, 0x73, 0x6e, 0x35, 0x0b, 0x03, 0xdd, 0x6a, 0xa6, 0x2e, 0xd5, - 0x8a, 0x77, 0x7f, 0xa9, 0x96, 0x7d, 0x43, 0x59, 0x1a, 0xe0, 0x86, 0xf2, 0x5e, 0x5c, 0x29, 0x66, - 0x24, 0xbe, 0x3b, 0x5d, 0x29, 0xca, 0x0f, 0xc3, 0x9c, 0x60, 0x63, 0xdf, 0x4b, 0xa6, 0x41, 0x6d, - 0x53, 0xd3, 0x88, 0xbd, 0xec, 0xea, 0x7a, 0x4f, 0x3e, 0x0f, 0x93, 0xf1, 0x7b, 0x6d, 0x6f, 0xe4, - 0xbd, 0xab, 0x76, 0x71, 0x97, 0x12, 0x19, 0x79, 0xaf, 0x1d, 0x07, 0x14, 0xf2, 0x07, 0x12, 0xcc, - 0x66, 0xbf, 0xa1, 0x43, 0x1a, 0x4c, 0xea, 0xca, 0x6e, 0xf4, 0x11, 0xa1, 0x34, 0xe0, 0x8e, 0x1b, - 0xed, 0xef, 0x55, 0x27, 0xd7, 0x62, 0x58, 0x38, 0x81, 0x2d, 0x7f, 0x21, 0xc1, 0xc9, 0x9c, 0x6b, - 0xc6, 0xe1, 0x6a, 0x82, 0xae, 0x41, 0x59, 0x57, 0x76, 0x9b, 0xae, 0xdd, 0x25, 0x03, 0x9f, 0x31, - 0xf0, 0x5c, 0xb2, 0x26, 0x50, 0x70, 0x80, 0x27, 0x7f, 0x22, 0x41, 0x25, 0xaf, 0x1e, 0x44, 0x67, - 0x63, 0x17, 0xa2, 0x8f, 0x26, 0x2e, 0x44, 0xa7, 0x53, 0x7c, 0x43, 0xba, 0x0e, 0xfd, 0x54, 0x82, - 0xd9, 0xec, 0xba, 0x19, 0x3d, 0x13, 0xd3, 0xb8, 0x9a, 0xd0, 0x78, 0x2a, 0xc1, 0x25, 0xf4, 0xdd, - 0x86, 0x49, 0x51, 0x5d, 0x0b, 0x18, 0xe1, 0xe5, 0x27, 0x0f, 0xce, 0xaa, 0x02, 0xcc, 0xaf, 0x13, - 0xf9, 0x48, 0xc6, 0xdb, 0x70, 0x02, 0x57, 0xfe, 0xd9, 0x08, 0x94, 0x9a, 0x6d, 0x45, 0x23, 0x43, - 0x28, 0xea, 0xae, 0xc5, 0x8a, 0xba, 0x7e, 0xdf, 0xf9, 0x73, 0x2d, 0x73, 0xeb, 0xb9, 0xcd, 0x44, - 0x3d, 0x77, 0x6e, 0x20, 0xf4, 0x83, 0x4b, 0xb9, 0xe7, 0x61, 0x2c, 0x50, 0xa2, 0xbf, 0xd5, 0x43, - 0xfe, 0x78, 0x04, 0xc6, 0x23, 0x22, 0xfa, 0x5c, 0x7b, 0x76, 0x62, 0xab, 0xf7, 0x20, 0x7f, 0x29, - 0x8a, 0xc8, 0xae, 0xf9, 0xeb, 0xb7, 0xf7, 0x86, 0x2e, 0x7c, 0x0b, 0x95, 0x5e, 0xd6, 0xcf, 0xc3, - 0x24, 0xe5, 0xff, 0xb0, 0x09, 0xce, 0xf8, 0x0a, 0x3c, 0x8a, 0x83, 0x97, 0x99, 0xad, 0x58, 0x2f, - 0x4e, 0x50, 0xcf, 0xbd, 0x00, 0x13, 0x31, 0x61, 0x7d, 0x3d, 0x79, 0xfb, 0xad, 0x04, 0x8f, 0xde, - 0x71, 0x4f, 0x86, 0xea, 0xb1, 0xe9, 0x55, 0x4b, 0x4c, 0xaf, 0xf9, 0x7c, 0x80, 0x21, 0x3e, 0x96, - 0xf8, 0xd1, 0x08, 0xa0, 0xd6, 0xb6, 0x6a, 0x77, 0x1a, 0x8a, 0x4d, 0x7b, 0x58, 0xfc, 0x8f, 0x6a, - 0x08, 0x13, 0xee, 0x2c, 0x8c, 0x77, 0x88, 0xd3, 0xb6, 0x55, 0xee, 0x2c, 0xb1, 0x57, 0x08, 0xce, - 0x41, 0x96, 0xc3, 0x2e, 0x1c, 0xa5, 0x43, 0x5d, 0x28, 0xef, 0x78, 0xff, 0xd4, 0xf3, 0x6f, 0xde, - 0xfa, 0x2d, 0x66, 0xc3, 0xff, 0xfa, 0x85, 0xf1, 0x25, 0x1a, 0x1c, 0x1c, 0x80, 0xcb, 0x1f, 0x4a, - 0x30, 0x9b, 0x76, 0xcc, 0x32, 0x53, 0xfd, 0xfe, 0x3b, 0xe7, 0x61, 0x28, 0x72, 0x74, 0xe6, 0x95, - 0x63, 0xde, 0x89, 0x37, 0x93, 0x8c, 0x79, 0xab, 0xfc, 0xa5, 0x04, 0x73, 0xd9, 0xaa, 0x0d, 0x61, - 0x2b, 0x71, 0x3d, 0xbe, 0x95, 0xe8, 0xf7, 0xd8, 0x20, 0x5b, 0xef, 0x9c, 0x6d, 0xc5, 0x5e, 0xe6, - 0x18, 0x0c, 0xc1, 0xc8, 0xad, 0xb8, 0x91, 0x8b, 0x87, 0x36, 0x32, 0xdb, 0xc0, 0xfa, 0x13, 0x37, - 0x6f, 0xcd, 0x1f, 0xf9, 0xec, 0xd6, 0xfc, 0x91, 0x3f, 0xdf, 0x9a, 0x3f, 0xf2, 0xfe, 0xfe, 0xbc, - 0x74, 0x73, 0x7f, 0x5e, 0xfa, 0x6c, 0x7f, 0x5e, 0xfa, 0xdb, 0xfe, 0xbc, 0xf4, 0x83, 0x2f, 0xe6, - 0x8f, 0x5c, 0x1b, 0x15, 0x98, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xfb, 0x34, 0x4b, 0xec, - 0x3c, 0x00, 0x00, + 0x5e, 0x13, 0xec, 0xb3, 0x4f, 0x75, 0x55, 0xba, 0xed, 0x6e, 0xd6, 0xda, 0xa6, 0xbe, 0xd0, 0x35, + 0xbb, 0xe6, 0x02, 0x47, 0xd9, 0x74, 0xb7, 0xf8, 0x2f, 0xfe, 0x83, 0xff, 0xe5, 0xa1, 0xcf, 0xfe, + 0xbf, 0x50, 0x4e, 0xb1, 0x54, 0x5d, 0x69, 0x6f, 0xab, 0x06, 0xb1, 0x7b, 0xbe, 0x7a, 0x0b, 0x36, + 0x71, 0x4c, 0xd7, 0x6e, 0x93, 0xa4, 0x4e, 0x07, 0x72, 0x39, 0x0b, 0x3a, 0xa1, 0xca, 0xc2, 0x4e, + 0xca, 0x92, 0xd9, 0x85, 0x3c, 0x2e, 0xdb, 0x35, 0xa8, 0xaa, 0xa7, 0xc5, 0x3c, 0x7b, 0x27, 0x06, + 0xa7, 0xbd, 0x4d, 0x74, 0x25, 0xc5, 0xf7, 0x4c, 0x1e, 0x9f, 0x4b, 0x55, 0x6d, 0x41, 0x35, 0xa8, + 0x43, 0xed, 0x83, 0x6c, 0x72, 0x88, 0xbd, 0x43, 0xec, 0xe8, 0x2a, 0x29, 0xba, 0xa5, 0x91, 0x2c, + 0x9b, 0x9e, 0xcc, 0x5d, 0xdc, 0x2c, 0xea, 0xe7, 0x0f, 0x08, 0x05, 0xcb, 0xd4, 0xd4, 0x76, 0x2f, + 0x2f, 0x0c, 0xe4, 0x1a, 0xc0, 0x62, 0x63, 0xe5, 0x2a, 0xb1, 0xd9, 0x72, 0xa3, 0x53, 0x50, 0x32, + 0x14, 0x9d, 0x54, 0xa5, 0x53, 0xd2, 0xe9, 0xd1, 0xfa, 0xb1, 0x9b, 0x7b, 0xf3, 0x47, 0xf6, 0xf7, + 0xe6, 0x4b, 0xeb, 0x8a, 0x4e, 0x30, 0x9f, 0x91, 0x7f, 0x2c, 0xc1, 0x83, 0x4b, 0xae, 0x43, 0x4d, + 0x7d, 0x8d, 0x50, 0x5b, 0x6d, 0x2f, 0xb9, 0xb6, 0x4d, 0x0c, 0xda, 0xa4, 0x0a, 0x75, 0x9d, 0x3b, + 0xf3, 0xa3, 0x6b, 0x50, 0xde, 0x51, 0x34, 0x97, 0x54, 0x0b, 0xa7, 0xa4, 0xd3, 0x63, 0x67, 0x6a, + 0x35, 0x11, 0x86, 0x51, 0x9f, 0xfa, 0x81, 0x58, 0xf3, 0x03, 0xa5, 0xf6, 0xaa, 0xab, 0x18, 0x54, + 0xa5, 0xbd, 0xfa, 0x09, 0x01, 0x79, 0x4c, 0xc8, 0xbd, 0xca, 0xb0, 0xb0, 0x07, 0x29, 0x7f, 0x5f, + 0x82, 0x47, 0x72, 0x75, 0x5b, 0x55, 0x1d, 0x8a, 0x74, 0x28, 0xab, 0x94, 0xe8, 0x4e, 0x55, 0x3a, + 0x55, 0x3c, 0x3d, 0x76, 0xe6, 0x72, 0xad, 0xaf, 0x4d, 0x50, 0xcb, 0x05, 0xaf, 0x8f, 0x0b, 0xbd, + 0xca, 0x2b, 0x0c, 0x1e, 0x7b, 0x52, 0xe4, 0x1f, 0x4a, 0x80, 0xa2, 0x3c, 0x2d, 0xc5, 0xee, 0x12, + 0x7a, 0x17, 0x5e, 0x7a, 0xed, 0x70, 0x5e, 0x9a, 0x16, 0x90, 0x63, 0x9e, 0xc0, 0x98, 0x93, 0xde, + 0x97, 0x60, 0x26, 0xad, 0x13, 0xf7, 0xce, 0x56, 0xdc, 0x3b, 0x8b, 0x87, 0xf0, 0x8e, 0x87, 0x9a, + 0xe3, 0x96, 0x5f, 0x15, 0x60, 0x74, 0x59, 0x21, 0xba, 0x69, 0x34, 0x09, 0x45, 0xdf, 0x84, 0x0a, + 0xdb, 0xd9, 0x1d, 0x85, 0x2a, 0xdc, 0x23, 0x63, 0x67, 0xfe, 0xef, 0x20, 0x73, 0x9d, 0x1a, 0xa3, + 0xae, 0xed, 0x3c, 0x5d, 0xbb, 0xb2, 0x79, 0x9d, 0xb4, 0xe9, 0x1a, 0xa1, 0x4a, 0x1d, 0x09, 0x39, + 0x10, 0x8e, 0xe1, 0x00, 0x15, 0xbd, 0x05, 0x25, 0xc7, 0x22, 0x6d, 0xe1, 0xcc, 0x17, 0xfb, 0x34, + 0x2b, 0xd0, 0xb4, 0x69, 0x91, 0x76, 0xb8, 0x5a, 0xec, 0x17, 0xe6, 0xb8, 0x68, 0x0b, 0x8e, 0x3a, + 0x3c, 0x0c, 0xaa, 0x45, 0x2e, 0xe1, 0xfc, 0xc0, 0x12, 0xbc, 0x60, 0x9a, 0x10, 0x32, 0x8e, 0x7a, + 0xbf, 0xb1, 0x40, 0x97, 0x7f, 0x2f, 0xc1, 0x78, 0x40, 0xcb, 0x57, 0xec, 0x8d, 0x94, 0xef, 0x6a, + 0x77, 0xe7, 0x3b, 0xc6, 0xcd, 0x3d, 0x77, 0x5c, 0xc8, 0xaa, 0xf8, 0x23, 0x11, 0xbf, 0xbd, 0xe9, + 0xc7, 0x43, 0x81, 0xc7, 0xc3, 0x73, 0x83, 0x9a, 0x95, 0x13, 0x06, 0x5f, 0x14, 0x23, 0xe6, 0x30, + 0x77, 0xa2, 0x37, 0xa1, 0xe2, 0x10, 0x8d, 0xb4, 0xa9, 0x69, 0x0b, 0x73, 0x9e, 0xb9, 0x4b, 0x73, + 0x94, 0x4d, 0xa2, 0x35, 0x05, 0x6b, 0xfd, 0x18, 0xb3, 0xc7, 0xff, 0x85, 0x03, 0x48, 0xf4, 0x3a, + 0x54, 0x28, 0xd1, 0x2d, 0x4d, 0xa1, 0xfe, 0xc6, 0x7a, 0x2a, 0xdf, 0x24, 0x06, 0xdb, 0x30, 0x3b, + 0x2d, 0xc1, 0xc0, 0x17, 0x3f, 0x70, 0x96, 0x3f, 0x8a, 0x03, 0x40, 0xf4, 0x81, 0x04, 0x13, 0xae, + 0xd5, 0x61, 0xa4, 0x94, 0x25, 0xd8, 0x6e, 0x4f, 0x44, 0xc3, 0xc5, 0x41, 0xdd, 0xb6, 0x11, 0x43, + 0xab, 0xcf, 0x08, 0xe1, 0x13, 0xf1, 0x71, 0x9c, 0x90, 0x8a, 0x16, 0x61, 0x52, 0x57, 0x0d, 0x4c, + 0x94, 0x4e, 0xaf, 0x49, 0xda, 0xa6, 0xd1, 0x71, 0xaa, 0xa5, 0x53, 0xd2, 0xe9, 0x72, 0xfd, 0xa4, + 0x00, 0x98, 0x5c, 0x8b, 0x4f, 0xe3, 0x24, 0x3d, 0xfa, 0x3a, 0x20, 0xdf, 0xae, 0x4b, 0xde, 0x79, + 0xa1, 0x9a, 0x46, 0xb5, 0x7c, 0x4a, 0x3a, 0x5d, 0xac, 0xcf, 0x0a, 0x14, 0xd4, 0x4a, 0x51, 0xe0, + 0x0c, 0x2e, 0xf9, 0x9f, 0x25, 0x98, 0x4c, 0x04, 0x38, 0xba, 0x0a, 0x33, 0x6d, 0x2f, 0x7d, 0xae, + 0xbb, 0xfa, 0x26, 0xb1, 0x9b, 0xed, 0x6d, 0xd2, 0x71, 0x35, 0xd2, 0xe1, 0xab, 0x5e, 0xae, 0xcf, + 0x09, 0x19, 0x33, 0x4b, 0x99, 0x54, 0x38, 0x87, 0x9b, 0xe9, 0x6d, 0xf0, 0xa1, 0x35, 0xd5, 0x71, + 0x02, 0xcc, 0x02, 0xc7, 0x0c, 0xf4, 0x5e, 0x4f, 0x51, 0xe0, 0x0c, 0x2e, 0xa6, 0x63, 0x87, 0x38, + 0xaa, 0x4d, 0x3a, 0x49, 0x1d, 0x8b, 0x71, 0x1d, 0x97, 0x33, 0xa9, 0x70, 0x0e, 0x37, 0x3a, 0x0b, + 0x63, 0x9e, 0x34, 0xee, 0x71, 0xb1, 0x34, 0x41, 0xc2, 0x5e, 0x0f, 0xa7, 0x70, 0x94, 0x8e, 0x99, + 0x66, 0x6e, 0xf2, 0x02, 0xa2, 0x93, 0xbf, 0x24, 0x57, 0x52, 0x14, 0x38, 0x83, 0x8b, 0x99, 0xe6, + 0xc5, 0x4c, 0xca, 0xb4, 0xa3, 0x71, 0xd3, 0x36, 0x32, 0xa9, 0x70, 0x0e, 0x37, 0x8b, 0x3c, 0x4f, + 0xe5, 0xc5, 0x1d, 0x45, 0xd5, 0x94, 0x4d, 0x8d, 0x54, 0x47, 0xe2, 0x91, 0xb7, 0x1e, 0x9f, 0xc6, + 0x49, 0x7a, 0x74, 0x09, 0xa6, 0xbc, 0xa1, 0x0d, 0x43, 0x09, 0x40, 0x2a, 0x1c, 0xe4, 0x41, 0x01, + 0x32, 0xb5, 0x9e, 0x24, 0xc0, 0x69, 0x1e, 0xf9, 0x2f, 0x12, 0x9c, 0xcc, 0xd9, 0x49, 0xe8, 0x65, + 0x28, 0xd1, 0x9e, 0xe5, 0x9f, 0xbf, 0xff, 0xeb, 0x67, 0xf4, 0x56, 0xcf, 0x22, 0xb7, 0xf7, 0xe6, + 0x1f, 0xca, 0x61, 0x63, 0xd3, 0x98, 0x33, 0xa2, 0x6f, 0xc3, 0xb8, 0x6d, 0x6a, 0x9a, 0x6a, 0x74, + 0x3d, 0x12, 0x91, 0x4d, 0x2e, 0xf4, 0xb9, 0xd3, 0x71, 0x14, 0x23, 0xcc, 0x96, 0x53, 0xfb, 0x7b, + 0xf3, 0xe3, 0xb1, 0x39, 0x1c, 0x17, 0x27, 0xff, 0xa6, 0x00, 0xb0, 0x4c, 0x2c, 0xcd, 0xec, 0xe9, + 0xc4, 0x18, 0xc6, 0x09, 0xfa, 0x76, 0xec, 0x04, 0x7d, 0xa9, 0xdf, 0x8c, 0x16, 0xa8, 0x9a, 0x7b, + 0x84, 0x76, 0x13, 0x47, 0xe8, 0xcb, 0x83, 0x8b, 0x38, 0xf8, 0x0c, 0xbd, 0x55, 0x84, 0xe9, 0x90, + 0x78, 0xc9, 0x34, 0x3a, 0x2a, 0xdf, 0x13, 0x2f, 0xc4, 0x62, 0xe2, 0xf1, 0x44, 0x4c, 0x9c, 0xcc, + 0x60, 0x89, 0xc4, 0xc3, 0xd5, 0x40, 0xfb, 0x02, 0x67, 0x3f, 0x1f, 0x17, 0x7e, 0x7b, 0x6f, 0xfe, + 0xc0, 0x7a, 0xbe, 0x16, 0x60, 0xc6, 0x95, 0x45, 0x8f, 0xc1, 0x51, 0x9b, 0x28, 0x8e, 0x69, 0xf0, + 0x34, 0x31, 0x1a, 0x1a, 0x85, 0xf9, 0x28, 0x16, 0xb3, 0xe8, 0x09, 0x18, 0xd1, 0x89, 0xe3, 0x28, + 0x5d, 0xc2, 0x33, 0xc2, 0x68, 0x7d, 0x52, 0x10, 0x8e, 0xac, 0x79, 0xc3, 0xd8, 0x9f, 0x47, 0xd7, + 0x61, 0x42, 0x53, 0x1c, 0x11, 0xda, 0x2d, 0x55, 0x27, 0x7c, 0xcf, 0x8f, 0x9d, 0xf9, 0x9f, 0xbb, + 0x8b, 0x18, 0xc6, 0x11, 0x9e, 0x44, 0xab, 0x31, 0x24, 0x9c, 0x40, 0x46, 0x3b, 0x80, 0xd8, 0x48, + 0xcb, 0x56, 0x0c, 0xc7, 0x73, 0x19, 0x93, 0x37, 0xd2, 0xb7, 0xbc, 0x20, 0xbf, 0xad, 0xa6, 0xd0, + 0x70, 0x86, 0x04, 0xf9, 0x0f, 0x12, 0x4c, 0x84, 0x0b, 0x36, 0x84, 0x42, 0xe9, 0xad, 0x78, 0xa1, + 0xf4, 0xfc, 0xc0, 0xc1, 0x9b, 0x53, 0x29, 0x7d, 0x58, 0x04, 0x14, 0x12, 0xb1, 0xd4, 0xb0, 0xa9, + 0xb4, 0x6f, 0xdc, 0xc5, 0x3d, 0xe2, 0x67, 0x12, 0x20, 0x91, 0xac, 0x17, 0x0d, 0xc3, 0xa4, 0x3c, + 0xff, 0xfb, 0x6a, 0xbe, 0x36, 0xb0, 0x9a, 0xbe, 0x06, 0xb5, 0x8d, 0x14, 0xf6, 0x05, 0x83, 0xda, + 0xbd, 0x70, 0xc5, 0xd2, 0x04, 0x38, 0x43, 0x21, 0xf4, 0x0e, 0x80, 0x2d, 0x30, 0x5b, 0xa6, 0x48, + 0x01, 0x2f, 0x0d, 0x90, 0x4d, 0x19, 0xc0, 0x92, 0x69, 0x6c, 0xa9, 0xdd, 0x30, 0xa1, 0xe1, 0x00, + 0x18, 0x47, 0x84, 0xcc, 0x5e, 0x80, 0x93, 0x39, 0xda, 0xa3, 0xe3, 0x50, 0xbc, 0x41, 0x7a, 0x9e, + 0x5b, 0x31, 0xfb, 0x13, 0x9d, 0x88, 0xde, 0xc7, 0x46, 0xc5, 0x55, 0xea, 0x5c, 0xe1, 0x39, 0x49, + 0xfe, 0xb2, 0x1c, 0x8d, 0x35, 0x5e, 0xc5, 0x9e, 0x86, 0x8a, 0x4d, 0x2c, 0x4d, 0x6d, 0x2b, 0x8e, + 0xa8, 0x67, 0x78, 0x41, 0x8a, 0xc5, 0x18, 0x0e, 0x66, 0x63, 0xf5, 0x6e, 0xe1, 0xfe, 0xd6, 0xbb, + 0xc5, 0x7b, 0x5d, 0xef, 0x9a, 0x50, 0x71, 0xfc, 0x42, 0xb7, 0xc4, 0xc1, 0x17, 0x0f, 0x91, 0xb3, + 0x45, 0x8d, 0x1b, 0x08, 0x0c, 0xaa, 0xdb, 0x40, 0x48, 0x56, 0x5d, 0x5b, 0xee, 0xb3, 0xae, 0x5d, + 0x85, 0x13, 0x36, 0xd9, 0x51, 0x99, 0x1a, 0x97, 0x55, 0x87, 0x9a, 0x76, 0x6f, 0x55, 0xd5, 0x55, + 0x2a, 0xca, 0x9e, 0xea, 0xfe, 0xde, 0xfc, 0x09, 0x9c, 0x31, 0x8f, 0x33, 0xb9, 0x58, 0x76, 0xb6, + 0x14, 0xd7, 0x21, 0x1d, 0x9e, 0xd2, 0x2a, 0x61, 0x76, 0x6e, 0xf0, 0x51, 0x2c, 0x66, 0x91, 0x1e, + 0x0b, 0xee, 0xca, 0xbd, 0x08, 0xee, 0x89, 0xfc, 0xc0, 0x46, 0x1b, 0x70, 0xd2, 0xb2, 0xcd, 0xae, + 0x4d, 0x1c, 0x67, 0x99, 0x28, 0x1d, 0x4d, 0x35, 0x88, 0xef, 0xaf, 0x51, 0x6e, 0xe7, 0x43, 0xfb, + 0x7b, 0xf3, 0x27, 0x1b, 0xd9, 0x24, 0x38, 0x8f, 0x57, 0xfe, 0xac, 0x04, 0xc7, 0x93, 0xa7, 0x6c, + 0x4e, 0x55, 0x2a, 0x0d, 0x54, 0x95, 0x3e, 0x19, 0xd9, 0x36, 0x5e, 0xc9, 0x1e, 0x44, 0x43, 0xc6, + 0xd6, 0x59, 0x84, 0x49, 0x91, 0x47, 0xfc, 0x49, 0x51, 0x97, 0x07, 0xd1, 0xb0, 0x11, 0x9f, 0xc6, + 0x49, 0x7a, 0x56, 0x6b, 0x86, 0x25, 0xa4, 0x0f, 0x52, 0x8a, 0xd7, 0x9a, 0x8b, 0x49, 0x02, 0x9c, + 0xe6, 0x41, 0x6b, 0x30, 0xed, 0x1a, 0x69, 0x28, 0x2f, 0x3a, 0x1f, 0x12, 0x50, 0xd3, 0x1b, 0x69, + 0x12, 0x9c, 0xc5, 0x87, 0x76, 0x00, 0xda, 0x7e, 0x41, 0xe0, 0x54, 0x8f, 0xf2, 0x5c, 0x5d, 0x1f, + 0x78, 0x6f, 0x05, 0xb5, 0x45, 0x98, 0x11, 0x83, 0x21, 0x07, 0x47, 0x24, 0xa1, 0x17, 0x60, 0xdc, + 0xe6, 0x17, 0x0f, 0xdf, 0x00, 0xaf, 0x78, 0x7f, 0x40, 0xb0, 0x8d, 0xe3, 0xe8, 0x24, 0x8e, 0xd3, + 0xa2, 0x73, 0x30, 0xd1, 0x66, 0x35, 0x2a, 0x53, 0x63, 0xc9, 0x74, 0x0d, 0xca, 0x03, 0xbd, 0x58, + 0x47, 0xac, 0x4e, 0x58, 0x8a, 0xcd, 0xe0, 0x04, 0xa5, 0xfc, 0x47, 0x29, 0x7a, 0xbc, 0x05, 0x65, + 0xfa, 0xb9, 0x58, 0x49, 0xf6, 0x58, 0xa2, 0x24, 0x9b, 0x49, 0x73, 0x44, 0x2a, 0xb2, 0xef, 0x64, + 0x57, 0xe8, 0x17, 0x0f, 0x55, 0xa1, 0x87, 0xc7, 0xf4, 0x9d, 0x4b, 0xf4, 0x8f, 0x25, 0x98, 0xb9, + 0xd8, 0xbc, 0x64, 0x9b, 0xae, 0xe5, 0xab, 0x77, 0xc5, 0xf2, 0xfc, 0xfc, 0x35, 0x28, 0xd9, 0xae, + 0xe6, 0xdb, 0xf5, 0x5f, 0xbe, 0x5d, 0xd8, 0xd5, 0x98, 0x5d, 0xd3, 0x09, 0x2e, 0xcf, 0x28, 0xc6, + 0x80, 0xde, 0x82, 0xa3, 0xb6, 0x62, 0x74, 0x89, 0x7f, 0x80, 0x3f, 0xdb, 0xa7, 0x35, 0x2b, 0xcb, + 0x98, 0xb1, 0x47, 0xca, 0x48, 0x8e, 0x86, 0x05, 0xaa, 0xfc, 0x53, 0x09, 0x26, 0x2f, 0xb7, 0x5a, + 0x8d, 0x15, 0x83, 0x67, 0x80, 0x86, 0x42, 0xb7, 0x59, 0x8d, 0x61, 0x29, 0x74, 0x3b, 0x59, 0x63, + 0xb0, 0x39, 0xcc, 0x67, 0xd0, 0x36, 0x8c, 0xb0, 0xcc, 0x43, 0x8c, 0xce, 0x80, 0xd7, 0x03, 0x21, + 0xae, 0xee, 0x81, 0x84, 0xb5, 0xab, 0x18, 0xc0, 0x3e, 0xbc, 0xfc, 0x1e, 0x9c, 0x88, 0xa8, 0xc7, + 0xfc, 0xc5, 0x5f, 0x36, 0x51, 0x1b, 0xca, 0x4c, 0x13, 0xff, 0xdd, 0xb2, 0xdf, 0xe7, 0xb7, 0x84, + 0xc9, 0x61, 0x0d, 0xc6, 0x7e, 0x39, 0xd8, 0xc3, 0x96, 0xd7, 0x60, 0xfc, 0xb2, 0xe9, 0xd0, 0x86, + 0x69, 0x53, 0xee, 0x36, 0xf4, 0x08, 0x14, 0x75, 0xd5, 0x10, 0x27, 0xfc, 0x98, 0xe0, 0x29, 0xb2, + 0x33, 0x88, 0x8d, 0xf3, 0x69, 0x65, 0x57, 0x64, 0xb2, 0x70, 0x5a, 0xd9, 0xc5, 0x6c, 0x5c, 0xbe, + 0x04, 0x23, 0x62, 0x39, 0xa2, 0x40, 0xc5, 0x83, 0x81, 0x8a, 0x19, 0x40, 0xbf, 0x2c, 0xc0, 0x88, + 0xd0, 0x7e, 0x08, 0x17, 0xc1, 0x37, 0x62, 0x17, 0xc1, 0x73, 0x83, 0xad, 0x74, 0xee, 0x2d, 0xb0, + 0x93, 0xb8, 0x05, 0xbe, 0x38, 0x20, 0xfe, 0xc1, 0x57, 0xc0, 0x8f, 0x24, 0x98, 0x88, 0xc7, 0x1c, + 0x3a, 0x0b, 0x63, 0xec, 0x3c, 0x52, 0xdb, 0x64, 0x3d, 0x2c, 0xa8, 0x83, 0x47, 0x99, 0x66, 0x38, + 0x85, 0xa3, 0x74, 0xa8, 0x1b, 0xb0, 0xb1, 0xb0, 0x10, 0x4e, 0xc9, 0x77, 0xb9, 0x4b, 0x55, 0xad, + 0xe6, 0xb5, 0x89, 0x6a, 0x2b, 0x06, 0xbd, 0x62, 0x37, 0xa9, 0xad, 0x1a, 0xdd, 0x94, 0x20, 0x1e, + 0x63, 0x51, 0x64, 0xf9, 0xa6, 0x04, 0x63, 0x42, 0xe5, 0x21, 0x5c, 0x67, 0x5e, 0x8f, 0x5f, 0x67, + 0x9e, 0x1d, 0x70, 0x3f, 0x67, 0xdf, 0x65, 0x3e, 0x09, 0x4d, 0x61, 0x3b, 0x98, 0x25, 0x98, 0x6d, + 0xd3, 0xa1, 0xc9, 0x04, 0xc3, 0xf6, 0x1a, 0xe6, 0x33, 0xe8, 0x7b, 0x12, 0x1c, 0x57, 0x13, 0x7b, + 0x5e, 0xf8, 0xfa, 0xe5, 0xc1, 0x54, 0x0b, 0x60, 0xea, 0x55, 0x21, 0xef, 0x78, 0x72, 0x06, 0xa7, + 0x44, 0xca, 0x2e, 0xa4, 0xa8, 0x90, 0x02, 0xa5, 0x6d, 0x4a, 0x2d, 0xb1, 0x08, 0x4b, 0x83, 0x67, + 0x9e, 0x50, 0xa5, 0x0a, 0x37, 0xbf, 0xd5, 0x6a, 0x60, 0x0e, 0x2d, 0xff, 0xa2, 0x10, 0x38, 0xac, + 0xe9, 0x6d, 0x92, 0x20, 0xdf, 0x4a, 0xf7, 0x22, 0xdf, 0x8e, 0x65, 0xe5, 0x5a, 0xf4, 0x0d, 0x28, + 0x52, 0x6d, 0xd0, 0x0b, 0xad, 0x90, 0xd0, 0x5a, 0x6d, 0x86, 0x09, 0xab, 0xb5, 0xda, 0xc4, 0x0c, + 0x12, 0xbd, 0x0d, 0x65, 0x76, 0x9a, 0xb1, 0x3d, 0x5e, 0x1c, 0x3c, 0x87, 0x30, 0x7f, 0x85, 0x11, + 0xc6, 0x7e, 0x39, 0xd8, 0xc3, 0x95, 0xdf, 0x83, 0xf1, 0x58, 0x22, 0x40, 0xd7, 0xe1, 0x98, 0x66, + 0x2a, 0x9d, 0xba, 0xa2, 0x29, 0x46, 0x9b, 0xd8, 0xc9, 0xd4, 0x98, 0x7d, 0x17, 0x5a, 0x8d, 0x70, + 0x88, 0x84, 0x12, 0x34, 0x1f, 0xa3, 0x73, 0x38, 0x86, 0x2d, 0x2b, 0x00, 0xa1, 0xf5, 0x68, 0x1e, + 0xca, 0x2c, 0x84, 0xbd, 0x93, 0x69, 0xb4, 0x3e, 0xca, 0x74, 0x65, 0x91, 0xed, 0x60, 0x6f, 0x1c, + 0x9d, 0x01, 0x70, 0x48, 0xdb, 0x26, 0x94, 0xe7, 0x1d, 0xef, 0xf5, 0x28, 0xc8, 0xc0, 0xcd, 0x60, + 0x06, 0x47, 0xa8, 0xe4, 0x3f, 0x4b, 0x30, 0xbe, 0x4e, 0xe8, 0xbb, 0xa6, 0x7d, 0xa3, 0xc1, 0x9b, + 0xbb, 0x43, 0xc8, 0xfb, 0x9b, 0xb1, 0xbc, 0xff, 0x4a, 0x9f, 0x6b, 0x16, 0xd3, 0x36, 0x2f, 0xfb, + 0xcb, 0x7f, 0x97, 0xa0, 0x1a, 0xa3, 0x8c, 0xa6, 0x09, 0x02, 0x65, 0xcb, 0xb4, 0xa9, 0x7f, 0xc6, + 0x1f, 0x4a, 0x03, 0x96, 0x52, 0x23, 0xa7, 0x3c, 0x83, 0xc5, 0x1e, 0x3a, 0xb3, 0x73, 0xcb, 0x36, + 0x75, 0x11, 0xf7, 0x87, 0x93, 0x42, 0x88, 0x1d, 0xda, 0x79, 0xd1, 0x36, 0x75, 0xcc, 0xb1, 0xe5, + 0x3f, 0x49, 0x30, 0x15, 0xa3, 0x1c, 0x42, 0x4a, 0x57, 0xe2, 0x29, 0xfd, 0xc5, 0xc3, 0x18, 0x96, + 0x93, 0xd8, 0xbf, 0x4a, 0x9a, 0xc5, 0x1c, 0x80, 0xb6, 0x60, 0xcc, 0x32, 0x3b, 0xcd, 0x7b, 0xd0, + 0xd5, 0x9b, 0x64, 0x27, 0x64, 0x23, 0xc4, 0xc2, 0x51, 0x60, 0xb4, 0x0b, 0x53, 0x86, 0xa2, 0x13, + 0xc7, 0x52, 0xda, 0xa4, 0x79, 0x0f, 0xde, 0x54, 0x1e, 0xe0, 0x9d, 0x86, 0x24, 0x22, 0x4e, 0x0b, + 0x91, 0x7f, 0x9d, 0xb2, 0xdb, 0xb4, 0x29, 0x7a, 0x15, 0x2a, 0xfc, 0x03, 0x8b, 0xb6, 0xa9, 0x89, + 0xa3, 0xed, 0x2c, 0x5b, 0x9a, 0x86, 0x18, 0xbb, 0xbd, 0x37, 0xff, 0xdf, 0x07, 0x3e, 0x09, 0xfb, + 0x84, 0x38, 0x80, 0x41, 0xeb, 0x50, 0xb2, 0x0e, 0x53, 0x66, 0xf0, 0x83, 0x85, 0xd7, 0x16, 0x1c, + 0x47, 0xfe, 0x47, 0x52, 0x71, 0x7e, 0xbc, 0x5c, 0xbf, 0x67, 0x0b, 0x16, 0x94, 0x35, 0xb9, 0x8b, + 0x66, 0xc3, 0x88, 0x38, 0x65, 0x45, 0x5c, 0x5e, 0x3a, 0x4c, 0x5c, 0x46, 0x4f, 0x86, 0xe0, 0x12, + 0xe1, 0x0f, 0xfa, 0x82, 0xe4, 0xbf, 0x4a, 0x30, 0xc5, 0x15, 0x6a, 0xbb, 0xb6, 0x4a, 0x7b, 0x43, + 0xcb, 0xa0, 0x5b, 0xb1, 0x0c, 0xba, 0xdc, 0xa7, 0xa1, 0x29, 0x8d, 0x73, 0xb3, 0xe8, 0xe7, 0x12, + 0x3c, 0x90, 0xa2, 0x1e, 0x42, 0x86, 0x21, 0xf1, 0x0c, 0xf3, 0xca, 0x61, 0x0d, 0xcc, 0xc9, 0x32, + 0x37, 0x21, 0xc3, 0x3c, 0x1e, 0xb8, 0x67, 0x00, 0x2c, 0x5b, 0xdd, 0x51, 0x35, 0xd2, 0x15, 0x8d, + 0xe4, 0x4a, 0xb8, 0x24, 0x8d, 0x60, 0x06, 0x47, 0xa8, 0xd0, 0xb7, 0x60, 0xa6, 0x43, 0xb6, 0x14, + 0x57, 0xa3, 0x8b, 0x9d, 0xce, 0x92, 0x62, 0x29, 0x9b, 0xaa, 0xa6, 0x52, 0x55, 0xdc, 0xb0, 0x47, + 0xeb, 0x17, 0xbc, 0x06, 0x6f, 0x16, 0xc5, 0xed, 0xbd, 0xf9, 0xc7, 0x0f, 0x6e, 0xea, 0xf8, 0xc4, + 0x3d, 0x9c, 0x23, 0x04, 0x7d, 0x57, 0x82, 0xaa, 0x4d, 0xde, 0x71, 0x55, 0x9b, 0x74, 0x96, 0x6d, + 0xd3, 0x8a, 0x69, 0x50, 0xe4, 0x1a, 0x5c, 0xda, 0xdf, 0x9b, 0xaf, 0xe2, 0x1c, 0x9a, 0x7e, 0x74, + 0xc8, 0x15, 0x84, 0x28, 0x4c, 0x2b, 0x9a, 0x66, 0xbe, 0x4b, 0xe2, 0x1e, 0x28, 0x71, 0xf9, 0xf5, + 0xfd, 0xbd, 0xf9, 0xe9, 0xc5, 0xf4, 0x74, 0x3f, 0xa2, 0xb3, 0xe0, 0xd1, 0x02, 0x8c, 0xec, 0x98, + 0x9a, 0xab, 0x13, 0xa7, 0x5a, 0xe6, 0x92, 0x58, 0xc6, 0x1d, 0xb9, 0xea, 0x0d, 0xdd, 0xde, 0x9b, + 0x3f, 0x7a, 0xb1, 0xc9, 0x9f, 0x3e, 0x7c, 0x2a, 0x76, 0x47, 0x63, 0x35, 0x93, 0xd8, 0xf2, 0xfc, + 0xcd, 0xb6, 0x12, 0xe6, 0x98, 0xcb, 0xe1, 0x14, 0x8e, 0xd2, 0x21, 0x1d, 0x46, 0xb7, 0xc5, 0xbd, + 0xdd, 0xa9, 0x8e, 0x0c, 0x74, 0xfa, 0xc5, 0xee, 0xfd, 0xf5, 0x29, 0x21, 0x72, 0xd4, 0x1f, 0x76, + 0x70, 0x28, 0x01, 0x3d, 0x01, 0x23, 0xfc, 0xc7, 0xca, 0x32, 0x7f, 0x00, 0xab, 0x84, 0x99, 0xe8, + 0xb2, 0x37, 0x8c, 0xfd, 0x79, 0x9f, 0x74, 0xa5, 0xb1, 0xc4, 0x1f, 0x66, 0x13, 0xa4, 0x2b, 0x8d, + 0x25, 0xec, 0xcf, 0x23, 0x0b, 0x46, 0x1c, 0xb2, 0xaa, 0x1a, 0xee, 0x6e, 0x15, 0x06, 0x6a, 0x35, + 0x37, 0x2f, 0x70, 0xee, 0xc4, 0x53, 0x54, 0x28, 0x51, 0xcc, 0x63, 0x5f, 0x0c, 0xda, 0x85, 0x51, + 0xdb, 0x35, 0x16, 0x9d, 0x0d, 0x87, 0xd8, 0xd5, 0x31, 0x2e, 0xb3, 0xdf, 0xe4, 0x8c, 0x7d, 0xfe, + 0xa4, 0xd4, 0xc0, 0x83, 0x01, 0x05, 0x0e, 0x85, 0xa1, 0x9f, 0x48, 0x80, 0x1c, 0xd7, 0xb2, 0x34, + 0xa2, 0x13, 0x83, 0x2a, 0x1a, 0x7f, 0x0d, 0x73, 0xaa, 0xc7, 0xb8, 0x0e, 0x8d, 0x7e, 0xed, 0x4e, + 0x01, 0x25, 0x95, 0x09, 0x9e, 0xa9, 0xd3, 0xa4, 0x38, 0x43, 0x0f, 0xb6, 0x14, 0x5b, 0x0e, 0xff, + 0xbb, 0x3a, 0x3e, 0xd0, 0x52, 0x64, 0xbf, 0x0a, 0x86, 0x4b, 0x21, 0xe6, 0xb1, 0x2f, 0x06, 0x5d, + 0x85, 0x19, 0x9b, 0x28, 0x9d, 0x2b, 0x86, 0xd6, 0xc3, 0xa6, 0x49, 0x2f, 0xaa, 0x1a, 0x71, 0x7a, + 0x0e, 0x25, 0x7a, 0x75, 0x82, 0x87, 0x4d, 0xf0, 0xb9, 0x06, 0xce, 0xa4, 0xc2, 0x39, 0xdc, 0xfc, + 0x2b, 0x02, 0xf1, 0x7e, 0x3b, 0x9c, 0xef, 0xf0, 0x0e, 0xf7, 0x15, 0x41, 0xa8, 0xea, 0x7d, 0xfb, + 0x8a, 0x20, 0x22, 0xe2, 0xe0, 0x27, 0xa4, 0xaf, 0x0a, 0x30, 0x1d, 0x12, 0xdf, 0xf5, 0x57, 0x04, + 0x19, 0x2c, 0x43, 0xf8, 0x8a, 0x20, 0xbb, 0x0d, 0x5f, 0xbc, 0xdf, 0x6d, 0xf8, 0xfb, 0xf0, 0xf5, + 0x02, 0xef, 0xec, 0x87, 0x4e, 0xfc, 0xf7, 0xef, 0xec, 0x87, 0xba, 0xe6, 0x94, 0x33, 0xbf, 0x2d, + 0x44, 0x0d, 0xfa, 0x0f, 0x6a, 0x1f, 0x1f, 0xfe, 0x2b, 0x45, 0xf9, 0xf3, 0x22, 0x1c, 0x4f, 0xee, + 0xd8, 0x58, 0x17, 0x51, 0xba, 0x63, 0x17, 0xb1, 0x01, 0x27, 0xb6, 0x5c, 0x4d, 0xeb, 0x71, 0x87, + 0x44, 0x5a, 0x89, 0xde, 0xab, 0xfd, 0xc3, 0x82, 0xf3, 0xc4, 0xc5, 0x0c, 0x1a, 0x9c, 0xc9, 0x99, + 0xd3, 0x11, 0x2d, 0x0e, 0xd4, 0x11, 0x4d, 0x35, 0xe4, 0x4a, 0x7d, 0x34, 0xe4, 0x32, 0xbb, 0x9b, + 0xe5, 0x01, 0xba, 0x9b, 0xf7, 0xa2, 0x1d, 0x99, 0x91, 0xf8, 0xee, 0xd4, 0x8e, 0x94, 0x1f, 0x86, + 0x59, 0xc1, 0x46, 0x79, 0xa7, 0xd0, 0xa0, 0xb6, 0xa9, 0x69, 0xc4, 0x5e, 0x76, 0x75, 0xbd, 0x27, + 0x9f, 0x87, 0x89, 0x78, 0x4f, 0xdc, 0x5b, 0x79, 0xaf, 0x4d, 0x2f, 0x7a, 0x29, 0x91, 0x95, 0xf7, + 0xc6, 0x71, 0x40, 0x21, 0x7f, 0x20, 0xc1, 0x4c, 0xf6, 0xf7, 0x77, 0x48, 0x83, 0x09, 0x5d, 0xd9, + 0x8d, 0x7e, 0x80, 0x28, 0x0d, 0x78, 0xe3, 0xe6, 0xcd, 0xcf, 0xb5, 0x18, 0x16, 0x4e, 0x60, 0xcb, + 0x5f, 0x48, 0x70, 0x32, 0xa7, 0xcd, 0x38, 0x5c, 0x4d, 0xd0, 0x35, 0xa8, 0xe8, 0xca, 0x6e, 0xd3, + 0xb5, 0xbb, 0x64, 0xe0, 0x37, 0x06, 0x9e, 0x4b, 0xd6, 0x04, 0x0a, 0x0e, 0xf0, 0xe4, 0x8f, 0x25, + 0xa8, 0xe6, 0xd5, 0x83, 0xe8, 0x6c, 0xac, 0x21, 0xfa, 0x68, 0xa2, 0x21, 0x3a, 0x95, 0xe2, 0x1b, + 0x52, 0x3b, 0xf4, 0x13, 0x09, 0x66, 0xb2, 0xeb, 0x66, 0xf4, 0x4c, 0x4c, 0xe3, 0xf9, 0x84, 0xc6, + 0x93, 0x09, 0x2e, 0xa1, 0xef, 0x36, 0x4c, 0x88, 0xea, 0x5a, 0xc0, 0x08, 0x2f, 0x3f, 0x79, 0x70, + 0x56, 0x15, 0x60, 0x7e, 0x9d, 0xc8, 0x57, 0x32, 0x3e, 0x86, 0x13, 0xb8, 0xf2, 0xcf, 0x0b, 0x50, + 0x6e, 0xb6, 0x15, 0x8d, 0x0c, 0xa1, 0xa8, 0xbb, 0x16, 0x2b, 0xea, 0xfa, 0xfd, 0x1f, 0x01, 0xae, + 0x65, 0x6e, 0x3d, 0xb7, 0x99, 0xa8, 0xe7, 0xce, 0x0d, 0x84, 0x7e, 0x70, 0x29, 0xf7, 0x3c, 0x8c, + 0x06, 0x4a, 0xf4, 0x77, 0x7a, 0xc8, 0x1f, 0x15, 0x60, 0x2c, 0x22, 0xa2, 0xcf, 0xb3, 0x67, 0x27, + 0x76, 0x7a, 0x0f, 0xf2, 0xef, 0x48, 0x11, 0xd9, 0x35, 0xff, 0xfc, 0xf6, 0xbe, 0xbf, 0x0b, 0xbf, + 0xa3, 0x4a, 0x1f, 0xeb, 0xe7, 0x61, 0x82, 0xf2, 0xff, 0xce, 0x09, 0xde, 0xf8, 0x8a, 0x3c, 0x8a, + 0x83, 0xaf, 0x3a, 0x5b, 0xb1, 0x59, 0x9c, 0xa0, 0x9e, 0x7d, 0x01, 0xc6, 0x63, 0xc2, 0xfa, 0xfa, + 0x5c, 0xee, 0x77, 0x12, 0x3c, 0x7a, 0xc7, 0x3b, 0x19, 0xaa, 0xc7, 0xb6, 0x57, 0x2d, 0xb1, 0xbd, + 0xe6, 0xf2, 0x01, 0x86, 0xf8, 0xb1, 0xc4, 0x8f, 0x0a, 0x80, 0x5a, 0xdb, 0xaa, 0xdd, 0x69, 0x28, + 0x36, 0xed, 0x61, 0xf1, 0x3f, 0x58, 0x43, 0xd8, 0x70, 0x67, 0x61, 0xac, 0x43, 0x9c, 0xb6, 0xad, + 0x72, 0x67, 0x89, 0xbb, 0x42, 0xf0, 0x0e, 0xb2, 0x1c, 0x4e, 0xe1, 0x28, 0x1d, 0xea, 0x42, 0x65, + 0xc7, 0xfb, 0x2f, 0x3f, 0xbf, 0xf3, 0xd6, 0x6f, 0x31, 0x1b, 0xfe, 0x9f, 0x60, 0x18, 0x5f, 0x62, + 0xc0, 0xc1, 0x01, 0xb8, 0xfc, 0xa1, 0x04, 0x33, 0x69, 0xc7, 0x2c, 0x33, 0xd5, 0xef, 0xbf, 0x73, + 0x1e, 0x86, 0x12, 0x47, 0x67, 0x5e, 0x39, 0xe6, 0xbd, 0x78, 0x33, 0xc9, 0x98, 0x8f, 0xca, 0x5f, + 0x4a, 0x30, 0x9b, 0xad, 0xda, 0x10, 0xae, 0x12, 0xd7, 0xe3, 0x57, 0x89, 0x7e, 0x9f, 0x0d, 0xb2, + 0xf5, 0xce, 0xb9, 0x56, 0xec, 0x65, 0xae, 0xc1, 0x10, 0x8c, 0xdc, 0x8a, 0x1b, 0xb9, 0x78, 0x68, + 0x23, 0xb3, 0x0d, 0xac, 0x3f, 0x71, 0xf3, 0xd6, 0xdc, 0x91, 0x4f, 0x6f, 0xcd, 0x1d, 0xf9, 0xec, + 0xd6, 0xdc, 0x91, 0xf7, 0xf7, 0xe7, 0xa4, 0x9b, 0xfb, 0x73, 0xd2, 0xa7, 0xfb, 0x73, 0xd2, 0xdf, + 0xf6, 0xe7, 0xa4, 0x1f, 0x7c, 0x31, 0x77, 0xe4, 0xda, 0x88, 0xc0, 0xfc, 0x57, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x5a, 0xe3, 0x5a, 0x1b, 0x28, 0x3d, 0x00, 0x00, } diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.proto b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.proto index a7580703f50..6e12f519eef 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.proto +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/generated.proto @@ -325,6 +325,12 @@ message DeploymentStatus { // +patchMergeKey=type // +patchStrategy=merge repeated DeploymentCondition conditions = 6; + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + optional int64 collisionCount = 8; } // DeploymentStrategy describes how to replace existing pods with new ones. diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.generated.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.generated.go index 423a1647118..633862633f7 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.generated.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.generated.go @@ -5606,7 +5606,7 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [7]bool + var yyq2 [8]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.ObservedGeneration != 0 @@ -5616,9 +5616,10 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[4] = x.AvailableReplicas != 0 yyq2[5] = x.UnavailableReplicas != 0 yyq2[6] = len(x.Conditions) != 0 + yyq2[7] = x.CollisionCount != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(7) + r.EncodeArrayStart(8) } else { yynn2 = 0 for _, b := range yyq2 { @@ -5812,6 +5813,41 @@ func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[7] { + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy25 := *x.CollisionCount + yym26 := z.EncBinary() + _ = yym26 + if false { + } else { + r.EncodeInt(int64(yy25)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("collisionCount")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CollisionCount == nil { + r.EncodeNil() + } else { + yy27 := *x.CollisionCount + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeInt(int64(yy27)) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -5957,6 +5993,22 @@ func (x *DeploymentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv16), d) } } + case "collisionCount": + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym19 := z.DecBinary() + _ = yym19 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) + } + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -5968,16 +6020,16 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj18 int - var yyb18 bool - var yyhl18 bool = l >= 0 - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + var yyj20 int + var yyb20 bool + var yyhl20 bool = l >= 0 + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5985,21 +6037,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.ObservedGeneration = 0 } else { - yyv19 := &x.ObservedGeneration - yym20 := z.DecBinary() - _ = yym20 + yyv21 := &x.ObservedGeneration + yym22 := z.DecBinary() + _ = yym22 if false { } else { - *((*int64)(yyv19)) = int64(r.DecodeInt(64)) + *((*int64)(yyv21)) = int64(r.DecodeInt(64)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -6007,29 +6059,7 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Replicas = 0 } else { - yyv21 := &x.Replicas - yym22 := z.DecBinary() - _ = yym22 - if false { - } else { - *((*int32)(yyv21)) = int32(r.DecodeInt(32)) - } - } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l - } else { - yyb18 = r.CheckBreak() - } - if yyb18 { - z.DecSendContainerState(codecSelfer_containerArrayEnd1234) - return - } - z.DecSendContainerState(codecSelfer_containerArrayElem1234) - if r.TryDecodeAsNil() { - x.UpdatedReplicas = 0 - } else { - yyv23 := &x.UpdatedReplicas + yyv23 := &x.Replicas yym24 := z.DecBinary() _ = yym24 if false { @@ -6037,21 +6067,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv23)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.ReadyReplicas = 0 + x.UpdatedReplicas = 0 } else { - yyv25 := &x.ReadyReplicas + yyv25 := &x.UpdatedReplicas yym26 := z.DecBinary() _ = yym26 if false { @@ -6059,21 +6089,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv25)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.AvailableReplicas = 0 + x.ReadyReplicas = 0 } else { - yyv27 := &x.AvailableReplicas + yyv27 := &x.ReadyReplicas yym28 := z.DecBinary() _ = yym28 if false { @@ -6081,21 +6111,21 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv27)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } z.DecSendContainerState(codecSelfer_containerArrayElem1234) if r.TryDecodeAsNil() { - x.UnavailableReplicas = 0 + x.AvailableReplicas = 0 } else { - yyv29 := &x.UnavailableReplicas + yyv29 := &x.AvailableReplicas yym30 := z.DecBinary() _ = yym30 if false { @@ -6103,13 +6133,35 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) *((*int32)(yyv29)) = int32(r.DecodeInt(32)) } } - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UnavailableReplicas = 0 + } else { + yyv31 := &x.UnavailableReplicas + yym32 := z.DecBinary() + _ = yym32 + if false { + } else { + *((*int32)(yyv31)) = int32(r.DecodeInt(32)) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -6117,26 +6169,52 @@ func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) if r.TryDecodeAsNil() { x.Conditions = nil } else { - yyv31 := &x.Conditions - yym32 := z.DecBinary() - _ = yym32 + yyv33 := &x.Conditions + yym34 := z.DecBinary() + _ = yym34 if false { } else { - h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv31), d) + h.decSliceDeploymentCondition((*[]DeploymentCondition)(yyv33), d) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CollisionCount != nil { + x.CollisionCount = nil + } + } else { + if x.CollisionCount == nil { + x.CollisionCount = new(int64) + } + yym36 := z.DecBinary() + _ = yym36 + if false { + } else { + *((*int64)(x.CollisionCount)) = int64(r.DecodeInt(64)) } } for { - yyj18++ - if yyhl18 { - yyb18 = yyj18 > l + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l } else { - yyb18 = r.CheckBreak() + yyb20 = r.CheckBreak() } - if yyb18 { + if yyb20 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj18-1, "") + z.DecStructFieldNotFound(yyj20-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -19652,7 +19730,7 @@ func (x codecSelfer1234) decSliceDeployment(v *[]Deployment, d *codec1978.Decode yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 960) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 968) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.go index 0b950e35c27..75bd7505aed 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types.go @@ -325,6 +325,12 @@ type DeploymentStatus struct { // +patchMergeKey=type // +patchStrategy=merge Conditions []DeploymentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,6,rep,name=conditions"` + + // Count of hash collisions for the Deployment. The Deployment controller uses this + // field as a collision avoidance mechanism when it needs to create the name for the + // newest ReplicaSet. + // +optional + CollisionCount *int64 `json:"collisionCount,omitempty" protobuf:"varint,8,opt,name=collisionCount"` } type DeploymentConditionType string diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go index 9e9a03ffb14..d94bc009e9d 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go @@ -186,6 +186,7 @@ var map_DeploymentStatus = map[string]string{ "availableReplicas": "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", "unavailableReplicas": "Total number of unavailable pods targeted by this deployment.", "conditions": "Represents the latest available observations of a deployment's current state.", + "collisionCount": "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", } func (DeploymentStatus) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index e90fa6af11e..9c73c3711dc 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -628,6 +628,7 @@ func autoConvert_v1beta1_DeploymentStatus_To_extensions_DeploymentStatus(in *Dep out.AvailableReplicas = in.AvailableReplicas out.UnavailableReplicas = in.UnavailableReplicas out.Conditions = *(*[]extensions.DeploymentCondition)(unsafe.Pointer(&in.Conditions)) + out.CollisionCount = (*int64)(unsafe.Pointer(in.CollisionCount)) return nil } @@ -644,6 +645,7 @@ func autoConvert_extensions_DeploymentStatus_To_v1beta1_DeploymentStatus(in *ext out.AvailableReplicas = in.AvailableReplicas out.UnavailableReplicas = in.UnavailableReplicas out.Conditions = *(*[]DeploymentCondition)(unsafe.Pointer(&in.Conditions)) + out.CollisionCount = (*int64)(unsafe.Pointer(in.CollisionCount)) return nil } diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go index 67bdcee1382..95a5ecc0a13 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go @@ -384,6 +384,11 @@ func DeepCopy_v1beta1_DeploymentStatus(in interface{}, out interface{}, c *conve } } } + if in.CollisionCount != nil { + in, out := &in.CollisionCount, &out.CollisionCount + *out = new(int64) + **out = **in + } return nil } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go index d692dd7e939..b06b0692663 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go @@ -378,6 +378,11 @@ func DeepCopy_extensions_DeploymentStatus(in interface{}, out interface{}, c *co } } } + if in.CollisionCount != nil { + in, out := &in.CollisionCount, &out.CollisionCount + *out = new(int64) + **out = **in + } return nil } } diff --git a/test/e2e/BUILD b/test/e2e/BUILD index ec8df8278d8..3097b77e694 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -164,6 +164,7 @@ go_library( "//test/e2e_federation:go_default_library", "//test/images/net/nat:go_default_library", "//test/utils:go_default_library", + "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/github.com/elazarl/goproxy:go_default_library", "//vendor/github.com/ghodss/yaml:go_default_library", "//vendor/github.com/golang/glog:go_default_library",