From 9d5a2b337d2a108afd14418a1b73263e417517ae Mon Sep 17 00:00:00 2001 From: Kristoffer Fagerbekk Date: Mon, 29 Dec 2025 18:25:31 +0100 Subject: [PATCH] feat(promotion-windows): add promotion windows for auto-promotion Signed-off-by: Kristoffer Fagerbekk Signed-off-by: Kristoffer Fagerbekk --- api/v1alpha1/generated.pb.go | 4553 ++++++++++------- api/v1alpha1/generated.proto | 62 +- api/v1alpha1/groupversion_info.go | 2 + api/v1alpha1/project_config_types.go | 8 +- api/v1alpha1/promotion_window_types.go | 61 + api/v1alpha1/zz_generated.deepcopy.go | 93 + .../crds/kargo.akuity.io_projectconfigs.yaml | 20 + .../kargo.akuity.io_promotionwindows.yaml | 82 + .../templates/controller/cluster-roles.yaml | 1 + cmd/controlplane/main.go | 2 + docs/docs/90-api-documentation.md | 39 + go.mod | 1 + go.sum | 2 + pkg/api/promotion_window.go | 159 + pkg/api/promotion_window_test.go | 310 ++ pkg/controller/stages/regular_stages.go | 11 + ui/src/gen/api/v1alpha1/generated_pb.ts | 184 +- ...ojectconfigs.kargo.akuity.io_v1alpha1.json | 24 + ...otionwindows.kargo.akuity.io_v1alpha1.json | 50 + 19 files changed, 3855 insertions(+), 1809 deletions(-) create mode 100644 api/v1alpha1/promotion_window_types.go create mode 100644 charts/kargo/resources/crds/kargo.akuity.io_promotionwindows.yaml create mode 100644 pkg/api/promotion_window.go create mode 100644 pkg/api/promotion_window_test.go create mode 100644 ui/src/gen/schema/promotionwindows.kargo.akuity.io_v1alpha1.json diff --git a/api/v1alpha1/generated.pb.go b/api/v1alpha1/generated.pb.go index 8283c253af..b76e01e502 100644 --- a/api/v1alpha1/generated.pb.go +++ b/api/v1alpha1/generated.pb.go @@ -2242,10 +2242,122 @@ func (m *PromotionTemplateSpec) XXX_DiscardUnknown() { var xxx_messageInfo_PromotionTemplateSpec proto.InternalMessageInfo +func (m *PromotionWindow) Reset() { *m = PromotionWindow{} } +func (*PromotionWindow) ProtoMessage() {} +func (*PromotionWindow) Descriptor() ([]byte, []int) { + return fileDescriptor_e26b7f7bbc391025, []int{79} +} +func (m *PromotionWindow) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PromotionWindow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PromotionWindow) XXX_Merge(src proto.Message) { + xxx_messageInfo_PromotionWindow.Merge(m, src) +} +func (m *PromotionWindow) XXX_Size() int { + return m.Size() +} +func (m *PromotionWindow) XXX_DiscardUnknown() { + xxx_messageInfo_PromotionWindow.DiscardUnknown(m) +} + +var xxx_messageInfo_PromotionWindow proto.InternalMessageInfo + +func (m *PromotionWindowList) Reset() { *m = PromotionWindowList{} } +func (*PromotionWindowList) ProtoMessage() {} +func (*PromotionWindowList) Descriptor() ([]byte, []int) { + return fileDescriptor_e26b7f7bbc391025, []int{80} +} +func (m *PromotionWindowList) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PromotionWindowList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PromotionWindowList) XXX_Merge(src proto.Message) { + xxx_messageInfo_PromotionWindowList.Merge(m, src) +} +func (m *PromotionWindowList) XXX_Size() int { + return m.Size() +} +func (m *PromotionWindowList) XXX_DiscardUnknown() { + xxx_messageInfo_PromotionWindowList.DiscardUnknown(m) +} + +var xxx_messageInfo_PromotionWindowList proto.InternalMessageInfo + +func (m *PromotionWindowReference) Reset() { *m = PromotionWindowReference{} } +func (*PromotionWindowReference) ProtoMessage() {} +func (*PromotionWindowReference) Descriptor() ([]byte, []int) { + return fileDescriptor_e26b7f7bbc391025, []int{81} +} +func (m *PromotionWindowReference) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PromotionWindowReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PromotionWindowReference) XXX_Merge(src proto.Message) { + xxx_messageInfo_PromotionWindowReference.Merge(m, src) +} +func (m *PromotionWindowReference) XXX_Size() int { + return m.Size() +} +func (m *PromotionWindowReference) XXX_DiscardUnknown() { + xxx_messageInfo_PromotionWindowReference.DiscardUnknown(m) +} + +var xxx_messageInfo_PromotionWindowReference proto.InternalMessageInfo + +func (m *PromotionWindowSpec) Reset() { *m = PromotionWindowSpec{} } +func (*PromotionWindowSpec) ProtoMessage() {} +func (*PromotionWindowSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_e26b7f7bbc391025, []int{82} +} +func (m *PromotionWindowSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PromotionWindowSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *PromotionWindowSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_PromotionWindowSpec.Merge(m, src) +} +func (m *PromotionWindowSpec) XXX_Size() int { + return m.Size() +} +func (m *PromotionWindowSpec) XXX_DiscardUnknown() { + xxx_messageInfo_PromotionWindowSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_PromotionWindowSpec proto.InternalMessageInfo + func (m *QuayWebhookReceiverConfig) Reset() { *m = QuayWebhookReceiverConfig{} } func (*QuayWebhookReceiverConfig) ProtoMessage() {} func (*QuayWebhookReceiverConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{79} + return fileDescriptor_e26b7f7bbc391025, []int{83} } func (m *QuayWebhookReceiverConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2273,7 +2385,7 @@ var xxx_messageInfo_QuayWebhookReceiverConfig proto.InternalMessageInfo func (m *RepoSubscription) Reset() { *m = RepoSubscription{} } func (*RepoSubscription) ProtoMessage() {} func (*RepoSubscription) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{80} + return fileDescriptor_e26b7f7bbc391025, []int{84} } func (m *RepoSubscription) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2301,7 +2413,7 @@ var xxx_messageInfo_RepoSubscription proto.InternalMessageInfo func (m *Stage) Reset() { *m = Stage{} } func (*Stage) ProtoMessage() {} func (*Stage) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{81} + return fileDescriptor_e26b7f7bbc391025, []int{85} } func (m *Stage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2329,7 +2441,7 @@ var xxx_messageInfo_Stage proto.InternalMessageInfo func (m *StageList) Reset() { *m = StageList{} } func (*StageList) ProtoMessage() {} func (*StageList) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{82} + return fileDescriptor_e26b7f7bbc391025, []int{86} } func (m *StageList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2357,7 +2469,7 @@ var xxx_messageInfo_StageList proto.InternalMessageInfo func (m *StageSpec) Reset() { *m = StageSpec{} } func (*StageSpec) ProtoMessage() {} func (*StageSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{83} + return fileDescriptor_e26b7f7bbc391025, []int{87} } func (m *StageSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2385,7 +2497,7 @@ var xxx_messageInfo_StageSpec proto.InternalMessageInfo func (m *StageStats) Reset() { *m = StageStats{} } func (*StageStats) ProtoMessage() {} func (*StageStats) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{84} + return fileDescriptor_e26b7f7bbc391025, []int{88} } func (m *StageStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2413,7 +2525,7 @@ var xxx_messageInfo_StageStats proto.InternalMessageInfo func (m *StageStatus) Reset() { *m = StageStatus{} } func (*StageStatus) ProtoMessage() {} func (*StageStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{85} + return fileDescriptor_e26b7f7bbc391025, []int{89} } func (m *StageStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2441,7 +2553,7 @@ var xxx_messageInfo_StageStatus proto.InternalMessageInfo func (m *StepExecutionMetadata) Reset() { *m = StepExecutionMetadata{} } func (*StepExecutionMetadata) ProtoMessage() {} func (*StepExecutionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{86} + return fileDescriptor_e26b7f7bbc391025, []int{90} } func (m *StepExecutionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2469,7 +2581,7 @@ var xxx_messageInfo_StepExecutionMetadata proto.InternalMessageInfo func (m *Subscription) Reset() { *m = Subscription{} } func (*Subscription) ProtoMessage() {} func (*Subscription) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{87} + return fileDescriptor_e26b7f7bbc391025, []int{91} } func (m *Subscription) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2497,7 +2609,7 @@ var xxx_messageInfo_Subscription proto.InternalMessageInfo func (m *Verification) Reset() { *m = Verification{} } func (*Verification) ProtoMessage() {} func (*Verification) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{88} + return fileDescriptor_e26b7f7bbc391025, []int{92} } func (m *Verification) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2525,7 +2637,7 @@ var xxx_messageInfo_Verification proto.InternalMessageInfo func (m *VerificationInfo) Reset() { *m = VerificationInfo{} } func (*VerificationInfo) ProtoMessage() {} func (*VerificationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{89} + return fileDescriptor_e26b7f7bbc391025, []int{93} } func (m *VerificationInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2553,7 +2665,7 @@ var xxx_messageInfo_VerificationInfo proto.InternalMessageInfo func (m *VerifiedStage) Reset() { *m = VerifiedStage{} } func (*VerifiedStage) ProtoMessage() {} func (*VerifiedStage) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{90} + return fileDescriptor_e26b7f7bbc391025, []int{94} } func (m *VerifiedStage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2581,7 +2693,7 @@ var xxx_messageInfo_VerifiedStage proto.InternalMessageInfo func (m *Warehouse) Reset() { *m = Warehouse{} } func (*Warehouse) ProtoMessage() {} func (*Warehouse) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{91} + return fileDescriptor_e26b7f7bbc391025, []int{95} } func (m *Warehouse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2609,7 +2721,7 @@ var xxx_messageInfo_Warehouse proto.InternalMessageInfo func (m *WarehouseList) Reset() { *m = WarehouseList{} } func (*WarehouseList) ProtoMessage() {} func (*WarehouseList) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{92} + return fileDescriptor_e26b7f7bbc391025, []int{96} } func (m *WarehouseList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2637,7 +2749,7 @@ var xxx_messageInfo_WarehouseList proto.InternalMessageInfo func (m *WarehouseSpec) Reset() { *m = WarehouseSpec{} } func (*WarehouseSpec) ProtoMessage() {} func (*WarehouseSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{93} + return fileDescriptor_e26b7f7bbc391025, []int{97} } func (m *WarehouseSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2665,7 +2777,7 @@ var xxx_messageInfo_WarehouseSpec proto.InternalMessageInfo func (m *WarehouseStats) Reset() { *m = WarehouseStats{} } func (*WarehouseStats) ProtoMessage() {} func (*WarehouseStats) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{94} + return fileDescriptor_e26b7f7bbc391025, []int{98} } func (m *WarehouseStats) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2693,7 +2805,7 @@ var xxx_messageInfo_WarehouseStats proto.InternalMessageInfo func (m *WarehouseStatus) Reset() { *m = WarehouseStatus{} } func (*WarehouseStatus) ProtoMessage() {} func (*WarehouseStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{95} + return fileDescriptor_e26b7f7bbc391025, []int{99} } func (m *WarehouseStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2721,7 +2833,7 @@ var xxx_messageInfo_WarehouseStatus proto.InternalMessageInfo func (m *WebhookReceiverConfig) Reset() { *m = WebhookReceiverConfig{} } func (*WebhookReceiverConfig) ProtoMessage() {} func (*WebhookReceiverConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{96} + return fileDescriptor_e26b7f7bbc391025, []int{100} } func (m *WebhookReceiverConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2749,7 +2861,7 @@ var xxx_messageInfo_WebhookReceiverConfig proto.InternalMessageInfo func (m *WebhookReceiverDetails) Reset() { *m = WebhookReceiverDetails{} } func (*WebhookReceiverDetails) ProtoMessage() {} func (*WebhookReceiverDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_e26b7f7bbc391025, []int{97} + return fileDescriptor_e26b7f7bbc391025, []int{101} } func (m *WebhookReceiverDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2864,6 +2976,10 @@ func init() { proto.RegisterType((*PromotionTaskSpec)(nil), "github.com.akuity.kargo.api.v1alpha1.PromotionTaskSpec") proto.RegisterType((*PromotionTemplate)(nil), "github.com.akuity.kargo.api.v1alpha1.PromotionTemplate") proto.RegisterType((*PromotionTemplateSpec)(nil), "github.com.akuity.kargo.api.v1alpha1.PromotionTemplateSpec") + proto.RegisterType((*PromotionWindow)(nil), "github.com.akuity.kargo.api.v1alpha1.PromotionWindow") + proto.RegisterType((*PromotionWindowList)(nil), "github.com.akuity.kargo.api.v1alpha1.PromotionWindowList") + proto.RegisterType((*PromotionWindowReference)(nil), "github.com.akuity.kargo.api.v1alpha1.PromotionWindowReference") + proto.RegisterType((*PromotionWindowSpec)(nil), "github.com.akuity.kargo.api.v1alpha1.PromotionWindowSpec") proto.RegisterType((*QuayWebhookReceiverConfig)(nil), "github.com.akuity.kargo.api.v1alpha1.QuayWebhookReceiverConfig") proto.RegisterType((*RepoSubscription)(nil), "github.com.akuity.kargo.api.v1alpha1.RepoSubscription") proto.RegisterType((*Stage)(nil), "github.com.akuity.kargo.api.v1alpha1.Stage") @@ -2891,365 +3007,374 @@ func init() { } var fileDescriptor_e26b7f7bbc391025 = []byte{ - // 5725 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x6b, 0x6c, 0x23, 0xc7, - 0x79, 0xb7, 0xa4, 0x9e, 0x1f, 0xf5, 0x9c, 0xd3, 0xf9, 0x64, 0xd9, 0x3e, 0x5d, 0x37, 0x8e, 0x61, - 0xd7, 0x36, 0x55, 0x9f, 0x7d, 0xbe, 0xf3, 0xeb, 0x62, 0x52, 0xba, 0x87, 0x6c, 0xd9, 0xa7, 0x0c, - 0xe5, 0xbb, 0xf8, 0x6c, 0xc3, 0x19, 0x91, 0x23, 0x72, 0x23, 0x92, 0x4b, 0xef, 0x2e, 0x75, 0x47, - 0xbb, 0x48, 0x1d, 0xbb, 0x0d, 0x5c, 0xa0, 0x28, 0xfc, 0xc3, 0x85, 0x8b, 0x02, 0x05, 0x8a, 0x06, - 0x05, 0x5a, 0x04, 0x48, 0xfe, 0xb7, 0x40, 0x53, 0xa0, 0x28, 0xe0, 0xa4, 0x49, 0x11, 0xb8, 0x3f, - 0xea, 0x02, 0x81, 0x1a, 0x2b, 0x40, 0xfe, 0x14, 0x05, 0xfa, 0xfb, 0xd0, 0x16, 0xc5, 0x3c, 0x76, - 0x67, 0x76, 0xb9, 0x94, 0x76, 0xa9, 0xc7, 0x5d, 0x81, 0xfe, 0x23, 0xe7, 0x9b, 0xf9, 0xbe, 0x79, - 0x7e, 0xef, 0x99, 0x85, 0xa7, 0xaa, 0x96, 0x57, 0x6b, 0xaf, 0xe7, 0xcb, 0x76, 0x63, 0x81, 0x6c, - 0xb6, 0x2d, 0xaf, 0xb3, 0xb0, 0x49, 0x9c, 0xaa, 0xbd, 0x40, 0x5a, 0xd6, 0xc2, 0xd6, 0x13, 0xa4, - 0xde, 0xaa, 0x91, 0x27, 0x16, 0xaa, 0xb4, 0x49, 0x1d, 0xe2, 0xd1, 0x4a, 0xbe, 0xe5, 0xd8, 0x9e, - 0x8d, 0x1e, 0x54, 0xad, 0xf2, 0xa2, 0x55, 0x9e, 0xb7, 0xca, 0x93, 0x96, 0x95, 0xf7, 0x5b, 0xcd, - 0x3d, 0xae, 0xe1, 0xae, 0xda, 0x55, 0x7b, 0x81, 0x37, 0x5e, 0x6f, 0x6f, 0xf0, 0x7f, 0xfc, 0x0f, - 0xff, 0x25, 0x90, 0xce, 0x99, 0x9b, 0xe7, 0xdd, 0xbc, 0x25, 0x28, 0x97, 0x6d, 0x87, 0x2e, 0x6c, - 0x75, 0x11, 0x9e, 0xbb, 0xa2, 0xea, 0xd0, 0x5b, 0x1e, 0x6d, 0xba, 0x96, 0xdd, 0x74, 0x1f, 0x27, - 0x2d, 0xcb, 0xa5, 0xce, 0x16, 0x75, 0x16, 0x5a, 0x9b, 0x55, 0x06, 0x73, 0xc3, 0x15, 0xe2, 0x30, - 0x3d, 0xa5, 0x30, 0x35, 0x48, 0xb9, 0x66, 0x35, 0xa9, 0xd3, 0x51, 0xcd, 0x1b, 0xd4, 0x23, 0x71, - 0xad, 0x16, 0x7a, 0xb5, 0x72, 0xda, 0x4d, 0xcf, 0x6a, 0xd0, 0xae, 0x06, 0x4f, 0xef, 0xd5, 0xc0, - 0x2d, 0xd7, 0x68, 0x83, 0x44, 0xdb, 0x99, 0x6f, 0xc2, 0xf1, 0x42, 0x93, 0xd4, 0x3b, 0xae, 0xe5, - 0xe2, 0x76, 0xb3, 0xe0, 0x54, 0xdb, 0x0d, 0xda, 0xf4, 0xd0, 0x69, 0x18, 0x68, 0x92, 0x06, 0x9d, - 0x35, 0x4e, 0x1b, 0x0f, 0x8f, 0x16, 0xc7, 0x3e, 0xdb, 0x9e, 0x3f, 0xb6, 0xb3, 0x3d, 0x3f, 0xf0, - 0x2a, 0x69, 0x50, 0xcc, 0x21, 0xe8, 0x2b, 0x30, 0xb8, 0x45, 0xea, 0x6d, 0x3a, 0x9b, 0xe1, 0x55, - 0xc6, 0x65, 0x95, 0xc1, 0x6b, 0xac, 0x10, 0x0b, 0x98, 0xf9, 0x61, 0x36, 0x84, 0xfe, 0x15, 0xea, - 0x91, 0x0a, 0xf1, 0x08, 0x6a, 0xc0, 0x50, 0x9d, 0xac, 0xd3, 0xba, 0x3b, 0x6b, 0x9c, 0xce, 0x3e, - 0x9c, 0x3b, 0x73, 0x31, 0x9f, 0x64, 0xa1, 0xf3, 0x31, 0xa8, 0xf2, 0x2b, 0x1c, 0xcf, 0xc5, 0xa6, - 0xe7, 0x74, 0x8a, 0x13, 0xb2, 0x13, 0x43, 0xa2, 0x10, 0x4b, 0x22, 0xe8, 0x3b, 0x06, 0xe4, 0x48, - 0xb3, 0x69, 0x7b, 0xc4, 0x63, 0xcb, 0x34, 0x9b, 0xe1, 0x44, 0x5f, 0xea, 0x9f, 0x68, 0x41, 0x21, - 0x13, 0x94, 0x8f, 0x4b, 0xca, 0x39, 0x0d, 0x82, 0x75, 0x9a, 0x73, 0xcf, 0x40, 0x4e, 0xeb, 0x2a, - 0x9a, 0x82, 0xec, 0x26, 0xed, 0x88, 0xf9, 0xc5, 0xec, 0x27, 0x9a, 0x09, 0x4d, 0xa8, 0x9c, 0xc1, - 0x67, 0x33, 0xe7, 0x8d, 0xb9, 0x0b, 0x30, 0x15, 0x25, 0x98, 0xa6, 0xbd, 0xf9, 0x87, 0x06, 0xcc, - 0x68, 0xa3, 0xc0, 0x74, 0x83, 0x3a, 0xb4, 0x59, 0xa6, 0x68, 0x01, 0x46, 0xd9, 0x5a, 0xba, 0x2d, - 0x52, 0xf6, 0x97, 0x7a, 0x5a, 0x0e, 0x64, 0xf4, 0x55, 0x1f, 0x80, 0x55, 0x9d, 0x60, 0x5b, 0x64, - 0x76, 0xdb, 0x16, 0xad, 0x1a, 0x71, 0xe9, 0x6c, 0x36, 0xbc, 0x2d, 0x56, 0x59, 0x21, 0x16, 0x30, - 0xf3, 0x6d, 0xb8, 0xd7, 0xef, 0xcf, 0x1a, 0x6d, 0xb4, 0xea, 0xc4, 0xa3, 0xaa, 0x53, 0x7b, 0x6f, - 0xbd, 0xd3, 0x30, 0xb0, 0x69, 0x35, 0x2b, 0xd1, 0x5e, 0xbc, 0x6c, 0x35, 0x2b, 0x98, 0x43, 0xcc, - 0x4d, 0x18, 0x2f, 0xb4, 0x5a, 0x8e, 0xbd, 0x45, 0x2b, 0x25, 0x8f, 0x54, 0x29, 0xba, 0x01, 0x40, - 0x64, 0x41, 0xc1, 0xe3, 0xa8, 0x73, 0x67, 0x7e, 0x33, 0x2f, 0xce, 0x4c, 0x5e, 0x3f, 0x33, 0xf9, - 0xd6, 0x66, 0x95, 0x15, 0xb8, 0x79, 0x76, 0x34, 0xf3, 0x5b, 0x4f, 0xe4, 0xd7, 0xac, 0x06, 0x2d, - 0x4e, 0xec, 0x6c, 0xcf, 0x43, 0x21, 0xc0, 0x80, 0x35, 0x6c, 0xe6, 0x07, 0x06, 0x9c, 0x28, 0x38, - 0x55, 0x7b, 0x71, 0xa9, 0xd0, 0x6a, 0x5d, 0xa1, 0xa4, 0xee, 0xd5, 0x4a, 0x1e, 0xf1, 0xda, 0x2e, - 0xba, 0x00, 0x43, 0x2e, 0xff, 0x25, 0x07, 0xf3, 0x90, 0xbf, 0x3f, 0x05, 0xfc, 0xf6, 0xf6, 0xfc, - 0x4c, 0x4c, 0x43, 0x8a, 0x65, 0x2b, 0xf4, 0x08, 0x0c, 0x37, 0xa8, 0xeb, 0x92, 0xaa, 0x3f, 0xe3, - 0x93, 0x12, 0xc1, 0xf0, 0x2b, 0xa2, 0x18, 0xfb, 0x70, 0xf3, 0x27, 0x19, 0x98, 0x0c, 0x70, 0x49, - 0xf2, 0x87, 0xb0, 0xbc, 0x6d, 0x18, 0xab, 0x69, 0x23, 0xe4, 0xab, 0x9c, 0x3b, 0xf3, 0x5c, 0xc2, - 0x93, 0x14, 0x37, 0x49, 0xc5, 0x19, 0x49, 0x66, 0x4c, 0x2f, 0xc5, 0x21, 0x32, 0xa8, 0x01, 0xe0, - 0x76, 0x9a, 0x65, 0x49, 0x74, 0x80, 0x13, 0x7d, 0x26, 0x25, 0xd1, 0x52, 0x80, 0xa0, 0x88, 0x24, - 0x49, 0x50, 0x65, 0x58, 0x23, 0x60, 0xfe, 0xc0, 0x80, 0xe3, 0x31, 0xed, 0xd0, 0xf3, 0x91, 0xf5, - 0x7c, 0xb0, 0x6b, 0x3d, 0x51, 0x57, 0x33, 0xb5, 0x9a, 0x8f, 0xc1, 0x88, 0x43, 0xb7, 0x2c, 0x26, - 0x29, 0xe4, 0x0c, 0x4f, 0xc9, 0xf6, 0x23, 0x58, 0x96, 0xe3, 0xa0, 0x06, 0x7a, 0x14, 0x46, 0xfd, - 0xdf, 0x6c, 0x9a, 0xb3, 0xec, 0x30, 0xb1, 0x85, 0xf3, 0xab, 0xba, 0x58, 0xc1, 0xcd, 0xbf, 0xcc, - 0xc0, 0x74, 0xc1, 0xf1, 0xac, 0x0d, 0x52, 0xf6, 0xd4, 0x49, 0x3a, 0x0f, 0x63, 0x44, 0x16, 0xae, - 0x75, 0x5a, 0xfe, 0x16, 0x08, 0xe6, 0xbb, 0xa0, 0xc1, 0x70, 0xa8, 0x26, 0x5a, 0x82, 0x29, 0xb7, - 0xbd, 0xee, 0x96, 0x1d, 0xab, 0xc5, 0x78, 0xce, 0xab, 0x6a, 0x53, 0xcc, 0xca, 0xd6, 0x53, 0xa5, - 0x08, 0x1c, 0x77, 0xb5, 0x60, 0xdb, 0x77, 0x8b, 0x3a, 0x7c, 0xbc, 0xd9, 0xf0, 0xf6, 0xbd, 0x26, - 0x8a, 0xb1, 0x0f, 0x47, 0x35, 0x18, 0x69, 0x48, 0xe6, 0x2a, 0x97, 0xf7, 0x82, 0x76, 0x3a, 0x95, - 0x84, 0x7d, 0x3b, 0x10, 0xc1, 0xea, 0xa0, 0x86, 0x2a, 0xb0, 0x13, 0xfb, 0x52, 0xe9, 0xea, 0xab, - 0xc5, 0x31, 0x36, 0xaf, 0x3e, 0xc3, 0xc6, 0x01, 0x76, 0xf3, 0xef, 0x0c, 0x38, 0xed, 0x8f, 0xdc, - 0x76, 0x3a, 0xd7, 0xe9, 0x7a, 0xcd, 0xb6, 0x37, 0x31, 0x2d, 0x53, 0x6b, 0x8b, 0x3a, 0x8b, 0x76, - 0x73, 0xc3, 0xaa, 0xa2, 0xd7, 0x61, 0xd4, 0xa5, 0x65, 0x87, 0xb2, 0xc9, 0x94, 0xdc, 0xe2, 0x61, - 0xad, 0x3f, 0x79, 0xa6, 0x36, 0x30, 0x4a, 0x2b, 0x76, 0x99, 0xd4, 0xaf, 0xae, 0x7f, 0x8b, 0x6a, - 0xd3, 0xae, 0xce, 0x58, 0xc9, 0x47, 0x81, 0x15, 0x36, 0x54, 0x80, 0xc9, 0x2d, 0xcb, 0xf1, 0xda, - 0xa4, 0x8e, 0x69, 0xcb, 0xd6, 0x66, 0xf6, 0xa4, 0x6c, 0x36, 0x79, 0x2d, 0x0c, 0xc6, 0xd1, 0xfa, - 0x66, 0x07, 0x66, 0x0a, 0x6d, 0xcf, 0x5e, 0x75, 0xec, 0x86, 0xcd, 0x26, 0xfb, 0x2a, 0x9f, 0x72, - 0x17, 0x11, 0x98, 0x74, 0x69, 0x9d, 0x96, 0xd9, 0xbf, 0x55, 0xbb, 0x6e, 0x95, 0xa5, 0x7c, 0x28, - 0x9e, 0xf3, 0x51, 0x97, 0xc2, 0xe0, 0xdb, 0xdb, 0xf3, 0xf7, 0x87, 0x30, 0x45, 0xe0, 0x38, 0x8a, - 0xcf, 0xbc, 0x09, 0x73, 0x85, 0x77, 0xdb, 0x0e, 0x3d, 0xea, 0x69, 0x33, 0xdf, 0x83, 0x53, 0x45, - 0xcb, 0x5b, 0x6f, 0x97, 0x37, 0xa9, 0x77, 0xe4, 0xc4, 0x7f, 0x07, 0x06, 0x17, 0x6b, 0xc4, 0xf1, - 0xd8, 0x8e, 0x76, 0x68, 0xcb, 0x7e, 0x0d, 0xaf, 0xc8, 0x99, 0x0d, 0x76, 0x34, 0x16, 0xc5, 0xd8, - 0x87, 0x27, 0xe0, 0xa5, 0xc9, 0x8f, 0x87, 0xf9, 0xcf, 0x06, 0xcc, 0xf0, 0x1e, 0x2c, 0x59, 0x6e, - 0xd9, 0xde, 0xa2, 0x4e, 0x07, 0x53, 0xb7, 0x5d, 0x3f, 0xe0, 0x0e, 0xb1, 0x53, 0x4f, 0x1b, 0x62, - 0x46, 0x5d, 0xcf, 0x21, 0x56, 0xd3, 0x93, 0x3d, 0x53, 0xa7, 0x3e, 0x02, 0xc7, 0x5d, 0x2d, 0xd0, - 0xc3, 0x30, 0x22, 0xbb, 0xcd, 0x38, 0x35, 0xe3, 0x5b, 0xfc, 0x28, 0xca, 0x31, 0xb9, 0x38, 0x80, - 0x9a, 0xbf, 0x36, 0x60, 0x9a, 0x8f, 0x4a, 0xe7, 0x25, 0xe8, 0x02, 0x4c, 0x54, 0xfc, 0x51, 0xae, - 0x58, 0x0d, 0x4b, 0x88, 0xeb, 0x6c, 0xf1, 0x1e, 0xd9, 0x87, 0x89, 0xa5, 0x10, 0x14, 0x47, 0x6a, - 0x27, 0x9b, 0x78, 0x7f, 0xd2, 0xb2, 0x7b, 0x4c, 0x5a, 0xdc, 0x94, 0x0c, 0xa4, 0x9d, 0x12, 0xf3, - 0x87, 0x19, 0x18, 0x5f, 0xac, 0xb7, 0x5d, 0x2f, 0xd8, 0xac, 0xdf, 0xd4, 0xf8, 0x9d, 0xd8, 0xab, - 0xbf, 0x95, 0x4c, 0x1b, 0x11, 0x1b, 0x97, 0xf1, 0x35, 0x25, 0xc5, 0x54, 0x99, 0xe2, 0x73, 0xe8, - 0x75, 0x18, 0x70, 0x5b, 0xb4, 0xcc, 0xa7, 0x21, 0x77, 0xe6, 0x5c, 0x32, 0x61, 0x19, 0xea, 0x64, - 0xa9, 0x45, 0xcb, 0x6a, 0xfe, 0xd8, 0x3f, 0xcc, 0x51, 0x22, 0x12, 0x88, 0xc1, 0x6c, 0x1a, 0x49, - 0x1c, 0x46, 0x2e, 0x24, 0xf1, 0x44, 0x58, 0x82, 0xfa, 0xb2, 0xd2, 0xfc, 0x47, 0xb6, 0x35, 0xf4, - 0xfa, 0x2b, 0x96, 0xeb, 0xa1, 0x37, 0xbb, 0x66, 0x2d, 0x9f, 0x6c, 0xd6, 0x58, 0x6b, 0x3e, 0x67, - 0x81, 0xc4, 0xf5, 0x4b, 0xb4, 0x19, 0xfb, 0x06, 0x0c, 0x5a, 0x1e, 0x6d, 0xf8, 0xe6, 0xc1, 0x93, - 0x7d, 0x8c, 0x4a, 0xe9, 0xbb, 0xcb, 0x0c, 0x13, 0x16, 0x08, 0xcd, 0x4f, 0xa3, 0xa3, 0x61, 0x93, - 0xc9, 0xac, 0x92, 0xa9, 0x9b, 0x61, 0x56, 0xe6, 0xdb, 0x43, 0x09, 0x15, 0xaa, 0x58, 0x46, 0xa8, - 0x76, 0x66, 0x04, 0xec, 0xe2, 0x2e, 0x72, 0xe6, 0xa7, 0x59, 0x38, 0x1e, 0xb3, 0x2e, 0xa8, 0x0c, - 0x50, 0xb6, 0x9b, 0x15, 0x4b, 0xd8, 0x4b, 0xa2, 0x53, 0x0b, 0xc9, 0xe6, 0x7a, 0xd1, 0x6f, 0xa7, - 0x36, 0x68, 0x50, 0xe4, 0x62, 0x0d, 0x2d, 0x7a, 0x09, 0x90, 0xbd, 0xce, 0xa5, 0x79, 0xe5, 0xb2, - 0x30, 0x4b, 0x7d, 0x5e, 0x98, 0x2d, 0xce, 0xc9, 0xb6, 0xe8, 0x6a, 0x57, 0x0d, 0x1c, 0xd3, 0x8a, - 0xe1, 0xaa, 0x13, 0xd7, 0xbb, 0x42, 0x9a, 0x95, 0x3a, 0xad, 0x60, 0xba, 0xe1, 0x50, 0xb7, 0x26, - 0x8f, 0x6a, 0x80, 0x6b, 0xa5, 0xab, 0x06, 0x8e, 0x69, 0x85, 0x3e, 0x88, 0x5b, 0x18, 0xb1, 0x29, - 0x9e, 0xef, 0x6b, 0x61, 0x96, 0xa8, 0x47, 0xac, 0xba, 0x9b, 0x6a, 0x65, 0x38, 0xcb, 0x17, 0x2b, - 0x13, 0x88, 0xe7, 0x35, 0xe2, 0x6e, 0xde, 0xad, 0xac, 0x23, 0xd4, 0xc9, 0x5e, 0xac, 0xc3, 0xfc, - 0x57, 0x03, 0x66, 0xe3, 0x46, 0x75, 0x04, 0xc7, 0xfb, 0xed, 0xf0, 0xf1, 0x7e, 0x36, 0xd5, 0xf1, - 0x0e, 0x75, 0xb6, 0xc7, 0x29, 0x7f, 0x03, 0xc6, 0x16, 0xdb, 0x8e, 0x43, 0x9b, 0x9e, 0xb0, 0x39, - 0x5f, 0x86, 0x41, 0xd7, 0x6a, 0x4a, 0xd3, 0x2b, 0x9d, 0xb9, 0x39, 0xca, 0x90, 0x97, 0x58, 0x63, - 0x2c, 0x70, 0x98, 0xff, 0x93, 0x85, 0xe3, 0xbe, 0xe0, 0xa3, 0x15, 0x5f, 0x81, 0x75, 0x51, 0x05, - 0xc6, 0x2a, 0xaa, 0xd8, 0x93, 0xca, 0x73, 0x1a, 0x5a, 0x81, 0x3d, 0xa0, 0xa1, 0xf7, 0x70, 0x08, - 0x2b, 0xba, 0x0e, 0xd9, 0x2a, 0x17, 0xc4, 0x6c, 0xe6, 0xce, 0x27, 0x9b, 0xb9, 0xcb, 0x56, 0x54, - 0x5b, 0x29, 0xe6, 0x24, 0xa9, 0xec, 0x65, 0xcb, 0xc3, 0x0c, 0x23, 0x5a, 0x87, 0x21, 0xab, 0x41, - 0xaa, 0x34, 0xe5, 0xaa, 0x2c, 0xb3, 0x36, 0x51, 0xec, 0x81, 0x2c, 0xe1, 0x50, 0x17, 0x4b, 0xcc, - 0x8c, 0x46, 0x99, 0x69, 0x19, 0xc2, 0x8c, 0x4a, 0xbe, 0xf2, 0x31, 0xfa, 0x96, 0xa2, 0xc1, 0xa1, - 0x2e, 0x96, 0x98, 0xd1, 0x37, 0x99, 0x4a, 0xc1, 0x6a, 0xb8, 0xb3, 0x83, 0x9c, 0xc8, 0xd9, 0x64, - 0x44, 0xa2, 0xf8, 0x35, 0x4d, 0x84, 0x63, 0xc3, 0x3e, 0x5a, 0xf3, 0x8b, 0x0c, 0x4c, 0xa9, 0x15, - 0x5a, 0xb4, 0x1b, 0x4c, 0xd7, 0x99, 0x83, 0x8c, 0x55, 0x91, 0x9a, 0x1f, 0xc8, 0xa6, 0x99, 0xe5, - 0x25, 0x9c, 0xb1, 0x2a, 0xe8, 0x21, 0x18, 0x5a, 0x77, 0x48, 0xb3, 0x5c, 0x93, 0x9a, 0x50, 0xd0, - 0xf5, 0x22, 0x2f, 0xc5, 0x12, 0x8a, 0x1e, 0x80, 0xac, 0x47, 0xaa, 0x52, 0x13, 0x0a, 0x56, 0x68, - 0x8d, 0x54, 0x31, 0x2b, 0x67, 0xca, 0x92, 0xdb, 0xe6, 0x5c, 0x42, 0x72, 0xd3, 0xa0, 0x8b, 0x25, - 0x51, 0x8c, 0x7d, 0x38, 0xa3, 0x48, 0xda, 0x5e, 0xcd, 0x76, 0x66, 0x07, 0xc3, 0x14, 0x0b, 0xbc, - 0x14, 0x4b, 0x28, 0x5a, 0x80, 0xd1, 0x32, 0xef, 0xbf, 0x47, 0x9d, 0xd9, 0xa1, 0xb0, 0x5f, 0x62, - 0xd1, 0x07, 0x60, 0x55, 0x07, 0xbd, 0x05, 0xb9, 0xb2, 0x43, 0x89, 0x67, 0x3b, 0x4b, 0xc4, 0xa3, - 0xb3, 0xc3, 0xa9, 0xf7, 0xf8, 0xe4, 0xce, 0xf6, 0x7c, 0x6e, 0x51, 0xa1, 0xc0, 0x3a, 0x3e, 0xf3, - 0xc3, 0x2c, 0xcc, 0xaa, 0xa9, 0xe5, 0xbb, 0x47, 0x19, 0xd1, 0x72, 0x7a, 0x8c, 0x1e, 0xd3, 0xf3, - 0x10, 0x0c, 0x55, 0xac, 0x2a, 0x75, 0xbd, 0xe8, 0x2c, 0x2f, 0xf1, 0x52, 0x2c, 0xa1, 0xe8, 0xbb, - 0x11, 0x17, 0xa4, 0xd8, 0x25, 0x57, 0xd3, 0xed, 0x92, 0x68, 0xe7, 0xfa, 0xf0, 0x43, 0xa2, 0xeb, - 0x30, 0xca, 0xc7, 0xde, 0x27, 0xb7, 0xe0, 0x3e, 0x88, 0x45, 0x1f, 0x01, 0x56, 0xb8, 0xf6, 0xed, - 0xa5, 0xfc, 0x07, 0x03, 0x26, 0xa3, 0xe6, 0xcd, 0x63, 0x52, 0x97, 0xcf, 0xee, 0xe1, 0x7b, 0x10, - 0x7a, 0xfd, 0x87, 0x06, 0x20, 0x12, 0xf5, 0x82, 0xf8, 0x9c, 0xe5, 0x5c, 0x52, 0x77, 0x51, 0xa4, - 0xbd, 0xd2, 0x1e, 0xba, 0x40, 0x2e, 0x8e, 0x21, 0xc7, 0x2c, 0xd5, 0x25, 0xbb, 0xbc, 0x49, 0x9d, - 0x2b, 0xed, 0xf5, 0x23, 0xb7, 0x54, 0xdf, 0x00, 0x74, 0xf1, 0x56, 0xcb, 0xa1, 0x2e, 0xb3, 0xb0, - 0xae, 0x11, 0xc7, 0x22, 0xeb, 0x75, 0x7a, 0x50, 0xde, 0xfc, 0xbf, 0x1e, 0x84, 0xe1, 0x4b, 0x0e, - 0xb5, 0xaa, 0x35, 0xef, 0x08, 0xb4, 0x90, 0xaf, 0xc0, 0x20, 0xa9, 0x5b, 0xc4, 0xe5, 0xc7, 0x5d, - 0xeb, 0x52, 0x81, 0x15, 0x62, 0x01, 0x43, 0x6f, 0xc0, 0x90, 0xed, 0x58, 0x55, 0xab, 0x39, 0x3b, - 0xca, 0x3b, 0x91, 0x50, 0x69, 0x97, 0xa3, 0xb8, 0xca, 0x9b, 0xaa, 0x33, 0x2b, 0xfe, 0x63, 0x89, - 0x12, 0xdd, 0x80, 0x61, 0xc1, 0x83, 0x7c, 0xc9, 0xb1, 0x90, 0x58, 0xf2, 0x09, 0x36, 0xa6, 0x78, - 0xa5, 0xf8, 0xef, 0x62, 0x1f, 0x21, 0x2a, 0x05, 0x82, 0x6f, 0x80, 0xa3, 0x7e, 0x34, 0x85, 0xe0, - 0xeb, 0x29, 0xe9, 0x4a, 0x81, 0xa4, 0x1b, 0x4c, 0x83, 0x94, 0xcb, 0xb2, 0x9e, 0xa2, 0xad, 0x06, - 0xa3, 0xfe, 0x2e, 0x77, 0x67, 0x61, 0x7f, 0x67, 0x29, 0xd8, 0xbc, 0x81, 0x02, 0x83, 0x15, 0x72, - 0xb6, 0x98, 0xd2, 0xae, 0x1c, 0xea, 0x63, 0x31, 0xf7, 0xb0, 0x28, 0x3f, 0xc9, 0xc2, 0xb4, 0xac, - 0xb9, 0x68, 0xd7, 0xa5, 0x57, 0x4b, 0x0a, 0xd0, 0x6c, 0xac, 0x00, 0xb5, 0x7c, 0x85, 0x51, 0xa8, - 0x3d, 0xc5, 0x54, 0xbd, 0x51, 0x34, 0xf2, 0x5c, 0x49, 0x14, 0xec, 0x39, 0xd8, 0x0f, 0xb2, 0x96, - 0x54, 0x1d, 0xd1, 0xef, 0x19, 0x70, 0x7c, 0x8b, 0x3a, 0xd6, 0x86, 0x55, 0xe6, 0xec, 0xf3, 0x8a, - 0xe5, 0x7a, 0xb6, 0xd3, 0x91, 0xac, 0xeb, 0xe9, 0x64, 0x94, 0xaf, 0x69, 0x08, 0x96, 0x9b, 0x1b, - 0x76, 0xf1, 0x3e, 0x49, 0xed, 0xf8, 0xb5, 0x6e, 0xd4, 0x38, 0x8e, 0xde, 0x5c, 0x0b, 0x40, 0xf5, - 0x36, 0x86, 0x7b, 0xaf, 0xe8, 0x6c, 0x22, 0x71, 0xc7, 0xfc, 0xc1, 0xfa, 0xdb, 0x40, 0xe7, 0xfa, - 0xaf, 0xc0, 0x49, 0x7f, 0xc6, 0x98, 0x24, 0xb1, 0xec, 0xe6, 0xa2, 0x63, 0x79, 0xd4, 0xb1, 0x08, - 0x3a, 0x03, 0x40, 0x03, 0x5e, 0x26, 0x79, 0x57, 0xc0, 0x32, 0x14, 0x97, 0xc3, 0x5a, 0x2d, 0xf3, - 0x47, 0x06, 0xe4, 0x24, 0xbe, 0x23, 0x30, 0x29, 0x70, 0xd8, 0xa4, 0x78, 0x3c, 0xd5, 0x74, 0xf4, - 0xb0, 0x22, 0x1c, 0x18, 0x0f, 0x71, 0x27, 0x74, 0x56, 0x46, 0xbb, 0xc4, 0x04, 0xfc, 0x86, 0x1e, - 0xed, 0xba, 0xbd, 0x3d, 0x3f, 0x1d, 0xaa, 0xac, 0x42, 0x60, 0x7b, 0xbb, 0xc1, 0x9e, 0x1d, 0xf9, - 0xe3, 0x3f, 0x9b, 0x3f, 0xf6, 0xfe, 0x2f, 0x4e, 0x1f, 0x33, 0xbf, 0x33, 0x00, 0x53, 0xd1, 0x45, - 0x4a, 0x20, 0x34, 0x14, 0xf3, 0x1d, 0x39, 0x54, 0xe6, 0x9b, 0x39, 0x3c, 0xe6, 0x9b, 0x3d, 0x0c, - 0xe6, 0x3b, 0x70, 0x48, 0xcc, 0x77, 0xf4, 0x10, 0x99, 0xaf, 0xf9, 0x4f, 0x06, 0x4c, 0x04, 0x7b, - 0xe0, 0x9d, 0x36, 0xd3, 0x59, 0xd5, 0xfa, 0x1a, 0x07, 0xbf, 0xbe, 0x6f, 0xc3, 0xb0, 0x6b, 0xb7, - 0x1d, 0xa1, 0xa0, 0x31, 0xec, 0x4f, 0xa5, 0xe3, 0xf6, 0xa2, 0xad, 0x66, 0x8d, 0x88, 0x02, 0xec, - 0x63, 0x35, 0x7f, 0x92, 0x0d, 0x06, 0x24, 0x61, 0x42, 0x59, 0x77, 0x98, 0x29, 0xc3, 0x06, 0x34, - 0xa2, 0x2b, 0xeb, 0xac, 0x14, 0x4b, 0x28, 0x32, 0xb9, 0x20, 0xf2, 0xad, 0xd2, 0xd1, 0x22, 0x48, - 0x79, 0xc2, 0x97, 0x5b, 0x40, 0x50, 0x0b, 0xa6, 0x1c, 0xfa, 0x4e, 0xdb, 0x72, 0x68, 0xa5, 0x64, - 0x93, 0x4d, 0xa6, 0x1c, 0x4b, 0x77, 0x68, 0x42, 0x0e, 0xb3, 0xd4, 0x16, 0xae, 0xab, 0xe2, 0x0c, - 0x53, 0x69, 0x71, 0x04, 0x17, 0xee, 0xc2, 0x8e, 0x6c, 0x98, 0x21, 0x5b, 0xc4, 0xaa, 0x93, 0x75, - 0xab, 0x6e, 0x79, 0x9d, 0x92, 0xe7, 0x10, 0x8f, 0x56, 0x3b, 0xd2, 0x2c, 0x7b, 0x4e, 0x8e, 0x65, - 0xa6, 0x10, 0x53, 0xe7, 0xf6, 0xf6, 0xfc, 0x7d, 0x72, 0x2e, 0xe2, 0xc0, 0x38, 0x16, 0x31, 0xfa, - 0xc8, 0x80, 0x19, 0x12, 0x13, 0x68, 0xe2, 0xe6, 0x5d, 0x62, 0x3b, 0x3a, 0x2e, 0x54, 0x55, 0x9c, - 0xe5, 0x3d, 0x8d, 0x81, 0xe0, 0x58, 0x8a, 0xe6, 0xcf, 0x86, 0x03, 0xb6, 0x28, 0x3d, 0x94, 0xef, - 0x41, 0xae, 0x2c, 0xbc, 0x2d, 0xf5, 0xce, 0x72, 0x53, 0x1e, 0xe4, 0xa5, 0x3e, 0x34, 0x86, 0xfc, - 0xa2, 0x42, 0x13, 0x31, 0xa2, 0x34, 0x08, 0xd6, 0xa9, 0xa1, 0x9b, 0x00, 0x42, 0x7c, 0xd2, 0xca, - 0x72, 0x53, 0xea, 0x07, 0x8b, 0xfd, 0xd0, 0xbe, 0x16, 0x60, 0x11, 0xa4, 0x03, 0xf9, 0xa6, 0x00, - 0x58, 0x23, 0xc5, 0x46, 0xed, 0x67, 0x1e, 0x5c, 0xb2, 0x1d, 0xc9, 0x19, 0xfb, 0x1a, 0x75, 0x41, - 0xa1, 0x89, 0x9a, 0x8e, 0x0a, 0x82, 0x75, 0x6a, 0xc8, 0x0e, 0x05, 0x69, 0x19, 0xe5, 0x42, 0x3f, - 0x94, 0xfd, 0xa0, 0xac, 0x20, 0x1b, 0xc8, 0xd7, 0xee, 0x58, 0xed, 0x9c, 0x03, 0x53, 0xd1, 0xc5, - 0x89, 0x51, 0x4a, 0xae, 0x84, 0x95, 0x92, 0x33, 0x09, 0xf9, 0xae, 0xe6, 0xaa, 0xd3, 0x93, 0x6d, - 0x1c, 0x98, 0x8c, 0x2c, 0x4a, 0x0c, 0xc9, 0xe5, 0x30, 0xc9, 0x27, 0xd3, 0x28, 0x68, 0x32, 0x25, - 0x45, 0xa7, 0xe9, 0xc2, 0x54, 0x74, 0x39, 0x0e, 0x8c, 0x68, 0x28, 0x0f, 0x46, 0x27, 0xfa, 0x1e, - 0x8c, 0x87, 0x56, 0x22, 0x86, 0xe2, 0x5a, 0x98, 0xe2, 0x3e, 0x43, 0xf2, 0xba, 0xda, 0xf7, 0xeb, - 0x2c, 0xcc, 0x70, 0xef, 0xbd, 0x55, 0x96, 0x36, 0x72, 0x41, 0x28, 0xe4, 0x97, 0x60, 0x88, 0xf0, - 0x5f, 0x52, 0xef, 0xc8, 0xfb, 0x07, 0x42, 0xc0, 0xd7, 0x3a, 0x2d, 0x7a, 0x7b, 0x7b, 0x7e, 0x36, - 0xae, 0x2d, 0xcf, 0x63, 0x90, 0xad, 0xd1, 0x05, 0x98, 0xb8, 0x59, 0xa3, 0x4d, 0xa5, 0x26, 0x4a, - 0x45, 0x28, 0x88, 0x22, 0x5e, 0x0f, 0x41, 0x71, 0xa4, 0x36, 0xfa, 0x36, 0x40, 0x8b, 0x38, 0xa4, - 0x41, 0x3d, 0xea, 0xf8, 0x6a, 0x42, 0xc2, 0x84, 0xb1, 0xb8, 0xbe, 0xe5, 0x57, 0x03, 0x64, 0x91, - 0x83, 0xae, 0x00, 0x58, 0xa3, 0x88, 0xbe, 0x6b, 0xc0, 0xb0, 0x47, 0x9c, 0x2a, 0x0d, 0xf4, 0x89, - 0x97, 0xfb, 0xa1, 0xbe, 0xc6, 0x51, 0x04, 0x61, 0x7d, 0x5f, 0xb7, 0x2e, 0xce, 0x4b, 0xf2, 0x27, - 0x7b, 0x54, 0xc0, 0x3e, 0xf1, 0xb9, 0x17, 0x60, 0x32, 0xd2, 0xf7, 0x54, 0x5e, 0x9d, 0x5f, 0x1a, - 0x70, 0x7f, 0xb8, 0x4b, 0x47, 0x97, 0x6a, 0x41, 0x61, 0x58, 0xec, 0x86, 0x94, 0xde, 0xe5, 0xb8, - 0x05, 0x54, 0x8a, 0x86, 0xf8, 0xef, 0x62, 0x1f, 0xb7, 0xf9, 0xef, 0x19, 0xf8, 0x6a, 0xa2, 0x59, - 0x47, 0xcf, 0x87, 0x54, 0xf9, 0x87, 0x23, 0xaa, 0xfc, 0x6c, 0x1c, 0x92, 0x34, 0x1a, 0x3d, 0x6a, - 0xc1, 0x38, 0xcf, 0x78, 0x14, 0x94, 0x6d, 0x47, 0x2a, 0x24, 0x4f, 0x26, 0x34, 0x79, 0xf4, 0xa6, - 0xc5, 0x13, 0x12, 0xff, 0x78, 0xa8, 0x18, 0x87, 0x09, 0x30, 0x8a, 0x56, 0xb3, 0x42, 0x6f, 0x05, - 0x14, 0x07, 0xd2, 0xf0, 0xa6, 0x65, 0xbd, 0xa9, 0xa2, 0x18, 0x2a, 0xc6, 0x61, 0x02, 0xe6, 0x9f, - 0x66, 0x60, 0x34, 0xd0, 0xf1, 0xd3, 0xe4, 0x3f, 0x08, 0x53, 0x3f, 0xb3, 0x87, 0xaf, 0x3c, 0x9b, - 0xc4, 0x57, 0x3e, 0xd0, 0xdb, 0x57, 0xee, 0xe7, 0xeb, 0x0d, 0xed, 0x9e, 0xaf, 0xa7, 0xf9, 0xca, - 0x87, 0x93, 0xfb, 0xca, 0x47, 0xf6, 0xf6, 0x95, 0x9b, 0x7f, 0x6e, 0x00, 0xea, 0x0e, 0xbd, 0xa4, - 0x99, 0x28, 0x12, 0xb5, 0xbc, 0x9e, 0x4e, 0xeb, 0xa5, 0xde, 0xcb, 0x00, 0x33, 0x6f, 0xc1, 0x7d, - 0x97, 0x2d, 0xef, 0x4e, 0x38, 0x48, 0x05, 0xe5, 0x15, 0x72, 0xf4, 0x94, 0x3f, 0x1a, 0x86, 0xc9, - 0xcb, 0x56, 0x38, 0xd7, 0x65, 0x01, 0x46, 0x49, 0xbd, 0x6e, 0xdf, 0x5c, 0x23, 0x55, 0x37, 0x9a, - 0xa1, 0x59, 0xf0, 0x01, 0x58, 0xd5, 0x41, 0x2f, 0xc2, 0x54, 0xf0, 0x07, 0xd3, 0x2a, 0xbd, 0x15, - 0xd8, 0x28, 0xdc, 0x8a, 0x28, 0x44, 0x60, 0xb8, 0xab, 0x76, 0xe2, 0xad, 0xee, 0xc1, 0x49, 0xb1, - 0x5a, 0x01, 0x1b, 0x8b, 0x18, 0x1c, 0xcf, 0xfa, 0x22, 0x64, 0x31, 0xbe, 0xda, 0xed, 0xde, 0x20, - 0xdc, 0x0b, 0x75, 0x4c, 0xf2, 0xcf, 0x60, 0xaa, 0xe4, 0x9f, 0xa7, 0x60, 0x8c, 0xde, 0x2a, 0xd7, - 0xdb, 0x15, 0xba, 0x4a, 0xbc, 0x9a, 0x3b, 0x3b, 0xc4, 0xe7, 0x66, 0x6a, 0x67, 0x7b, 0x7e, 0xec, - 0xa2, 0x56, 0x8e, 0x43, 0xb5, 0xd0, 0x12, 0x4c, 0x29, 0x1f, 0xd2, 0x25, 0xab, 0xce, 0xce, 0xda, - 0x70, 0x38, 0xe4, 0x70, 0x31, 0x02, 0xc7, 0x5d, 0x2d, 0x50, 0x1e, 0xc0, 0xaa, 0x36, 0x6d, 0x87, - 0xf2, 0xd5, 0x1c, 0xe1, 0x94, 0x79, 0xde, 0xf0, 0x72, 0x50, 0x8a, 0xb5, 0x1a, 0x68, 0x11, 0xa6, - 0xd5, 0x3f, 0x7f, 0x31, 0x47, 0x79, 0xb3, 0x13, 0x3b, 0xdb, 0xf3, 0xd3, 0xcb, 0x51, 0x20, 0xee, - 0xae, 0xcf, 0x06, 0x6c, 0x35, 0xb5, 0x01, 0x83, 0x1a, 0xf0, 0x72, 0x53, 0x1f, 0xb0, 0x5e, 0x0b, - 0x95, 0xe0, 0x84, 0xd5, 0x74, 0x69, 0xb9, 0xed, 0xd0, 0xd2, 0xa6, 0xd5, 0x5a, 0x5b, 0x29, 0x71, - 0xdd, 0xb4, 0x33, 0x9b, 0xe3, 0x76, 0xf1, 0x03, 0x72, 0xd4, 0x27, 0x96, 0xe3, 0x2a, 0xe1, 0xf8, - 0xb6, 0x3a, 0x8b, 0x19, 0xeb, 0x23, 0xad, 0x6a, 0x3c, 0x75, 0xa6, 0xd9, 0x39, 0x18, 0x77, 0x3d, - 0xc7, 0x2a, 0x7b, 0xa2, 0xae, 0x3b, 0x3b, 0xc1, 0x7b, 0x3f, 0xcd, 0x64, 0x48, 0x49, 0x07, 0xe0, - 0x70, 0x3d, 0xf3, 0x26, 0xcc, 0x5d, 0xb6, 0x3c, 0x4a, 0xee, 0x04, 0xf7, 0xb9, 0x42, 0x9c, 0x75, - 0xdb, 0x39, 0x72, 0xca, 0xdf, 0xcf, 0xc0, 0x90, 0x48, 0xb0, 0x46, 0x67, 0x23, 0x59, 0xcc, 0x0f, - 0x74, 0x65, 0x31, 0xe7, 0xe2, 0x92, 0xd1, 0x4d, 0x18, 0xb2, 0x5c, 0xb7, 0x1d, 0x76, 0x8a, 0x2c, - 0xf3, 0x12, 0x2c, 0x21, 0x3c, 0xd4, 0xce, 0x87, 0x72, 0x40, 0x49, 0xbc, 0x9c, 0x86, 0x98, 0x1c, - 0x2c, 0x31, 0x33, 0x1a, 0x76, 0xdb, 0x6b, 0xb5, 0x3d, 0xe9, 0x86, 0x38, 0x10, 0x1a, 0x57, 0x39, - 0x46, 0x2c, 0x31, 0x9b, 0x9f, 0x1a, 0x30, 0x29, 0xe6, 0x60, 0xb1, 0x46, 0xcb, 0x9b, 0x25, 0x8f, - 0xb6, 0x98, 0xfa, 0xd5, 0x76, 0xa9, 0x1b, 0xf5, 0x87, 0xbe, 0xe6, 0x52, 0x17, 0x73, 0x88, 0x36, - 0xfa, 0xcc, 0x61, 0x8d, 0xde, 0x3c, 0x0f, 0xda, 0xe2, 0xf0, 0x1b, 0x02, 0x22, 0x51, 0xbe, 0x23, - 0xb3, 0x24, 0x83, 0x33, 0x27, 0x6a, 0x75, 0xb0, 0x0f, 0x37, 0x7f, 0x90, 0x81, 0x41, 0xee, 0xb2, - 0x4c, 0xa3, 0x0b, 0xec, 0x91, 0x1c, 0xa0, 0xa2, 0xdf, 0x03, 0xbb, 0x46, 0xbf, 0xdd, 0xb8, 0xe0, - 0xf7, 0xf3, 0x29, 0xbc, 0xae, 0xfd, 0xdc, 0xb8, 0xd9, 0x6f, 0x40, 0xfa, 0x57, 0x06, 0xcc, 0xc4, - 0x25, 0x9a, 0xa4, 0x99, 0xbf, 0xc7, 0x60, 0xa4, 0x55, 0x27, 0xde, 0x86, 0xed, 0x34, 0xa2, 0x39, - 0xff, 0xab, 0xb2, 0x1c, 0x07, 0x35, 0x90, 0x03, 0xe0, 0xa8, 0xb8, 0xb5, 0x30, 0x3a, 0x2f, 0xec, - 0x2f, 0x45, 0x40, 0x19, 0x9a, 0x5a, 0xd8, 0x5a, 0xa3, 0x62, 0xfe, 0xd7, 0x20, 0x4c, 0xf3, 0x26, - 0x77, 0x5a, 0x31, 0x39, 0x03, 0x50, 0x26, 0xe5, 0x1a, 0x2d, 0x76, 0xd6, 0xe4, 0x8e, 0x1b, 0xd1, - 0x32, 0x08, 0x03, 0x08, 0xd6, 0x6a, 0xf1, 0x36, 0xd1, 0xc4, 0x5c, 0x3d, 0xeb, 0xd0, 0x97, 0x1d, - 0x5a, 0xad, 0x7d, 0xab, 0x18, 0x61, 0x31, 0x3f, 0xd4, 0x9f, 0x98, 0x1f, 0x4e, 0x29, 0xe6, 0x5b, - 0x70, 0x0f, 0x0f, 0x33, 0x74, 0x2b, 0x63, 0xc2, 0x26, 0x38, 0x2f, 0x3b, 0x7f, 0xcf, 0x72, 0x6c, - 0xad, 0xdb, 0x3d, 0x21, 0xb8, 0x07, 0xde, 0xde, 0x2a, 0xc2, 0xe8, 0x3e, 0x54, 0x04, 0xfd, 0x38, - 0xc0, 0x9e, 0xc7, 0x41, 0x3b, 0x67, 0xb9, 0x3d, 0xce, 0x59, 0x97, 0x2a, 0x30, 0x96, 0x50, 0x15, - 0xf8, 0x7d, 0x03, 0xc2, 0xf6, 0x26, 0xba, 0x05, 0x63, 0x0d, 0xe2, 0x95, 0x6b, 0xcb, 0xcd, 0x8a, - 0x55, 0xa6, 0x7e, 0xf4, 0xf7, 0x42, 0x1f, 0x16, 0xad, 0xf4, 0xe9, 0x37, 0x68, 0xd3, 0x53, 0x59, - 0x76, 0xaf, 0x68, 0xb8, 0x71, 0x88, 0x92, 0xf9, 0x17, 0x06, 0xcc, 0xf6, 0x42, 0xc0, 0x38, 0x71, - 0xc0, 0xb9, 0x14, 0x27, 0x7e, 0x99, 0x76, 0x04, 0x1b, 0xbb, 0x08, 0x23, 0x76, 0x8b, 0x3a, 0xc4, - 0xe3, 0x5e, 0x61, 0x56, 0xe7, 0x11, 0x7f, 0x66, 0xaf, 0xca, 0xf2, 0xdb, 0x7c, 0xb5, 0x34, 0xf4, - 0x3e, 0x00, 0x07, 0x4d, 0x55, 0x1e, 0x48, 0x76, 0x97, 0x3c, 0x90, 0xcf, 0x0c, 0x18, 0x5e, 0x75, - 0x6c, 0x9e, 0xf3, 0x75, 0xf8, 0x79, 0x20, 0x6f, 0x44, 0xb2, 0xcd, 0x9f, 0x4c, 0x9c, 0x8f, 0xca, - 0x90, 0xed, 0x91, 0x15, 0xf0, 0xc3, 0x0c, 0x8c, 0xcb, 0x9a, 0x77, 0x77, 0x66, 0x7e, 0xa8, 0x93, - 0x07, 0x9d, 0x99, 0x1f, 0x46, 0xbe, 0x77, 0x66, 0x7e, 0xa8, 0xfe, 0x5d, 0x9b, 0x99, 0x1f, 0xea, - 0x65, 0xaf, 0xcc, 0xfc, 0x4c, 0x64, 0x34, 0x3c, 0x33, 0xff, 0xdb, 0x30, 0xdd, 0xf2, 0x23, 0x50, - 0xfc, 0xe2, 0x93, 0x15, 0xf0, 0x81, 0xb3, 0x29, 0xb3, 0xa1, 0xc5, 0xbd, 0xa9, 0xe2, 0xbd, 0x92, - 0xfa, 0xf4, 0x6a, 0x14, 0x2f, 0xee, 0x26, 0x15, 0x7f, 0x33, 0x20, 0x73, 0xf4, 0x37, 0x03, 0x62, - 0xf6, 0xc5, 0xff, 0xdf, 0x0c, 0xb8, 0xe3, 0x37, 0x03, 0x7e, 0x64, 0x40, 0x4e, 0xae, 0xcc, 0x5d, - 0x9b, 0xe3, 0x22, 0xfb, 0xd7, 0xe3, 0xd4, 0x7d, 0x6e, 0xc0, 0x98, 0xc6, 0x9f, 0x5d, 0x54, 0x03, - 0xb8, 0x49, 0x1c, 0x5a, 0xb3, 0x03, 0x0b, 0x2b, 0x71, 0x3e, 0xc0, 0x75, 0xbf, 0x1d, 0xc7, 0xa4, - 0x76, 0x56, 0x50, 0xee, 0x62, 0x0d, 0x37, 0xfa, 0x86, 0x16, 0xda, 0x17, 0xcc, 0x3d, 0x11, 0x15, - 0x1e, 0x3d, 0x13, 0x14, 0x74, 0xc6, 0xa8, 0x25, 0x04, 0x98, 0x3f, 0x36, 0x02, 0x51, 0x12, 0x7b, - 0x54, 0xb2, 0x87, 0x73, 0x54, 0x4a, 0x30, 0xc8, 0x38, 0xb3, 0x7f, 0x2b, 0xfa, 0x4c, 0x6a, 0xe9, - 0xe8, 0xca, 0xdb, 0x06, 0xec, 0x27, 0x16, 0xb8, 0xcc, 0xef, 0x65, 0x60, 0x34, 0xe0, 0x54, 0x47, - 0x20, 0x12, 0x5f, 0x0b, 0x89, 0xc4, 0x27, 0x53, 0xf2, 0xd8, 0x9e, 0xe2, 0xf0, 0xad, 0x88, 0x38, - 0x4c, 0xcb, 0xbc, 0xf7, 0x10, 0x85, 0x7f, 0x2f, 0x56, 0x5c, 0xd4, 0x3d, 0x82, 0xa3, 0xb8, 0x16, - 0x3e, 0x8a, 0x0b, 0x29, 0x47, 0xd3, 0xe3, 0x30, 0xbe, 0x9f, 0x81, 0xc9, 0x88, 0xb8, 0x62, 0x6a, - 0x20, 0xdf, 0xd5, 0x52, 0xdd, 0x0c, 0x1a, 0xca, 0x20, 0x32, 0x87, 0xa1, 0x2d, 0xa6, 0x73, 0x07, - 0xb6, 0x43, 0x10, 0x6d, 0x7a, 0xa1, 0x2f, 0x09, 0x19, 0x44, 0x81, 0xa4, 0xca, 0xae, 0xe1, 0xc5, - 0x61, 0x32, 0x68, 0x35, 0x92, 0x95, 0x72, 0xb1, 0x49, 0xd6, 0xeb, 0x54, 0x84, 0x76, 0x46, 0x8a, - 0xf7, 0x07, 0x79, 0x30, 0x31, 0x75, 0x70, 0x6c, 0x4b, 0xf3, 0xaf, 0x0c, 0x38, 0xd9, 0xa3, 0x3f, - 0x09, 0xd2, 0xe0, 0xea, 0xd1, 0xa8, 0x5b, 0xa6, 0xff, 0xa8, 0xdb, 0xf4, 0x5e, 0x11, 0x37, 0xf3, - 0xa7, 0x19, 0x40, 0x41, 0x5f, 0xd3, 0x64, 0xeb, 0xbd, 0x05, 0xc3, 0x1b, 0x22, 0x0f, 0x63, 0x7f, - 0xd9, 0x9b, 0xc5, 0x9c, 0x9e, 0xc0, 0xea, 0xe3, 0x44, 0xaf, 0x1f, 0xcc, 0x59, 0x83, 0xee, 0x73, - 0x86, 0x6e, 0x00, 0x6c, 0x58, 0x4d, 0xcb, 0xad, 0xf5, 0x79, 0x67, 0x81, 0x5b, 0xe7, 0x97, 0x02, - 0x0c, 0x58, 0xc3, 0x66, 0xfe, 0x51, 0x46, 0x3b, 0xc3, 0x5c, 0xf9, 0x4b, 0xb4, 0xf7, 0x1f, 0x09, - 0x4f, 0xe6, 0x68, 0x77, 0x66, 0x6f, 0x30, 0x31, 0x37, 0x60, 0x60, 0x8b, 0x38, 0x7e, 0x14, 0x3f, - 0xe1, 0xe5, 0xa9, 0xee, 0x24, 0x7e, 0xb5, 0xa6, 0xd7, 0x88, 0xe3, 0x62, 0x8e, 0x93, 0x29, 0xc6, - 0xae, 0x47, 0x5b, 0xbe, 0x70, 0x49, 0xcd, 0x38, 0x3d, 0xda, 0xd2, 0x07, 0x48, 0x5b, 0x5c, 0x02, - 0xd0, 0x96, 0x6b, 0xfe, 0xc7, 0xb0, 0xc6, 0x15, 0xa4, 0x3c, 0x3b, 0x48, 0x4d, 0xea, 0xac, 0xff, - 0x4e, 0x8c, 0x98, 0xe5, 0xf9, 0xd0, 0x3b, 0x31, 0xb7, 0xb7, 0xe7, 0x27, 0xd4, 0x79, 0xd4, 0x5e, - 0x8e, 0x49, 0xf1, 0x22, 0x8a, 0xbe, 0xdf, 0x07, 0x0f, 0x61, 0xbf, 0xff, 0x36, 0x4c, 0x6f, 0x44, - 0x53, 0xbd, 0xe5, 0xcd, 0xa4, 0x73, 0x7d, 0x66, 0x8a, 0x0b, 0x7f, 0x50, 0x57, 0x31, 0xee, 0x26, - 0x84, 0x6c, 0xff, 0x1d, 0x16, 0xee, 0x9f, 0x16, 0xd1, 0xa6, 0xc4, 0x67, 0x2e, 0xe2, 0xd9, 0x8e, - 0xbe, 0xc0, 0x22, 0x50, 0xe2, 0x10, 0x01, 0x74, 0x1d, 0x46, 0x5d, 0x8f, 0x38, 0xe2, 0xda, 0xd0, - 0x58, 0x7f, 0xd7, 0x86, 0x4a, 0x3e, 0x02, 0xac, 0x70, 0x45, 0x0e, 0xf7, 0xd0, 0x41, 0x1e, 0x6e, - 0x74, 0x36, 0xc8, 0x11, 0x64, 0xe3, 0xe4, 0x9e, 0xab, 0x6c, 0x57, 0x76, 0x1f, 0x03, 0x61, 0xbd, - 0x1e, 0xfa, 0xd8, 0x80, 0x13, 0xec, 0x14, 0x5c, 0xbc, 0x45, 0xcb, 0x6d, 0x36, 0xdd, 0x7e, 0x9e, - 0xd4, 0x6c, 0x2e, 0x8d, 0x0d, 0x56, 0x8a, 0x43, 0xa1, 0x1c, 0x67, 0xb1, 0x60, 0x1c, 0x4f, 0x18, - 0xbd, 0x2d, 0xb4, 0x3c, 0xca, 0xbd, 0x66, 0xfb, 0x8f, 0x2c, 0x04, 0x1a, 0x9f, 0x60, 0x68, 0x1e, - 0x35, 0xbf, 0x37, 0xa0, 0xf3, 0xc1, 0x64, 0xf1, 0x8e, 0x1b, 0x30, 0xe0, 0x11, 0x77, 0x53, 0x1e, - 0xaf, 0xe7, 0xfb, 0xb8, 0x27, 0xac, 0x0e, 0xd9, 0x08, 0xc3, 0xcd, 0x8b, 0x38, 0x4e, 0x34, 0x07, - 0x19, 0xe2, 0x46, 0xb3, 0x35, 0x0a, 0x2e, 0xce, 0x10, 0x97, 0x67, 0x72, 0x6c, 0xc8, 0x00, 0xad, - 0xca, 0xe4, 0xd8, 0xc0, 0x19, 0x8b, 0x3f, 0xaf, 0x52, 0xb6, 0x9b, 0x9e, 0xd5, 0x6c, 0xd3, 0xab, - 0xcd, 0x8b, 0x8e, 0x63, 0x8b, 0xac, 0x89, 0x11, 0xf5, 0xbc, 0xca, 0x62, 0x18, 0x8c, 0xa3, 0xf5, - 0xd1, 0xeb, 0x30, 0xe8, 0x50, 0xcf, 0xe9, 0x48, 0x49, 0x73, 0xbe, 0x0f, 0xa6, 0x8a, 0x59, 0x7b, - 0x31, 0xcb, 0xfc, 0x27, 0x16, 0x18, 0x03, 0x59, 0x30, 0x74, 0x08, 0xb2, 0x40, 0x45, 0x9f, 0xb2, - 0x87, 0x16, 0x7d, 0xfa, 0xbe, 0xa1, 0x29, 0x1f, 0xc1, 0x40, 0xd1, 0x6b, 0x30, 0xec, 0x59, 0x0d, - 0x6a, 0xb7, 0xbd, 0x74, 0x5a, 0x6f, 0x90, 0x02, 0xcd, 0x59, 0xec, 0x9a, 0x40, 0x81, 0x7d, 0x5c, - 0xe8, 0x02, 0x4c, 0x50, 0xb6, 0x22, 0x6b, 0x35, 0x26, 0x32, 0xec, 0xba, 0x50, 0xf1, 0xc6, 0x95, - 0xa7, 0xfe, 0x62, 0x08, 0x8a, 0x23, 0xb5, 0xcd, 0x9f, 0xea, 0xfa, 0xf9, 0xff, 0xfd, 0xbb, 0xf3, - 0xd2, 0xf3, 0x76, 0xa4, 0x97, 0xe6, 0xfb, 0xf6, 0xbc, 0xed, 0x79, 0x5b, 0xfe, 0x4d, 0xb8, 0x27, - 0x9e, 0x15, 0x1c, 0xc8, 0x03, 0x70, 0x3f, 0x8e, 0xce, 0x15, 0x57, 0xed, 0xfc, 0xe3, 0x67, 0x1c, - 0xa6, 0x2a, 0x96, 0x39, 0x68, 0x55, 0xcc, 0xd1, 0x87, 0x22, 0x9f, 0xcb, 0x43, 0x6f, 0xc9, 0x7d, - 0x66, 0xa4, 0x79, 0x80, 0xad, 0x0b, 0x4d, 0xcf, 0xbd, 0xf6, 0x33, 0x03, 0x4e, 0xc4, 0xd6, 0x0e, - 0xe6, 0x30, 0x73, 0x98, 0x73, 0x68, 0x1c, 0xf4, 0x1c, 0x6e, 0xc1, 0xbd, 0x5f, 0x6f, 0x93, 0x23, - 0x7f, 0xed, 0xcb, 0xfc, 0x20, 0x0b, 0x53, 0x98, 0xb6, 0xec, 0x50, 0x70, 0x75, 0xd5, 0x7f, 0x4d, - 0x21, 0x85, 0x9d, 0x14, 0xc9, 0x1c, 0x2b, 0x0e, 0x87, 0x9e, 0x51, 0x60, 0xc7, 0xb4, 0xe1, 0x2b, - 0xc5, 0x89, 0xd9, 0x4e, 0x57, 0xd8, 0x57, 0x48, 0x2c, 0x11, 0x40, 0x16, 0x08, 0x19, 0x66, 0x7e, - 0x15, 0x49, 0x0a, 0x95, 0x73, 0x29, 0x2e, 0x35, 0x75, 0x63, 0xe6, 0xc5, 0x58, 0x20, 0x44, 0x35, - 0x18, 0xd3, 0x5f, 0x8c, 0x4b, 0xe7, 0xbf, 0x0a, 0xe1, 0xe6, 0xd9, 0x4e, 0x7a, 0x09, 0x0e, 0x61, - 0x36, 0x3f, 0xcd, 0x80, 0xb0, 0xde, 0x8e, 0x80, 0xff, 0x7f, 0x3d, 0xc4, 0xff, 0x17, 0xd2, 0x78, - 0x17, 0x7b, 0x79, 0xb1, 0xa2, 0x96, 0xf5, 0x13, 0x29, 0x5d, 0x96, 0xbb, 0x78, 0xb0, 0xfe, 0xc6, - 0x80, 0x51, 0x5e, 0xef, 0x08, 0x44, 0xc9, 0x6a, 0x58, 0x94, 0x3c, 0x9a, 0x62, 0x14, 0x3d, 0x44, - 0xc8, 0x7f, 0x66, 0x65, 0xef, 0x03, 0xbb, 0xbd, 0x46, 0x9c, 0x8a, 0x34, 0x48, 0x15, 0x1f, 0x60, - 0x85, 0x58, 0xc0, 0x02, 0xee, 0x35, 0x7c, 0x08, 0xdc, 0xeb, 0x5d, 0x71, 0x23, 0x8c, 0xba, 0x1e, - 0xad, 0x5c, 0x0a, 0x2c, 0xcf, 0x6c, 0xea, 0xab, 0x6d, 0xf2, 0xfa, 0x9d, 0x8a, 0x09, 0xe0, 0x08, - 0x56, 0xdc, 0x45, 0x87, 0x59, 0xa3, 0xad, 0x28, 0xbb, 0x96, 0xc6, 0xd4, 0xb9, 0x3e, 0x65, 0x83, - 0xb0, 0x46, 0xbb, 0x8a, 0x71, 0x37, 0x21, 0x76, 0x94, 0xf5, 0xdb, 0xc4, 0x72, 0x9f, 0x9e, 0x49, - 0x7f, 0x6d, 0x59, 0x1c, 0x65, 0xbd, 0x04, 0x87, 0x30, 0x9b, 0x7f, 0x60, 0x00, 0x28, 0x5f, 0x3c, - 0x5b, 0xf3, 0xb2, 0xdd, 0x6e, 0x0a, 0x27, 0x4c, 0x56, 0xad, 0xf9, 0x22, 0x2b, 0xc4, 0x02, 0xc6, - 0xce, 0x8f, 0x30, 0x65, 0xe5, 0xa6, 0x7e, 0x22, 0x8d, 0x95, 0x1c, 0xf1, 0xf9, 0x8b, 0x42, 0x2c, - 0x11, 0x9a, 0x7f, 0x3b, 0x02, 0x39, 0xed, 0x9c, 0x45, 0x3c, 0xfe, 0xe3, 0x87, 0x16, 0x1c, 0x8b, - 0x71, 0xc3, 0xe4, 0xfa, 0x72, 0xc3, 0xb8, 0x30, 0x21, 0x9d, 0x0b, 0xfe, 0x95, 0xf3, 0x81, 0x34, - 0x97, 0x4c, 0xbb, 0x5d, 0x18, 0x88, 0xe9, 0xe5, 0x97, 0x42, 0x28, 0x71, 0x84, 0x04, 0xd3, 0xeb, - 0x65, 0x49, 0xa9, 0xdd, 0x68, 0x10, 0xa7, 0x23, 0xf3, 0x45, 0x03, 0xbd, 0xfe, 0x52, 0x08, 0x8a, - 0x23, 0xb5, 0xd1, 0x6a, 0xb0, 0xa0, 0xe2, 0xde, 0xf1, 0x63, 0x69, 0x16, 0x54, 0xd8, 0x35, 0xe1, - 0x75, 0xec, 0x11, 0x6f, 0x1c, 0xea, 0x2b, 0xde, 0xf8, 0x2e, 0x4c, 0x49, 0x67, 0x42, 0x70, 0x76, - 0xa4, 0x5f, 0x28, 0xad, 0x25, 0xa9, 0x94, 0x0c, 0x9e, 0x43, 0xb5, 0x18, 0xc1, 0x8a, 0xbb, 0xe8, - 0xa0, 0x77, 0x60, 0x9c, 0x2d, 0xb2, 0x22, 0x0c, 0xfb, 0x24, 0x2c, 0xfd, 0xd1, 0x1a, 0x4a, 0x1c, - 0xa6, 0xd0, 0xd3, 0x1b, 0x3f, 0xd1, 0xaf, 0x37, 0x1e, 0x35, 0x34, 0x31, 0x34, 0xc9, 0x77, 0xe3, - 0xd7, 0x52, 0x4b, 0xbc, 0x14, 0x97, 0x0c, 0xef, 0xe8, 0x3d, 0xb8, 0xcf, 0xb3, 0x10, 0xef, 0x08, - 0x52, 0xcf, 0x9f, 0x18, 0xbb, 0x3c, 0x7f, 0x12, 0xf2, 0xca, 0x65, 0x0e, 0xcd, 0x2b, 0x97, 0x3d, - 0x50, 0xaf, 0xdc, 0x19, 0x00, 0x6e, 0xa8, 0x73, 0x26, 0xcd, 0xa5, 0xf5, 0xb8, 0xf6, 0xae, 0x43, - 0x00, 0xc1, 0x5a, 0x2d, 0xf4, 0x42, 0xa0, 0x03, 0x89, 0xa7, 0xa5, 0xbe, 0xda, 0x95, 0xb3, 0x7c, - 0x3c, 0x64, 0x06, 0x44, 0x22, 0x08, 0x29, 0x2e, 0xe6, 0xc4, 0x38, 0x90, 0x86, 0xd3, 0x39, 0x90, - 0xcc, 0x3f, 0xc9, 0x40, 0x48, 0x1d, 0x8d, 0x3e, 0xa7, 0xac, 0x3d, 0xc6, 0x1c, 0xfb, 0xa4, 0x11, - 0xbf, 0xc8, 0xd8, 0xd5, 0x22, 0xc1, 0xfd, 0xaf, 0x23, 0x70, 0x01, 0xc5, 0xa4, 0x4f, 0xb2, 0x15, - 0x1c, 0x4c, 0x9a, 0x3e, 0x69, 0xfe, 0x77, 0x06, 0x42, 0x02, 0x1e, 0x7d, 0x64, 0xc0, 0x34, 0x89, - 0xbc, 0x06, 0xef, 0x5b, 0x80, 0x5f, 0x4b, 0xf7, 0x44, 0x7f, 0xd7, 0x63, 0xf2, 0x2a, 0xef, 0x26, - 0x5a, 0xc5, 0xc5, 0xdd, 0x44, 0xd1, 0xef, 0x1a, 0x70, 0x9c, 0x74, 0x3f, 0xf7, 0x2f, 0x4f, 0xd6, - 0x33, 0x7d, 0x7f, 0x2f, 0xa0, 0x78, 0x72, 0x67, 0x7b, 0x3e, 0xee, 0x43, 0x08, 0x38, 0x8e, 0x1c, - 0x7a, 0x03, 0x06, 0x88, 0x53, 0xf5, 0x83, 0x3a, 0xe9, 0xc9, 0xfa, 0x5f, 0x71, 0x50, 0x7b, 0xa4, - 0xe0, 0x54, 0x5d, 0xcc, 0x91, 0x9a, 0xbf, 0xc8, 0xc2, 0x54, 0xf4, 0xa5, 0x18, 0x79, 0x37, 0x6e, - 0x20, 0xf6, 0x6e, 0x1c, 0x63, 0x44, 0x3c, 0xac, 0x19, 0x7d, 0x87, 0x89, 0x47, 0x27, 0x05, 0x2c, - 0x60, 0x44, 0xfc, 0x19, 0x84, 0xc1, 0x7d, 0x30, 0x22, 0xfe, 0xf6, 0x81, 0xc2, 0x85, 0xce, 0x87, - 0xe3, 0x44, 0x66, 0x34, 0x4e, 0x34, 0xad, 0x8f, 0xa5, 0xdf, 0x50, 0x51, 0x03, 0x72, 0xda, 0x3a, - 0xc8, 0xc3, 0xf3, 0x6c, 0xea, 0x79, 0x57, 0xdb, 0x6e, 0x52, 0x24, 0xa6, 0x2b, 0x88, 0x8e, 0x5f, - 0x31, 0x57, 0x3e, 0x5b, 0xfb, 0x0a, 0x79, 0xf0, 0xe9, 0xd2, 0xb0, 0x99, 0xff, 0x62, 0xc0, 0x78, - 0xe8, 0x9e, 0x39, 0xa3, 0xe6, 0x3f, 0x20, 0xd0, 0xff, 0xa7, 0x0f, 0xae, 0x05, 0x18, 0xb0, 0x86, - 0x0d, 0x7d, 0x0b, 0x72, 0x75, 0xbb, 0x59, 0xa5, 0xae, 0x57, 0xb2, 0xc9, 0xa6, 0x3c, 0x27, 0x69, - 0x9d, 0xbf, 0xfc, 0x2d, 0x88, 0x15, 0x81, 0x66, 0xd1, 0x6e, 0xb4, 0xea, 0xd4, 0x13, 0xaf, 0x5e, - 0x60, 0x1d, 0x39, 0xcf, 0x49, 0x09, 0x92, 0x7a, 0xee, 0xd6, 0x9c, 0x14, 0x95, 0x8d, 0x74, 0xc0, - 0x39, 0x29, 0xa1, 0x34, 0xa7, 0x3d, 0x72, 0x52, 0x82, 0xba, 0x77, 0x6d, 0x4e, 0x4a, 0xd0, 0xc3, - 0x1e, 0x96, 0xfd, 0x27, 0x03, 0xda, 0x28, 0xc2, 0xd6, 0x7d, 0x66, 0x17, 0xeb, 0xfe, 0x4d, 0x18, - 0xb1, 0x9a, 0x1e, 0x75, 0xb6, 0x48, 0x5d, 0xba, 0x93, 0xd2, 0xee, 0xc5, 0x60, 0xa8, 0xcb, 0x12, - 0x0f, 0x0e, 0x30, 0xa2, 0x3a, 0x9c, 0xd8, 0x08, 0x3f, 0x55, 0x25, 0x1f, 0xd9, 0x17, 0xb9, 0xd2, - 0x4f, 0xfb, 0x81, 0xbd, 0x4b, 0x71, 0x95, 0x6e, 0xf7, 0x02, 0xe0, 0x78, 0xa4, 0xe8, 0x3d, 0x18, - 0xd7, 0x35, 0x00, 0x95, 0x87, 0xbe, 0x3f, 0x91, 0x1e, 0x5c, 0xb2, 0xd6, 0x15, 0x0e, 0x17, 0x87, - 0x69, 0xa1, 0x4f, 0x0c, 0x38, 0xb9, 0x11, 0xff, 0x2c, 0x97, 0xe4, 0xee, 0x2f, 0xa4, 0x33, 0x10, - 0x23, 0x48, 0x8a, 0xf7, 0xed, 0x6c, 0xcf, 0xf7, 0x7a, 0xf8, 0x0b, 0xf7, 0x22, 0x6d, 0x7e, 0x6c, - 0xc0, 0x44, 0x38, 0xdf, 0xef, 0x8e, 0x7b, 0x00, 0x3e, 0xcf, 0xc2, 0x64, 0xe4, 0x6c, 0x46, 0xbc, - 0x00, 0xa3, 0x47, 0xe9, 0x05, 0x18, 0xea, 0xcb, 0x0b, 0x10, 0x6f, 0xfe, 0x0e, 0xf4, 0x65, 0xfe, - 0x3e, 0x27, 0x4c, 0x50, 0xb9, 0xb6, 0xcb, 0x4b, 0xf2, 0x82, 0x8a, 0xf6, 0x9c, 0x80, 0x06, 0xc4, - 0xe1, 0xba, 0x5c, 0x01, 0xab, 0x74, 0xbf, 0x72, 0x2c, 0xed, 0xe7, 0x67, 0xd2, 0x5e, 0x85, 0x0a, - 0x10, 0x08, 0x05, 0x2c, 0x06, 0x80, 0xe3, 0xc8, 0x99, 0xff, 0x36, 0x02, 0x27, 0xe2, 0x43, 0x05, - 0x7b, 0xc7, 0xa6, 0xde, 0x81, 0xd1, 0x75, 0xff, 0x43, 0x15, 0xf2, 0xac, 0x24, 0x7c, 0x9f, 0x67, - 0xf7, 0xef, 0x5b, 0x08, 0x1d, 0x29, 0xa8, 0x83, 0x15, 0x15, 0x46, 0xb2, 0xc2, 0x5f, 0x1c, 0xad, - 0xb5, 0xd7, 0xa5, 0x3a, 0x91, 0x90, 0xe4, 0xee, 0x0f, 0x95, 0x0a, 0x92, 0x41, 0x1d, 0xac, 0xa8, - 0x20, 0x0a, 0x43, 0x82, 0x80, 0x14, 0x8f, 0x85, 0xc4, 0x51, 0x8c, 0x9e, 0xc4, 0xb8, 0xb1, 0x21, - 0x2a, 0x60, 0x89, 0x5c, 0x92, 0xa9, 0x93, 0x75, 0x29, 0x2c, 0x93, 0x93, 0xe9, 0x75, 0xc3, 0x3f, - 0x20, 0xb3, 0x42, 0x04, 0x99, 0x3a, 0xe1, 0x64, 0x6a, 0xfc, 0x5a, 0xae, 0xf4, 0x97, 0x24, 0x24, - 0xb3, 0xcb, 0x55, 0x5e, 0xe9, 0x65, 0xe2, 0x15, 0xb0, 0x44, 0x8e, 0xde, 0x82, 0x81, 0x77, 0xda, - 0xc4, 0xcf, 0x2b, 0x48, 0x68, 0xdb, 0xf4, 0x0c, 0x5b, 0x89, 0x94, 0x09, 0x06, 0xc6, 0x1c, 0x2d, - 0xea, 0x40, 0x8e, 0xa8, 0x0f, 0xdb, 0xc8, 0x07, 0x51, 0x2f, 0xa5, 0x7b, 0x2d, 0xae, 0xd7, 0x17, - 0x71, 0xa4, 0x46, 0xab, 0x6a, 0x61, 0x9d, 0x16, 0x22, 0x30, 0x48, 0xde, 0x6d, 0x3b, 0x54, 0x3a, - 0xe4, 0x5e, 0x4c, 0x48, 0xb4, 0xe7, 0x97, 0x64, 0x44, 0xb8, 0x88, 0xc3, 0xb1, 0xc0, 0xcc, 0x48, - 0x54, 0x2d, 0x8f, 0x12, 0xc9, 0x0b, 0x5e, 0x4c, 0xbc, 0x13, 0x7a, 0x5c, 0xf3, 0x16, 0x24, 0x38, - 0x1c, 0x0b, 0xcc, 0xc8, 0x82, 0xe1, 0xaa, 0x78, 0x82, 0x85, 0x7b, 0x53, 0x13, 0x3f, 0xf9, 0xb9, - 0xdb, 0xfb, 0x36, 0x22, 0xb5, 0x41, 0xd6, 0xc0, 0x3e, 0x7e, 0xf3, 0x3d, 0xb8, 0x27, 0xfe, 0x26, - 0x40, 0xb2, 0xe8, 0x77, 0x8b, 0x78, 0xfe, 0xfb, 0x0d, 0x41, 0x8d, 0x55, 0xe2, 0xd5, 0x30, 0x87, - 0xa0, 0x07, 0x20, 0xdb, 0x76, 0xea, 0xd1, 0x67, 0x4a, 0x5e, 0xc3, 0x2b, 0x98, 0x95, 0x17, 0x5f, - 0xfa, 0xec, 0xcb, 0x53, 0xc7, 0x7e, 0xfe, 0xe5, 0xa9, 0x63, 0x5f, 0x7c, 0x79, 0xea, 0xd8, 0xfb, - 0x3b, 0xa7, 0x8c, 0xcf, 0x76, 0x4e, 0x19, 0x3f, 0xdf, 0x39, 0x65, 0x7c, 0xb1, 0x73, 0xca, 0xf8, - 0xe5, 0xce, 0x29, 0xe3, 0xe3, 0x5f, 0x9d, 0x3a, 0x76, 0xe3, 0xc1, 0x24, 0x5f, 0x6c, 0xfc, 0xdf, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, 0x5e, 0x30, 0xb8, 0xd8, 0x71, 0x00, 0x00, + // 5870 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x6b, 0x6c, 0x1c, 0xc7, + 0x79, 0xda, 0x3b, 0x3e, 0xbf, 0xe3, 0x73, 0x44, 0x59, 0x0c, 0x1d, 0x8b, 0xea, 0xe6, 0x01, 0xa7, + 0x71, 0xc8, 0x5a, 0xb6, 0x2c, 0xf9, 0xa5, 0xf8, 0x8e, 0xd4, 0x83, 0x36, 0x6d, 0x31, 0x73, 0xb4, + 0x14, 0xcb, 0x76, 0x9d, 0xe1, 0xdd, 0xf0, 0x6e, 0xc3, 0xbb, 0xdd, 0xf3, 0xee, 0x1e, 0xa5, 0xb3, + 0x83, 0x34, 0xb1, 0xd3, 0xd4, 0x05, 0x8a, 0xc2, 0x3f, 0x5c, 0xb8, 0x28, 0x50, 0xa0, 0x68, 0x50, + 0xa0, 0x45, 0x80, 0xe4, 0x7f, 0x0b, 0x34, 0x2d, 0x8a, 0x02, 0x4e, 0x9a, 0xb4, 0x86, 0xfb, 0xa3, + 0x2e, 0x10, 0xb0, 0x31, 0x03, 0xe4, 0x4f, 0x51, 0xa0, 0xbf, 0x85, 0xb6, 0x28, 0xe6, 0xb1, 0xb3, + 0xb3, 0x7b, 0x7b, 0xe2, 0xee, 0xf1, 0x21, 0x15, 0xe8, 0xbf, 0xbb, 0xf9, 0xbe, 0xf9, 0xbe, 0x79, + 0x7e, 0xaf, 0xf9, 0x66, 0x16, 0x1e, 0xad, 0x59, 0x7e, 0xbd, 0xbd, 0xb1, 0x50, 0x71, 0x9a, 0x8b, + 0x64, 0xab, 0x6d, 0xf9, 0x9d, 0xc5, 0x2d, 0xe2, 0xd6, 0x9c, 0x45, 0xd2, 0xb2, 0x16, 0xb7, 0x1f, + 0x26, 0x8d, 0x56, 0x9d, 0x3c, 0xbc, 0x58, 0xa3, 0x36, 0x75, 0x89, 0x4f, 0xab, 0x0b, 0x2d, 0xd7, + 0xf1, 0x1d, 0xf4, 0xd9, 0xb0, 0xd6, 0x82, 0xa8, 0xb5, 0xc0, 0x6b, 0x2d, 0x90, 0x96, 0xb5, 0x10, + 0xd4, 0x9a, 0xfb, 0x92, 0x46, 0xbb, 0xe6, 0xd4, 0x9c, 0x45, 0x5e, 0x79, 0xa3, 0xbd, 0xc9, 0xff, + 0xf1, 0x3f, 0xfc, 0x97, 0x20, 0x3a, 0x67, 0x6e, 0x9d, 0xf7, 0x16, 0x2c, 0xc1, 0xb9, 0xe2, 0xb8, + 0x74, 0x71, 0xbb, 0x8b, 0xf1, 0xdc, 0x95, 0x10, 0x87, 0xde, 0xf2, 0xa9, 0xed, 0x59, 0x8e, 0xed, + 0x7d, 0x89, 0xb4, 0x2c, 0x8f, 0xba, 0xdb, 0xd4, 0x5d, 0x6c, 0x6d, 0xd5, 0x18, 0xcc, 0x8b, 0x22, + 0x24, 0x51, 0x7a, 0x34, 0xa4, 0xd4, 0x24, 0x95, 0xba, 0x65, 0x53, 0xb7, 0x13, 0x56, 0x6f, 0x52, + 0x9f, 0x24, 0xd5, 0x5a, 0xec, 0x55, 0xcb, 0x6d, 0xdb, 0xbe, 0xd5, 0xa4, 0x5d, 0x15, 0x1e, 0xdb, + 0xab, 0x82, 0x57, 0xa9, 0xd3, 0x26, 0x89, 0xd7, 0x33, 0x5f, 0x81, 0xe3, 0x45, 0x9b, 0x34, 0x3a, + 0x9e, 0xe5, 0xe1, 0xb6, 0x5d, 0x74, 0x6b, 0xed, 0x26, 0xb5, 0x7d, 0x74, 0x1a, 0x06, 0x6c, 0xd2, + 0xa4, 0xb3, 0xc6, 0x69, 0xe3, 0xc1, 0xd1, 0xd2, 0xd8, 0x07, 0x3b, 0xf3, 0xc7, 0x76, 0x77, 0xe6, + 0x07, 0x5e, 0x20, 0x4d, 0x8a, 0x39, 0x04, 0x7d, 0x06, 0x06, 0xb7, 0x49, 0xa3, 0x4d, 0x67, 0x73, + 0x1c, 0x65, 0x5c, 0xa2, 0x0c, 0x5e, 0x63, 0x85, 0x58, 0xc0, 0xcc, 0xb7, 0xf3, 0x11, 0xf2, 0xcf, + 0x53, 0x9f, 0x54, 0x89, 0x4f, 0x50, 0x13, 0x86, 0x1a, 0x64, 0x83, 0x36, 0xbc, 0x59, 0xe3, 0x74, + 0xfe, 0xc1, 0xc2, 0x99, 0x8b, 0x0b, 0x69, 0x26, 0x7a, 0x21, 0x81, 0xd4, 0xc2, 0x2a, 0xa7, 0x73, + 0xd1, 0xf6, 0xdd, 0x4e, 0x69, 0x42, 0x36, 0x62, 0x48, 0x14, 0x62, 0xc9, 0x04, 0x7d, 0xdb, 0x80, + 0x02, 0xb1, 0x6d, 0xc7, 0x27, 0x3e, 0x9b, 0xa6, 0xd9, 0x1c, 0x67, 0xfa, 0x6c, 0xff, 0x4c, 0x8b, + 0x21, 0x31, 0xc1, 0xf9, 0xb8, 0xe4, 0x5c, 0xd0, 0x20, 0x58, 0xe7, 0x39, 0xf7, 0x38, 0x14, 0xb4, + 0xa6, 0xa2, 0x29, 0xc8, 0x6f, 0xd1, 0x8e, 0x18, 0x5f, 0xcc, 0x7e, 0xa2, 0x99, 0xc8, 0x80, 0xca, + 0x11, 0x7c, 0x22, 0x77, 0xde, 0x98, 0xbb, 0x00, 0x53, 0x71, 0x86, 0x59, 0xea, 0x9b, 0xbf, 0x6f, + 0xc0, 0x8c, 0xd6, 0x0b, 0x4c, 0x37, 0xa9, 0x4b, 0xed, 0x0a, 0x45, 0x8b, 0x30, 0xca, 0xe6, 0xd2, + 0x6b, 0x91, 0x4a, 0x30, 0xd5, 0xd3, 0xb2, 0x23, 0xa3, 0x2f, 0x04, 0x00, 0x1c, 0xe2, 0xa8, 0x65, + 0x91, 0xbb, 0xd3, 0xb2, 0x68, 0xd5, 0x89, 0x47, 0x67, 0xf3, 0xd1, 0x65, 0xb1, 0xc6, 0x0a, 0xb1, + 0x80, 0x99, 0xaf, 0xc1, 0xa7, 0x82, 0xf6, 0xac, 0xd3, 0x66, 0xab, 0x41, 0x7c, 0x1a, 0x36, 0x6a, + 0xef, 0xa5, 0x77, 0x1a, 0x06, 0xb6, 0x2c, 0xbb, 0x1a, 0x6f, 0xc5, 0x73, 0x96, 0x5d, 0xc5, 0x1c, + 0x62, 0x6e, 0xc1, 0x78, 0xb1, 0xd5, 0x72, 0x9d, 0x6d, 0x5a, 0x2d, 0xfb, 0xa4, 0x46, 0xd1, 0x0d, + 0x00, 0x22, 0x0b, 0x8a, 0x3e, 0x27, 0x5d, 0x38, 0xf3, 0xeb, 0x0b, 0x62, 0xcf, 0x2c, 0xe8, 0x7b, + 0x66, 0xa1, 0xb5, 0x55, 0x63, 0x05, 0xde, 0x02, 0xdb, 0x9a, 0x0b, 0xdb, 0x0f, 0x2f, 0xac, 0x5b, + 0x4d, 0x5a, 0x9a, 0xd8, 0xdd, 0x99, 0x87, 0xa2, 0xa2, 0x80, 0x35, 0x6a, 0xe6, 0x5b, 0x06, 0x9c, + 0x28, 0xba, 0x35, 0x67, 0x69, 0xb9, 0xd8, 0x6a, 0x5d, 0xa1, 0xa4, 0xe1, 0xd7, 0xcb, 0x3e, 0xf1, + 0xdb, 0x1e, 0xba, 0x00, 0x43, 0x1e, 0xff, 0x25, 0x3b, 0xf3, 0xf9, 0x60, 0x7d, 0x0a, 0xf8, 0xed, + 0x9d, 0xf9, 0x99, 0x84, 0x8a, 0x14, 0xcb, 0x5a, 0xe8, 0x0b, 0x30, 0xdc, 0xa4, 0x9e, 0x47, 0x6a, + 0xc1, 0x88, 0x4f, 0x4a, 0x02, 0xc3, 0xcf, 0x8b, 0x62, 0x1c, 0xc0, 0xcd, 0x9f, 0xe4, 0x60, 0x52, + 0xd1, 0x92, 0xec, 0x0f, 0x61, 0x7a, 0xdb, 0x30, 0x56, 0xd7, 0x7a, 0xc8, 0x67, 0xb9, 0x70, 0xe6, + 0xc9, 0x94, 0x3b, 0x29, 0x69, 0x90, 0x4a, 0x33, 0x92, 0xcd, 0x98, 0x5e, 0x8a, 0x23, 0x6c, 0x50, + 0x13, 0xc0, 0xeb, 0xd8, 0x15, 0xc9, 0x74, 0x80, 0x33, 0x7d, 0x3c, 0x23, 0xd3, 0xb2, 0x22, 0x50, + 0x42, 0x92, 0x25, 0x84, 0x65, 0x58, 0x63, 0x60, 0xfe, 0xc0, 0x80, 0xe3, 0x09, 0xf5, 0xd0, 0x53, + 0xb1, 0xf9, 0xfc, 0x6c, 0xd7, 0x7c, 0xa2, 0xae, 0x6a, 0xe1, 0x6c, 0x3e, 0x04, 0x23, 0x2e, 0xdd, + 0xb6, 0x98, 0xa6, 0x90, 0x23, 0x3c, 0x25, 0xeb, 0x8f, 0x60, 0x59, 0x8e, 0x15, 0x06, 0xfa, 0x22, + 0x8c, 0x06, 0xbf, 0xd9, 0x30, 0xe7, 0xd9, 0x66, 0x62, 0x13, 0x17, 0xa0, 0x7a, 0x38, 0x84, 0x9b, + 0x7f, 0x9e, 0x83, 0xe9, 0xa2, 0xeb, 0x5b, 0x9b, 0xa4, 0xe2, 0x87, 0x3b, 0xe9, 0x3c, 0x8c, 0x11, + 0x59, 0xb8, 0xde, 0x69, 0x05, 0x4b, 0x40, 0x8d, 0x77, 0x51, 0x83, 0xe1, 0x08, 0x26, 0x5a, 0x86, + 0x29, 0xaf, 0xbd, 0xe1, 0x55, 0x5c, 0xab, 0xc5, 0x64, 0xce, 0x0b, 0xe1, 0xa2, 0x98, 0x95, 0xb5, + 0xa7, 0xca, 0x31, 0x38, 0xee, 0xaa, 0xc1, 0x96, 0xef, 0x36, 0x75, 0x79, 0x7f, 0xf3, 0xd1, 0xe5, + 0x7b, 0x4d, 0x14, 0xe3, 0x00, 0x8e, 0xea, 0x30, 0xd2, 0x94, 0xc2, 0x55, 0x4e, 0xef, 0x05, 0x6d, + 0x77, 0x86, 0x1a, 0xf6, 0x35, 0xa5, 0x82, 0xc3, 0x8d, 0x1a, 0x41, 0x60, 0x3b, 0xf6, 0xd9, 0xf2, + 0xd5, 0x17, 0x4a, 0x63, 0x6c, 0x5c, 0x03, 0x81, 0x8d, 0x15, 0x75, 0xf3, 0x6f, 0x0c, 0x38, 0x1d, + 0xf4, 0xdc, 0x71, 0x3b, 0xd7, 0xe9, 0x46, 0xdd, 0x71, 0xb6, 0x30, 0xad, 0x50, 0x6b, 0x9b, 0xba, + 0x4b, 0x8e, 0xbd, 0x69, 0xd5, 0xd0, 0x4b, 0x30, 0xea, 0xd1, 0x8a, 0x4b, 0xd9, 0x60, 0x4a, 0x69, + 0xf1, 0xa0, 0xd6, 0x9e, 0x05, 0x66, 0x36, 0x30, 0x4e, 0xab, 0x4e, 0x85, 0x34, 0xae, 0x6e, 0x7c, + 0x9d, 0x6a, 0xc3, 0x1e, 0xee, 0xb1, 0x72, 0x40, 0x02, 0x87, 0xd4, 0x50, 0x11, 0x26, 0xb7, 0x2d, + 0xd7, 0x6f, 0x93, 0x06, 0xa6, 0x2d, 0x47, 0x1b, 0xd9, 0x93, 0xb2, 0xda, 0xe4, 0xb5, 0x28, 0x18, + 0xc7, 0xf1, 0xcd, 0x0e, 0xcc, 0x14, 0xdb, 0xbe, 0xb3, 0xe6, 0x3a, 0x4d, 0x87, 0x0d, 0xf6, 0x55, + 0x3e, 0xe4, 0x1e, 0x22, 0x30, 0xe9, 0xd1, 0x06, 0xad, 0xb0, 0x7f, 0x6b, 0x4e, 0xc3, 0xaa, 0x48, + 0xfd, 0x50, 0x3a, 0x17, 0x90, 0x2e, 0x47, 0xc1, 0xb7, 0x77, 0xe6, 0x3f, 0x1d, 0xa1, 0x14, 0x83, + 0xe3, 0x38, 0x3d, 0xf3, 0x26, 0xcc, 0x15, 0xdf, 0x68, 0xbb, 0xf4, 0xa8, 0x87, 0xcd, 0x7c, 0x13, + 0x4e, 0x95, 0x2c, 0x7f, 0xa3, 0x5d, 0xd9, 0xa2, 0xfe, 0x91, 0x33, 0xff, 0x2d, 0x18, 0x5c, 0xaa, + 0x13, 0xd7, 0x67, 0x2b, 0xda, 0xa5, 0x2d, 0xe7, 0x45, 0xbc, 0x2a, 0x47, 0x56, 0xad, 0x68, 0x2c, + 0x8a, 0x71, 0x00, 0x4f, 0x21, 0x4b, 0xd3, 0x6f, 0x0f, 0xf3, 0x9f, 0x0d, 0x98, 0xe1, 0x2d, 0x58, + 0xb6, 0xbc, 0x8a, 0xb3, 0x4d, 0xdd, 0x0e, 0xa6, 0x5e, 0xbb, 0x71, 0xc0, 0x0d, 0x62, 0xbb, 0x9e, + 0x36, 0xc5, 0x88, 0x7a, 0xbe, 0x4b, 0x2c, 0xdb, 0x97, 0x2d, 0x0b, 0x77, 0x7d, 0x0c, 0x8e, 0xbb, + 0x6a, 0xa0, 0x07, 0x61, 0x44, 0x36, 0x9b, 0x49, 0x6a, 0x26, 0xb7, 0xf8, 0x56, 0x94, 0x7d, 0xf2, + 0xb0, 0x82, 0x9a, 0xbf, 0x32, 0x60, 0x9a, 0xf7, 0x4a, 0x97, 0x25, 0xe8, 0x02, 0x4c, 0x54, 0x83, + 0x5e, 0xae, 0x5a, 0x4d, 0x4b, 0xa8, 0xeb, 0x7c, 0xe9, 0x3e, 0xd9, 0x86, 0x89, 0xe5, 0x08, 0x14, + 0xc7, 0xb0, 0xd3, 0x0d, 0x7c, 0x30, 0x68, 0xf9, 0x3d, 0x06, 0x2d, 0x69, 0x48, 0x06, 0xb2, 0x0e, + 0x89, 0xf9, 0xc3, 0x1c, 0x8c, 0x2f, 0x35, 0xda, 0x9e, 0xaf, 0x16, 0xeb, 0xd7, 0x34, 0x79, 0x27, + 0xd6, 0xea, 0x6f, 0xa4, 0xb3, 0x46, 0xc4, 0xc2, 0x65, 0x72, 0x2d, 0xd4, 0x62, 0x61, 0x59, 0x28, + 0xe7, 0xd0, 0x4b, 0x30, 0xe0, 0xb5, 0x68, 0x85, 0x0f, 0x43, 0xe1, 0xcc, 0xb9, 0x74, 0xca, 0x32, + 0xd2, 0xc8, 0x72, 0x8b, 0x56, 0xc2, 0xf1, 0x63, 0xff, 0x30, 0x27, 0x89, 0x88, 0x52, 0x83, 0xf9, + 0x2c, 0x9a, 0x38, 0x4a, 0x5c, 0x68, 0xe2, 0x89, 0xa8, 0x06, 0x0d, 0x74, 0xa5, 0xf9, 0x0f, 0x6c, + 0x69, 0xe8, 0xf8, 0xab, 0x96, 0xe7, 0xa3, 0x57, 0xba, 0x46, 0x6d, 0x21, 0xdd, 0xa8, 0xb1, 0xda, + 0x7c, 0xcc, 0x94, 0xc6, 0x0d, 0x4a, 0xb4, 0x11, 0xfb, 0x2a, 0x0c, 0x5a, 0x3e, 0x6d, 0x06, 0xee, + 0xc1, 0x23, 0x7d, 0xf4, 0x2a, 0xb4, 0x77, 0x57, 0x18, 0x25, 0x2c, 0x08, 0x9a, 0xef, 0xc7, 0x7b, + 0xc3, 0x06, 0x93, 0x79, 0x25, 0x53, 0x37, 0xa3, 0xa2, 0x2c, 0xf0, 0x87, 0x52, 0x1a, 0x54, 0x89, + 0x82, 0x30, 0x5c, 0x99, 0x31, 0xb0, 0x87, 0xbb, 0xd8, 0x99, 0xef, 0xe7, 0xe1, 0x78, 0xc2, 0xbc, + 0xa0, 0x0a, 0x40, 0xc5, 0xb1, 0xab, 0x96, 0xf0, 0x97, 0x44, 0xa3, 0x16, 0xd3, 0x8d, 0xf5, 0x52, + 0x50, 0x2f, 0x5c, 0xa0, 0xaa, 0xc8, 0xc3, 0x1a, 0x59, 0xf4, 0x2c, 0x20, 0x67, 0x83, 0x6b, 0xf3, + 0xea, 0x65, 0xe1, 0x96, 0x06, 0xb2, 0x30, 0x5f, 0x9a, 0x93, 0x75, 0xd1, 0xd5, 0x2e, 0x0c, 0x9c, + 0x50, 0x8b, 0xd1, 0x6a, 0x10, 0xcf, 0xbf, 0x42, 0xec, 0x6a, 0x83, 0x56, 0x31, 0xdd, 0x74, 0xa9, + 0x57, 0x97, 0x5b, 0x55, 0xd1, 0x5a, 0xed, 0xc2, 0xc0, 0x09, 0xb5, 0xd0, 0x5b, 0x49, 0x13, 0x23, + 0x16, 0xc5, 0x53, 0x7d, 0x4d, 0xcc, 0x32, 0xf5, 0x89, 0xd5, 0xf0, 0x32, 0xcd, 0x0c, 0x17, 0xf9, + 0x62, 0x66, 0x94, 0x7a, 0x5e, 0x27, 0xde, 0xd6, 0xbd, 0x2a, 0x3a, 0x22, 0x8d, 0xec, 0x25, 0x3a, + 0xcc, 0x7f, 0x35, 0x60, 0x36, 0xa9, 0x57, 0x47, 0xb0, 0xbd, 0x5f, 0x8b, 0x6e, 0xef, 0x27, 0x32, + 0x6d, 0xef, 0x48, 0x63, 0x7b, 0xec, 0xf2, 0x97, 0x61, 0x6c, 0xa9, 0xed, 0xba, 0xd4, 0xf6, 0x85, + 0xcf, 0xf9, 0x1c, 0x0c, 0x7a, 0x96, 0x2d, 0x5d, 0xaf, 0x6c, 0xee, 0xe6, 0x28, 0x23, 0x5e, 0x66, + 0x95, 0xb1, 0xa0, 0x61, 0xfe, 0x4f, 0x1e, 0x8e, 0x07, 0x8a, 0x8f, 0x56, 0x03, 0x03, 0xd6, 0x43, + 0x55, 0x18, 0xab, 0x86, 0xc5, 0xbe, 0x34, 0x9e, 0xb3, 0xf0, 0x52, 0xfe, 0x80, 0x46, 0xde, 0xc7, + 0x11, 0xaa, 0xe8, 0x3a, 0xe4, 0x6b, 0x5c, 0x11, 0xb3, 0x91, 0x3b, 0x9f, 0x6e, 0xe4, 0x2e, 0x5b, + 0x71, 0x6b, 0xa5, 0x54, 0x90, 0xac, 0xf2, 0x97, 0x2d, 0x1f, 0x33, 0x8a, 0x68, 0x03, 0x86, 0xac, + 0x26, 0xa9, 0xd1, 0x8c, 0xb3, 0xb2, 0xc2, 0xea, 0xc4, 0xa9, 0x2b, 0x5d, 0xc2, 0xa1, 0x1e, 0x96, + 0x94, 0x19, 0x8f, 0x0a, 0xb3, 0x32, 0x84, 0x1b, 0x95, 0x7e, 0xe6, 0x13, 0xec, 0xad, 0x90, 0x07, + 0x87, 0x7a, 0x58, 0x52, 0x46, 0x5f, 0x63, 0x26, 0x05, 0xc3, 0xf0, 0x66, 0x07, 0x39, 0x93, 0xb3, + 0xe9, 0x98, 0xc4, 0xe9, 0x6b, 0x96, 0x08, 0xa7, 0x86, 0x03, 0xb2, 0xe6, 0xc7, 0x39, 0x98, 0x0a, + 0x67, 0x68, 0xc9, 0x69, 0x32, 0x5b, 0x67, 0x0e, 0x72, 0x56, 0x55, 0x5a, 0x7e, 0x20, 0xab, 0xe6, + 0x56, 0x96, 0x71, 0xce, 0xaa, 0xa2, 0xcf, 0xc3, 0xd0, 0x86, 0x4b, 0xec, 0x4a, 0x5d, 0x5a, 0x42, + 0xaa, 0xe9, 0x25, 0x5e, 0x8a, 0x25, 0x14, 0x3d, 0x00, 0x79, 0x9f, 0xd4, 0xa4, 0x25, 0xa4, 0x66, + 0x68, 0x9d, 0xd4, 0x30, 0x2b, 0x67, 0xc6, 0x92, 0xd7, 0xe6, 0x52, 0x42, 0x4a, 0x53, 0xd5, 0xc4, + 0xb2, 0x28, 0xc6, 0x01, 0x9c, 0x71, 0x24, 0x6d, 0xbf, 0xee, 0xb8, 0xb3, 0x83, 0x51, 0x8e, 0x45, + 0x5e, 0x8a, 0x25, 0x14, 0x2d, 0xc2, 0x68, 0x85, 0xb7, 0xdf, 0xa7, 0xee, 0xec, 0x50, 0x34, 0x2e, + 0xb1, 0x14, 0x00, 0x70, 0x88, 0x83, 0x5e, 0x85, 0x42, 0xc5, 0xa5, 0xc4, 0x77, 0xdc, 0x65, 0xe2, + 0xd3, 0xd9, 0xe1, 0xcc, 0x6b, 0x7c, 0x72, 0x77, 0x67, 0xbe, 0xb0, 0x14, 0x92, 0xc0, 0x3a, 0x3d, + 0xf3, 0xed, 0x3c, 0xcc, 0x86, 0x43, 0xcb, 0x57, 0x4f, 0xe8, 0x44, 0xcb, 0xe1, 0x31, 0x7a, 0x0c, + 0xcf, 0xe7, 0x61, 0xa8, 0x6a, 0xd5, 0xa8, 0xe7, 0xc7, 0x47, 0x79, 0x99, 0x97, 0x62, 0x09, 0x45, + 0xdf, 0x8d, 0x85, 0x20, 0xc5, 0x2a, 0xb9, 0x9a, 0x6d, 0x95, 0xc4, 0x1b, 0xd7, 0x47, 0x1c, 0x12, + 0x5d, 0x87, 0x51, 0xde, 0xf7, 0x3e, 0xa5, 0x05, 0x8f, 0x41, 0x2c, 0x05, 0x04, 0x70, 0x48, 0x6b, + 0xdf, 0x51, 0xca, 0xbf, 0x37, 0x60, 0x32, 0xee, 0xde, 0x3c, 0x24, 0x6d, 0xf9, 0xfc, 0x1e, 0xb1, + 0x07, 0x61, 0xd7, 0xbf, 0x6d, 0x00, 0x22, 0xf1, 0x28, 0x48, 0x20, 0x59, 0xce, 0xa5, 0x0d, 0x17, + 0xc5, 0xea, 0x87, 0xd6, 0x43, 0x17, 0xc8, 0xc3, 0x09, 0xec, 0x98, 0xa7, 0xba, 0xec, 0x54, 0xb6, + 0xa8, 0x7b, 0xa5, 0xbd, 0x71, 0xe4, 0x9e, 0xea, 0xcb, 0x80, 0x2e, 0xde, 0x6a, 0xb9, 0xd4, 0x63, + 0x1e, 0xd6, 0x35, 0xe2, 0x5a, 0x64, 0xa3, 0x41, 0x0f, 0x2a, 0x9a, 0xff, 0x97, 0x83, 0x30, 0x7c, + 0xc9, 0xa5, 0x56, 0xad, 0xee, 0x1f, 0x81, 0x15, 0xf2, 0x19, 0x18, 0x24, 0x0d, 0x8b, 0x78, 0x7c, + 0xbb, 0x6b, 0x4d, 0x2a, 0xb2, 0x42, 0x2c, 0x60, 0xe8, 0x65, 0x18, 0x72, 0x5c, 0xab, 0x66, 0xd9, + 0xb3, 0xa3, 0xbc, 0x11, 0x29, 0x8d, 0x76, 0xd9, 0x8b, 0xab, 0xbc, 0x6a, 0xb8, 0x67, 0xc5, 0x7f, + 0x2c, 0x49, 0xa2, 0x1b, 0x30, 0x2c, 0x64, 0x50, 0xa0, 0x39, 0x16, 0x53, 0x6b, 0x3e, 0x21, 0xc6, + 0x42, 0x59, 0x29, 0xfe, 0x7b, 0x38, 0x20, 0x88, 0xca, 0x4a, 0xf1, 0x0d, 0x70, 0xd2, 0x5f, 0xcc, + 0xa0, 0xf8, 0x7a, 0x6a, 0xba, 0xb2, 0xd2, 0x74, 0x83, 0x59, 0x88, 0x72, 0x5d, 0xd6, 0x53, 0xb5, + 0xd5, 0x61, 0x34, 0x58, 0xe5, 0xde, 0x2c, 0xec, 0x6f, 0x2f, 0xa9, 0xc5, 0xab, 0x0c, 0x18, 0x1c, + 0x12, 0x67, 0x93, 0x29, 0xfd, 0xca, 0xa1, 0x3e, 0x26, 0x73, 0x0f, 0x8f, 0xf2, 0xbd, 0x3c, 0x4c, + 0x4b, 0xcc, 0x25, 0xa7, 0x21, 0xa3, 0x5a, 0x52, 0x81, 0xe6, 0x13, 0x15, 0xa8, 0x15, 0x18, 0x8c, + 0xc2, 0xec, 0x29, 0x65, 0x6a, 0x4d, 0xc8, 0x63, 0x81, 0x1b, 0x89, 0x42, 0x3c, 0xab, 0xf5, 0x20, + 0xb1, 0xa4, 0xe9, 0x88, 0x7e, 0xdb, 0x80, 0xe3, 0xdb, 0xd4, 0xb5, 0x36, 0xad, 0x0a, 0x17, 0x9f, + 0x57, 0x2c, 0xcf, 0x77, 0xdc, 0x8e, 0x14, 0x5d, 0x8f, 0xa5, 0xe3, 0x7c, 0x4d, 0x23, 0xb0, 0x62, + 0x6f, 0x3a, 0xa5, 0xfb, 0x25, 0xb7, 0xe3, 0xd7, 0xba, 0x49, 0xe3, 0x24, 0x7e, 0x73, 0x2d, 0x80, + 0xb0, 0xb5, 0x09, 0xd2, 0x7b, 0x55, 0x17, 0x13, 0xa9, 0x1b, 0x16, 0x74, 0x36, 0x58, 0x06, 0xba, + 0xd4, 0x7f, 0x1e, 0x4e, 0x06, 0x23, 0xc6, 0x34, 0x89, 0xe5, 0xd8, 0x4b, 0xae, 0xe5, 0x53, 0xd7, + 0x22, 0xe8, 0x0c, 0x00, 0x55, 0xb2, 0x4c, 0xca, 0x2e, 0x25, 0x32, 0x42, 0x29, 0x87, 0x35, 0x2c, + 0xf3, 0x47, 0x06, 0x14, 0x24, 0xbd, 0x23, 0x70, 0x29, 0x70, 0xd4, 0xa5, 0xf8, 0x52, 0xa6, 0xe1, + 0xe8, 0xe1, 0x45, 0xb8, 0x30, 0x1e, 0x91, 0x4e, 0xe8, 0xac, 0x3c, 0xed, 0x12, 0x03, 0xf0, 0x6b, + 0xfa, 0x69, 0xd7, 0xed, 0x9d, 0xf9, 0xe9, 0x08, 0x72, 0x78, 0x04, 0xb6, 0x77, 0x18, 0xec, 0x89, + 0x91, 0x3f, 0xfc, 0x93, 0xf9, 0x63, 0xdf, 0xfa, 0xf9, 0xe9, 0x63, 0xe6, 0xb7, 0x07, 0x60, 0x2a, + 0x3e, 0x49, 0x29, 0x94, 0x46, 0x28, 0x7c, 0x47, 0x0e, 0x55, 0xf8, 0xe6, 0x0e, 0x4f, 0xf8, 0xe6, + 0x0f, 0x43, 0xf8, 0x0e, 0x1c, 0x92, 0xf0, 0x1d, 0x3d, 0x44, 0xe1, 0x6b, 0xfe, 0xa3, 0x01, 0x13, + 0x6a, 0x0d, 0xbc, 0xde, 0x66, 0x36, 0x6b, 0x38, 0xbf, 0xc6, 0xc1, 0xcf, 0xef, 0x6b, 0x30, 0xec, + 0x39, 0x6d, 0x57, 0x18, 0x68, 0x8c, 0xfa, 0xa3, 0xd9, 0xa4, 0xbd, 0xa8, 0xab, 0x79, 0x23, 0xa2, + 0x00, 0x07, 0x54, 0xcd, 0x9f, 0xe4, 0x55, 0x87, 0x24, 0x4c, 0x18, 0xeb, 0x2e, 0x73, 0x65, 0x58, + 0x87, 0x46, 0x74, 0x63, 0x9d, 0x95, 0x62, 0x09, 0x45, 0x26, 0x57, 0x44, 0x81, 0x57, 0x3a, 0x5a, + 0x02, 0xa9, 0x4f, 0xf8, 0x74, 0x0b, 0x08, 0x6a, 0xc1, 0x94, 0x4b, 0x5f, 0x6f, 0x5b, 0x2e, 0xad, + 0x96, 0x1d, 0xb2, 0xc5, 0x8c, 0x63, 0x19, 0x0e, 0x4d, 0x29, 0x61, 0x96, 0xdb, 0x22, 0x74, 0x55, + 0x9a, 0x61, 0x26, 0x2d, 0x8e, 0xd1, 0xc2, 0x5d, 0xd4, 0x91, 0x03, 0x33, 0x64, 0x9b, 0x58, 0x0d, + 0xb2, 0x61, 0x35, 0x2c, 0xbf, 0x53, 0xf6, 0x5d, 0xe2, 0xd3, 0x5a, 0x47, 0xba, 0x65, 0x4f, 0xca, + 0xbe, 0xcc, 0x14, 0x13, 0x70, 0x6e, 0xef, 0xcc, 0xdf, 0x2f, 0xc7, 0x22, 0x09, 0x8c, 0x13, 0x09, + 0xa3, 0x77, 0x0c, 0x98, 0x21, 0x09, 0x07, 0x4d, 0xdc, 0xbd, 0x4b, 0xed, 0x47, 0x27, 0x1d, 0x55, + 0x95, 0x66, 0x79, 0x4b, 0x13, 0x20, 0x38, 0x91, 0xa3, 0xf9, 0xb3, 0x61, 0x25, 0x16, 0x65, 0x84, + 0xf2, 0x4d, 0x28, 0x54, 0x44, 0xb4, 0xa5, 0xd1, 0x59, 0xb1, 0xe5, 0x46, 0x5e, 0xee, 0xc3, 0x62, + 0x58, 0x58, 0x0a, 0xc9, 0xc4, 0x9c, 0x28, 0x0d, 0x82, 0x75, 0x6e, 0xe8, 0x26, 0x80, 0x50, 0x9f, + 0xb4, 0xba, 0x62, 0x4b, 0xfb, 0x60, 0xa9, 0x1f, 0xde, 0xd7, 0x14, 0x15, 0xc1, 0x5a, 0xe9, 0xb7, + 0x10, 0x80, 0x35, 0x56, 0xac, 0xd7, 0x41, 0xe6, 0xc1, 0x25, 0xc7, 0x95, 0x92, 0xb1, 0xaf, 0x5e, + 0x17, 0x43, 0x32, 0x71, 0xd7, 0x31, 0x84, 0x60, 0x9d, 0x1b, 0x72, 0x22, 0x87, 0xb4, 0x8c, 0x73, + 0xb1, 0x1f, 0xce, 0xc1, 0xa1, 0xac, 0x60, 0xab, 0xf4, 0x6b, 0xf7, 0x59, 0xed, 0x9c, 0x0b, 0x53, + 0xf1, 0xc9, 0x49, 0x30, 0x4a, 0xae, 0x44, 0x8d, 0x92, 0x33, 0x29, 0xe5, 0xae, 0x16, 0xaa, 0xd3, + 0x93, 0x6d, 0x5c, 0x98, 0x8c, 0x4d, 0x4a, 0x02, 0xcb, 0x95, 0x28, 0xcb, 0x47, 0xb2, 0x18, 0x68, + 0x32, 0x25, 0x45, 0xe7, 0xe9, 0xc1, 0x54, 0x7c, 0x3a, 0x0e, 0x8c, 0x69, 0x24, 0x0f, 0x46, 0x67, + 0xfa, 0x26, 0x8c, 0x47, 0x66, 0x22, 0x81, 0xe3, 0x7a, 0x94, 0xe3, 0x3e, 0x8f, 0xe4, 0x75, 0xb3, + 0xef, 0x57, 0x79, 0x98, 0xe1, 0xd1, 0x7b, 0xab, 0x22, 0x7d, 0xe4, 0xa2, 0x30, 0xc8, 0x2f, 0xc1, + 0x10, 0xe1, 0xbf, 0xa4, 0xdd, 0xb1, 0x10, 0x6c, 0x08, 0x01, 0x5f, 0xef, 0xb4, 0xe8, 0xed, 0x9d, + 0xf9, 0xd9, 0xa4, 0xba, 0x3c, 0x8f, 0x41, 0xd6, 0x46, 0x17, 0x60, 0xe2, 0x66, 0x9d, 0xda, 0xa1, + 0x99, 0x28, 0x0d, 0x21, 0x75, 0x8a, 0x78, 0x3d, 0x02, 0xc5, 0x31, 0x6c, 0xf4, 0x4d, 0x80, 0x16, + 0x71, 0x49, 0x93, 0xfa, 0xd4, 0x0d, 0xcc, 0x84, 0x94, 0x09, 0x63, 0x49, 0x6d, 0x5b, 0x58, 0x53, + 0xc4, 0x62, 0x1b, 0x3d, 0x04, 0x60, 0x8d, 0x23, 0xfa, 0xae, 0x01, 0xc3, 0x3e, 0x71, 0x6b, 0x54, + 0xd9, 0x13, 0xcf, 0xf5, 0xc3, 0x7d, 0x9d, 0x93, 0x50, 0xc7, 0xfa, 0x81, 0x6d, 0x5d, 0x9a, 0x97, + 0xec, 0x4f, 0xf6, 0x40, 0xc0, 0x01, 0xf3, 0xb9, 0xa7, 0x61, 0x32, 0xd6, 0xf6, 0x4c, 0x51, 0x9d, + 0x5f, 0x18, 0xf0, 0xe9, 0x68, 0x93, 0x8e, 0x2e, 0xd5, 0x82, 0xc2, 0xb0, 0x58, 0x0d, 0x19, 0xa3, + 0xcb, 0x49, 0x13, 0x18, 0x1a, 0x1a, 0xe2, 0xbf, 0x87, 0x03, 0xda, 0xe6, 0xbf, 0xe7, 0xe0, 0x73, + 0xa9, 0x46, 0x1d, 0x3d, 0x15, 0x31, 0xe5, 0x1f, 0x8c, 0x99, 0xf2, 0xb3, 0x49, 0x44, 0xb2, 0x58, + 0xf4, 0xa8, 0x05, 0xe3, 0x3c, 0xe3, 0x51, 0x70, 0x76, 0x5c, 0x69, 0x90, 0x3c, 0x92, 0xd2, 0xe5, + 0xd1, 0xab, 0x96, 0x4e, 0x48, 0xfa, 0xe3, 0x91, 0x62, 0x1c, 0x65, 0xc0, 0x38, 0x5a, 0x76, 0x95, + 0xde, 0x52, 0x1c, 0x07, 0xb2, 0xc8, 0xa6, 0x15, 0xbd, 0x6a, 0xc8, 0x31, 0x52, 0x8c, 0xa3, 0x0c, + 0xcc, 0x3f, 0xce, 0xc1, 0xa8, 0xb2, 0xf1, 0xb3, 0xe4, 0x3f, 0x08, 0x57, 0x3f, 0xb7, 0x47, 0xac, + 0x3c, 0x9f, 0x26, 0x56, 0x3e, 0xd0, 0x3b, 0x56, 0x1e, 0xe4, 0xeb, 0x0d, 0xdd, 0x39, 0x5f, 0x4f, + 0x8b, 0x95, 0x0f, 0xa7, 0x8f, 0x95, 0x8f, 0xec, 0x1d, 0x2b, 0x37, 0xff, 0xd4, 0x00, 0xd4, 0x7d, + 0xf4, 0x92, 0x65, 0xa0, 0x48, 0xdc, 0xf3, 0x7a, 0x2c, 0x6b, 0x94, 0x7a, 0x2f, 0x07, 0xcc, 0xbc, + 0x05, 0xf7, 0x5f, 0xb6, 0xfc, 0xbb, 0x11, 0x20, 0x15, 0x9c, 0x57, 0xc9, 0xd1, 0x73, 0x7e, 0x67, + 0x18, 0x26, 0x2f, 0x5b, 0xd1, 0x5c, 0x97, 0x45, 0x18, 0x25, 0x8d, 0x86, 0x73, 0x73, 0x9d, 0xd4, + 0xbc, 0x78, 0x86, 0x66, 0x31, 0x00, 0xe0, 0x10, 0x07, 0x3d, 0x03, 0x53, 0xea, 0x0f, 0xa6, 0x35, + 0x7a, 0x4b, 0xf9, 0x28, 0xdc, 0x8b, 0x28, 0xc6, 0x60, 0xb8, 0x0b, 0x3b, 0xf5, 0x52, 0xf7, 0xe1, + 0xa4, 0x98, 0x2d, 0x25, 0xc6, 0x62, 0x0e, 0xc7, 0x13, 0x81, 0x0a, 0x59, 0x4a, 0x46, 0xbb, 0xdd, + 0x1b, 0x84, 0x7b, 0x91, 0x4e, 0x48, 0xfe, 0x19, 0xcc, 0x94, 0xfc, 0xf3, 0x28, 0x8c, 0xd1, 0x5b, + 0x95, 0x46, 0xbb, 0x4a, 0xd7, 0x88, 0x5f, 0xf7, 0x66, 0x87, 0xf8, 0xd8, 0x4c, 0xed, 0xee, 0xcc, + 0x8f, 0x5d, 0xd4, 0xca, 0x71, 0x04, 0x0b, 0x2d, 0xc3, 0x54, 0x18, 0x43, 0xba, 0x64, 0x35, 0xd8, + 0x5e, 0x1b, 0x8e, 0x1e, 0x39, 0x5c, 0x8c, 0xc1, 0x71, 0x57, 0x0d, 0xb4, 0x00, 0x60, 0xd5, 0x6c, + 0xc7, 0xa5, 0x7c, 0x36, 0x47, 0x38, 0x67, 0x9e, 0x37, 0xbc, 0xa2, 0x4a, 0xb1, 0x86, 0x81, 0x96, + 0x60, 0x3a, 0xfc, 0x17, 0x4c, 0xe6, 0x28, 0xaf, 0x76, 0x62, 0x77, 0x67, 0x7e, 0x7a, 0x25, 0x0e, + 0xc4, 0xdd, 0xf8, 0xac, 0xc3, 0x96, 0xad, 0x75, 0x18, 0xc2, 0x0e, 0xaf, 0xd8, 0x7a, 0x87, 0x75, + 0x2c, 0x54, 0x86, 0x13, 0x96, 0xed, 0xd1, 0x4a, 0xdb, 0xa5, 0xe5, 0x2d, 0xab, 0xb5, 0xbe, 0x5a, + 0xe6, 0xb6, 0x69, 0x67, 0xb6, 0xc0, 0xfd, 0xe2, 0x07, 0x64, 0xaf, 0x4f, 0xac, 0x24, 0x21, 0xe1, + 0xe4, 0xba, 0xba, 0x88, 0x19, 0xeb, 0x23, 0xad, 0x6a, 0x3c, 0x73, 0xa6, 0xd9, 0x39, 0x18, 0xf7, + 0x7c, 0xd7, 0xaa, 0xf8, 0x02, 0xd7, 0x9b, 0x9d, 0xe0, 0xad, 0x9f, 0x66, 0x3a, 0xa4, 0xac, 0x03, + 0x70, 0x14, 0xcf, 0xbc, 0x09, 0x73, 0x97, 0x2d, 0x9f, 0x92, 0xbb, 0x21, 0x7d, 0xae, 0x10, 0x77, + 0xc3, 0x71, 0x8f, 0x9c, 0xf3, 0xf7, 0x73, 0x30, 0x24, 0x12, 0xac, 0xd1, 0xd9, 0x58, 0x16, 0xf3, + 0x03, 0x5d, 0x59, 0xcc, 0x85, 0xa4, 0x64, 0x74, 0x13, 0x86, 0x2c, 0xcf, 0x6b, 0x47, 0x83, 0x22, + 0x2b, 0xbc, 0x04, 0x4b, 0x08, 0x3f, 0x6a, 0xe7, 0x5d, 0x39, 0xa0, 0x24, 0x5e, 0xce, 0x43, 0x0c, + 0x0e, 0x96, 0x94, 0x19, 0x0f, 0xa7, 0xed, 0xb7, 0xda, 0xbe, 0x0c, 0x43, 0x1c, 0x08, 0x8f, 0xab, + 0x9c, 0x22, 0x96, 0x94, 0xcd, 0xf7, 0x0d, 0x98, 0x14, 0x63, 0xb0, 0x54, 0xa7, 0x95, 0xad, 0xb2, + 0x4f, 0x5b, 0xcc, 0xfc, 0x6a, 0x7b, 0xd4, 0x8b, 0xc7, 0x43, 0x5f, 0xf4, 0xa8, 0x87, 0x39, 0x44, + 0xeb, 0x7d, 0xee, 0xb0, 0x7a, 0x6f, 0x9e, 0x07, 0x6d, 0x72, 0xf8, 0x0d, 0x01, 0x91, 0x28, 0xdf, + 0x91, 0x59, 0x92, 0x6a, 0xcf, 0x09, 0xac, 0x0e, 0x0e, 0xe0, 0xe6, 0x0f, 0x72, 0x30, 0xc8, 0x43, + 0x96, 0x59, 0x6c, 0x81, 0x3d, 0x92, 0x03, 0xc2, 0xd3, 0xef, 0x81, 0x3b, 0x9e, 0x7e, 0x7b, 0x49, + 0x87, 0xdf, 0x4f, 0x65, 0x88, 0xba, 0xf6, 0x73, 0xe3, 0x66, 0xbf, 0x07, 0xd2, 0xbf, 0x34, 0x60, + 0x26, 0x29, 0xd1, 0x24, 0xcb, 0xf8, 0x3d, 0x04, 0x23, 0xad, 0x06, 0xf1, 0x37, 0x1d, 0xb7, 0x19, + 0xcf, 0xf9, 0x5f, 0x93, 0xe5, 0x58, 0x61, 0x20, 0x17, 0xc0, 0x0d, 0xcf, 0xad, 0x85, 0xd3, 0x79, + 0x61, 0x7f, 0x29, 0x02, 0xa1, 0xa3, 0xa9, 0x1d, 0x5b, 0x6b, 0x5c, 0xcc, 0xff, 0x1a, 0x84, 0x69, + 0x5e, 0xe5, 0x6e, 0x1b, 0x26, 0x67, 0x00, 0x2a, 0xa4, 0x52, 0xa7, 0xa5, 0xce, 0xba, 0x5c, 0x71, + 0x23, 0x5a, 0x06, 0xa1, 0x82, 0x60, 0x0d, 0x8b, 0xd7, 0x89, 0x27, 0xe6, 0xea, 0x59, 0x87, 0x81, + 0xee, 0xd0, 0xb0, 0xf6, 0x6d, 0x62, 0x44, 0xd5, 0xfc, 0x50, 0x7f, 0x6a, 0x7e, 0x38, 0xa3, 0x9a, + 0x6f, 0xc1, 0x7d, 0xfc, 0x98, 0xa1, 0xdb, 0x18, 0x13, 0x3e, 0xc1, 0x79, 0xd9, 0xf8, 0xfb, 0x56, + 0x12, 0xb1, 0x6e, 0xf7, 0x84, 0xe0, 0x1e, 0x74, 0x7b, 0x9b, 0x08, 0xa3, 0xfb, 0x30, 0x11, 0xf4, + 0xed, 0x00, 0x7b, 0x6e, 0x07, 0x6d, 0x9f, 0x15, 0xf6, 0xd8, 0x67, 0x5d, 0xa6, 0xc0, 0x58, 0x4a, + 0x53, 0xe0, 0x77, 0x0d, 0x88, 0xfa, 0x9b, 0xe8, 0x16, 0x8c, 0x35, 0x89, 0x5f, 0xa9, 0xaf, 0xd8, + 0x55, 0xab, 0x42, 0x83, 0xd3, 0xdf, 0x0b, 0x7d, 0x78, 0xb4, 0x32, 0xa6, 0xdf, 0xa4, 0xb6, 0x1f, + 0x66, 0xd9, 0x3d, 0xaf, 0xd1, 0xc6, 0x11, 0x4e, 0xe6, 0x9f, 0x19, 0x30, 0xdb, 0x8b, 0x00, 0x93, + 0xc4, 0x4a, 0x72, 0x85, 0x92, 0xf8, 0x39, 0xda, 0x11, 0x62, 0xec, 0x22, 0x8c, 0x38, 0x2d, 0xea, + 0x12, 0x9f, 0x47, 0x85, 0x19, 0xce, 0x17, 0x82, 0x91, 0xbd, 0x2a, 0xcb, 0x6f, 0xf3, 0xd9, 0xd2, + 0xc8, 0x07, 0x00, 0xac, 0xaa, 0x86, 0x79, 0x20, 0xf9, 0x3b, 0xe4, 0x81, 0x7c, 0x60, 0xc0, 0xf0, + 0x9a, 0xeb, 0xf0, 0x9c, 0xaf, 0xc3, 0xcf, 0x03, 0x79, 0x39, 0x96, 0x6d, 0xfe, 0x48, 0xea, 0x7c, + 0x54, 0x46, 0x6c, 0x8f, 0xac, 0x80, 0x1f, 0xe6, 0x60, 0x5c, 0x62, 0xde, 0xdb, 0x99, 0xf9, 0x91, + 0x46, 0x1e, 0x74, 0x66, 0x7e, 0x94, 0xf8, 0xde, 0x99, 0xf9, 0x11, 0xfc, 0x7b, 0x36, 0x33, 0x3f, + 0xd2, 0xca, 0x5e, 0x99, 0xf9, 0xb9, 0x58, 0x6f, 0x78, 0x66, 0xfe, 0x37, 0x61, 0xba, 0x15, 0x9c, + 0x40, 0xf1, 0x8b, 0x4f, 0x96, 0x92, 0x03, 0x67, 0x33, 0x66, 0x43, 0x8b, 0x7b, 0x53, 0xa5, 0x4f, + 0x49, 0xee, 0xd3, 0x6b, 0x71, 0xba, 0xb8, 0x9b, 0x55, 0xf2, 0xcd, 0x80, 0xdc, 0xd1, 0xdf, 0x0c, + 0x48, 0x58, 0x17, 0xff, 0x7f, 0x33, 0xe0, 0xae, 0xdf, 0x0c, 0xf8, 0x91, 0x01, 0x05, 0x39, 0x33, + 0xf7, 0x6c, 0x8e, 0x8b, 0x6c, 0x5f, 0x8f, 0x5d, 0xf7, 0x91, 0x01, 0x63, 0x9a, 0x7c, 0xf6, 0x50, + 0x1d, 0xe0, 0x26, 0x71, 0x69, 0xdd, 0x51, 0x1e, 0x56, 0xea, 0x7c, 0x80, 0xeb, 0x41, 0x3d, 0x4e, + 0x29, 0x5c, 0x59, 0xaa, 0xdc, 0xc3, 0x1a, 0x6d, 0xf4, 0x55, 0xed, 0x68, 0x5f, 0x08, 0xf7, 0x54, + 0x5c, 0xf8, 0xe9, 0x99, 0xe0, 0xa0, 0x0b, 0x46, 0x2d, 0x21, 0xc0, 0xfc, 0xb1, 0xa1, 0x54, 0x49, + 0xe2, 0x56, 0xc9, 0x1f, 0xce, 0x56, 0x29, 0xc3, 0x20, 0x93, 0xcc, 0xc1, 0xad, 0xe8, 0x33, 0x99, + 0xb5, 0xa3, 0x27, 0x6f, 0x1b, 0xb0, 0x9f, 0x58, 0xd0, 0x32, 0xbf, 0x97, 0x83, 0x51, 0x25, 0xa9, + 0x8e, 0x40, 0x25, 0xbe, 0x18, 0x51, 0x89, 0x8f, 0x64, 0x94, 0xb1, 0x3d, 0xd5, 0xe1, 0xab, 0x31, + 0x75, 0x98, 0x55, 0x78, 0xef, 0xa1, 0x0a, 0xff, 0x4e, 0xcc, 0xb8, 0xc0, 0x3d, 0x82, 0xad, 0xb8, + 0x1e, 0xdd, 0x8a, 0x8b, 0x19, 0x7b, 0xd3, 0x63, 0x33, 0xfe, 0x4e, 0x1e, 0x26, 0x63, 0xea, 0x8a, + 0x99, 0x81, 0x7c, 0x55, 0x4b, 0x73, 0x53, 0x55, 0x94, 0x87, 0xc8, 0x1c, 0x86, 0xb6, 0x99, 0xcd, + 0xad, 0x7c, 0x07, 0x69, 0x77, 0x16, 0xce, 0x3c, 0xdd, 0x97, 0x86, 0x54, 0xa7, 0x40, 0xd2, 0x64, + 0xd7, 0xe8, 0xe2, 0x28, 0x1b, 0xb4, 0x16, 0xcb, 0x4a, 0xb9, 0x68, 0x93, 0x8d, 0x06, 0xad, 0x4a, + 0x97, 0xf1, 0xd3, 0x2a, 0x0f, 0x26, 0x01, 0x07, 0x27, 0xd6, 0x44, 0xdf, 0x31, 0x60, 0x4a, 0x69, + 0xe1, 0xeb, 0x96, 0x5d, 0x75, 0x6e, 0x06, 0xa7, 0xae, 0x17, 0x32, 0xf6, 0x46, 0xd4, 0x0e, 0xdd, + 0x6f, 0x25, 0xd8, 0x63, 0x18, 0x1e, 0xee, 0xe2, 0x68, 0xfe, 0x85, 0x01, 0x27, 0x7b, 0x0c, 0x4b, + 0x8a, 0x6c, 0xbc, 0x46, 0xfc, 0xf0, 0x2f, 0xd7, 0xff, 0xe1, 0xdf, 0xf4, 0x5e, 0x07, 0x7f, 0xe6, + 0x4f, 0x73, 0x80, 0x54, 0x5b, 0xb3, 0x24, 0x0d, 0xbe, 0x0a, 0xc3, 0x9b, 0x22, 0x1d, 0x64, 0x7f, + 0x49, 0xa4, 0xa5, 0x82, 0x9e, 0x47, 0x1b, 0xd0, 0x44, 0x2f, 0x1d, 0xcc, 0x96, 0x87, 0xee, 0xed, + 0x8e, 0x6e, 0x00, 0x6c, 0x5a, 0xb6, 0xe5, 0xd5, 0xfb, 0xbc, 0x3a, 0xc1, 0x83, 0x04, 0x97, 0x14, + 0x05, 0xac, 0x51, 0x33, 0xff, 0x20, 0xa7, 0x89, 0x12, 0x6e, 0x83, 0xa6, 0xda, 0x82, 0x5f, 0x88, + 0x0e, 0xe6, 0x68, 0x77, 0x82, 0xb1, 0x1a, 0x98, 0x1b, 0x30, 0xb0, 0x4d, 0xdc, 0x60, 0x59, 0xa7, + 0xbc, 0xc3, 0xd5, 0x7d, 0x97, 0x20, 0x9c, 0xd3, 0x6b, 0xc4, 0xf5, 0x30, 0xa7, 0xc9, 0xec, 0x73, + 0xcf, 0xa7, 0xad, 0x40, 0xc7, 0x65, 0x96, 0xdf, 0x3e, 0x6d, 0xe9, 0x1d, 0xa4, 0x2d, 0xae, 0x88, + 0x68, 0xcb, 0x33, 0xff, 0x63, 0x58, 0x13, 0x4e, 0x52, 0xad, 0x1e, 0xa4, 0x41, 0x77, 0x36, 0x78, + 0xae, 0x46, 0x8c, 0xf2, 0x7c, 0xe4, 0xb9, 0x9a, 0xdb, 0x3b, 0xf3, 0x13, 0xe1, 0x7e, 0xd4, 0x1e, + 0xb0, 0xc9, 0xf0, 0x30, 0x8b, 0xbe, 0xde, 0x07, 0x0f, 0x61, 0xbd, 0x7f, 0x03, 0xa6, 0x37, 0xe3, + 0x19, 0xe7, 0xf2, 0x82, 0xd4, 0xb9, 0x3e, 0x13, 0xd6, 0x45, 0x58, 0xaa, 0xab, 0x18, 0x77, 0x33, + 0x42, 0x4e, 0xf0, 0x1c, 0x0c, 0x0f, 0x93, 0x8b, 0x43, 0xaf, 0xd4, 0x7b, 0x2e, 0x16, 0x60, 0x8f, + 0x3f, 0x04, 0x23, 0x48, 0xe2, 0x08, 0x03, 0x74, 0x1d, 0x46, 0x3d, 0x9f, 0xb8, 0xe2, 0xf6, 0xd2, + 0x58, 0x7f, 0xb7, 0x97, 0xca, 0x01, 0x01, 0x1c, 0xd2, 0x8a, 0x6d, 0xee, 0xa1, 0x83, 0xdc, 0xdc, + 0xe8, 0xac, 0x4a, 0x55, 0x64, 0xfd, 0xe4, 0x01, 0xb4, 0x7c, 0x57, 0x92, 0x21, 0x03, 0x61, 0x1d, + 0x0f, 0xbd, 0x6b, 0xc0, 0x09, 0xb6, 0x0b, 0x2e, 0xde, 0xa2, 0x95, 0x36, 0x1b, 0xee, 0x20, 0x5d, + 0x6b, 0xb6, 0x90, 0xc5, 0x15, 0x2c, 0x27, 0x91, 0x08, 0xe3, 0x77, 0x89, 0x60, 0x9c, 0xcc, 0x18, + 0xbd, 0x26, 0x8c, 0x4d, 0xca, 0x83, 0x77, 0xfb, 0x3f, 0xe0, 0x50, 0x86, 0xa7, 0x10, 0x68, 0x3e, + 0x35, 0xbf, 0x37, 0xa0, 0xcb, 0xc1, 0x74, 0xc7, 0x2e, 0x37, 0x60, 0xc0, 0x27, 0xde, 0x96, 0xdc, + 0x5e, 0x4f, 0xf5, 0x71, 0x5d, 0x39, 0xdc, 0x64, 0x23, 0x8c, 0x36, 0x2f, 0xe2, 0x34, 0xd1, 0x1c, + 0xe4, 0x88, 0x17, 0x4f, 0x1a, 0x29, 0x7a, 0x38, 0x47, 0x3c, 0x9e, 0x50, 0xb2, 0x29, 0xcf, 0x89, + 0xc3, 0x84, 0x92, 0x4d, 0x9c, 0xb3, 0xf8, 0x2b, 0x2f, 0x15, 0xc7, 0xf6, 0x2d, 0xbb, 0x4d, 0xaf, + 0xda, 0x17, 0x5d, 0xd7, 0x11, 0xc9, 0x1b, 0x23, 0xe1, 0x2b, 0x2f, 0x4b, 0x51, 0x30, 0x8e, 0xe3, + 0xa3, 0x97, 0x60, 0xd0, 0xa5, 0xbe, 0xdb, 0x91, 0x9a, 0xe6, 0x7c, 0x1f, 0x42, 0x15, 0xb3, 0xfa, + 0x62, 0x94, 0xf9, 0x4f, 0x2c, 0x28, 0x2a, 0x5d, 0x30, 0x74, 0x08, 0xba, 0x20, 0x3c, 0x04, 0xcb, + 0x1f, 0xda, 0x21, 0xd8, 0xf7, 0x0d, 0xcd, 0xf8, 0x50, 0x1d, 0x45, 0x2f, 0xc2, 0xb0, 0x6f, 0x35, + 0xa9, 0xd3, 0xf6, 0xb3, 0x19, 0xdf, 0x2a, 0x13, 0x9b, 0x8b, 0xd8, 0x75, 0x41, 0x02, 0x07, 0xb4, + 0xd0, 0x05, 0x98, 0xa0, 0x6c, 0x46, 0xd6, 0xeb, 0x4c, 0x65, 0x38, 0x0d, 0x91, 0x44, 0x34, 0x1e, + 0x1e, 0x18, 0x5c, 0x8c, 0x40, 0x71, 0x0c, 0xdb, 0xfc, 0xa9, 0xee, 0x26, 0xfc, 0xdf, 0xbf, 0xc2, + 0x2f, 0x03, 0x80, 0x47, 0x7a, 0x77, 0xbf, 0xef, 0x00, 0xe0, 0x9e, 0x97, 0xf6, 0x5f, 0x81, 0xfb, + 0x92, 0x45, 0xc1, 0x81, 0xbc, 0x43, 0xf7, 0xe3, 0xf8, 0x58, 0x71, 0xd3, 0x2e, 0xd8, 0x7e, 0xc6, + 0x61, 0x9a, 0x62, 0xb9, 0x83, 0x36, 0xc5, 0x5c, 0xbd, 0x2b, 0xf2, 0xd5, 0x3e, 0xf4, 0xaa, 0x5c, + 0x67, 0x46, 0x96, 0x77, 0xe0, 0xba, 0xc8, 0xf4, 0x5c, 0x6b, 0x3f, 0x33, 0xe0, 0x44, 0x22, 0xb6, + 0x1a, 0xc3, 0xdc, 0x61, 0x8e, 0xa1, 0x71, 0xd0, 0x63, 0xf8, 0xa1, 0xa1, 0x99, 0xb3, 0xc2, 0xed, + 0x3b, 0x92, 0x13, 0x14, 0x5d, 0x18, 0x3c, 0xde, 0x97, 0x47, 0xdb, 0x73, 0x8a, 0xfe, 0xc9, 0xe0, + 0x71, 0x62, 0x1d, 0xf7, 0x08, 0x04, 0xc2, 0x8d, 0xa8, 0x40, 0x38, 0xdb, 0x57, 0x9f, 0x7a, 0x88, + 0x84, 0xdf, 0x84, 0xd9, 0x5e, 0xee, 0xfc, 0x81, 0x08, 0x85, 0xbf, 0xed, 0x1e, 0x31, 0xbe, 0xa4, + 0x4f, 0x47, 0xb2, 0x83, 0x13, 0x6a, 0xa2, 0x87, 0x60, 0xc4, 0xab, 0xd4, 0x69, 0xb5, 0xdd, 0xa0, + 0xf1, 0x6c, 0x82, 0xb2, 0x2c, 0xc7, 0x0a, 0x83, 0x61, 0x57, 0xdb, 0x5a, 0xe8, 0x5c, 0xc3, 0x0e, + 0x34, 0x1e, 0x56, 0x18, 0x0c, 0x9b, 0x29, 0xbc, 0x1b, 0x8e, 0x4d, 0xa5, 0x2f, 0xa5, 0xb0, 0xd7, + 0x65, 0x39, 0x56, 0x18, 0xe6, 0x36, 0x7c, 0xea, 0x2b, 0x6d, 0x72, 0xe4, 0xaf, 0xe7, 0x99, 0x6f, + 0xe5, 0x61, 0x0a, 0xd3, 0x96, 0x13, 0x49, 0x56, 0x58, 0x0b, 0x5e, 0x27, 0xc9, 0xe0, 0xf0, 0xc7, + 0x32, 0x31, 0x4b, 0xc3, 0x91, 0x67, 0x49, 0x98, 0xbe, 0x69, 0x06, 0xde, 0x5d, 0x6a, 0xfd, 0xd9, + 0x95, 0x46, 0x21, 0x4c, 0x2f, 0x91, 0x90, 0x21, 0x08, 0x32, 0xca, 0xfc, 0x6a, 0x9f, 0xb4, 0x8e, + 0xce, 0x65, 0xb8, 0x24, 0xd8, 0x4d, 0x99, 0x17, 0x63, 0x41, 0x10, 0xd5, 0x61, 0x4c, 0x7f, 0x81, + 0x31, 0x5b, 0x3c, 0x38, 0x42, 0x9b, 0x67, 0x0f, 0xea, 0x25, 0x38, 0x42, 0xd9, 0x7c, 0x3f, 0x07, + 0x22, 0x0c, 0x71, 0x04, 0xb2, 0xeb, 0x2b, 0x11, 0xd9, 0xb5, 0x98, 0x25, 0x5a, 0xdf, 0x2b, 0x2a, + 0x1c, 0x0f, 0x11, 0x3d, 0x9c, 0xf1, 0x08, 0xe0, 0x0e, 0x11, 0xe1, 0xbf, 0x32, 0x60, 0x94, 0xe3, + 0x1d, 0x81, 0x08, 0x5c, 0x8b, 0x8a, 0xc0, 0x2f, 0x66, 0xe8, 0x45, 0x0f, 0xc1, 0xf7, 0x9f, 0x79, + 0xd9, 0x7a, 0x15, 0x80, 0xaa, 0x13, 0xb7, 0x2a, 0xa5, 0x41, 0xa8, 0xd0, 0x58, 0x21, 0x16, 0x30, + 0xa5, 0x86, 0x87, 0x0f, 0x41, 0x0d, 0xbf, 0x21, 0x6e, 0x58, 0x52, 0xcf, 0xa7, 0xd5, 0x4b, 0x2a, + 0x84, 0x92, 0xcf, 0x7c, 0x55, 0x54, 0x5e, 0x67, 0x0d, 0x43, 0xb1, 0x38, 0x46, 0x15, 0x77, 0xf1, + 0x41, 0xdf, 0xd0, 0x4e, 0x80, 0x03, 0xbb, 0x43, 0x46, 0x05, 0xce, 0xf5, 0x69, 0xe4, 0x88, 0xb0, + 0x4a, 0x57, 0x31, 0xee, 0x66, 0xc4, 0xb6, 0xb2, 0x7e, 0x3b, 0x5f, 0xae, 0xd3, 0x33, 0xd9, 0x9f, + 0x01, 0x10, 0x5b, 0x59, 0x2f, 0xc1, 0x11, 0xca, 0xe6, 0xef, 0x19, 0x00, 0xe1, 0xd9, 0x16, 0x9b, + 0xf3, 0x8a, 0xd3, 0xb6, 0x45, 0x34, 0x31, 0x1f, 0xce, 0xf9, 0x12, 0x2b, 0xc4, 0x02, 0xc6, 0xf6, + 0x8f, 0x88, 0xc9, 0xc8, 0x45, 0xfd, 0x70, 0x96, 0x70, 0x4f, 0xec, 0x0c, 0x4d, 0x14, 0x62, 0x49, + 0xd0, 0xfc, 0xeb, 0x11, 0x28, 0x68, 0xfb, 0x2c, 0x76, 0x82, 0x36, 0x7e, 0x68, 0x87, 0xcd, 0x09, + 0xf1, 0xc4, 0x42, 0x5f, 0xf1, 0x44, 0x0f, 0x26, 0x64, 0x94, 0x2c, 0x78, 0xc2, 0x61, 0x20, 0xcb, + 0xa5, 0xed, 0xee, 0x58, 0x1c, 0x62, 0x0e, 0xe6, 0xa5, 0x08, 0x49, 0x1c, 0x63, 0xc1, 0x1c, 0x54, + 0x59, 0x52, 0x6e, 0x37, 0x9b, 0xc4, 0xed, 0xc8, 0xfc, 0x6b, 0xe5, 0xa0, 0x5e, 0x8a, 0x40, 0x71, + 0x0c, 0x1b, 0xad, 0xa9, 0x09, 0x15, 0xf7, 0xf8, 0x1f, 0xca, 0x32, 0xa1, 0xc2, 0x41, 0x8f, 0xce, + 0x63, 0x8f, 0xf3, 0xfb, 0xa1, 0xbe, 0xce, 0xef, 0xdf, 0x80, 0x29, 0x19, 0x15, 0x53, 0x7b, 0x47, + 0x06, 0x38, 0xb3, 0x86, 0x44, 0x42, 0x23, 0x83, 0xe7, 0x24, 0x2e, 0xc5, 0xa8, 0xe2, 0x2e, 0x3e, + 0xe8, 0x75, 0x18, 0x67, 0x93, 0x1c, 0x32, 0x86, 0x7d, 0x32, 0x96, 0x07, 0x2b, 0x1a, 0x49, 0x1c, + 0xe5, 0xd0, 0xf3, 0x74, 0x6b, 0xa2, 0xef, 0xd3, 0xad, 0xa6, 0xa6, 0x86, 0x26, 0xf9, 0x6a, 0xfc, + 0x72, 0x66, 0x8d, 0x97, 0xe1, 0xd2, 0xee, 0x5d, 0xbd, 0x57, 0xfa, 0x51, 0x1e, 0x92, 0x23, 0x9a, + 0xe1, 0x73, 0x42, 0xc6, 0x1d, 0x9e, 0x13, 0x8a, 0x84, 0x97, 0x73, 0x87, 0x16, 0x5e, 0xce, 0x1f, + 0x68, 0x78, 0xf9, 0x0c, 0x00, 0x8f, 0x38, 0x71, 0x21, 0xcd, 0xb5, 0xf5, 0xb8, 0xf6, 0x4e, 0x8a, + 0x82, 0x60, 0x0d, 0x0b, 0x3d, 0xad, 0x6c, 0x20, 0xf1, 0x54, 0xdb, 0xe7, 0xba, 0xee, 0x00, 0x1c, + 0x8f, 0xf8, 0xb3, 0xb1, 0xa3, 0xb0, 0x0c, 0x17, 0xdd, 0x12, 0x22, 0xa1, 0xc3, 0xd9, 0x22, 0xa1, + 0xe6, 0x1f, 0xe5, 0x20, 0x62, 0x8e, 0xc6, 0x9f, 0x27, 0xd7, 0x1e, 0x37, 0x4f, 0x7c, 0x22, 0x8c, + 0x5f, 0x0c, 0xee, 0xaa, 0x91, 0xe2, 0x3e, 0xe5, 0x11, 0xc4, 0x32, 0x13, 0xd2, 0x91, 0xd9, 0x0c, + 0x0e, 0xa6, 0x4d, 0x47, 0x36, 0xff, 0x3b, 0x07, 0x11, 0x05, 0x8f, 0xde, 0x31, 0x60, 0x9a, 0xc4, + 0xbe, 0xae, 0x10, 0x84, 0x32, 0xbe, 0x9c, 0xed, 0x93, 0x17, 0x5d, 0x1f, 0x67, 0x08, 0xf3, 0xd8, + 0xe2, 0x28, 0x1e, 0xee, 0x66, 0x8a, 0xbe, 0x63, 0xc0, 0x71, 0xd2, 0xfd, 0xf9, 0x8c, 0x6c, 0x81, + 0x88, 0x84, 0xef, 0x6f, 0x94, 0x4e, 0xee, 0xee, 0xcc, 0x27, 0x7d, 0x58, 0x04, 0x27, 0xb1, 0x43, + 0x2f, 0xc3, 0x00, 0x71, 0x6b, 0xc1, 0xe9, 0x64, 0x76, 0xb6, 0xc1, 0x57, 0x51, 0xc2, 0x35, 0x52, + 0x74, 0x6b, 0x1e, 0xe6, 0x44, 0xcd, 0x9f, 0xe7, 0x61, 0x2a, 0xfe, 0xf2, 0x92, 0xbc, 0x6b, 0x3a, + 0x90, 0x78, 0xd7, 0x94, 0x09, 0x22, 0x7e, 0x3e, 0x1f, 0x7f, 0xd7, 0x8c, 0x1f, 0xb3, 0x0b, 0x98, + 0x12, 0x44, 0xfc, 0x59, 0x91, 0xc1, 0x7d, 0x08, 0x22, 0xfe, 0x96, 0x48, 0x48, 0x0b, 0x9d, 0x8f, + 0x1e, 0x78, 0x9a, 0xf1, 0x03, 0xcf, 0x69, 0xbd, 0x2f, 0xfd, 0x9e, 0x79, 0x36, 0xa1, 0xa0, 0xcd, + 0x83, 0xdc, 0x3c, 0x4f, 0x64, 0x1e, 0xf7, 0x70, 0xd9, 0x4d, 0x8a, 0x8b, 0x1e, 0x21, 0x44, 0xa7, + 0x1f, 0x0a, 0x57, 0x3e, 0x5a, 0xfb, 0x3a, 0xbb, 0xe3, 0xc3, 0xa5, 0x51, 0x33, 0xff, 0xc5, 0x80, + 0xf1, 0xc8, 0xbb, 0x0d, 0x8c, 0x5b, 0xf0, 0x20, 0x47, 0xff, 0x9f, 0x12, 0xb9, 0xa6, 0x28, 0x60, + 0x8d, 0x1a, 0xfa, 0x3a, 0x14, 0x1a, 0x8e, 0x5d, 0xa3, 0x9e, 0x5f, 0x76, 0xc8, 0x96, 0xdc, 0x27, + 0x59, 0x4f, 0x31, 0xf8, 0xdb, 0x2a, 0xab, 0x82, 0xcc, 0x92, 0xd3, 0x6c, 0x35, 0xa8, 0x2f, 0x5e, + 0x91, 0xc1, 0x3a, 0x71, 0x9e, 0xe3, 0xa5, 0x92, 0xe4, 0xee, 0xd5, 0x1c, 0xaf, 0x30, 0xbb, 0xef, + 0x80, 0x73, 0xbc, 0x22, 0x69, 0x83, 0x7b, 0xe4, 0x78, 0x29, 0xdc, 0x7b, 0x36, 0xc7, 0x4b, 0xb5, + 0xb0, 0x87, 0x67, 0xff, 0xde, 0x80, 0xd6, 0x8b, 0xa8, 0x77, 0x9f, 0xbb, 0x83, 0x77, 0xff, 0x0a, + 0x8c, 0x58, 0xb6, 0x4f, 0xdd, 0x6d, 0xd2, 0x90, 0xe1, 0xa4, 0xac, 0x6b, 0x51, 0x75, 0x75, 0x45, + 0xd2, 0xc1, 0x8a, 0x22, 0x6a, 0xc0, 0x89, 0xcd, 0xe8, 0xd3, 0x6f, 0xf2, 0xa3, 0x15, 0x22, 0x58, + 0xf9, 0x58, 0x70, 0x42, 0x7d, 0x29, 0x09, 0xe9, 0x76, 0x2f, 0x00, 0x4e, 0x26, 0x8a, 0xde, 0x84, + 0x71, 0xdd, 0x02, 0x08, 0xef, 0x75, 0xec, 0x4f, 0xa5, 0xab, 0x47, 0x0b, 0x74, 0x83, 0xc3, 0xc3, + 0x51, 0x5e, 0xe8, 0x3d, 0x03, 0x4e, 0x6e, 0x26, 0x3f, 0x73, 0x27, 0xa5, 0xfb, 0xd3, 0xd9, 0x1c, + 0xc4, 0x18, 0x91, 0xd2, 0xfd, 0xbb, 0x3b, 0xf3, 0xbd, 0x1e, 0xd2, 0xc3, 0xbd, 0x58, 0x9b, 0xef, + 0x1a, 0x30, 0x11, 0xcd, 0x9f, 0xbd, 0xeb, 0x11, 0x80, 0x8f, 0xf2, 0x30, 0x19, 0xdb, 0x9b, 0xb1, + 0x28, 0xc0, 0xe8, 0x51, 0x46, 0x01, 0x86, 0xfa, 0x8a, 0x02, 0x24, 0xbb, 0xbf, 0x03, 0x7d, 0xb9, + 0xbf, 0x4f, 0x0a, 0x17, 0x54, 0xce, 0xed, 0xca, 0xb2, 0xbc, 0xf0, 0xa5, 0x3d, 0xcf, 0xa1, 0x01, + 0x71, 0x14, 0x97, 0x1b, 0x60, 0xd5, 0xee, 0x57, 0xc3, 0xa5, 0xff, 0xfc, 0x78, 0xd6, 0xab, 0x85, + 0x8a, 0x80, 0x30, 0xc0, 0x12, 0x00, 0x38, 0x89, 0x9d, 0xf9, 0x6f, 0x23, 0x70, 0x22, 0xf9, 0xa8, + 0x60, 0xef, 0xf3, 0x94, 0xd7, 0x61, 0x74, 0x23, 0xf8, 0xf0, 0x8b, 0xdc, 0x2b, 0x29, 0xdf, 0xbb, + 0xba, 0xf3, 0xf7, 0x62, 0x84, 0x8d, 0xa4, 0x70, 0x70, 0xc8, 0x85, 0xb1, 0xac, 0xf2, 0x17, 0x7c, + 0xeb, 0xed, 0x0d, 0x69, 0x4e, 0xa4, 0x64, 0x79, 0xe7, 0x87, 0x7f, 0x05, 0x4b, 0x85, 0x83, 0x43, + 0x2e, 0x88, 0xc2, 0x90, 0x60, 0x20, 0xd5, 0x63, 0x31, 0xf5, 0x29, 0x46, 0x4f, 0x66, 0xdc, 0xd9, + 0x10, 0x08, 0x58, 0x12, 0x97, 0x6c, 0x1a, 0x64, 0x43, 0x2a, 0xcb, 0xf4, 0x6c, 0x7a, 0xbd, 0x98, + 0xa1, 0xd8, 0xac, 0x12, 0xc1, 0xa6, 0x41, 0x38, 0x9b, 0x3a, 0xbf, 0xe6, 0x2e, 0xe3, 0x25, 0x29, + 0xd9, 0xdc, 0xe1, 0x6a, 0xbc, 0x8c, 0x32, 0x71, 0x04, 0x2c, 0x89, 0xa3, 0x57, 0x61, 0xe0, 0xf5, + 0x36, 0x09, 0x12, 0x64, 0x52, 0xfa, 0x36, 0x3d, 0x8f, 0xad, 0x44, 0xee, 0x0f, 0x03, 0x63, 0x4e, + 0x16, 0x75, 0xa0, 0x40, 0xc2, 0x0f, 0x45, 0xc9, 0x07, 0x86, 0x2f, 0x65, 0x7b, 0x7d, 0xb1, 0xd7, + 0x17, 0xa6, 0xa4, 0x45, 0x1b, 0x62, 0x61, 0x9d, 0x17, 0x22, 0x30, 0x48, 0xde, 0x68, 0xbb, 0x54, + 0x06, 0xe4, 0x9e, 0x49, 0xc9, 0xb4, 0xe7, 0x97, 0x99, 0xc4, 0x71, 0x11, 0x87, 0x63, 0x41, 0x99, + 0xb1, 0xa8, 0x59, 0x3e, 0x25, 0x52, 0x16, 0x3c, 0x93, 0x7a, 0x25, 0xf4, 0x78, 0x36, 0x41, 0xb0, + 0xe0, 0x70, 0x2c, 0x28, 0x23, 0x0b, 0x86, 0x6b, 0xe2, 0x49, 0x23, 0x1e, 0x4d, 0x4d, 0xfd, 0x84, + 0xee, 0x9d, 0xde, 0x8b, 0x12, 0x39, 0x3a, 0x12, 0x03, 0x07, 0xf4, 0xcd, 0x37, 0xe1, 0xbe, 0xe4, + 0x9b, 0x35, 0xe9, 0x4e, 0x6c, 0x5b, 0xc4, 0x0f, 0xde, 0x43, 0x51, 0x18, 0x6b, 0xc4, 0xaf, 0x63, + 0x0e, 0x41, 0x0f, 0x40, 0xbe, 0xed, 0x36, 0xe2, 0xcf, 0xfe, 0xbc, 0x88, 0x57, 0x31, 0x2b, 0x2f, + 0x3d, 0xfb, 0xc1, 0x27, 0xa7, 0x8e, 0x7d, 0xf8, 0xc9, 0xa9, 0x63, 0x1f, 0x7f, 0x72, 0xea, 0xd8, + 0xb7, 0x76, 0x4f, 0x19, 0x1f, 0xec, 0x9e, 0x32, 0x3e, 0xdc, 0x3d, 0x65, 0x7c, 0xbc, 0x7b, 0xca, + 0xf8, 0xc5, 0xee, 0x29, 0xe3, 0xdd, 0x5f, 0x9e, 0x3a, 0x76, 0xe3, 0xb3, 0x69, 0xbe, 0x80, 0xfa, + 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdd, 0x20, 0x87, 0xb5, 0x28, 0x75, 0x00, 0x00, } func (m *AnalysisRunArgument) Marshal() (dAtA []byte, err error) { @@ -6637,6 +6762,28 @@ func (m *PromotionPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.PromotionWindows) > 0 { + for iNdEx := len(m.PromotionWindows) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PromotionWindows[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + i-- + if m.AutoPromotionEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 if m.StageSelector != nil { { size, err := m.StageSelector.MarshalToSizedBuffer(dAtA[:i]) @@ -6647,16 +6794,8 @@ func (m *PromotionPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a - } - i-- - if m.AutoPromotionEnabled { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0x10 i -= len(m.Stage) copy(dAtA[i:], m.Stage) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Stage))) @@ -7351,111 +7490,7 @@ func (m *PromotionTemplateSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *QuayWebhookReceiverConfig) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *QuayWebhookReceiverConfig) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *QuayWebhookReceiverConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *RepoSubscription) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *RepoSubscription) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *RepoSubscription) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Subscription != nil { - { - size, err := m.Subscription.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - if m.Chart != nil { - { - size, err := m.Chart.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.Image != nil { - { - size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Git != nil { - { - size, err := m.Git.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Stage) Marshal() (dAtA []byte, err error) { +func (m *PromotionWindow) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -7465,26 +7500,16 @@ func (m *Stage) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Stage) MarshalTo(dAtA []byte) (int, error) { +func (m *PromotionWindow) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Stage) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *PromotionWindow) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a { size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -7508,7 +7533,7 @@ func (m *Stage) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *StageList) Marshal() (dAtA []byte, err error) { +func (m *PromotionWindowList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -7518,12 +7543,12 @@ func (m *StageList) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *StageList) MarshalTo(dAtA []byte) (int, error) { +func (m *PromotionWindowList) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *StageList) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *PromotionWindowList) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -7555,7 +7580,7 @@ func (m *StageList) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *StageSpec) Marshal() (dAtA []byte, err error) { +func (m *PromotionWindowReference) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -7565,18 +7590,298 @@ func (m *StageSpec) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *StageSpec) MarshalTo(dAtA []byte) (int, error) { +func (m *PromotionWindowReference) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *StageSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *PromotionWindowReference) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Vars) > 0 { - for iNdEx := len(m.Vars) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PromotionWindowSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PromotionWindowSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PromotionWindowSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.TimeZone) + copy(dAtA[i:], m.TimeZone) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.TimeZone))) + i-- + dAtA[i] = 0x22 + i -= len(m.Duration) + copy(dAtA[i:], m.Duration) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Duration))) + i-- + dAtA[i] = 0x1a + i -= len(m.Schedule) + copy(dAtA[i:], m.Schedule) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Schedule))) + i-- + dAtA[i] = 0x12 + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QuayWebhookReceiverConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QuayWebhookReceiverConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuayWebhookReceiverConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *RepoSubscription) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RepoSubscription) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RepoSubscription) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Subscription != nil { + { + size, err := m.Subscription.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Chart != nil { + { + size, err := m.Chart.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Image != nil { + { + size, err := m.Image.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Git != nil { + { + size, err := m.Git.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Stage) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Stage) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Stage) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ObjectMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *StageList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StageList) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StageList) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *StageSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StageSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StageSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Vars) > 0 { + for iNdEx := len(m.Vars) - 1; iNdEx >= 0; iNdEx-- { { size, err := m.Vars[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -9841,11 +10146,17 @@ func (m *PromotionPolicy) Size() (n int) { _ = l l = len(m.Stage) n += 1 + l + sovGenerated(uint64(l)) - n += 2 if m.StageSelector != nil { l = m.StageSelector.Size() n += 1 + l + sovGenerated(uint64(l)) } + n += 2 + if len(m.PromotionWindows) > 0 { + for _, e := range m.PromotionWindows { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -10104,6 +10415,66 @@ func (m *PromotionTemplateSpec) Size() (n int) { return n } +func (m *PromotionWindow) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PromotionWindowList) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PromotionWindowReference) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PromotionWindowSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Schedule) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Duration) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.TimeZone) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *QuayWebhookReceiverConfig) Size() (n int) { if m == nil { return 0 @@ -11593,10 +11964,16 @@ func (this *PromotionPolicy) String() string { if this == nil { return "nil" } + repeatedStringForPromotionWindows := "[]PromotionWindowReference{" + for _, f := range this.PromotionWindows { + repeatedStringForPromotionWindows += strings.Replace(strings.Replace(f.String(), "PromotionWindowReference", "PromotionWindowReference", 1), `&`, ``, 1) + "," + } + repeatedStringForPromotionWindows += "}" s := strings.Join([]string{`&PromotionPolicy{`, `Stage:` + fmt.Sprintf("%v", this.Stage) + `,`, - `AutoPromotionEnabled:` + fmt.Sprintf("%v", this.AutoPromotionEnabled) + `,`, `StageSelector:` + strings.Replace(this.StageSelector.String(), "PromotionPolicySelector", "PromotionPolicySelector", 1) + `,`, + `AutoPromotionEnabled:` + fmt.Sprintf("%v", this.AutoPromotionEnabled) + `,`, + `PromotionWindows:` + repeatedStringForPromotionWindows + `,`, `}`, }, "") return s @@ -11793,10 +12170,61 @@ func (this *PromotionTemplateSpec) String() string { for _, f := range this.Vars { repeatedStringForVars += strings.Replace(strings.Replace(f.String(), "ExpressionVariable", "ExpressionVariable", 1), `&`, ``, 1) + "," } - repeatedStringForVars += "}" - s := strings.Join([]string{`&PromotionTemplateSpec{`, - `Steps:` + repeatedStringForSteps + `,`, - `Vars:` + repeatedStringForVars + `,`, + repeatedStringForVars += "}" + s := strings.Join([]string{`&PromotionTemplateSpec{`, + `Steps:` + repeatedStringForSteps + `,`, + `Vars:` + repeatedStringForVars + `,`, + `}`, + }, "") + return s +} +func (this *PromotionWindow) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PromotionWindow{`, + `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PromotionWindowSpec", "PromotionWindowSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PromotionWindowList) String() string { + if this == nil { + return "nil" + } + repeatedStringForItems := "[]PromotionWindow{" + for _, f := range this.Items { + repeatedStringForItems += strings.Replace(strings.Replace(f.String(), "PromotionWindow", "PromotionWindow", 1), `&`, ``, 1) + "," + } + repeatedStringForItems += "}" + s := strings.Join([]string{`&PromotionWindowList{`, + `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + repeatedStringForItems + `,`, + `}`, + }, "") + return s +} +func (this *PromotionWindowReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PromotionWindowReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `}`, + }, "") + return s +} +func (this *PromotionWindowSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PromotionWindowSpec{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, + `Duration:` + fmt.Sprintf("%v", this.Duration) + `,`, + `TimeZone:` + fmt.Sprintf("%v", this.TimeZone) + `,`, `}`, }, "") return s @@ -19680,29 +20108,331 @@ func (m *GitSubscription) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IgnoreTags = append(m.IgnoreTags, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IgnoreTagsRegexes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IgnoreTagsRegexes = append(m.IgnoreTagsRegexes, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludePaths", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IncludePaths = append(m.IncludePaths, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InsecureSkipTLSVerify", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.InsecureSkipTLSVerify = bool(v != 0) + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RepoURL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SemverConstraint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SemverConstraint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StrictSemvers", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.StrictSemvers = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GiteaWebhookReceiverConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GiteaWebhookReceiverConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GiteaWebhookReceiverConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.IgnoreTags = append(m.IgnoreTags, string(dAtA[iNdEx:postIndex])) + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 9: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HarborWebhookReceiverConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HarborWebhookReceiverConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HarborWebhookReceiverConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IgnoreTagsRegexes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19712,27 +20442,78 @@ func (m *GitSubscription) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.IgnoreTagsRegexes = append(m.IgnoreTagsRegexes, string(dAtA[iNdEx:postIndex])) + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 10: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Health) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Health: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Health: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IncludePaths", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19760,31 +20541,11 @@ func (m *GitSubscription) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.IncludePaths = append(m.IncludePaths, string(dAtA[iNdEx:postIndex])) + m.Status = HealthState(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 11: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InsecureSkipTLSVerify", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.InsecureSkipTLSVerify = bool(v != 0) - case 12: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Issues", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19812,13 +20573,13 @@ func (m *GitSubscription) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RepoURL = string(dAtA[iNdEx:postIndex]) + m.Issues = append(m.Issues, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 13: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SemverConstraint", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19828,29 +20589,33 @@ func (m *GitSubscription) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.SemverConstraint = string(dAtA[iNdEx:postIndex]) + if m.Config == nil { + m.Config = &v11.JSON{} + } + if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 14: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StrictSemvers", wireType) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Output", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -19860,13 +20625,28 @@ func (m *GitSubscription) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - b := bool(v != 0) - m.StrictSemvers = &b + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Output == nil { + m.Output = &v11.JSON{} + } + if err := m.Output.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -19888,7 +20668,7 @@ func (m *GitSubscription) Unmarshal(dAtA []byte) error { } return nil } -func (m *GiteaWebhookReceiverConfig) Unmarshal(dAtA []byte) error { +func (m *HealthCheckStep) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -19898,28 +20678,60 @@ func (m *GiteaWebhookReceiverConfig) Unmarshal(dAtA []byte) error { if shift >= 64 { return ErrIntOverflowGenerated } - if iNdEx >= l { + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HealthCheckStep: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HealthCheckStep: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Uses", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GiteaWebhookReceiverConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GiteaWebhookReceiverConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Uses = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -19946,7 +20758,10 @@ func (m *GiteaWebhookReceiverConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Config == nil { + m.Config = &v11.JSON{} + } + if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -19971,7 +20786,7 @@ func (m *GiteaWebhookReceiverConfig) Unmarshal(dAtA []byte) error { } return nil } -func (m *HarborWebhookReceiverConfig) Unmarshal(dAtA []byte) error { +func (m *HealthStats) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -19994,17 +20809,17 @@ func (m *HarborWebhookReceiverConfig) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: HarborWebhookReceiverConfig: wiretype end group for non-group") + return fmt.Errorf("proto: HealthStats: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: HarborWebhookReceiverConfig: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: HealthStats: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Healthy", wireType) } - var msglen int + m.Healthy = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20014,25 +20829,11 @@ func (m *HarborWebhookReceiverConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Healthy |= int64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -20054,7 +20855,7 @@ func (m *HarborWebhookReceiverConfig) Unmarshal(dAtA []byte) error { } return nil } -func (m *Health) Unmarshal(dAtA []byte) error { +func (m *Image) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -20077,15 +20878,15 @@ func (m *Health) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Health: wiretype end group for non-group") + return fmt.Errorf("proto: Image: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Health: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Image: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20113,11 +20914,11 @@ func (m *Health) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Status = HealthState(dAtA[iNdEx:postIndex]) + m.RepoURL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Issues", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Tag", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20145,13 +20946,13 @@ func (m *Health) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Issues = append(m.Issues, string(dAtA[iNdEx:postIndex])) + m.Tag = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Digest", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20161,31 +20962,27 @@ func (m *Health) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Config == nil { - m.Config = &v11.JSON{} - } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Digest = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Output", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -20212,12 +21009,103 @@ func (m *Health) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Output == nil { - m.Output = &v11.JSON{} + if m.Annotations == nil { + m.Annotations = make(map[string]string) } - if err := m.Output.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } } + m.Annotations[mapkey] = mapvalue iNdEx = postIndex default: iNdEx = preIndex @@ -20240,7 +21128,7 @@ func (m *Health) Unmarshal(dAtA []byte) error { } return nil } -func (m *HealthCheckStep) Unmarshal(dAtA []byte) error { +func (m *ImageDiscoveryResult) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -20263,15 +21151,15 @@ func (m *HealthCheckStep) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: HealthCheckStep: wiretype end group for non-group") + return fmt.Errorf("proto: ImageDiscoveryResult: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: HealthCheckStep: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ImageDiscoveryResult: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Uses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20299,13 +21187,13 @@ func (m *HealthCheckStep) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Uses = string(dAtA[iNdEx:postIndex]) + m.RepoURL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Platform", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20315,83 +21203,29 @@ func (m *HealthCheckStep) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Config == nil { - m.Config = &v11.JSON{} - } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *HealthStats) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: HealthStats: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: HealthStats: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Healthy", wireType) + m.Platform = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field References", wireType) } - m.Healthy = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20401,11 +21235,26 @@ func (m *HealthStats) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Healthy |= int64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.References = append(m.References, DiscoveredImageReference{}) + if err := m.References[len(m.References)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -20427,7 +21276,7 @@ func (m *HealthStats) Unmarshal(dAtA []byte) error { } return nil } -func (m *Image) Unmarshal(dAtA []byte) error { +func (m *ImageSubscription) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -20450,15 +21299,15 @@ func (m *Image) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Image: wiretype end group for non-group") + return fmt.Errorf("proto: ImageSubscription: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Image: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ImageSubscription: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowTags", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20486,11 +21335,11 @@ func (m *Image) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RepoURL = string(dAtA[iNdEx:postIndex]) + m.AllowTags = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Tag", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AllowTagsRegexes", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20518,13 +21367,13 @@ func (m *Image) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Tag = string(dAtA[iNdEx:postIndex]) + m.AllowTagsRegexes = append(m.AllowTagsRegexes, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Digest", wireType) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CacheByTag", wireType) } - var stringLen uint64 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20534,29 +21383,17 @@ func (m *Image) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Digest = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 5: + m.CacheByTag = bool(v != 0) + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Constraint", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20566,172 +21403,46 @@ func (m *Image) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Annotations == nil { - m.Annotations = make(map[string]string) + m.Constraint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DiscoveryLimit", wireType) } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + m.DiscoveryLimit = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + if iNdEx >= l { + return io.ErrUnexpectedEOF } - } - m.Annotations[mapkey] = mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ImageDiscoveryResult) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ImageDiscoveryResult: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ImageDiscoveryResult: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + b := dAtA[iNdEx] + iNdEx++ + m.DiscoveryLimit |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IgnoreTags", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20759,11 +21470,11 @@ func (m *ImageDiscoveryResult) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RepoURL = string(dAtA[iNdEx:postIndex]) + m.IgnoreTags = append(m.IgnoreTags, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Platform", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IgnoreTagsRegexes", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20791,13 +21502,13 @@ func (m *ImageDiscoveryResult) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Platform = string(dAtA[iNdEx:postIndex]) + m.IgnoreTagsRegexes = append(m.IgnoreTagsRegexes, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 3: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field References", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ImageSelectionStrategy", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20807,79 +21518,47 @@ func (m *ImageDiscoveryResult) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.References = append(m.References, DiscoveredImageReference{}) - if err := m.References[len(m.References)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ImageSelectionStrategy = ImageSelectionStrategy(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ImageSubscription) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InsecureSkipTLSVerify", wireType) } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ImageSubscription: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ImageSubscription: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.InsecureSkipTLSVerify = bool(v != 0) + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowTags", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Platform", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20907,11 +21586,11 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowTags = string(dAtA[iNdEx:postIndex]) + m.Platform = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AllowTagsRegexes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -20939,11 +21618,11 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AllowTagsRegexes = append(m.AllowTagsRegexes, string(dAtA[iNdEx:postIndex])) + m.RepoURL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 12: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CacheByTag", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StrictSemvers", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -20960,12 +21639,63 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { break } } - m.CacheByTag = bool(v != 0) - case 4: + b := bool(v != 0) + m.StrictSemvers = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IndexSelector) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IndexSelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IndexSelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Constraint", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MatchIndices", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -20975,46 +21705,79 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Constraint = string(dAtA[iNdEx:postIndex]) + m.MatchIndices = append(m.MatchIndices, IndexSelectorRequirement{}) + if err := m.MatchIndices[len(m.MatchIndices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 5: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field DiscoveryLimit", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - m.DiscoveryLimit = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.DiscoveryLimit |= int64(b&0x7F) << shift - if b < 0x80 { - break - } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated } - case 6: + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IndexSelectorRequirement) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IndexSelectorRequirement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IndexSelectorRequirement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IgnoreTags", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -21042,11 +21805,11 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.IgnoreTags = append(m.IgnoreTags, string(dAtA[iNdEx:postIndex])) + m.Key = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 7: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IgnoreTagsRegexes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -21074,11 +21837,11 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.IgnoreTagsRegexes = append(m.IgnoreTagsRegexes, string(dAtA[iNdEx:postIndex])) + m.Operator = IndexSelectorOperator(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 8: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ImageSelectionStrategy", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -21106,33 +21869,63 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ImageSelectionStrategy = ImageSelectionStrategy(dAtA[iNdEx:postIndex]) + m.Value = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field InsecureSkipTLSVerify", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated } - m.InsecureSkipTLSVerify = bool(v != 0) - case 10: + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Project) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Project: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Project: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Platform", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21142,29 +21935,30 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Platform = string(dAtA[iNdEx:postIndex]) + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 11: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RepoURL", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21174,45 +21968,25 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.RepoURL = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 12: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StrictSemvers", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - b := bool(v != 0) - m.StrictSemvers = &b + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -21234,7 +22008,7 @@ func (m *ImageSubscription) Unmarshal(dAtA []byte) error { } return nil } -func (m *IndexSelector) Unmarshal(dAtA []byte) error { +func (m *ProjectConfig) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21257,15 +22031,15 @@ func (m *IndexSelector) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: IndexSelector: wiretype end group for non-group") + return fmt.Errorf("proto: ProjectConfig: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: IndexSelector: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProjectConfig: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MatchIndices", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21292,8 +22066,73 @@ func (m *IndexSelector) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.MatchIndices = append(m.MatchIndices, IndexSelectorRequirement{}) - if err := m.MatchIndices[len(m.MatchIndices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -21318,7 +22157,7 @@ func (m *IndexSelector) Unmarshal(dAtA []byte) error { } return nil } -func (m *IndexSelectorRequirement) Unmarshal(dAtA []byte) error { +func (m *ProjectConfigList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21340,50 +22179,18 @@ func (m *IndexSelectorRequirement) Unmarshal(dAtA []byte) error { } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: IndexSelectorRequirement: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: IndexSelectorRequirement: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Key = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: + if wireType == 4 { + return fmt.Errorf("proto: ProjectConfigList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProjectConfigList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21393,29 +22200,30 @@ func (m *IndexSelectorRequirement) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Operator = IndexSelectorOperator(dAtA[iNdEx:postIndex]) + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21425,23 +22233,25 @@ func (m *IndexSelectorRequirement) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Value = string(dAtA[iNdEx:postIndex]) + m.Items = append(m.Items, ProjectConfig{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -21464,7 +22274,7 @@ func (m *IndexSelectorRequirement) Unmarshal(dAtA []byte) error { } return nil } -func (m *Project) Unmarshal(dAtA []byte) error { +func (m *ProjectConfigSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21487,15 +22297,15 @@ func (m *Project) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Project: wiretype end group for non-group") + return fmt.Errorf("proto: ProjectConfigSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Project: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProjectConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PromotionPolicies", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21522,13 +22332,14 @@ func (m *Project) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.PromotionPolicies = append(m.PromotionPolicies, PromotionPolicy{}) + if err := m.PromotionPolicies[len(m.PromotionPolicies)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WebhookReceivers", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21555,7 +22366,8 @@ func (m *Project) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.WebhookReceivers = append(m.WebhookReceivers, WebhookReceiverConfig{}) + if err := m.WebhookReceivers[len(m.WebhookReceivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -21580,7 +22392,7 @@ func (m *Project) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProjectConfig) Unmarshal(dAtA []byte) error { +func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21603,15 +22415,15 @@ func (m *ProjectConfig) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ProjectConfig: wiretype end group for non-group") + return fmt.Errorf("proto: ProjectConfigStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ProjectConfig: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProjectConfigStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21638,13 +22450,14 @@ func (m *ProjectConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WebhookReceivers", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21671,15 +22484,35 @@ func (m *ProjectConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.WebhookReceivers = append(m.WebhookReceivers, WebhookReceiverDetails{}) + if err := m.WebhookReceivers[len(m.WebhookReceivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + m.ObservedGeneration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservedGeneration |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastHandledRefresh", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -21689,24 +22522,23 @@ func (m *ProjectConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.LastHandledRefresh = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -21729,7 +22561,7 @@ func (m *ProjectConfig) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProjectConfigList) Unmarshal(dAtA []byte) error { +func (m *ProjectList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21752,10 +22584,10 @@ func (m *ProjectConfigList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ProjectConfigList: wiretype end group for non-group") + return fmt.Errorf("proto: ProjectList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ProjectConfigList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProjectList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -21820,7 +22652,7 @@ func (m *ProjectConfigList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, ProjectConfig{}) + m.Items = append(m.Items, Project{}) if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -21846,7 +22678,7 @@ func (m *ProjectConfigList) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProjectConfigSpec) Unmarshal(dAtA []byte) error { +func (m *ProjectStats) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21869,15 +22701,15 @@ func (m *ProjectConfigSpec) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ProjectConfigSpec: wiretype end group for non-group") + return fmt.Errorf("proto: ProjectStats: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ProjectConfigSpec: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProjectStats: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PromotionPolicies", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Warehouses", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21904,14 +22736,13 @@ func (m *ProjectConfigSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PromotionPolicies = append(m.PromotionPolicies, PromotionPolicy{}) - if err := m.PromotionPolicies[len(m.PromotionPolicies)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Warehouses.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WebhookReceivers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Stages", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21938,8 +22769,7 @@ func (m *ProjectConfigSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.WebhookReceivers = append(m.WebhookReceivers, WebhookReceiverConfig{}) - if err := m.WebhookReceivers[len(m.WebhookReceivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Stages.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -21964,7 +22794,7 @@ func (m *ProjectConfigSpec) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { +func (m *ProjectStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21987,13 +22817,13 @@ func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ProjectConfigStatus: wiretype end group for non-group") + return fmt.Errorf("proto: ProjectStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ProjectConfigStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ProjectStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) } @@ -22027,9 +22857,9 @@ func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WebhookReceivers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22056,16 +22886,68 @@ func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.WebhookReceivers = append(m.WebhookReceivers, WebhookReceiverDetails{}) - if err := m.WebhookReceivers[len(m.WebhookReceivers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Stats == nil { + m.Stats = &ProjectStats{} + } + if err := m.Stats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - m.ObservedGeneration = 0 + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Promotion) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Promotion: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Promotion: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22075,16 +22957,63 @@ func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.ObservedGeneration |= int64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - case 4: + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastHandledRefresh", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22094,23 +23023,24 @@ func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.LastHandledRefresh = string(dAtA[iNdEx:postIndex]) + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -22133,7 +23063,7 @@ func (m *ProjectConfigStatus) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProjectList) Unmarshal(dAtA []byte) error { +func (m *PromotionList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22156,10 +23086,10 @@ func (m *ProjectList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ProjectList: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ProjectList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -22224,7 +23154,7 @@ func (m *ProjectList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, Project{}) + m.Items = append(m.Items, Promotion{}) if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -22250,7 +23180,7 @@ func (m *ProjectList) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProjectStats) Unmarshal(dAtA []byte) error { +func (m *PromotionPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22273,15 +23203,47 @@ func (m *ProjectStats) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ProjectStats: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionPolicy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ProjectStats: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionPolicy: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Warehouses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Stage", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Stage = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StageSelector", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22308,13 +23270,36 @@ func (m *ProjectStats) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Warehouses.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.StageSelector == nil { + m.StageSelector = &PromotionPolicySelector{} + } + if err := m.StageSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AutoPromotionEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AutoPromotionEnabled = bool(v != 0) + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Stages", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PromotionWindows", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22341,7 +23326,8 @@ func (m *ProjectStats) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Stages.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.PromotionWindows = append(m.PromotionWindows, PromotionWindowReference{}) + if err := m.PromotionWindows[len(m.PromotionWindows)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -22366,7 +23352,7 @@ func (m *ProjectStats) Unmarshal(dAtA []byte) error { } return nil } -func (m *ProjectStatus) Unmarshal(dAtA []byte) error { +func (m *PromotionPolicySelector) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22389,17 +23375,17 @@ func (m *ProjectStatus) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ProjectStatus: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionPolicySelector: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ProjectStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionPolicySelector: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 3: + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22409,29 +23395,27 @@ func (m *ProjectStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Conditions = append(m.Conditions, v1.Condition{}) - if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Stats", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22458,10 +23442,10 @@ func (m *ProjectStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Stats == nil { - m.Stats = &ProjectStats{} + if m.LabelSelector == nil { + m.LabelSelector = &v1.LabelSelector{} } - if err := m.Stats.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LabelSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -22486,7 +23470,7 @@ func (m *ProjectStatus) Unmarshal(dAtA []byte) error { } return nil } -func (m *Promotion) Unmarshal(dAtA []byte) error { +func (m *PromotionReference) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22509,17 +23493,17 @@ func (m *Promotion) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Promotion: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionReference: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Promotion: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionReference: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22529,28 +23513,27 @@ func (m *Promotion) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Freight", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22577,7 +23560,10 @@ func (m *Promotion) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Freight == nil { + m.Freight = &FreightReference{} + } + if err := m.Freight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -22610,63 +23596,16 @@ func (m *Promotion) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.Status == nil { + m.Status = &PromotionStatus{} + } if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PromotionList) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PromotionList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22693,41 +23632,10 @@ func (m *PromotionList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF + if m.FinishedAt == nil { + m.FinishedAt = &v1.Time{} } - m.Items = append(m.Items, Promotion{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.FinishedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -22752,7 +23660,7 @@ func (m *PromotionList) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionPolicy) Unmarshal(dAtA []byte) error { +func (m *PromotionSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22775,10 +23683,10 @@ func (m *PromotionPolicy) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionPolicy: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionPolicy: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -22814,10 +23722,10 @@ func (m *PromotionPolicy) Unmarshal(dAtA []byte) error { m.Stage = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AutoPromotionEnabled", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Freight", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22827,15 +23735,27 @@ func (m *PromotionPolicy) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.AutoPromotionEnabled = bool(v != 0) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Freight = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StageSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22862,10 +23782,42 @@ func (m *PromotionPolicy) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.StageSelector == nil { - m.StageSelector = &PromotionPolicySelector{} + m.Steps = append(m.Steps, PromotionStep{}) + if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if err := m.StageSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Vars", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Vars = append(m.Vars, ExpressionVariable{}) + if err := m.Vars[len(m.Vars)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -22890,7 +23842,7 @@ func (m *PromotionPolicy) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionPolicySelector) Unmarshal(dAtA []byte) error { +func (m *PromotionStatus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22913,15 +23865,15 @@ func (m *PromotionPolicySelector) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionPolicySelector: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionStatus: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionPolicySelector: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionStatus: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -22949,13 +23901,13 @@ func (m *PromotionPolicySelector) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.Phase = PromotionPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22965,81 +23917,27 @@ func (m *PromotionPolicySelector) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.LabelSelector == nil { - m.LabelSelector = &v1.LabelSelector{} - } - if err := m.LabelSelector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Message = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PromotionReference) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PromotionReference: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionReference: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastHandledRefresh", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -23067,9 +23965,9 @@ func (m *PromotionReference) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.LastHandledRefresh = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Freight", wireType) } @@ -23105,9 +24003,9 @@ func (m *PromotionReference) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23134,16 +24032,16 @@ func (m *PromotionReference) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Status == nil { - m.Status = &PromotionStatus{} + if m.FinishedAt == nil { + m.FinishedAt = &v1.Time{} } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.FinishedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FreightCollection", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23170,68 +24068,18 @@ func (m *PromotionReference) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.FinishedAt == nil { - m.FinishedAt = &v1.Time{} + if m.FreightCollection == nil { + m.FreightCollection = &FreightCollection{} } - if err := m.FinishedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.FreightCollection.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PromotionSpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PromotionSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Stage", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field HealthChecks", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23241,29 +24089,50 @@ func (m *PromotionSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Stage = string(dAtA[iNdEx:postIndex]) + m.HealthChecks = append(m.HealthChecks, HealthCheckStep{}) + if err := m.HealthChecks[len(m.HealthChecks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 2: + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentStep", wireType) + } + m.CurrentStep = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CurrentStep |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Freight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23273,27 +24142,31 @@ func (m *PromotionSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Freight = string(dAtA[iNdEx:postIndex]) + if m.State == nil { + m.State = &v11.JSON{} + } + if err := m.State.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 3: + case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StepExecutionMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23320,14 +24193,14 @@ func (m *PromotionSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Steps = append(m.Steps, PromotionStep{}) - if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.StepExecutionMetadata = append(m.StepExecutionMetadata, StepExecutionMetadata{}) + if err := m.StepExecutionMetadata[len(m.StepExecutionMetadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Vars", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23354,8 +24227,10 @@ func (m *PromotionSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Vars = append(m.Vars, ExpressionVariable{}) - if err := m.Vars[len(m.Vars)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.StartedAt == nil { + m.StartedAt = &v1.Time{} + } + if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -23380,7 +24255,7 @@ func (m *PromotionSpec) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionStatus) Unmarshal(dAtA []byte) error { +func (m *PromotionStep) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -23403,15 +24278,15 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionStatus: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionStep: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionStatus: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionStep: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Uses", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -23439,11 +24314,11 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Phase = PromotionPhase(dAtA[iNdEx:postIndex]) + m.Uses = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field As", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -23471,13 +24346,13 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Message = string(dAtA[iNdEx:postIndex]) + m.As = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastHandledRefresh", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23487,27 +24362,31 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.LastHandledRefresh = string(dAtA[iNdEx:postIndex]) + if m.Config == nil { + m.Config = &v11.JSON{} + } + if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex - case 5: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Freight", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Retry", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23534,16 +24413,16 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Freight == nil { - m.Freight = &FreightReference{} + if m.Retry == nil { + m.Retry = &PromotionStepRetry{} } - if err := m.Freight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Retry.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 6: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23570,16 +24449,16 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.FinishedAt == nil { - m.FinishedAt = &v1.Time{} + if m.Task == nil { + m.Task = &PromotionTaskReference{} } - if err := m.FinishedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Task.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 7: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FreightCollection", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Vars", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23606,18 +24485,16 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.FreightCollection == nil { - m.FreightCollection = &FreightCollection{} - } - if err := m.FreightCollection.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Vars = append(m.Vars, ExpressionVariable{}) + if err := m.Vars[len(m.Vars)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 8: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HealthChecks", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field If", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23627,31 +24504,29 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.HealthChecks = append(m.HealthChecks, HealthCheckStep{}) - if err := m.HealthChecks[len(m.HealthChecks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.If = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 9: + case 8: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field CurrentStep", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ContinueOnError", wireType) } - m.CurrentStep = 0 + var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23661,14 +24536,65 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.CurrentStep |= int64(b&0x7F) << shift + v |= int(b&0x7F) << shift if b < 0x80 { break } } - case 10: + m.ContinueOnError = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PromotionStepRetry) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PromotionStepRetry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PromotionStepRetry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23695,16 +24621,85 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.State == nil { - m.State = &v11.JSON{} + if m.Timeout == nil { + m.Timeout = &v1.Duration{} } - if err := m.State.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Timeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 11: + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ErrorThreshold", wireType) + } + m.ErrorThreshold = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ErrorThreshold |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PromotionTask) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PromotionTask: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PromotionTask: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StepExecutionMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23731,14 +24726,13 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.StepExecutionMetadata = append(m.StepExecutionMetadata, StepExecutionMetadata{}) - if err := m.StepExecutionMetadata[len(m.StepExecutionMetadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 12: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -23765,10 +24759,7 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.StartedAt == nil { - m.StartedAt = &v1.Time{} - } - if err := m.StartedAt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -23793,7 +24784,7 @@ func (m *PromotionStatus) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionStep) Unmarshal(dAtA []byte) error { +func (m *PromotionTaskList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -23816,17 +24807,17 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionStep: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionTaskList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionStep: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionTaskList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Uses", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23836,29 +24827,30 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Uses = string(dAtA[iNdEx:postIndex]) + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field As", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23868,65 +24860,81 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.As = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Config", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } + m.Items = append(m.Items, PromotionTask{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if msglen < 0 { - return ErrInvalidLengthGenerated + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + msglen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthGenerated } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if m.Config == nil { - m.Config = &v11.JSON{} + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PromotionTaskReference) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated } - if err := m.Config.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if iNdEx >= l { + return io.ErrUnexpectedEOF } - iNdEx = postIndex - case 4: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PromotionTaskReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PromotionTaskReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Retry", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23936,33 +24944,29 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Retry == nil { - m.Retry = &PromotionStepRetry{} - } - if err := m.Retry.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Task", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -23972,29 +24976,75 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.Task == nil { - m.Task = &PromotionTaskReference{} - } - if err := m.Task.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Kind = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { return err } - iNdEx = postIndex - case 6: + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PromotionTaskSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PromotionTaskSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PromotionTaskSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Vars", wireType) } @@ -24028,11 +25078,11 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 7: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field If", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24042,44 +25092,26 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.If = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ContinueOnError", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } + return ErrInvalidLengthGenerated } - m.ContinueOnError = bool(v != 0) + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Steps = append(m.Steps, PromotionStep{}) + if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -24101,7 +25133,7 @@ func (m *PromotionStep) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionStepRetry) Unmarshal(dAtA []byte) error { +func (m *PromotionTemplate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -24124,15 +25156,15 @@ func (m *PromotionStepRetry) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionStepRetry: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionTemplate: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionStepRetry: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionTemplate: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Timeout", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24159,32 +25191,10 @@ func (m *PromotionStepRetry) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Timeout == nil { - m.Timeout = &v1.Duration{} - } - if err := m.Timeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ErrorThreshold", wireType) - } - m.ErrorThreshold = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.ErrorThreshold |= uint32(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -24206,7 +25216,7 @@ func (m *PromotionStepRetry) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionTask) Unmarshal(dAtA []byte) error { +func (m *PromotionTemplateSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -24229,15 +25239,15 @@ func (m *PromotionTask) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionTask: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionTemplateSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionTask: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionTemplateSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24264,13 +25274,14 @@ func (m *PromotionTask) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Steps = append(m.Steps, PromotionStep{}) + if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Vars", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24297,7 +25308,8 @@ func (m *PromotionTask) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Vars = append(m.Vars, ExpressionVariable{}) + if err := m.Vars[len(m.Vars)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -24322,7 +25334,7 @@ func (m *PromotionTask) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionTaskList) Unmarshal(dAtA []byte) error { +func (m *PromotionWindow) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -24345,15 +25357,15 @@ func (m *PromotionTaskList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionTaskList: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionWindow: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionTaskList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionWindow: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24380,13 +25392,13 @@ func (m *PromotionTaskList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24413,8 +25425,7 @@ func (m *PromotionTaskList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, PromotionTask{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -24439,7 +25450,7 @@ func (m *PromotionTaskList) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionTaskReference) Unmarshal(dAtA []byte) error { +func (m *PromotionWindowList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -24462,17 +25473,17 @@ func (m *PromotionTaskReference) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionTaskReference: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionWindowList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionTaskReference: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionWindowList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24482,29 +25493,30 @@ func (m *PromotionTaskReference) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24514,23 +25526,25 @@ func (m *PromotionTaskReference) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Kind = string(dAtA[iNdEx:postIndex]) + m.Items = append(m.Items, PromotionWindow{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -24553,7 +25567,7 @@ func (m *PromotionTaskReference) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionTaskSpec) Unmarshal(dAtA []byte) error { +func (m *PromotionWindowReference) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -24576,17 +25590,17 @@ func (m *PromotionTaskSpec) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionTaskSpec: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionWindowReference: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionTaskSpec: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionWindowReference: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Vars", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24596,31 +25610,29 @@ func (m *PromotionTaskSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Vars = append(m.Vars, ExpressionVariable{}) - if err := m.Vars[len(m.Vars)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24630,25 +25642,23 @@ func (m *PromotionTaskSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Steps = append(m.Steps, PromotionStep{}) - if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Kind = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -24671,7 +25681,7 @@ func (m *PromotionTaskSpec) Unmarshal(dAtA []byte) error { } return nil } -func (m *PromotionTemplate) Unmarshal(dAtA []byte) error { +func (m *PromotionWindowSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -24694,17 +25704,17 @@ func (m *PromotionTemplate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PromotionTemplate: wiretype end group for non-group") + return fmt.Errorf("proto: PromotionWindowSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionTemplate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PromotionWindowSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24714,80 +25724,61 @@ func (m *PromotionTemplate) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Kind = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Schedule", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PromotionTemplateSpec) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated } - if iNdEx >= l { + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PromotionTemplateSpec: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PromotionTemplateSpec: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + m.Schedule = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Steps", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24797,31 +25788,29 @@ func (m *PromotionTemplateSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Steps = append(m.Steps, PromotionStep{}) - if err := m.Steps[len(m.Steps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Duration = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Vars", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TimeZone", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24831,25 +25820,23 @@ func (m *PromotionTemplateSpec) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Vars = append(m.Vars, ExpressionVariable{}) - if err := m.Vars[len(m.Vars)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.TimeZone = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/api/v1alpha1/generated.proto b/api/v1alpha1/generated.proto index 5243aa98a0..389d8eb9f7 100644 --- a/api/v1alpha1/generated.proto +++ b/api/v1alpha1/generated.proto @@ -1317,7 +1317,7 @@ message PromotionPolicy { // StageSelector is a selector that matches the Stage resource to which // this policy applies. - optional PromotionPolicySelector stageSelector = 3; + optional PromotionPolicySelector stageSelector = 2; // AutoPromotionEnabled indicates whether new Freight can automatically be // promoted into the Stage referenced by the Stage field. Note: There are may @@ -1326,7 +1326,12 @@ message PromotionPolicy { // subscribe to Warehouses instead of other, upstream Stages. This allows // users to define Stages that are automatically updated as soon as new // artifacts are detected. - optional bool autoPromotionEnabled = 2; + optional bool autoPromotionEnabled = 3; + + // PromotionWindows defines time windows during which automatic promotions + // are allowed to occur. If not specified, automatic promotions can occur at + // any time. + repeated PromotionWindowReference promotionWindows = 4; } // PromotionPolicySelector is a selector that matches the resource to which @@ -1629,6 +1634,59 @@ message PromotionTemplateSpec { repeated PromotionStep steps = 1; } +message PromotionWindow { + optional .k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Spec describes the composition of an AutoPromotionWindow, including the + // recurring time window and time zone. + // + // +kubebuilder:validation:Required + optional PromotionWindowSpec spec = 2; +} + +// PromotionWindowList contains a list of PromotionWindows. +message PromotionWindowList { + optional .k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + repeated PromotionWindow items = 2; +} + +message PromotionWindowReference { + // Name is the name of the time window. + // + // +kubebuilder:validation:Required + optional string name = 1; + + // Kind is the kind of the time window + // + // +kubebuilder:validation:Enum=PromotionWindow;ClusterPromotionWindow; + optional string kind = 2; +} + +message PromotionWindowSpec { + // Kind is either "deny" or "allow", indicating whether the time window + // represents a period during which promotions are denied or allowed. + // + // +kubebuilder:validation:Enum=deny;allow; + optional string kind = 1; + + // Schedule describes a recurring time window. + // Example: "0 0 * * 1-5" means every weekday at midnight. + // + // +kubebuilder:validation:Required + optional string schedule = 2; + + // Duration is the length of time that the window lasts after the start + // time defined by the Schedule. + // + // +kubebuilder:validation:Required + optional string duration = 3; + + // TimeZone is the IANA time zone name that applies to the time window. + // If not specified, UTC is assumed. + optional string timeZone = 4; +} + // QuayWebhookReceiverConfig describes a webhook receiver that is compatible // with Quay.io payloads. message QuayWebhookReceiverConfig { diff --git a/api/v1alpha1/groupversion_info.go b/api/v1alpha1/groupversion_info.go index c2b71cc0e0..761188c467 100644 --- a/api/v1alpha1/groupversion_info.go +++ b/api/v1alpha1/groupversion_info.go @@ -45,6 +45,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &PromotionTaskList{}, &Warehouse{}, &WarehouseList{}, + &PromotionWindow{}, + &PromotionWindowList{}, ) metav1.AddToGroupVersion(scheme, GroupVersion) return nil diff --git a/api/v1alpha1/project_config_types.go b/api/v1alpha1/project_config_types.go index bd30f297c4..8cbc91002b 100644 --- a/api/v1alpha1/project_config_types.go +++ b/api/v1alpha1/project_config_types.go @@ -83,7 +83,7 @@ type PromotionPolicy struct { Stage string `json:"stage,omitempty" protobuf:"bytes,1,opt,name=stage"` // StageSelector is a selector that matches the Stage resource to which // this policy applies. - StageSelector *PromotionPolicySelector `json:"stageSelector,omitempty" protobuf:"bytes,3,opt,name=stageSelector"` + StageSelector *PromotionPolicySelector `json:"stageSelector,omitempty" protobuf:"bytes,2,opt,name=stageSelector"` // AutoPromotionEnabled indicates whether new Freight can automatically be // promoted into the Stage referenced by the Stage field. Note: There are may // be other conditions also required for an auto-promotion to occur. This @@ -91,7 +91,11 @@ type PromotionPolicy struct { // subscribe to Warehouses instead of other, upstream Stages. This allows // users to define Stages that are automatically updated as soon as new // artifacts are detected. - AutoPromotionEnabled bool `json:"autoPromotionEnabled,omitempty" protobuf:"varint,2,opt,name=autoPromotionEnabled"` + AutoPromotionEnabled bool `json:"autoPromotionEnabled,omitempty" protobuf:"varint,3,opt,name=autoPromotionEnabled"` + // PromotionWindows defines time windows during which automatic promotions + // are allowed to occur. If not specified, automatic promotions can occur at + // any time. + PromotionWindows []PromotionWindowReference `json:"promotionWindows,omitempty" protobuf:"bytes,4,rep,name=promotionWindows"` } // WebhookReceiverConfig describes the configuration for a single webhook diff --git a/api/v1alpha1/promotion_window_types.go b/api/v1alpha1/promotion_window_types.go new file mode 100644 index 0000000000..ddfade17bf --- /dev/null +++ b/api/v1alpha1/promotion_window_types.go @@ -0,0 +1,61 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +kubebuilder:resource:shortName={promotionwindow,promotionwindows} +// +kubebuilder:object:root=true +// +kubebuilder:printcolumn:name=TimeZone,type=string,JSONPath=`.spec.timeZone` + +type PromotionWindow struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec describes the composition of an AutoPromotionWindow, including the + // recurring time window and time zone. + // + // +kubebuilder:validation:Required + Spec PromotionWindowSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` +} + +type PromotionWindowSpec struct { + // Kind is either "deny" or "allow", indicating whether the time window + // represents a period during which promotions are denied or allowed. + // + // +kubebuilder:validation:Enum=deny;allow; + Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` + // Schedule describes a recurring time window. + // Example: "0 0 * * 1-5" means every weekday at midnight. + // + // +kubebuilder:validation:Required + Schedule string `json:"schedule" protobuf:"bytes,2,opt,name=schedule"` + // Duration is the length of time that the window lasts after the start + // time defined by the Schedule. + // + // +kubebuilder:validation:Required + Duration string `json:"duration,omitempty" protobuf:"bytes,3,opt,name=duration"` + // TimeZone is the IANA time zone name that applies to the time window. + // If not specified, UTC is assumed. + TimeZone string `json:"timeZone,omitempty" protobuf:"bytes,4,opt,name=timeZone"` +} + +type PromotionWindowReference struct { + // Name is the name of the time window. + // + // +kubebuilder:validation:Required + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Kind is the kind of the time window + // + // +kubebuilder:validation:Enum=PromotionWindow;ClusterPromotionWindow; + Kind string `json:"kind,omitempty" protobuf:"bytes,2,opt,name=kind"` +} + +// +kubebuilder:object:root=true + +// PromotionWindowList contains a list of PromotionWindows. +type PromotionWindowList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + Items []PromotionWindow `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 66d55b450e..eae34927b9 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -1590,6 +1590,11 @@ func (in *PromotionPolicy) DeepCopyInto(out *PromotionPolicy) { *out = new(PromotionPolicySelector) (*in).DeepCopyInto(*out) } + if in.PromotionWindows != nil { + in, out := &in.PromotionWindows, &out.PromotionWindows + *out = make([]PromotionWindowReference, len(*in)) + copy(*out, *in) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromotionPolicy. @@ -1928,6 +1933,94 @@ func (in *PromotionTemplateSpec) DeepCopy() *PromotionTemplateSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromotionWindow) DeepCopyInto(out *PromotionWindow) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromotionWindow. +func (in *PromotionWindow) DeepCopy() *PromotionWindow { + if in == nil { + return nil + } + out := new(PromotionWindow) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PromotionWindow) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromotionWindowList) DeepCopyInto(out *PromotionWindowList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PromotionWindow, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromotionWindowList. +func (in *PromotionWindowList) DeepCopy() *PromotionWindowList { + if in == nil { + return nil + } + out := new(PromotionWindowList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PromotionWindowList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromotionWindowReference) DeepCopyInto(out *PromotionWindowReference) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromotionWindowReference. +func (in *PromotionWindowReference) DeepCopy() *PromotionWindowReference { + if in == nil { + return nil + } + out := new(PromotionWindowReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PromotionWindowSpec) DeepCopyInto(out *PromotionWindowSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PromotionWindowSpec. +func (in *PromotionWindowSpec) DeepCopy() *PromotionWindowSpec { + if in == nil { + return nil + } + out := new(PromotionWindowSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *QuayWebhookReceiverConfig) DeepCopyInto(out *QuayWebhookReceiverConfig) { *out = *in diff --git a/charts/kargo/resources/crds/kargo.akuity.io_projectconfigs.yaml b/charts/kargo/resources/crds/kargo.akuity.io_projectconfigs.yaml index 115cb5f00e..ad0f69058d 100644 --- a/charts/kargo/resources/crds/kargo.akuity.io_projectconfigs.yaml +++ b/charts/kargo/resources/crds/kargo.akuity.io_projectconfigs.yaml @@ -70,6 +70,26 @@ spec: users to define Stages that are automatically updated as soon as new artifacts are detected. type: boolean + promotionWindows: + description: |- + PromotionWindows defines time windows during which automatic promotions + are allowed to occur. If not specified, automatic promotions can occur at + any time. + items: + properties: + kind: + description: Kind is the kind of the time window + enum: + - PromotionWindow + - ClusterPromotionWindow + type: string + name: + description: Name is the name of the time window. + type: string + required: + - name + type: object + type: array stage: description: |- Stage is the name of the Stage to which this policy applies. diff --git a/charts/kargo/resources/crds/kargo.akuity.io_promotionwindows.yaml b/charts/kargo/resources/crds/kargo.akuity.io_promotionwindows.yaml new file mode 100644 index 0000000000..c721a8a9b9 --- /dev/null +++ b/charts/kargo/resources/crds/kargo.akuity.io_promotionwindows.yaml @@ -0,0 +1,82 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + name: promotionwindows.kargo.akuity.io +spec: + group: kargo.akuity.io + names: + kind: PromotionWindow + listKind: PromotionWindowList + plural: promotionwindows + shortNames: + - promotionwindow + - promotionwindows + singular: promotionwindow + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.timeZone + name: TimeZone + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + Spec describes the composition of an AutoPromotionWindow, including the + recurring time window and time zone. + properties: + duration: + description: |- + Duration is the length of time that the window lasts after the start + time defined by the Schedule. + type: string + kind: + description: |- + Kind is either "deny" or "allow", indicating whether the time window + represents a period during which promotions are denied or allowed. + enum: + - deny + - allow + type: string + schedule: + description: |- + Schedule describes a recurring time window. + Example: "0 0 * * 1-5" means every weekday at midnight. + type: string + timeZone: + description: |- + TimeZone is the IANA time zone name that applies to the time window. + If not specified, UTC is assumed. + type: string + required: + - duration + - schedule + type: object + required: + - spec + type: object + served: true + storage: true + subresources: {} diff --git a/charts/kargo/templates/controller/cluster-roles.yaml b/charts/kargo/templates/controller/cluster-roles.yaml index db3b4ec085..54c6a44f5c 100644 --- a/charts/kargo/templates/controller/cluster-roles.yaml +++ b/charts/kargo/templates/controller/cluster-roles.yaml @@ -67,6 +67,7 @@ rules: - clusterpromotiontasks - promotiontasks - warehouses + - promotionwindows verbs: - get - list diff --git a/cmd/controlplane/main.go b/cmd/controlplane/main.go index 30a2b9ad1e..8c8aa5899a 100644 --- a/cmd/controlplane/main.go +++ b/cmd/controlplane/main.go @@ -8,6 +8,8 @@ import ( "github.com/akuity/kargo/pkg/logging" _ "github.com/gogo/protobuf/gogoproto" + + _ "time/tzdata" ) func main() { diff --git a/docs/docs/90-api-documentation.md b/docs/docs/90-api-documentation.md index 9da5515563..39289b003e 100644 --- a/docs/docs/90-api-documentation.md +++ b/docs/docs/90-api-documentation.md @@ -2457,6 +2457,7 @@ RawFormat specifies the format for raw resource representation. | stage | [string](#string) | Stage is the name of the Stage to which this policy applies. Deprecated: Use StageSelector instead. | | stageSelector | [PromotionPolicySelector](#github-com-akuity-kargo-api-v1alpha1-PromotionPolicySelector) | StageSelector is a selector that matches the Stage resource to which this policy applies. | | autoPromotionEnabled | [bool](#bool) | AutoPromotionEnabled indicates whether new Freight can automatically be promoted into the Stage referenced by the Stage field. Note: There are may be other conditions also required for an auto-promotion to occur. This field defaults to false, but is commonly set to true for Stages that subscribe to Warehouses instead of other, upstream Stages. This allows users to define Stages that are automatically updated as soon as new artifacts are detected. | +| promotionWindows | [PromotionWindowReference](#github-com-akuity-kargo-api-v1alpha1-PromotionWindowReference) | PromotionWindows defines time windows during which automatic promotions are allowed to occur. If not specified, automatic promotions can occur at any time. | @@ -2584,6 +2585,44 @@ RawFormat specifies the format for raw resource representation. | vars | [ExpressionVariable](#github-com-akuity-kargo-api-v1alpha1-ExpressionVariable) | Vars is a list of variables that can be referenced by expressions in promotion steps. | | steps | [PromotionStep](#github-com-akuity-kargo-api-v1alpha1-PromotionStep) | Steps specifies the directives to be executed as part of a Promotion. The order in which the directives are executed is the order in which they are listed in this field. | + + +### PromotionWindow + +| Field | Type | Description | +| ----- | ---- | ----------- | +| metadata | k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta | | +| spec | [PromotionWindowSpec](#github-com-akuity-kargo-api-v1alpha1-PromotionWindowSpec) | Spec describes the composition of an AutoPromotionWindow, including the recurring time window and time zone. | + + + +### PromotionWindowList + PromotionWindowList contains a list of PromotionWindows. +| Field | Type | Description | +| ----- | ---- | ----------- | +| metadata | k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta | | +| items | [PromotionWindow](#github-com-akuity-kargo-api-v1alpha1-PromotionWindow) | | + + + +### PromotionWindowReference + +| Field | Type | Description | +| ----- | ---- | ----------- | +| name | [string](#string) | Name is the name of the time window. | +| kind | [string](#string) | Kind is the kind of the time window | + + + +### PromotionWindowSpec + +| Field | Type | Description | +| ----- | ---- | ----------- | +| kind | [string](#string) | Kind is either "deny" or "allow", indicating whether the time window represents a period during which promotions are denied or allowed. | +| schedule | [string](#string) | Schedule describes a recurring time window. Example: "0 0 * * 1-5" means every weekday at midnight. | +| duration | [string](#string) | Duration is the length of time that the window lasts after the start time defined by the Schedule. | +| timeZone | [string](#string) | TimeZone is the IANA time zone name that applies to the time window. If not specified, UTC is assumed. | + ### QuayWebhookReceiverConfig diff --git a/go.mod b/go.mod index 1be10d54e5..5249758ad6 100644 --- a/go.mod +++ b/go.mod @@ -237,6 +237,7 @@ require ( github.com/quic-go/qpack v0.6.0 // indirect github.com/quic-go/quic-go v0.57.0 // indirect github.com/redis/go-redis/v9 v9.16.0 // indirect + github.com/robfig/cron/v3 v3.0.0 // indirect github.com/rubenv/sql-migrate v1.8.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect diff --git a/go.sum b/go.sum index 4c0d20a683..b74ab5397c 100644 --- a/go.sum +++ b/go.sum @@ -479,6 +479,8 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ= github.com/redis/go-redis/v9 v9.16.0 h1:OotgqgLSRCmzfqChbQyG1PHC3tLNR89DG4jdOERSEP4= github.com/redis/go-redis/v9 v9.16.0/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= +github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E= +github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= diff --git a/pkg/api/promotion_window.go b/pkg/api/promotion_window.go new file mode 100644 index 0000000000..a11072a155 --- /dev/null +++ b/pkg/api/promotion_window.go @@ -0,0 +1,159 @@ +package api + +import ( + "context" + "errors" + "fmt" + "time" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + "github.com/akuity/kargo/pkg/logging" + "github.com/robfig/cron/v3" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// CheckPromotionWindows checks all defined promotion windows to determine if +// promotion is allowed at the current time. It follows these rules: +// +// 1. If no promotion windows are defined, promotions are allowed by default. +// 2. If a allow window is defined, the current time must fall within the allow windows for +// promotion to be allowed. +// 3. If a deny window is defined, the current time must not fall within any deny windows for +// promotion to be allowed. +// 4. If both a allow and deny window is active, the deny window takes precedence and +// promotions are denied. +// 5. If both a allow and deny window are defined, but none are active, promotions are denied. + +func CheckPromotionWindows(ctx context.Context, + currentTime time.Time, + promotionWindows []kargoapi.PromotionWindowReference, + k8sclient client.Client, + project string, +) (bool, error) { + logger := logging.LoggerFromContext(ctx) + logger.Debug("checking promotion windows") + + if len(promotionWindows) == 0 { + logger.Debug("no promotion windows defined, allowing promotion by default") + return true, nil + } + + anyActiveAllowWindows := false + anyAllowWindows := false + for _, windowRef := range promotionWindows { + windowSpec, err := getPromotionWindowSpec(ctx, windowRef, k8sclient, project) + if err != nil { + return false, fmt.Errorf("error getting PromotionWindow %q for PromotionPolicy in Project %q: %w", + windowRef.Name, project, err) + } + active, err := checkPromotionWindow(ctx, currentTime, windowSpec) + if err != nil { + return false, fmt.Errorf("error checking PromotionWindow %q for PromotionPolicy in Project %q: %w", + windowRef.Name, project, err) + } + switch windowSpec.Kind { + case "allow": + anyAllowWindows = true + if active { + anyActiveAllowWindows = true + } + case "deny": + if active { + return false, nil + } + default: + return false, fmt.Errorf("unknown PromotionWindow kind %q in %q", windowSpec.Kind, windowRef.Name) + } + } + + if anyActiveAllowWindows { + logger.Debug("active allow promotion windows") + return true, nil + } + + if anyAllowWindows { + logger.Debug("no active allow promotion windows") + return false, nil + } + + return true, nil +} + +// checkPromotionWindow checks if the current time falls within any of the defined +// promotion window. It returns true if promotion is active, false otherwise. +func checkPromotionWindow(ctx context.Context, + currentTime time.Time, + promotionWindowSpec *kargoapi.PromotionWindowSpec, +) (bool, error) { + logger := logging.LoggerFromContext(ctx) + logger.Debug("checking promotion window spec") + + if promotionWindowSpec == nil { + return false, errors.New("promotion window spec is nil") + } + + cronParser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow) + + sched, err := cronParser.Parse(promotionWindowSpec.Schedule) + if err != nil { + return false, err + } + duration, err := time.ParseDuration(promotionWindowSpec.Duration) + if err != nil { + return false, err + } + if duration <= 0 { + return false, fmt.Errorf("duration must be positive") + } + + loc, err := time.LoadLocation(promotionWindowSpec.TimeZone) + if err != nil { + return false, fmt.Errorf("unable to load time zone: %w", err) + } + + now := currentTime.In(loc) + nextTime := sched.Next(now.Add(-duration)) + timeDiff := now.Sub(nextTime) + + if timeDiff < 0 || timeDiff >= duration { + logger.Debug("promotion window is not active") + return false, nil + } + + logger.Debug("promotion window is active") + return true, nil +} + +// getPromotionWindowSpec retrieves the PromotionWindow spec from the given reference. +func getPromotionWindowSpec(ctx context.Context, + ref kargoapi.PromotionWindowReference, + k8sClient client.Client, + project string, +) (*kargoapi.PromotionWindowSpec, error) { + var spec kargoapi.PromotionWindowSpec + + if ref == (kargoapi.PromotionWindowReference{}) { + return nil, errors.New("missing promotion window reference") + } + + if k8sClient == nil { + return nil, errors.New("k8s client is nil") + } + + if project == "" { + return nil, errors.New("project is empty") + } + + switch ref.Kind { + case "PromotionWindow", "": + window := &kargoapi.PromotionWindow{} + if err := k8sClient.Get(ctx, client.ObjectKey{Namespace: project, Name: ref.Name}, window); err != nil { + return nil, err + } + spec = window.Spec + default: + return nil, fmt.Errorf("unknown promotion window reference kind %q", ref.Kind) + } + + return &spec, nil +} diff --git a/pkg/api/promotion_window_test.go b/pkg/api/promotion_window_test.go new file mode 100644 index 0000000000..3f21fad292 --- /dev/null +++ b/pkg/api/promotion_window_test.go @@ -0,0 +1,310 @@ +package api + +import ( + "context" + "testing" + "time" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + "github.com/stretchr/testify/require" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" +) + +func generatePromotionWindow(name, kind, schedule string) *kargoapi.PromotionWindow { + return &kargoapi.PromotionWindow{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: "test", + }, + Spec: kargoapi.PromotionWindowSpec{ + Kind: kind, + Schedule: schedule, + Duration: "1h", + }, + } +} + +func TestGetPromotionWindowSpec(t *testing.T) { + scheme := runtime.NewScheme() + require.NoError(t, kargoapi.SchemeBuilder.AddToScheme(scheme)) + namespace := "test" + + tests := []struct { + name string + ref kargoapi.PromotionWindowReference + client client.Client + project string + assertions func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) + }{ + { + name: "reject empty promotion window reference", + ref: kargoapi.PromotionWindowReference{}, + client: fake.NewClientBuilder().WithScheme(scheme).Build(), + project: namespace, + assertions: func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) { + require.Error(t, err) + require.Nil(t, spec) + require.Contains(t, err.Error(), "missing promotion window reference") + }, + }, + { + name: "reject nil client", + ref: kargoapi.PromotionWindowReference{Name: "x", Kind: "PromotionWindow"}, + client: nil, + project: namespace, + assertions: func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) { + require.Error(t, err) + require.Nil(t, spec) + }, + }, + { + name: "reject empty project", + ref: kargoapi.PromotionWindowReference{Name: "x", Kind: "PromotionWindow"}, + client: fake.NewClientBuilder().WithScheme(scheme).Build(), + project: "", + assertions: func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) { + require.Error(t, err) + require.Nil(t, spec) + }, + }, + { + name: "accept empty kind in promotion window reference", + ref: kargoapi.PromotionWindowReference{Name: "test-window"}, + project: namespace, + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("test-window", "allow", "0 0 * * *"), + ).Build(), + assertions: func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) { + require.NoError(t, err) + require.NotNil(t, spec) + require.Equal(t, "allow", spec.Kind) + require.Equal(t, "0 0 * * *", spec.Schedule) + require.Equal(t, "1h", spec.Duration) + }, + }, + { + name: "error when promotion window not found", + ref: kargoapi.PromotionWindowReference{Name: "missing", Kind: "PromotionWindow"}, + client: fake.NewClientBuilder().WithScheme(scheme).Build(), + project: namespace, + assertions: func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) { + require.Error(t, err) + require.Nil(t, spec) + }, + }, + { + name: "error when unknown kind in promotion window reference", + ref: kargoapi.PromotionWindowReference{Name: "x", Kind: "SomeOtherKind"}, + client: fake.NewClientBuilder().WithScheme(scheme).Build(), + project: namespace, + assertions: func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) { + require.Error(t, err) + require.Nil(t, spec) + }, + }, + { + name: "error when name empty in promotion window reference", + ref: kargoapi.PromotionWindowReference{Name: "", Kind: "PromotionWindow"}, + client: fake.NewClientBuilder().WithScheme(scheme).Build(), + project: namespace, + assertions: func(t *testing.T, spec *kargoapi.PromotionWindowSpec, err error) { + require.Error(t, err) + require.Nil(t, spec) + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + spec, err := getPromotionWindowSpec(context.Background(), tt.ref, tt.client, tt.project) + tt.assertions(t, spec, err) + }) + } +} + +func TestCheckPromotionWindows(t *testing.T) { + scheme := runtime.NewScheme() + require.NoError(t, kargoapi.SchemeBuilder.AddToScheme(scheme)) + namespace := "test" + janPastMidnight := time.Date(2024, 1, 1, 0, 30, 0, 0, time.UTC) // Jan 1, 2024 00:30 UTC + + tests := []struct { + name string + now time.Time + client client.Client + windowRefs []kargoapi.PromotionWindowReference + assertions func(t *testing.T, allow bool, err error) + }{ + { + name: "allow promotions by default", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).Build(), + windowRefs: []kargoapi.PromotionWindowReference{}, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.True(t, allow) + }, + }, + { + name: "allow promotion with active allow window", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("allow-window", "allow", "0 0 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{{Name: "allow-window", Kind: "PromotionWindow"}}, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.True(t, allow) + }, + }, + { + name: "allow promotion when at least one allow window is active", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("allow-window-1", "allow", "0 3 * * *"), + generatePromotionWindow("allow-window-2", "allow", "0 0 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{ + {Name: "allow-window-1", Kind: "PromotionWindow"}, + {Name: "allow-window-2", Kind: "PromotionWindow"}, + }, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.True(t, allow) + }, + }, + { + name: "disallow promotion on inactive allow window", + now: time.Date(2024, 1, 1, 1, 30, 0, 0, time.UTC), // Jan 1, 2024 01:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("allow-window", "allow", "0 0 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{{Name: "allow-window", Kind: "PromotionWindow"}}, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.False(t, allow) + }, + }, + { + name: "disallow promotion on inactive allow windows", + now: time.Date(2024, 1, 1, 1, 30, 0, 0, time.UTC), // Jan 1, 2024 01:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("allow-window-1", "allow", "0 0 * * *"), + generatePromotionWindow("allow-window-2", "allow", "0 0 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{ + {Name: "allow-window-1", Kind: "PromotionWindow"}, + {Name: "allow-window-2", Kind: "PromotionWindow"}, + }, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.False(t, allow) + }, + }, + { + name: "deny promotion on active deny window", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("deny-window", "deny", "0 0 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{{Name: "deny-window", Kind: "PromotionWindow"}}, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.False(t, allow) + }, + }, + { + name: "allow promotion on inactive deny window", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("deny-window", "deny", "0 3 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{{Name: "deny-window", Kind: "PromotionWindow"}}, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.True(t, allow) + }, + }, + { + name: "disallow promotion with deny window active and allow window inactive", + now: time.Date(2024, 1, 1, 0, 30, 0, 0, time.UTC), // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("deny-window", "deny", "0 0 * * *"), + generatePromotionWindow("allow-window", "allow", "0 2 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{ + {Name: "deny-window", Kind: "PromotionWindow"}, + {Name: "allow-window", Kind: "PromotionWindow"}, + }, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.False(t, allow) + }, + }, + { + name: "disallow promotion with both deny window and allow window active", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("deny-window", "deny", "0 0 * * *"), + generatePromotionWindow("allow-window", "allow", "0 0 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{ + {Name: "deny-window", Kind: "PromotionWindow"}, + {Name: "allow-window", Kind: "PromotionWindow"}, + }, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.False(t, allow) + }, + }, + { + name: "disallow promotion with both allow window and deny window active", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("allow-window", "allow", "0 0 * * *"), + generatePromotionWindow("deny-window", "deny", "0 0 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{ + {Name: "allow-window", Kind: "PromotionWindow"}, + {Name: "deny-window", Kind: "PromotionWindow"}, + }, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.False(t, allow) + }, + }, + { + name: "allow promotion with allow window active and deny window inactive", + now: janPastMidnight, // Jan 1, 2024 00:30 UTC + client: fake.NewClientBuilder().WithScheme(scheme).WithObjects( + generatePromotionWindow("allow-window", "allow", "0 0 * * *"), + generatePromotionWindow("deny-window", "deny", "0 2 * * *"), + ).Build(), + windowRefs: []kargoapi.PromotionWindowReference{ + {Name: "allow-window", Kind: "PromotionWindow"}, + {Name: "deny-window", Kind: "PromotionWindow"}, + }, + assertions: func(t *testing.T, allow bool, err error) { + require.NoError(t, err) + require.True(t, allow) + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + active, err := CheckPromotionWindows( + context.Background(), + tt.now, + tt.windowRefs, + tt.client, + namespace, + ) + + tt.assertions(t, active, err) + }) + } +} diff --git a/pkg/controller/stages/regular_stages.go b/pkg/controller/stages/regular_stages.go index a84731cec6..bf301f4897 100644 --- a/pkg/controller/stages/regular_stages.go +++ b/pkg/controller/stages/regular_stages.go @@ -1939,6 +1939,7 @@ func (r *RegularStageReconciler) autoPromotionAllowed( stage metav1.ObjectMeta, ) (bool, error) { logger := logging.LoggerFromContext(ctx) + now := time.Now() projectCfg := &kargoapi.ProjectConfig{} if err := r.client.Get(ctx, types.NamespacedName{ @@ -1989,6 +1990,16 @@ func (r *RegularStageReconciler) autoPromotionAllowed( } // If we reach this point, we have found a matching PromotionPolicy. + + allowed, err := api.CheckPromotionWindows(ctx, now, policy.PromotionWindows, r.client, stage.Namespace) + if err != nil { + return policy.AutoPromotionEnabled, fmt.Errorf("error checking PromotionWindows for PromotionPolicy in Project %q: %w", stage.Namespace, err) + } + if !allowed { + logger.Debug("auto promotion denied by promotion window") + return false, nil + } + logger.Debug( "found PromotionPolicy associated with Stage", "autoPromotionEnabled", policy.AutoPromotionEnabled, diff --git a/ui/src/gen/api/v1alpha1/generated_pb.ts b/ui/src/gen/api/v1alpha1/generated_pb.ts index 6ed1902ad7..f392445f5f 100644 --- a/ui/src/gen/api/v1alpha1/generated_pb.ts +++ b/ui/src/gen/api/v1alpha1/generated_pb.ts @@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file api/v1alpha1/generated.proto. */ export const file_api_v1alpha1_generated: GenFile = /*@__PURE__*/ - fileDesc("ChxhcGkvdjFhbHBoYTEvZ2VuZXJhdGVkLnByb3RvEiRnaXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEiMgoTQW5hbHlzaXNSdW5Bcmd1bWVudBIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJIrACChNBbmFseXNpc1J1bk1ldGFkYXRhElUKBmxhYmVscxgBIAMoCzJFLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BbmFseXNpc1J1bk1ldGFkYXRhLkxhYmVsc0VudHJ5El8KC2Fubm90YXRpb25zGAIgAygLMkouZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkFuYWx5c2lzUnVuTWV0YWRhdGEuQW5ub3RhdGlvbnNFbnRyeRotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjIKEEFubm90YXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJGChRBbmFseXNpc1J1blJlZmVyZW5jZRIRCgluYW1lc3BhY2UYASABKAkSDAoEbmFtZRgCIAEoCRINCgVwaGFzZRgDIAEoCSI3ChlBbmFseXNpc1RlbXBsYXRlUmVmZXJlbmNlEgwKBG5hbWUYASABKAkSDAoEa2luZBgCIAEoCSJPCg1BcHByb3ZlZFN0YWdlEj4KCmFwcHJvdmVkQXQYASABKAsyKi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuVGltZSI4ChVBcmdvQ0RBcHBIZWFsdGhTdGF0dXMSDgoGc3RhdHVzGAEgASgJEg8KB21lc3NhZ2UYAiABKAki1AEKD0FyZ29DREFwcFN0YXR1cxIRCgluYW1lc3BhY2UYASABKAkSDAoEbmFtZRgCIAEoCRJRCgxoZWFsdGhTdGF0dXMYAyABKAsyOy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJnb0NEQXBwSGVhbHRoU3RhdHVzEk0KCnN5bmNTdGF0dXMYBCABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJnb0NEQXBwU3luY1N0YXR1cyJKChNBcmdvQ0RBcHBTeW5jU3RhdHVzEg4KBnN0YXR1cxgBIAEoCRIQCghyZXZpc2lvbhgCIAEoCRIRCglyZXZpc2lvbnMYAyADKAkipgEKEUFydGlmYWN0UmVmZXJlbmNlEhQKDGFydGlmYWN0VHlwZRgBIAEoCRIYChBzdWJzY3JpcHRpb25OYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSUAoIbWV0YWRhdGEYBCABKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OIngKIEFydGlmYWN0b3J5V2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZRIXCg92aXJ0dWFsUmVwb05hbWUYAiABKAkiLwoUQXV0b1Byb21vdGlvbk9wdGlvbnMSFwoPc2VsZWN0aW9uUG9saWN5GAEgASgJIlkKGkF6dXJlV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZSJdCh5CaXRidWNrZXRXZWJob29rUmVjZWl2ZXJDb25maWcSOwoJc2VjcmV0UmVmGAEgASgLMiguazhzLmlvLmFwaS5jb3JlLnYxLkxvY2FsT2JqZWN0UmVmZXJlbmNlIjcKBUNoYXJ0Eg8KB3JlcG9VUkwYASABKAkSDAoEbmFtZRgCIAEoCRIPCgd2ZXJzaW9uGAMgASgJImEKFENoYXJ0RGlzY292ZXJ5UmVzdWx0Eg8KB3JlcG9VUkwYASABKAkSDAoEbmFtZRgCIAEoCRIYChBzZW12ZXJDb25zdHJhaW50GAMgASgJEhAKCHZlcnNpb25zGAQgAygJImQKEUNoYXJ0U3Vic2NyaXB0aW9uEhYKDmRpc2NvdmVyeUxpbWl0GAEgASgDEgwKBG5hbWUYAiABKAkSDwoHcmVwb1VSTBgDIAEoCRIYChBzZW12ZXJDb25zdHJhaW50GAQgASgJIuUBCg1DbHVzdGVyQ29uZmlnEkIKCG1ldGFkYXRhGAEgASgLMjAuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGESRQoEc3BlYxgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5DbHVzdGVyQ29uZmlnU3BlYxJJCgZzdGF0dXMYAyABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2x1c3RlckNvbmZpZ1N0YXR1cyKZAQoRQ2x1c3RlckNvbmZpZ0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESQgoFaXRlbXMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2x1c3RlckNvbmZpZyJqChFDbHVzdGVyQ29uZmlnU3BlYxJVChB3ZWJob29rUmVjZWl2ZXJzGAEgAygLMjsuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLldlYmhvb2tSZWNlaXZlckNvbmZpZyLqAQoTQ2x1c3RlckNvbmZpZ1N0YXR1cxJDCgpjb25kaXRpb25zGAEgAygLMi8uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkNvbmRpdGlvbhIaChJvYnNlcnZlZEdlbmVyYXRpb24YAyABKAMSGgoSbGFzdEhhbmRsZWRSZWZyZXNoGAQgASgJElYKEHdlYmhvb2tSZWNlaXZlcnMYAiADKAsyPC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuV2ViaG9va1JlY2VpdmVyRGV0YWlscyKhAQoUQ2x1c3RlclByb21vdGlvblRhc2sSQgoIbWV0YWRhdGEYASABKAsyMC5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YRJFCgRzcGVjGAIgASgLMjcuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblRhc2tTcGVjIqcBChhDbHVzdGVyUHJvbW90aW9uVGFza0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESSQoFaXRlbXMYAiADKAsyOi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2x1c3RlclByb21vdGlvblRhc2siSQoMQ3VycmVudFN0YWdlEjkKBXNpbmNlGAEgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUi/gIKE0Rpc2NvdmVyZWRBcnRpZmFjdHMSQAoMZGlzY292ZXJlZEF0GAQgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSRQoDZ2l0GAEgAygLMjguZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkdpdERpc2NvdmVyeVJlc3VsdBJKCgZpbWFnZXMYAiADKAsyOi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuSW1hZ2VEaXNjb3ZlcnlSZXN1bHQSSgoGY2hhcnRzGAMgAygLMjouZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkNoYXJ0RGlzY292ZXJ5UmVzdWx0EkYKB3Jlc3VsdHMYBSADKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRGlzY292ZXJ5UmVzdWx0IrABChBEaXNjb3ZlcmVkQ29tbWl0EgoKAmlkGAEgASgJEg4KBmJyYW5jaBgCIAEoCRILCgN0YWcYAyABKAkSDwoHc3ViamVjdBgEIAEoCRIOCgZhdXRob3IYBSABKAkSEQoJY29tbWl0dGVyGAYgASgJEj8KC2NyZWF0b3JEYXRlGAcgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUikAIKGERpc2NvdmVyZWRJbWFnZVJlZmVyZW5jZRILCgN0YWcYASABKAkSDgoGZGlnZXN0GAIgASgJEmQKC2Fubm90YXRpb25zGAUgAygLMk8uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkRpc2NvdmVyZWRJbWFnZVJlZmVyZW5jZS5Bbm5vdGF0aW9uc0VudHJ5Ej0KCWNyZWF0ZWRBdBgEIAEoCzIqLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5UaW1lGjIKEEFubm90YXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJ0Cg9EaXNjb3ZlcnlSZXN1bHQSDAoEbmFtZRgDIAEoCRJTChJhcnRpZmFjdFJlZmVyZW5jZXMYAiADKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJ0aWZhY3RSZWZlcmVuY2UiXQoeRG9ja2VySHViV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZSIxChJFeHByZXNzaW9uVmFyaWFibGUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSLuAwoHRnJlaWdodBJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEg0KBWFsaWFzGAcgASgJEkMKBm9yaWdpbhgJIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0T3JpZ2luEkAKB2NvbW1pdHMYAyADKAsyLy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuR2l0Q29tbWl0EjsKBmltYWdlcxgEIAMoCzIrLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbWFnZRI7CgZjaGFydHMYBSADKAsyKy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2hhcnQSSgoJYXJ0aWZhY3RzGAogAygLMjcuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkFydGlmYWN0UmVmZXJlbmNlEkMKBnN0YXR1cxgGIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzIq0CChFGcmVpZ2h0Q29sbGVjdGlvbhIKCgJpZBgDIAEoCRJRCgVpdGVtcxgBIAMoCzJCLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0Q29sbGVjdGlvbi5JdGVtc0VudHJ5ElMKE3ZlcmlmaWNhdGlvbkhpc3RvcnkYAiADKAsyNi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuVmVyaWZpY2F0aW9uSW5mbxpkCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRJFCgV2YWx1ZRgCIAEoCzI2LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0UmVmZXJlbmNlOgI4ASItChdGcmVpZ2h0Q3JlYXRpb25Dcml0ZXJpYRISCgpleHByZXNzaW9uGAEgASgJIo0BCgtGcmVpZ2h0TGlzdBJACghtZXRhZGF0YRgBIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MaXN0TWV0YRI8CgVpdGVtcxgCIAMoCzItLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0IisKDUZyZWlnaHRPcmlnaW4SDAoEa2luZBgBIAEoCRIMCgRuYW1lGAIgASgJIu0CChBGcmVpZ2h0UmVmZXJlbmNlEgwKBG5hbWUYASABKAkSQwoGb3JpZ2luGAggASgLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkZyZWlnaHRPcmlnaW4SQAoHY29tbWl0cxgCIAMoCzIvLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HaXRDb21taXQSOwoGaW1hZ2VzGAMgAygLMisuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkltYWdlEjsKBmNoYXJ0cxgEIAMoCzIrLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5DaGFydBJKCglhcnRpZmFjdHMYCSADKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJ0aWZhY3RSZWZlcmVuY2UinAEKDkZyZWlnaHRSZXF1ZXN0EkMKBm9yaWdpbhgBIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0T3JpZ2luEkUKB3NvdXJjZXMYAiABKAsyNC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodFNvdXJjZXMi8gEKDkZyZWlnaHRTb3VyY2VzEg4KBmRpcmVjdBgBIAEoCBIOCgZzdGFnZXMYAiADKAkSSAoQcmVxdWlyZWRTb2FrVGltZRgDIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5EdXJhdGlvbhIcChRhdmFpbGFiaWxpdHlTdHJhdGVneRgEIAEoCRJYChRhdXRvUHJvbW90aW9uT3B0aW9ucxgFIAEoCzI6LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BdXRvUHJvbW90aW9uT3B0aW9ucyKdBgoNRnJlaWdodFN0YXR1cxJZCgtjdXJyZW50bHlJbhgDIAMoCzJELmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzLkN1cnJlbnRseUluRW50cnkSVwoKdmVyaWZpZWRJbhgBIAMoCzJDLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzLlZlcmlmaWVkSW5FbnRyeRJZCgthcHByb3ZlZEZvchgCIAMoCzJELmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzLkFwcHJvdmVkRm9yRW50cnkSUwoIbWV0YWRhdGEYBCADKAsyQS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodFN0YXR1cy5NZXRhZGF0YUVudHJ5GmYKEEN1cnJlbnRseUluRW50cnkSCwoDa2V5GAEgASgJEkEKBXZhbHVlGAIgASgLMjIuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkN1cnJlbnRTdGFnZToCOAEaZgoPVmVyaWZpZWRJbkVudHJ5EgsKA2tleRgBIAEoCRJCCgV2YWx1ZRgCIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5WZXJpZmllZFN0YWdlOgI4ARpnChBBcHByb3ZlZEZvckVudHJ5EgsKA2tleRgBIAEoCRJCCgV2YWx1ZRgCIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BcHByb3ZlZFN0YWdlOgI4ARpvCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRJNCgV2YWx1ZRgCIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT046AjgBIq8CChRHZW5lcmljV2ViaG9va0FjdGlvbhIOCgZhY3Rpb24YASABKAkSFgoOd2hlbkV4cHJlc3Npb24YAiABKAkSXgoKcGFyYW1ldGVycxgDIAMoCzJKLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HZW5lcmljV2ViaG9va0FjdGlvbi5QYXJhbWV0ZXJzRW50cnkSXAoHdGFyZ2V0cxgEIAMoCzJLLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HZW5lcmljV2ViaG9va1RhcmdldFNlbGVjdGlvbkNyaXRlcmlhGjEKD1BhcmFtZXRlcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIqgBChxHZW5lcmljV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZRJLCgdhY3Rpb25zGAIgAygLMjouZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkdlbmVyaWNXZWJob29rQWN0aW9uItsBCiVHZW5lcmljV2ViaG9va1RhcmdldFNlbGVjdGlvbkNyaXRlcmlhEgwKBGtpbmQYASABKAkSDAoEbmFtZRgCIAEoCRJKCg1sYWJlbFNlbGVjdG9yGAMgASgLMjMuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxhYmVsU2VsZWN0b3ISSgoNaW5kZXhTZWxlY3RvchgEIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbmRleFNlbGVjdG9yInkKCUdpdENvbW1pdBIPCgdyZXBvVVJMGAEgASgJEgoKAmlkGAIgASgJEg4KBmJyYW5jaBgDIAEoCRILCgN0YWcYBCABKAkSDwoHbWVzc2FnZRgGIAEoCRIOCgZhdXRob3IYByABKAkSEQoJY29tbWl0dGVyGAggASgJIm4KEkdpdERpc2NvdmVyeVJlc3VsdBIPCgdyZXBvVVJMGAEgASgJEkcKB2NvbW1pdHMYAiADKAsyNi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRGlzY292ZXJlZENvbW1pdCJaChtHaXRIdWJXZWJob29rUmVjZWl2ZXJDb25maWcSOwoJc2VjcmV0UmVmGAEgASgLMiguazhzLmlvLmFwaS5jb3JlLnYxLkxvY2FsT2JqZWN0UmVmZXJlbmNlIloKG0dpdExhYldlYmhvb2tSZWNlaXZlckNvbmZpZxI7CglzZWNyZXRSZWYYASABKAsyKC5rOHMuaW8uYXBpLmNvcmUudjEuTG9jYWxPYmplY3RSZWZlcmVuY2Ui3QIKD0dpdFN1YnNjcmlwdGlvbhIRCglhbGxvd1RhZ3MYASABKAkSGAoQYWxsb3dUYWdzUmVnZXhlcxgCIAMoCRIOCgZicmFuY2gYAyABKAkSHwoXY29tbWl0U2VsZWN0aW9uU3RyYXRlZ3kYBCABKAkSFgoOZGlzY292ZXJ5TGltaXQYBSABKAMSFAoMZXhjbHVkZVBhdGhzGAYgAygJEhgKEGV4cHJlc3Npb25GaWx0ZXIYByABKAkSEgoKaWdub3JlVGFncxgIIAMoCRIZChFpZ25vcmVUYWdzUmVnZXhlcxgJIAMoCRIUCgxpbmNsdWRlUGF0aHMYCiADKAkSHQoVaW5zZWN1cmVTa2lwVExTVmVyaWZ5GAsgASgIEg8KB3JlcG9VUkwYDCABKAkSGAoQc2VtdmVyQ29uc3RyYWludBgNIAEoCRIVCg1zdHJpY3RTZW12ZXJzGA4gASgIIlkKGkdpdGVhV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZSJaChtIYXJib3JXZWJob29rUmVjZWl2ZXJDb25maWcSOwoJc2VjcmV0UmVmGAEgASgLMiguazhzLmlvLmFwaS5jb3JlLnYxLkxvY2FsT2JqZWN0UmVmZXJlbmNlIsgBCgZIZWFsdGgSDgoGc3RhdHVzGAEgASgJEg4KBmlzc3VlcxgCIAMoCRJOCgZjb25maWcYBCABKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OEk4KBm91dHB1dBgFIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT04ibwoPSGVhbHRoQ2hlY2tTdGVwEgwKBHVzZXMYASABKAkSTgoGY29uZmlnGAIgASgLMj4uazhzLmlvLmFwaWV4dGVuc2lvbnNfYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjEuSlNPTiIeCgtIZWFsdGhTdGF0cxIPCgdoZWFsdGh5GAEgASgDIrwBCgVJbWFnZRIPCgdyZXBvVVJMGAEgASgJEgsKA3RhZxgDIAEoCRIOCgZkaWdlc3QYBCABKAkSUQoLYW5ub3RhdGlvbnMYBSADKAsyPC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuSW1hZ2UuQW5ub3RhdGlvbnNFbnRyeRoyChBBbm5vdGF0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEijQEKFEltYWdlRGlzY292ZXJ5UmVzdWx0Eg8KB3JlcG9VUkwYASABKAkSEAoIcGxhdGZvcm0YAiABKAkSUgoKcmVmZXJlbmNlcxgDIAMoCzI+LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5EaXNjb3ZlcmVkSW1hZ2VSZWZlcmVuY2UiqAIKEUltYWdlU3Vic2NyaXB0aW9uEhEKCWFsbG93VGFncxgBIAEoCRIYChBhbGxvd1RhZ3NSZWdleGVzGAIgAygJEhIKCmNhY2hlQnlUYWcYAyABKAgSEgoKY29uc3RyYWludBgEIAEoCRIWCg5kaXNjb3ZlcnlMaW1pdBgFIAEoAxISCgppZ25vcmVUYWdzGAYgAygJEhkKEWlnbm9yZVRhZ3NSZWdleGVzGAcgAygJEh4KFmltYWdlU2VsZWN0aW9uU3RyYXRlZ3kYCCABKAkSHQoVaW5zZWN1cmVTa2lwVExTVmVyaWZ5GAkgASgIEhAKCHBsYXRmb3JtGAogASgJEg8KB3JlcG9VUkwYCyABKAkSFQoNc3RyaWN0U2VtdmVycxgMIAEoCCJlCg1JbmRleFNlbGVjdG9yElQKDG1hdGNoSW5kaWNlcxgBIAMoCzI+LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbmRleFNlbGVjdG9yUmVxdWlyZW1lbnQiSAoYSW5kZXhTZWxlY3RvclJlcXVpcmVtZW50EgsKA2tleRgBIAEoCRIQCghvcGVyYXRvchgCIAEoCRINCgV2YWx1ZRgDIAEoCSKSAQoHUHJvamVjdBJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEkMKBnN0YXR1cxgDIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0U3RhdHVzIuUBCg1Qcm9qZWN0Q29uZmlnEkIKCG1ldGFkYXRhGAEgASgLMjAuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGESRQoEc3BlYxgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0Q29uZmlnU3BlYxJJCgZzdGF0dXMYAyABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvamVjdENvbmZpZ1N0YXR1cyKZAQoRUHJvamVjdENvbmZpZ0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESQgoFaXRlbXMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvamVjdENvbmZpZyK8AQoRUHJvamVjdENvbmZpZ1NwZWMSUAoRcHJvbW90aW9uUG9saWNpZXMYASADKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uUG9saWN5ElUKEHdlYmhvb2tSZWNlaXZlcnMYAiADKAsyOy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuV2ViaG9va1JlY2VpdmVyQ29uZmlnIuoBChNQcm9qZWN0Q29uZmlnU3RhdHVzEkMKCmNvbmRpdGlvbnMYASADKAsyLy5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuQ29uZGl0aW9uEhoKEm9ic2VydmVkR2VuZXJhdGlvbhgDIAEoAxIaChJsYXN0SGFuZGxlZFJlZnJlc2gYBCABKAkSVgoQd2ViaG9va1JlY2VpdmVycxgCIAMoCzI8LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5XZWJob29rUmVjZWl2ZXJEZXRhaWxzIo0BCgtQcm9qZWN0TGlzdBJACghtZXRhZGF0YRgBIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MaXN0TWV0YRI8CgVpdGVtcxgCIAMoCzItLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0IpoBCgxQcm9qZWN0U3RhdHMSSAoKd2FyZWhvdXNlcxgBIAEoCzI0LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5XYXJlaG91c2VTdGF0cxJACgZzdGFnZXMYAiABKAsyMC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3RhZ2VTdGF0cyKXAQoNUHJvamVjdFN0YXR1cxJDCgpjb25kaXRpb25zGAMgAygLMi8uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkNvbmRpdGlvbhJBCgVzdGF0cxgEIAEoCzIyLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0U3RhdHMi2QEKCVByb21vdGlvbhJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEkEKBHNwZWMYAiABKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3BlYxJFCgZzdGF0dXMYAyABKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3RhdHVzIpEBCg1Qcm9tb3Rpb25MaXN0EkAKCG1ldGFkYXRhGAEgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxpc3RNZXRhEj4KBWl0ZW1zGAIgAygLMi8uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvbiKUAQoPUHJvbW90aW9uUG9saWN5Eg0KBXN0YWdlGAEgASgJElQKDXN0YWdlU2VsZWN0b3IYAyABKAsyPS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uUG9saWN5U2VsZWN0b3ISHAoUYXV0b1Byb21vdGlvbkVuYWJsZWQYAiABKAgicwoXUHJvbW90aW9uUG9saWN5U2VsZWN0b3ISDAoEbmFtZRgBIAEoCRJKCg1sYWJlbFNlbGVjdG9yGAIgASgLMjMuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxhYmVsU2VsZWN0b3Ii8gEKElByb21vdGlvblJlZmVyZW5jZRIMCgRuYW1lGAEgASgJEkcKB2ZyZWlnaHQYAiABKAsyNi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodFJlZmVyZW5jZRJFCgZzdGF0dXMYAyABKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3RhdHVzEj4KCmZpbmlzaGVkQXQYBCABKAsyKi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuVGltZSK7AQoNUHJvbW90aW9uU3BlYxINCgVzdGFnZRgBIAEoCRIPCgdmcmVpZ2h0GAIgASgJEkYKBHZhcnMYBCADKAsyOC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRXhwcmVzc2lvblZhcmlhYmxlEkIKBXN0ZXBzGAMgAygLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblN0ZXAi9gQKD1Byb21vdGlvblN0YXR1cxIaChJsYXN0SGFuZGxlZFJlZnJlc2gYBCABKAkSDQoFcGhhc2UYASABKAkSDwoHbWVzc2FnZRgCIAEoCRJHCgdmcmVpZ2h0GAUgASgLMjYuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkZyZWlnaHRSZWZlcmVuY2USUgoRZnJlaWdodENvbGxlY3Rpb24YByABKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodENvbGxlY3Rpb24SSwoMaGVhbHRoQ2hlY2tzGAggAygLMjUuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhlYWx0aENoZWNrU3RlcBI9CglzdGFydGVkQXQYDCABKAsyKi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuVGltZRI+CgpmaW5pc2hlZEF0GAYgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSEwoLY3VycmVudFN0ZXAYCSABKAMSWgoVc3RlcEV4ZWN1dGlvbk1ldGFkYXRhGAsgAygLMjsuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlN0ZXBFeGVjdXRpb25NZXRhZGF0YRJNCgVzdGF0ZRgKIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT04i+wIKDVByb21vdGlvblN0ZXASDAoEdXNlcxgBIAEoCRJKCgR0YXNrGAUgASgLMjwuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblRhc2tSZWZlcmVuY2USCgoCYXMYAiABKAkSCgoCaWYYByABKAkSFwoPY29udGludWVPbkVycm9yGAggASgIEkcKBXJldHJ5GAQgASgLMjguZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblN0ZXBSZXRyeRJGCgR2YXJzGAYgAygLMjguZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkV4cHJlc3Npb25WYXJpYWJsZRJOCgZjb25maWcYAyABKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OIm0KElByb21vdGlvblN0ZXBSZXRyeRI/Cgd0aW1lb3V0GAEgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkR1cmF0aW9uEhYKDmVycm9yVGhyZXNob2xkGAIgASgNIpoBCg1Qcm9tb3Rpb25UYXNrEkIKCG1ldGFkYXRhGAEgASgLMjAuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGESRQoEc3BlYxgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25UYXNrU3BlYyKZAQoRUHJvbW90aW9uVGFza0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESQgoFaXRlbXMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uVGFzayI0ChZQcm9tb3Rpb25UYXNrUmVmZXJlbmNlEgwKBG5hbWUYASABKAkSDAoEa2luZBgCIAEoCSKfAQoRUHJvbW90aW9uVGFza1NwZWMSRgoEdmFycxgBIAMoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5FeHByZXNzaW9uVmFyaWFibGUSQgoFc3RlcHMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3RlcCJeChFQcm9tb3Rpb25UZW1wbGF0ZRJJCgRzcGVjGAEgASgLMjsuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblRlbXBsYXRlU3BlYyKjAQoVUHJvbW90aW9uVGVtcGxhdGVTcGVjEkYKBHZhcnMYAiADKAsyOC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRXhwcmVzc2lvblZhcmlhYmxlEkIKBXN0ZXBzGAEgAygLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblN0ZXAiWAoZUXVheVdlYmhvb2tSZWNlaXZlckNvbmZpZxI7CglzZWNyZXRSZWYYASABKAsyKC5rOHMuaW8uYXBpLmNvcmUudjEuTG9jYWxPYmplY3RSZWZlcmVuY2UisAIKEFJlcG9TdWJzY3JpcHRpb24SQgoDZ2l0GAEgASgLMjUuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkdpdFN1YnNjcmlwdGlvbhJGCgVpbWFnZRgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbWFnZVN1YnNjcmlwdGlvbhJGCgVjaGFydBgDIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5DaGFydFN1YnNjcmlwdGlvbhJICgxzdWJzY3JpcHRpb24YBCABKAsyMi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3Vic2NyaXB0aW9uIs0BCgVTdGFnZRJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEj0KBHNwZWMYAiABKAsyLy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3RhZ2VTcGVjEkEKBnN0YXR1cxgDIAEoCzIxLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5TdGFnZVN0YXR1cyKJAQoJU3RhZ2VMaXN0EkAKCG1ldGFkYXRhGAEgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxpc3RNZXRhEjoKBWl0ZW1zGAIgAygLMisuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlN0YWdlItACCglTdGFnZVNwZWMSDQoFc2hhcmQYBCABKAkSRgoEdmFycxgHIAMoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5FeHByZXNzaW9uVmFyaWFibGUSTgoQcmVxdWVzdGVkRnJlaWdodBgFIAMoCzI0LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0UmVxdWVzdBJSChFwcm9tb3Rpb25UZW1wbGF0ZRgGIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25UZW1wbGF0ZRJICgx2ZXJpZmljYXRpb24YAyABKAsyMi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuVmVyaWZpY2F0aW9uIl4KClN0YWdlU3RhdHMSDQoFY291bnQYAiABKAMSQQoGaGVhbHRoGAEgASgLMjEuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhlYWx0aFN0YXRzIrgFCgtTdGFnZVN0YXR1cxJDCgpjb25kaXRpb25zGA0gAygLMi8uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkNvbmRpdGlvbhIaChJsYXN0SGFuZGxlZFJlZnJlc2gYCyABKAkSTwoOZnJlaWdodEhpc3RvcnkYBCADKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodENvbGxlY3Rpb24SFgoOZnJlaWdodFN1bW1hcnkYDCABKAkSPAoGaGVhbHRoGAggASgLMiwuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhlYWx0aBIaChJvYnNlcnZlZEdlbmVyYXRpb24YBiABKAMSUgoQY3VycmVudFByb21vdGlvbhgHIAEoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25SZWZlcmVuY2USTwoNbGFzdFByb21vdGlvbhgKIAEoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25SZWZlcmVuY2USHAoUYXV0b1Byb21vdGlvbkVuYWJsZWQYDiABKAgSUQoIbWV0YWRhdGEYDyADKAsyPy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3RhZ2VTdGF0dXMuTWV0YWRhdGFFbnRyeRpvCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRJNCgV2YWx1ZRgCIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT046AjgBIvMBChVTdGVwRXhlY3V0aW9uTWV0YWRhdGESDQoFYWxpYXMYASABKAkSPQoJc3RhcnRlZEF0GAIgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSPgoKZmluaXNoZWRBdBgDIAEoCzIqLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5UaW1lEhIKCmVycm9yQ291bnQYBCABKA0SDgoGc3RhdHVzGAUgASgJEg8KB21lc3NhZ2UYBiABKAkSFwoPY29udGludWVPbkVycm9yGAcgASgIIp4BCgxTdWJzY3JpcHRpb24SGAoQc3Vic2NyaXB0aW9uVHlwZRgBIAEoCRIMCgRuYW1lGAIgASgJEk4KBmNvbmZpZxgDIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT04SFgoOZGlzY292ZXJ5TGltaXQYBCABKAUiiwIKDFZlcmlmaWNhdGlvbhJaChFhbmFseXNpc1RlbXBsYXRlcxgBIAMoCzI/LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BbmFseXNpc1RlbXBsYXRlUmVmZXJlbmNlElYKE2FuYWx5c2lzUnVuTWV0YWRhdGEYAiABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQW5hbHlzaXNSdW5NZXRhZGF0YRJHCgRhcmdzGAMgAygLMjkuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkFuYWx5c2lzUnVuQXJndW1lbnQinQIKEFZlcmlmaWNhdGlvbkluZm8SCgoCaWQYBCABKAkSDQoFYWN0b3IYByABKAkSPQoJc3RhcnRUaW1lGAUgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSDQoFcGhhc2UYASABKAkSDwoHbWVzc2FnZRgCIAEoCRJPCgthbmFseXNpc1J1bhgDIAEoCzI6LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BbmFseXNpc1J1blJlZmVyZW5jZRI+CgpmaW5pc2hUaW1lGAYgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUilAEKDVZlcmlmaWVkU3RhZ2USPgoKdmVyaWZpZWRBdBgBIAEoCzIqLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5UaW1lEkMKC2xvbmdlc3RTb2FrGAIgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkR1cmF0aW9uItkBCglXYXJlaG91c2USQgoIbWV0YWRhdGEYASABKAsyMC5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YRJBCgRzcGVjGAIgASgLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLldhcmVob3VzZVNwZWMSRQoGc3RhdHVzGAMgASgLMjUuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLldhcmVob3VzZVN0YXR1cyKRAQoNV2FyZWhvdXNlTGlzdBJACghtZXRhZGF0YRgBIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MaXN0TWV0YRI+CgVpdGVtcxgCIAMoCzIvLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5XYXJlaG91c2UitgIKDVdhcmVob3VzZVNwZWMSDQoFc2hhcmQYAiABKAkSQAoIaW50ZXJ2YWwYBCABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuRHVyYXRpb24SHQoVZnJlaWdodENyZWF0aW9uUG9saWN5GAMgASgJElUKDXN1YnNjcmlwdGlvbnMYASADKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OEl4KF2ZyZWlnaHRDcmVhdGlvbkNyaXRlcmlhGAUgASgLMj0uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkZyZWlnaHRDcmVhdGlvbkNyaXRlcmlhImIKDldhcmVob3VzZVN0YXRzEg0KBWNvdW50GAIgASgDEkEKBmhlYWx0aBgBIAEoCzIxLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5IZWFsdGhTdGF0cyL9AQoPV2FyZWhvdXNlU3RhdHVzEkMKCmNvbmRpdGlvbnMYCSADKAsyLy5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuQ29uZGl0aW9uEhoKEmxhc3RIYW5kbGVkUmVmcmVzaBgGIAEoCRIaChJvYnNlcnZlZEdlbmVyYXRpb24YBCABKAMSFQoNbGFzdEZyZWlnaHRJRBgIIAEoCRJWChNkaXNjb3ZlcmVkQXJ0aWZhY3RzGAcgASgLMjkuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkRpc2NvdmVyZWRBcnRpZmFjdHMi8wYKFVdlYmhvb2tSZWNlaXZlckNvbmZpZxIMCgRuYW1lGAEgASgJElcKCWJpdGJ1Y2tldBgFIAEoCzJELmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5CaXRidWNrZXRXZWJob29rUmVjZWl2ZXJDb25maWcSVwoJZG9ja2VyaHViGAYgASgLMkQuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkRvY2tlckh1YldlYmhvb2tSZWNlaXZlckNvbmZpZxJRCgZnaXRodWIYAiABKAsyQS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuR2l0SHViV2ViaG9va1JlY2VpdmVyQ29uZmlnElEKBmdpdGxhYhgDIAEoCzJBLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HaXRMYWJXZWJob29rUmVjZWl2ZXJDb25maWcSUQoGaGFyYm9yGAogASgLMkEuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhhcmJvcldlYmhvb2tSZWNlaXZlckNvbmZpZxJNCgRxdWF5GAQgASgLMj8uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlF1YXlXZWJob29rUmVjZWl2ZXJDb25maWcSWwoLYXJ0aWZhY3RvcnkYCSABKAsyRi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJ0aWZhY3RvcnlXZWJob29rUmVjZWl2ZXJDb25maWcSTwoFYXp1cmUYCCABKAsyQC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXp1cmVXZWJob29rUmVjZWl2ZXJDb25maWcSTwoFZ2l0ZWEYByABKAsyQC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuR2l0ZWFXZWJob29rUmVjZWl2ZXJDb25maWcSUwoHZ2VuZXJpYxgLIAEoCzJCLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HZW5lcmljV2ViaG9va1JlY2VpdmVyQ29uZmlnIkEKFldlYmhvb2tSZWNlaXZlckRldGFpbHMSDAoEbmFtZRgBIAEoCRIMCgRwYXRoGAMgASgJEgsKA3VybBgEIAEoCUKXAgooY29tLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMUIOR2VuZXJhdGVkUHJvdG9QAVokZ2l0aHViLmNvbS9ha3VpdHkva2FyZ28vYXBpL3YxYWxwaGExogIFR0NBS0GqAiRHaXRodWIuQ29tLkFrdWl0eS5LYXJnby5BcGkuVjFhbHBoYTHKAiRHaXRodWJcQ29tXEFrdWl0eVxLYXJnb1xBcGlcVjFhbHBoYTHiAjBHaXRodWJcQ29tXEFrdWl0eVxLYXJnb1xBcGlcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAilHaXRodWI6OkNvbTo6QWt1aXR5OjpLYXJnbzo6QXBpOjpWMWFscGhhMQ", [file_k8s_io_api_core_v1_generated, file_k8s_io_apiextensions_apiserver_pkg_apis_apiextensions_v1_generated, file_k8s_io_apimachinery_pkg_apis_meta_v1_generated, file_k8s_io_apimachinery_pkg_runtime_generated, file_k8s_io_apimachinery_pkg_runtime_schema_generated]); + fileDesc("ChxhcGkvdjFhbHBoYTEvZ2VuZXJhdGVkLnByb3RvEiRnaXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEiMgoTQW5hbHlzaXNSdW5Bcmd1bWVudBIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJIrACChNBbmFseXNpc1J1bk1ldGFkYXRhElUKBmxhYmVscxgBIAMoCzJFLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BbmFseXNpc1J1bk1ldGFkYXRhLkxhYmVsc0VudHJ5El8KC2Fubm90YXRpb25zGAIgAygLMkouZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkFuYWx5c2lzUnVuTWV0YWRhdGEuQW5ub3RhdGlvbnNFbnRyeRotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjIKEEFubm90YXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJGChRBbmFseXNpc1J1blJlZmVyZW5jZRIRCgluYW1lc3BhY2UYASABKAkSDAoEbmFtZRgCIAEoCRINCgVwaGFzZRgDIAEoCSI3ChlBbmFseXNpc1RlbXBsYXRlUmVmZXJlbmNlEgwKBG5hbWUYASABKAkSDAoEa2luZBgCIAEoCSJPCg1BcHByb3ZlZFN0YWdlEj4KCmFwcHJvdmVkQXQYASABKAsyKi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuVGltZSI4ChVBcmdvQ0RBcHBIZWFsdGhTdGF0dXMSDgoGc3RhdHVzGAEgASgJEg8KB21lc3NhZ2UYAiABKAki1AEKD0FyZ29DREFwcFN0YXR1cxIRCgluYW1lc3BhY2UYASABKAkSDAoEbmFtZRgCIAEoCRJRCgxoZWFsdGhTdGF0dXMYAyABKAsyOy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJnb0NEQXBwSGVhbHRoU3RhdHVzEk0KCnN5bmNTdGF0dXMYBCABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJnb0NEQXBwU3luY1N0YXR1cyJKChNBcmdvQ0RBcHBTeW5jU3RhdHVzEg4KBnN0YXR1cxgBIAEoCRIQCghyZXZpc2lvbhgCIAEoCRIRCglyZXZpc2lvbnMYAyADKAkipgEKEUFydGlmYWN0UmVmZXJlbmNlEhQKDGFydGlmYWN0VHlwZRgBIAEoCRIYChBzdWJzY3JpcHRpb25OYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSUAoIbWV0YWRhdGEYBCABKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OIngKIEFydGlmYWN0b3J5V2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZRIXCg92aXJ0dWFsUmVwb05hbWUYAiABKAkiLwoUQXV0b1Byb21vdGlvbk9wdGlvbnMSFwoPc2VsZWN0aW9uUG9saWN5GAEgASgJIlkKGkF6dXJlV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZSJdCh5CaXRidWNrZXRXZWJob29rUmVjZWl2ZXJDb25maWcSOwoJc2VjcmV0UmVmGAEgASgLMiguazhzLmlvLmFwaS5jb3JlLnYxLkxvY2FsT2JqZWN0UmVmZXJlbmNlIjcKBUNoYXJ0Eg8KB3JlcG9VUkwYASABKAkSDAoEbmFtZRgCIAEoCRIPCgd2ZXJzaW9uGAMgASgJImEKFENoYXJ0RGlzY292ZXJ5UmVzdWx0Eg8KB3JlcG9VUkwYASABKAkSDAoEbmFtZRgCIAEoCRIYChBzZW12ZXJDb25zdHJhaW50GAMgASgJEhAKCHZlcnNpb25zGAQgAygJImQKEUNoYXJ0U3Vic2NyaXB0aW9uEhYKDmRpc2NvdmVyeUxpbWl0GAEgASgDEgwKBG5hbWUYAiABKAkSDwoHcmVwb1VSTBgDIAEoCRIYChBzZW12ZXJDb25zdHJhaW50GAQgASgJIuUBCg1DbHVzdGVyQ29uZmlnEkIKCG1ldGFkYXRhGAEgASgLMjAuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGESRQoEc3BlYxgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5DbHVzdGVyQ29uZmlnU3BlYxJJCgZzdGF0dXMYAyABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2x1c3RlckNvbmZpZ1N0YXR1cyKZAQoRQ2x1c3RlckNvbmZpZ0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESQgoFaXRlbXMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2x1c3RlckNvbmZpZyJqChFDbHVzdGVyQ29uZmlnU3BlYxJVChB3ZWJob29rUmVjZWl2ZXJzGAEgAygLMjsuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLldlYmhvb2tSZWNlaXZlckNvbmZpZyLqAQoTQ2x1c3RlckNvbmZpZ1N0YXR1cxJDCgpjb25kaXRpb25zGAEgAygLMi8uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkNvbmRpdGlvbhIaChJvYnNlcnZlZEdlbmVyYXRpb24YAyABKAMSGgoSbGFzdEhhbmRsZWRSZWZyZXNoGAQgASgJElYKEHdlYmhvb2tSZWNlaXZlcnMYAiADKAsyPC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuV2ViaG9va1JlY2VpdmVyRGV0YWlscyKhAQoUQ2x1c3RlclByb21vdGlvblRhc2sSQgoIbWV0YWRhdGEYASABKAsyMC5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YRJFCgRzcGVjGAIgASgLMjcuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblRhc2tTcGVjIqcBChhDbHVzdGVyUHJvbW90aW9uVGFza0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESSQoFaXRlbXMYAiADKAsyOi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2x1c3RlclByb21vdGlvblRhc2siSQoMQ3VycmVudFN0YWdlEjkKBXNpbmNlGAEgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUi/gIKE0Rpc2NvdmVyZWRBcnRpZmFjdHMSQAoMZGlzY292ZXJlZEF0GAQgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSRQoDZ2l0GAEgAygLMjguZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkdpdERpc2NvdmVyeVJlc3VsdBJKCgZpbWFnZXMYAiADKAsyOi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuSW1hZ2VEaXNjb3ZlcnlSZXN1bHQSSgoGY2hhcnRzGAMgAygLMjouZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkNoYXJ0RGlzY292ZXJ5UmVzdWx0EkYKB3Jlc3VsdHMYBSADKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRGlzY292ZXJ5UmVzdWx0IrABChBEaXNjb3ZlcmVkQ29tbWl0EgoKAmlkGAEgASgJEg4KBmJyYW5jaBgCIAEoCRILCgN0YWcYAyABKAkSDwoHc3ViamVjdBgEIAEoCRIOCgZhdXRob3IYBSABKAkSEQoJY29tbWl0dGVyGAYgASgJEj8KC2NyZWF0b3JEYXRlGAcgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUikAIKGERpc2NvdmVyZWRJbWFnZVJlZmVyZW5jZRILCgN0YWcYASABKAkSDgoGZGlnZXN0GAIgASgJEmQKC2Fubm90YXRpb25zGAUgAygLMk8uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkRpc2NvdmVyZWRJbWFnZVJlZmVyZW5jZS5Bbm5vdGF0aW9uc0VudHJ5Ej0KCWNyZWF0ZWRBdBgEIAEoCzIqLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5UaW1lGjIKEEFubm90YXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJ0Cg9EaXNjb3ZlcnlSZXN1bHQSDAoEbmFtZRgDIAEoCRJTChJhcnRpZmFjdFJlZmVyZW5jZXMYAiADKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJ0aWZhY3RSZWZlcmVuY2UiXQoeRG9ja2VySHViV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZSIxChJFeHByZXNzaW9uVmFyaWFibGUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSLuAwoHRnJlaWdodBJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEg0KBWFsaWFzGAcgASgJEkMKBm9yaWdpbhgJIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0T3JpZ2luEkAKB2NvbW1pdHMYAyADKAsyLy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuR2l0Q29tbWl0EjsKBmltYWdlcxgEIAMoCzIrLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbWFnZRI7CgZjaGFydHMYBSADKAsyKy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQ2hhcnQSSgoJYXJ0aWZhY3RzGAogAygLMjcuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkFydGlmYWN0UmVmZXJlbmNlEkMKBnN0YXR1cxgGIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzIq0CChFGcmVpZ2h0Q29sbGVjdGlvbhIKCgJpZBgDIAEoCRJRCgVpdGVtcxgBIAMoCzJCLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0Q29sbGVjdGlvbi5JdGVtc0VudHJ5ElMKE3ZlcmlmaWNhdGlvbkhpc3RvcnkYAiADKAsyNi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuVmVyaWZpY2F0aW9uSW5mbxpkCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRJFCgV2YWx1ZRgCIAEoCzI2LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0UmVmZXJlbmNlOgI4ASItChdGcmVpZ2h0Q3JlYXRpb25Dcml0ZXJpYRISCgpleHByZXNzaW9uGAEgASgJIo0BCgtGcmVpZ2h0TGlzdBJACghtZXRhZGF0YRgBIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MaXN0TWV0YRI8CgVpdGVtcxgCIAMoCzItLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0IisKDUZyZWlnaHRPcmlnaW4SDAoEa2luZBgBIAEoCRIMCgRuYW1lGAIgASgJIu0CChBGcmVpZ2h0UmVmZXJlbmNlEgwKBG5hbWUYASABKAkSQwoGb3JpZ2luGAggASgLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkZyZWlnaHRPcmlnaW4SQAoHY29tbWl0cxgCIAMoCzIvLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HaXRDb21taXQSOwoGaW1hZ2VzGAMgAygLMisuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkltYWdlEjsKBmNoYXJ0cxgEIAMoCzIrLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5DaGFydBJKCglhcnRpZmFjdHMYCSADKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJ0aWZhY3RSZWZlcmVuY2UinAEKDkZyZWlnaHRSZXF1ZXN0EkMKBm9yaWdpbhgBIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0T3JpZ2luEkUKB3NvdXJjZXMYAiABKAsyNC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodFNvdXJjZXMi8gEKDkZyZWlnaHRTb3VyY2VzEg4KBmRpcmVjdBgBIAEoCBIOCgZzdGFnZXMYAiADKAkSSAoQcmVxdWlyZWRTb2FrVGltZRgDIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5EdXJhdGlvbhIcChRhdmFpbGFiaWxpdHlTdHJhdGVneRgEIAEoCRJYChRhdXRvUHJvbW90aW9uT3B0aW9ucxgFIAEoCzI6LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BdXRvUHJvbW90aW9uT3B0aW9ucyKdBgoNRnJlaWdodFN0YXR1cxJZCgtjdXJyZW50bHlJbhgDIAMoCzJELmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzLkN1cnJlbnRseUluRW50cnkSVwoKdmVyaWZpZWRJbhgBIAMoCzJDLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzLlZlcmlmaWVkSW5FbnRyeRJZCgthcHByb3ZlZEZvchgCIAMoCzJELmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0U3RhdHVzLkFwcHJvdmVkRm9yRW50cnkSUwoIbWV0YWRhdGEYBCADKAsyQS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodFN0YXR1cy5NZXRhZGF0YUVudHJ5GmYKEEN1cnJlbnRseUluRW50cnkSCwoDa2V5GAEgASgJEkEKBXZhbHVlGAIgASgLMjIuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkN1cnJlbnRTdGFnZToCOAEaZgoPVmVyaWZpZWRJbkVudHJ5EgsKA2tleRgBIAEoCRJCCgV2YWx1ZRgCIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5WZXJpZmllZFN0YWdlOgI4ARpnChBBcHByb3ZlZEZvckVudHJ5EgsKA2tleRgBIAEoCRJCCgV2YWx1ZRgCIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BcHByb3ZlZFN0YWdlOgI4ARpvCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRJNCgV2YWx1ZRgCIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT046AjgBIq8CChRHZW5lcmljV2ViaG9va0FjdGlvbhIOCgZhY3Rpb24YASABKAkSFgoOd2hlbkV4cHJlc3Npb24YAiABKAkSXgoKcGFyYW1ldGVycxgDIAMoCzJKLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HZW5lcmljV2ViaG9va0FjdGlvbi5QYXJhbWV0ZXJzRW50cnkSXAoHdGFyZ2V0cxgEIAMoCzJLLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HZW5lcmljV2ViaG9va1RhcmdldFNlbGVjdGlvbkNyaXRlcmlhGjEKD1BhcmFtZXRlcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIqgBChxHZW5lcmljV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZRJLCgdhY3Rpb25zGAIgAygLMjouZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkdlbmVyaWNXZWJob29rQWN0aW9uItsBCiVHZW5lcmljV2ViaG9va1RhcmdldFNlbGVjdGlvbkNyaXRlcmlhEgwKBGtpbmQYASABKAkSDAoEbmFtZRgCIAEoCRJKCg1sYWJlbFNlbGVjdG9yGAMgASgLMjMuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxhYmVsU2VsZWN0b3ISSgoNaW5kZXhTZWxlY3RvchgEIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbmRleFNlbGVjdG9yInkKCUdpdENvbW1pdBIPCgdyZXBvVVJMGAEgASgJEgoKAmlkGAIgASgJEg4KBmJyYW5jaBgDIAEoCRILCgN0YWcYBCABKAkSDwoHbWVzc2FnZRgGIAEoCRIOCgZhdXRob3IYByABKAkSEQoJY29tbWl0dGVyGAggASgJIm4KEkdpdERpc2NvdmVyeVJlc3VsdBIPCgdyZXBvVVJMGAEgASgJEkcKB2NvbW1pdHMYAiADKAsyNi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRGlzY292ZXJlZENvbW1pdCJaChtHaXRIdWJXZWJob29rUmVjZWl2ZXJDb25maWcSOwoJc2VjcmV0UmVmGAEgASgLMiguazhzLmlvLmFwaS5jb3JlLnYxLkxvY2FsT2JqZWN0UmVmZXJlbmNlIloKG0dpdExhYldlYmhvb2tSZWNlaXZlckNvbmZpZxI7CglzZWNyZXRSZWYYASABKAsyKC5rOHMuaW8uYXBpLmNvcmUudjEuTG9jYWxPYmplY3RSZWZlcmVuY2Ui3QIKD0dpdFN1YnNjcmlwdGlvbhIRCglhbGxvd1RhZ3MYASABKAkSGAoQYWxsb3dUYWdzUmVnZXhlcxgCIAMoCRIOCgZicmFuY2gYAyABKAkSHwoXY29tbWl0U2VsZWN0aW9uU3RyYXRlZ3kYBCABKAkSFgoOZGlzY292ZXJ5TGltaXQYBSABKAMSFAoMZXhjbHVkZVBhdGhzGAYgAygJEhgKEGV4cHJlc3Npb25GaWx0ZXIYByABKAkSEgoKaWdub3JlVGFncxgIIAMoCRIZChFpZ25vcmVUYWdzUmVnZXhlcxgJIAMoCRIUCgxpbmNsdWRlUGF0aHMYCiADKAkSHQoVaW5zZWN1cmVTa2lwVExTVmVyaWZ5GAsgASgIEg8KB3JlcG9VUkwYDCABKAkSGAoQc2VtdmVyQ29uc3RyYWludBgNIAEoCRIVCg1zdHJpY3RTZW12ZXJzGA4gASgIIlkKGkdpdGVhV2ViaG9va1JlY2VpdmVyQ29uZmlnEjsKCXNlY3JldFJlZhgBIAEoCzIoLms4cy5pby5hcGkuY29yZS52MS5Mb2NhbE9iamVjdFJlZmVyZW5jZSJaChtIYXJib3JXZWJob29rUmVjZWl2ZXJDb25maWcSOwoJc2VjcmV0UmVmGAEgASgLMiguazhzLmlvLmFwaS5jb3JlLnYxLkxvY2FsT2JqZWN0UmVmZXJlbmNlIsgBCgZIZWFsdGgSDgoGc3RhdHVzGAEgASgJEg4KBmlzc3VlcxgCIAMoCRJOCgZjb25maWcYBCABKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OEk4KBm91dHB1dBgFIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT04ibwoPSGVhbHRoQ2hlY2tTdGVwEgwKBHVzZXMYASABKAkSTgoGY29uZmlnGAIgASgLMj4uazhzLmlvLmFwaWV4dGVuc2lvbnNfYXBpc2VydmVyLnBrZy5hcGlzLmFwaWV4dGVuc2lvbnMudjEuSlNPTiIeCgtIZWFsdGhTdGF0cxIPCgdoZWFsdGh5GAEgASgDIrwBCgVJbWFnZRIPCgdyZXBvVVJMGAEgASgJEgsKA3RhZxgDIAEoCRIOCgZkaWdlc3QYBCABKAkSUQoLYW5ub3RhdGlvbnMYBSADKAsyPC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuSW1hZ2UuQW5ub3RhdGlvbnNFbnRyeRoyChBBbm5vdGF0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEijQEKFEltYWdlRGlzY292ZXJ5UmVzdWx0Eg8KB3JlcG9VUkwYASABKAkSEAoIcGxhdGZvcm0YAiABKAkSUgoKcmVmZXJlbmNlcxgDIAMoCzI+LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5EaXNjb3ZlcmVkSW1hZ2VSZWZlcmVuY2UiqAIKEUltYWdlU3Vic2NyaXB0aW9uEhEKCWFsbG93VGFncxgBIAEoCRIYChBhbGxvd1RhZ3NSZWdleGVzGAIgAygJEhIKCmNhY2hlQnlUYWcYAyABKAgSEgoKY29uc3RyYWludBgEIAEoCRIWCg5kaXNjb3ZlcnlMaW1pdBgFIAEoAxISCgppZ25vcmVUYWdzGAYgAygJEhkKEWlnbm9yZVRhZ3NSZWdleGVzGAcgAygJEh4KFmltYWdlU2VsZWN0aW9uU3RyYXRlZ3kYCCABKAkSHQoVaW5zZWN1cmVTa2lwVExTVmVyaWZ5GAkgASgIEhAKCHBsYXRmb3JtGAogASgJEg8KB3JlcG9VUkwYCyABKAkSFQoNc3RyaWN0U2VtdmVycxgMIAEoCCJlCg1JbmRleFNlbGVjdG9yElQKDG1hdGNoSW5kaWNlcxgBIAMoCzI+LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbmRleFNlbGVjdG9yUmVxdWlyZW1lbnQiSAoYSW5kZXhTZWxlY3RvclJlcXVpcmVtZW50EgsKA2tleRgBIAEoCRIQCghvcGVyYXRvchgCIAEoCRINCgV2YWx1ZRgDIAEoCSKSAQoHUHJvamVjdBJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEkMKBnN0YXR1cxgDIAEoCzIzLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0U3RhdHVzIuUBCg1Qcm9qZWN0Q29uZmlnEkIKCG1ldGFkYXRhGAEgASgLMjAuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGESRQoEc3BlYxgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0Q29uZmlnU3BlYxJJCgZzdGF0dXMYAyABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvamVjdENvbmZpZ1N0YXR1cyKZAQoRUHJvamVjdENvbmZpZ0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESQgoFaXRlbXMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvamVjdENvbmZpZyK8AQoRUHJvamVjdENvbmZpZ1NwZWMSUAoRcHJvbW90aW9uUG9saWNpZXMYASADKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uUG9saWN5ElUKEHdlYmhvb2tSZWNlaXZlcnMYAiADKAsyOy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuV2ViaG9va1JlY2VpdmVyQ29uZmlnIuoBChNQcm9qZWN0Q29uZmlnU3RhdHVzEkMKCmNvbmRpdGlvbnMYASADKAsyLy5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuQ29uZGl0aW9uEhoKEm9ic2VydmVkR2VuZXJhdGlvbhgDIAEoAxIaChJsYXN0SGFuZGxlZFJlZnJlc2gYBCABKAkSVgoQd2ViaG9va1JlY2VpdmVycxgCIAMoCzI8LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5XZWJob29rUmVjZWl2ZXJEZXRhaWxzIo0BCgtQcm9qZWN0TGlzdBJACghtZXRhZGF0YRgBIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MaXN0TWV0YRI8CgVpdGVtcxgCIAMoCzItLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0IpoBCgxQcm9qZWN0U3RhdHMSSAoKd2FyZWhvdXNlcxgBIAEoCzI0LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5XYXJlaG91c2VTdGF0cxJACgZzdGFnZXMYAiABKAsyMC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3RhZ2VTdGF0cyKXAQoNUHJvamVjdFN0YXR1cxJDCgpjb25kaXRpb25zGAMgAygLMi8uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkNvbmRpdGlvbhJBCgVzdGF0cxgEIAEoCzIyLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9qZWN0U3RhdHMi2QEKCVByb21vdGlvbhJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEkEKBHNwZWMYAiABKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3BlYxJFCgZzdGF0dXMYAyABKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3RhdHVzIpEBCg1Qcm9tb3Rpb25MaXN0EkAKCG1ldGFkYXRhGAEgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxpc3RNZXRhEj4KBWl0ZW1zGAIgAygLMi8uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvbiLuAQoPUHJvbW90aW9uUG9saWN5Eg0KBXN0YWdlGAEgASgJElQKDXN0YWdlU2VsZWN0b3IYAiABKAsyPS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uUG9saWN5U2VsZWN0b3ISHAoUYXV0b1Byb21vdGlvbkVuYWJsZWQYAyABKAgSWAoQcHJvbW90aW9uV2luZG93cxgEIAMoCzI+LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25XaW5kb3dSZWZlcmVuY2UicwoXUHJvbW90aW9uUG9saWN5U2VsZWN0b3ISDAoEbmFtZRgBIAEoCRJKCg1sYWJlbFNlbGVjdG9yGAIgASgLMjMuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxhYmVsU2VsZWN0b3Ii8gEKElByb21vdGlvblJlZmVyZW5jZRIMCgRuYW1lGAEgASgJEkcKB2ZyZWlnaHQYAiABKAsyNi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodFJlZmVyZW5jZRJFCgZzdGF0dXMYAyABKAsyNS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3RhdHVzEj4KCmZpbmlzaGVkQXQYBCABKAsyKi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuVGltZSK7AQoNUHJvbW90aW9uU3BlYxINCgVzdGFnZRgBIAEoCRIPCgdmcmVpZ2h0GAIgASgJEkYKBHZhcnMYBCADKAsyOC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRXhwcmVzc2lvblZhcmlhYmxlEkIKBXN0ZXBzGAMgAygLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblN0ZXAi9gQKD1Byb21vdGlvblN0YXR1cxIaChJsYXN0SGFuZGxlZFJlZnJlc2gYBCABKAkSDQoFcGhhc2UYASABKAkSDwoHbWVzc2FnZRgCIAEoCRJHCgdmcmVpZ2h0GAUgASgLMjYuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkZyZWlnaHRSZWZlcmVuY2USUgoRZnJlaWdodENvbGxlY3Rpb24YByABKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodENvbGxlY3Rpb24SSwoMaGVhbHRoQ2hlY2tzGAggAygLMjUuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhlYWx0aENoZWNrU3RlcBI9CglzdGFydGVkQXQYDCABKAsyKi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuVGltZRI+CgpmaW5pc2hlZEF0GAYgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSEwoLY3VycmVudFN0ZXAYCSABKAMSWgoVc3RlcEV4ZWN1dGlvbk1ldGFkYXRhGAsgAygLMjsuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlN0ZXBFeGVjdXRpb25NZXRhZGF0YRJNCgVzdGF0ZRgKIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT04i+wIKDVByb21vdGlvblN0ZXASDAoEdXNlcxgBIAEoCRJKCgR0YXNrGAUgASgLMjwuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblRhc2tSZWZlcmVuY2USCgoCYXMYAiABKAkSCgoCaWYYByABKAkSFwoPY29udGludWVPbkVycm9yGAggASgIEkcKBXJldHJ5GAQgASgLMjguZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblN0ZXBSZXRyeRJGCgR2YXJzGAYgAygLMjguZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkV4cHJlc3Npb25WYXJpYWJsZRJOCgZjb25maWcYAyABKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OIm0KElByb21vdGlvblN0ZXBSZXRyeRI/Cgd0aW1lb3V0GAEgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkR1cmF0aW9uEhYKDmVycm9yVGhyZXNob2xkGAIgASgNIpoBCg1Qcm9tb3Rpb25UYXNrEkIKCG1ldGFkYXRhGAEgASgLMjAuazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLk9iamVjdE1ldGESRQoEc3BlYxgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25UYXNrU3BlYyKZAQoRUHJvbW90aW9uVGFza0xpc3QSQAoIbWV0YWRhdGEYASABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuTGlzdE1ldGESQgoFaXRlbXMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uVGFzayI0ChZQcm9tb3Rpb25UYXNrUmVmZXJlbmNlEgwKBG5hbWUYASABKAkSDAoEa2luZBgCIAEoCSKfAQoRUHJvbW90aW9uVGFza1NwZWMSRgoEdmFycxgBIAMoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5FeHByZXNzaW9uVmFyaWFibGUSQgoFc3RlcHMYAiADKAsyMy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uU3RlcCJeChFQcm9tb3Rpb25UZW1wbGF0ZRJJCgRzcGVjGAEgASgLMjsuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblRlbXBsYXRlU3BlYyKjAQoVUHJvbW90aW9uVGVtcGxhdGVTcGVjEkYKBHZhcnMYAiADKAsyOC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRXhwcmVzc2lvblZhcmlhYmxlEkIKBXN0ZXBzGAEgAygLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlByb21vdGlvblN0ZXAingEKD1Byb21vdGlvbldpbmRvdxJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEkcKBHNwZWMYAiABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuUHJvbW90aW9uV2luZG93U3BlYyKdAQoTUHJvbW90aW9uV2luZG93TGlzdBJACghtZXRhZGF0YRgBIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MaXN0TWV0YRJECgVpdGVtcxgCIAMoCzI1LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25XaW5kb3ciNgoYUHJvbW90aW9uV2luZG93UmVmZXJlbmNlEgwKBG5hbWUYASABKAkSDAoEa2luZBgCIAEoCSJZChNQcm9tb3Rpb25XaW5kb3dTcGVjEgwKBGtpbmQYASABKAkSEAoIc2NoZWR1bGUYAiABKAkSEAoIZHVyYXRpb24YAyABKAkSEAoIdGltZVpvbmUYBCABKAkiWAoZUXVheVdlYmhvb2tSZWNlaXZlckNvbmZpZxI7CglzZWNyZXRSZWYYASABKAsyKC5rOHMuaW8uYXBpLmNvcmUudjEuTG9jYWxPYmplY3RSZWZlcmVuY2UisAIKEFJlcG9TdWJzY3JpcHRpb24SQgoDZ2l0GAEgASgLMjUuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkdpdFN1YnNjcmlwdGlvbhJGCgVpbWFnZRgCIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5JbWFnZVN1YnNjcmlwdGlvbhJGCgVjaGFydBgDIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5DaGFydFN1YnNjcmlwdGlvbhJICgxzdWJzY3JpcHRpb24YBCABKAsyMi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3Vic2NyaXB0aW9uIs0BCgVTdGFnZRJCCghtZXRhZGF0YRgBIAEoCzIwLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5PYmplY3RNZXRhEj0KBHNwZWMYAiABKAsyLy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3RhZ2VTcGVjEkEKBnN0YXR1cxgDIAEoCzIxLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5TdGFnZVN0YXR1cyKJAQoJU3RhZ2VMaXN0EkAKCG1ldGFkYXRhGAEgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkxpc3RNZXRhEjoKBWl0ZW1zGAIgAygLMisuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlN0YWdlItACCglTdGFnZVNwZWMSDQoFc2hhcmQYBCABKAkSRgoEdmFycxgHIAMoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5FeHByZXNzaW9uVmFyaWFibGUSTgoQcmVxdWVzdGVkRnJlaWdodBgFIAMoCzI0LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5GcmVpZ2h0UmVxdWVzdBJSChFwcm9tb3Rpb25UZW1wbGF0ZRgGIAEoCzI3LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25UZW1wbGF0ZRJICgx2ZXJpZmljYXRpb24YAyABKAsyMi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuVmVyaWZpY2F0aW9uIl4KClN0YWdlU3RhdHMSDQoFY291bnQYAiABKAMSQQoGaGVhbHRoGAEgASgLMjEuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhlYWx0aFN0YXRzIrgFCgtTdGFnZVN0YXR1cxJDCgpjb25kaXRpb25zGA0gAygLMi8uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkNvbmRpdGlvbhIaChJsYXN0SGFuZGxlZFJlZnJlc2gYCyABKAkSTwoOZnJlaWdodEhpc3RvcnkYBCADKAsyNy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuRnJlaWdodENvbGxlY3Rpb24SFgoOZnJlaWdodFN1bW1hcnkYDCABKAkSPAoGaGVhbHRoGAggASgLMiwuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhlYWx0aBIaChJvYnNlcnZlZEdlbmVyYXRpb24YBiABKAMSUgoQY3VycmVudFByb21vdGlvbhgHIAEoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25SZWZlcmVuY2USTwoNbGFzdFByb21vdGlvbhgKIAEoCzI4LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5Qcm9tb3Rpb25SZWZlcmVuY2USHAoUYXV0b1Byb21vdGlvbkVuYWJsZWQYDiABKAgSUQoIbWV0YWRhdGEYDyADKAsyPy5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuU3RhZ2VTdGF0dXMuTWV0YWRhdGFFbnRyeRpvCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRJNCgV2YWx1ZRgCIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT046AjgBIvMBChVTdGVwRXhlY3V0aW9uTWV0YWRhdGESDQoFYWxpYXMYASABKAkSPQoJc3RhcnRlZEF0GAIgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSPgoKZmluaXNoZWRBdBgDIAEoCzIqLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5UaW1lEhIKCmVycm9yQ291bnQYBCABKA0SDgoGc3RhdHVzGAUgASgJEg8KB21lc3NhZ2UYBiABKAkSFwoPY29udGludWVPbkVycm9yGAcgASgIIp4BCgxTdWJzY3JpcHRpb24SGAoQc3Vic2NyaXB0aW9uVHlwZRgBIAEoCRIMCgRuYW1lGAIgASgJEk4KBmNvbmZpZxgDIAEoCzI+Lms4cy5pby5hcGlleHRlbnNpb25zX2FwaXNlcnZlci5wa2cuYXBpcy5hcGlleHRlbnNpb25zLnYxLkpTT04SFgoOZGlzY292ZXJ5TGltaXQYBCABKAUiiwIKDFZlcmlmaWNhdGlvbhJaChFhbmFseXNpc1RlbXBsYXRlcxgBIAMoCzI/LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BbmFseXNpc1RlbXBsYXRlUmVmZXJlbmNlElYKE2FuYWx5c2lzUnVuTWV0YWRhdGEYAiABKAsyOS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQW5hbHlzaXNSdW5NZXRhZGF0YRJHCgRhcmdzGAMgAygLMjkuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkFuYWx5c2lzUnVuQXJndW1lbnQinQIKEFZlcmlmaWNhdGlvbkluZm8SCgoCaWQYBCABKAkSDQoFYWN0b3IYByABKAkSPQoJc3RhcnRUaW1lGAUgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUSDQoFcGhhc2UYASABKAkSDwoHbWVzc2FnZRgCIAEoCRJPCgthbmFseXNpc1J1bhgDIAEoCzI6LmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5BbmFseXNpc1J1blJlZmVyZW5jZRI+CgpmaW5pc2hUaW1lGAYgASgLMiouazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLlRpbWUilAEKDVZlcmlmaWVkU3RhZ2USPgoKdmVyaWZpZWRBdBgBIAEoCzIqLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5UaW1lEkMKC2xvbmdlc3RTb2FrGAIgASgLMi4uazhzLmlvLmFwaW1hY2hpbmVyeS5wa2cuYXBpcy5tZXRhLnYxLkR1cmF0aW9uItkBCglXYXJlaG91c2USQgoIbWV0YWRhdGEYASABKAsyMC5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuT2JqZWN0TWV0YRJBCgRzcGVjGAIgASgLMjMuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLldhcmVob3VzZVNwZWMSRQoGc3RhdHVzGAMgASgLMjUuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLldhcmVob3VzZVN0YXR1cyKRAQoNV2FyZWhvdXNlTGlzdBJACghtZXRhZGF0YRgBIAEoCzIuLms4cy5pby5hcGltYWNoaW5lcnkucGtnLmFwaXMubWV0YS52MS5MaXN0TWV0YRI+CgVpdGVtcxgCIAMoCzIvLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5XYXJlaG91c2UitgIKDVdhcmVob3VzZVNwZWMSDQoFc2hhcmQYAiABKAkSQAoIaW50ZXJ2YWwYBCABKAsyLi5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuRHVyYXRpb24SHQoVZnJlaWdodENyZWF0aW9uUG9saWN5GAMgASgJElUKDXN1YnNjcmlwdGlvbnMYASADKAsyPi5rOHMuaW8uYXBpZXh0ZW5zaW9uc19hcGlzZXJ2ZXIucGtnLmFwaXMuYXBpZXh0ZW5zaW9ucy52MS5KU09OEl4KF2ZyZWlnaHRDcmVhdGlvbkNyaXRlcmlhGAUgASgLMj0uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkZyZWlnaHRDcmVhdGlvbkNyaXRlcmlhImIKDldhcmVob3VzZVN0YXRzEg0KBWNvdW50GAIgASgDEkEKBmhlYWx0aBgBIAEoCzIxLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5IZWFsdGhTdGF0cyL9AQoPV2FyZWhvdXNlU3RhdHVzEkMKCmNvbmRpdGlvbnMYCSADKAsyLy5rOHMuaW8uYXBpbWFjaGluZXJ5LnBrZy5hcGlzLm1ldGEudjEuQ29uZGl0aW9uEhoKEmxhc3RIYW5kbGVkUmVmcmVzaBgGIAEoCRIaChJvYnNlcnZlZEdlbmVyYXRpb24YBCABKAMSFQoNbGFzdEZyZWlnaHRJRBgIIAEoCRJWChNkaXNjb3ZlcmVkQXJ0aWZhY3RzGAcgASgLMjkuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkRpc2NvdmVyZWRBcnRpZmFjdHMi8wYKFVdlYmhvb2tSZWNlaXZlckNvbmZpZxIMCgRuYW1lGAEgASgJElcKCWJpdGJ1Y2tldBgFIAEoCzJELmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5CaXRidWNrZXRXZWJob29rUmVjZWl2ZXJDb25maWcSVwoJZG9ja2VyaHViGAYgASgLMkQuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkRvY2tlckh1YldlYmhvb2tSZWNlaXZlckNvbmZpZxJRCgZnaXRodWIYAiABKAsyQS5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuR2l0SHViV2ViaG9va1JlY2VpdmVyQ29uZmlnElEKBmdpdGxhYhgDIAEoCzJBLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HaXRMYWJXZWJob29rUmVjZWl2ZXJDb25maWcSUQoGaGFyYm9yGAogASgLMkEuZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLkhhcmJvcldlYmhvb2tSZWNlaXZlckNvbmZpZxJNCgRxdWF5GAQgASgLMj8uZ2l0aHViLmNvbS5ha3VpdHkua2FyZ28uYXBpLnYxYWxwaGExLlF1YXlXZWJob29rUmVjZWl2ZXJDb25maWcSWwoLYXJ0aWZhY3RvcnkYCSABKAsyRi5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXJ0aWZhY3RvcnlXZWJob29rUmVjZWl2ZXJDb25maWcSTwoFYXp1cmUYCCABKAsyQC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuQXp1cmVXZWJob29rUmVjZWl2ZXJDb25maWcSTwoFZ2l0ZWEYByABKAsyQC5naXRodWIuY29tLmFrdWl0eS5rYXJnby5hcGkudjFhbHBoYTEuR2l0ZWFXZWJob29rUmVjZWl2ZXJDb25maWcSUwoHZ2VuZXJpYxgLIAEoCzJCLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMS5HZW5lcmljV2ViaG9va1JlY2VpdmVyQ29uZmlnIkEKFldlYmhvb2tSZWNlaXZlckRldGFpbHMSDAoEbmFtZRgBIAEoCRIMCgRwYXRoGAMgASgJEgsKA3VybBgEIAEoCUKXAgooY29tLmdpdGh1Yi5jb20uYWt1aXR5LmthcmdvLmFwaS52MWFscGhhMUIOR2VuZXJhdGVkUHJvdG9QAVokZ2l0aHViLmNvbS9ha3VpdHkva2FyZ28vYXBpL3YxYWxwaGExogIFR0NBS0GqAiRHaXRodWIuQ29tLkFrdWl0eS5LYXJnby5BcGkuVjFhbHBoYTHKAiRHaXRodWJcQ29tXEFrdWl0eVxLYXJnb1xBcGlcVjFhbHBoYTHiAjBHaXRodWJcQ29tXEFrdWl0eVxLYXJnb1xBcGlcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAilHaXRodWI6OkNvbTo6QWt1aXR5OjpLYXJnbzo6QXBpOjpWMWFscGhhMQ", [file_k8s_io_api_core_v1_generated, file_k8s_io_apiextensions_apiserver_pkg_apis_apiextensions_v1_generated, file_k8s_io_apimachinery_pkg_apis_meta_v1_generated, file_k8s_io_apimachinery_pkg_runtime_generated, file_k8s_io_apimachinery_pkg_runtime_schema_generated]); /** * AnalysisRunArgument represents an argument to be added to an AnalysisRun. @@ -2832,7 +2832,7 @@ export type PromotionPolicy = Message<"github.com.akuity.kargo.api.v1alpha1.Prom * StageSelector is a selector that matches the Stage resource to which * this policy applies. * - * @generated from field: optional github.com.akuity.kargo.api.v1alpha1.PromotionPolicySelector stageSelector = 3; + * @generated from field: optional github.com.akuity.kargo.api.v1alpha1.PromotionPolicySelector stageSelector = 2; */ stageSelector?: PromotionPolicySelector; @@ -2845,9 +2845,18 @@ export type PromotionPolicy = Message<"github.com.akuity.kargo.api.v1alpha1.Prom * users to define Stages that are automatically updated as soon as new * artifacts are detected. * - * @generated from field: optional bool autoPromotionEnabled = 2; + * @generated from field: optional bool autoPromotionEnabled = 3; */ autoPromotionEnabled: boolean; + + /** + * PromotionWindows defines time windows during which automatic promotions + * are allowed to occur. If not specified, automatic promotions can occur at + * any time. + * + * @generated from field: repeated github.com.akuity.kargo.api.v1alpha1.PromotionWindowReference promotionWindows = 4; + */ + promotionWindows: PromotionWindowReference[]; }; /** @@ -3451,6 +3460,137 @@ export type PromotionTemplateSpec = Message<"github.com.akuity.kargo.api.v1alpha export const PromotionTemplateSpecSchema: GenMessage = /*@__PURE__*/ messageDesc(file_api_v1alpha1_generated, 78); +/** + * @generated from message github.com.akuity.kargo.api.v1alpha1.PromotionWindow + */ +export type PromotionWindow = Message<"github.com.akuity.kargo.api.v1alpha1.PromotionWindow"> & { + /** + * @generated from field: optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + */ + metadata?: ObjectMeta; + + /** + * Spec describes the composition of an AutoPromotionWindow, including the + * recurring time window and time zone. + * + * +kubebuilder:validation:Required + * + * @generated from field: optional github.com.akuity.kargo.api.v1alpha1.PromotionWindowSpec spec = 2; + */ + spec?: PromotionWindowSpec; +}; + +/** + * Describes the message github.com.akuity.kargo.api.v1alpha1.PromotionWindow. + * Use `create(PromotionWindowSchema)` to create a new message. + */ +export const PromotionWindowSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_api_v1alpha1_generated, 79); + +/** + * PromotionWindowList contains a list of PromotionWindows. + * + * @generated from message github.com.akuity.kargo.api.v1alpha1.PromotionWindowList + */ +export type PromotionWindowList = Message<"github.com.akuity.kargo.api.v1alpha1.PromotionWindowList"> & { + /** + * @generated from field: optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + */ + metadata?: ListMeta; + + /** + * @generated from field: repeated github.com.akuity.kargo.api.v1alpha1.PromotionWindow items = 2; + */ + items: PromotionWindow[]; +}; + +/** + * Describes the message github.com.akuity.kargo.api.v1alpha1.PromotionWindowList. + * Use `create(PromotionWindowListSchema)` to create a new message. + */ +export const PromotionWindowListSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_api_v1alpha1_generated, 80); + +/** + * @generated from message github.com.akuity.kargo.api.v1alpha1.PromotionWindowReference + */ +export type PromotionWindowReference = Message<"github.com.akuity.kargo.api.v1alpha1.PromotionWindowReference"> & { + /** + * Name is the name of the time window. + * + * +kubebuilder:validation:Required + * + * @generated from field: optional string name = 1; + */ + name: string; + + /** + * Kind is the kind of the time window + * + * +kubebuilder:validation:Enum=PromotionWindow;ClusterPromotionWindow; + * + * @generated from field: optional string kind = 2; + */ + kind: string; +}; + +/** + * Describes the message github.com.akuity.kargo.api.v1alpha1.PromotionWindowReference. + * Use `create(PromotionWindowReferenceSchema)` to create a new message. + */ +export const PromotionWindowReferenceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_api_v1alpha1_generated, 81); + +/** + * @generated from message github.com.akuity.kargo.api.v1alpha1.PromotionWindowSpec + */ +export type PromotionWindowSpec = Message<"github.com.akuity.kargo.api.v1alpha1.PromotionWindowSpec"> & { + /** + * Kind is either "deny" or "allow", indicating whether the time window + * represents a period during which promotions are denied or allowed. + * + * +kubebuilder:validation:Enum=deny;allow; + * + * @generated from field: optional string kind = 1; + */ + kind: string; + + /** + * Schedule describes a recurring time window. + * Example: "0 0 * * 1-5" means every weekday at midnight. + * + * +kubebuilder:validation:Required + * + * @generated from field: optional string schedule = 2; + */ + schedule: string; + + /** + * Duration is the length of time that the window lasts after the start + * time defined by the Schedule. + * + * +kubebuilder:validation:Required + * + * @generated from field: optional string duration = 3; + */ + duration: string; + + /** + * TimeZone is the IANA time zone name that applies to the time window. + * If not specified, UTC is assumed. + * + * @generated from field: optional string timeZone = 4; + */ + timeZone: string; +}; + +/** + * Describes the message github.com.akuity.kargo.api.v1alpha1.PromotionWindowSpec. + * Use `create(PromotionWindowSpecSchema)` to create a new message. + */ +export const PromotionWindowSpecSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_api_v1alpha1_generated, 82); + /** * QuayWebhookReceiverConfig describes a webhook receiver that is compatible * with Quay.io payloads. @@ -3485,7 +3625,7 @@ export type QuayWebhookReceiverConfig = Message<"github.com.akuity.kargo.api.v1a * Use `create(QuayWebhookReceiverConfigSchema)` to create a new message. */ export const QuayWebhookReceiverConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 79); + messageDesc(file_api_v1alpha1_generated, 83); /** * RepoSubscription describes a subscription to ONE OF a Git repository, a @@ -3529,7 +3669,7 @@ export type RepoSubscription = Message<"github.com.akuity.kargo.api.v1alpha1.Rep * Use `create(RepoSubscriptionSchema)` to create a new message. */ export const RepoSubscriptionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 80); + messageDesc(file_api_v1alpha1_generated, 84); /** * Stage is the Kargo API's main type. @@ -3565,7 +3705,7 @@ export type Stage = Message<"github.com.akuity.kargo.api.v1alpha1.Stage"> & { * Use `create(StageSchema)` to create a new message. */ export const StageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 81); + messageDesc(file_api_v1alpha1_generated, 85); /** * StageList is a list of Stage resources. @@ -3589,7 +3729,7 @@ export type StageList = Message<"github.com.akuity.kargo.api.v1alpha1.StageList" * Use `create(StageListSchema)` to create a new message. */ export const StageListSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 82); + messageDesc(file_api_v1alpha1_generated, 86); /** * StageSpec describes the sources of Freight used by a Stage and how to @@ -3656,7 +3796,7 @@ export type StageSpec = Message<"github.com.akuity.kargo.api.v1alpha1.StageSpec" * Use `create(StageSpecSchema)` to create a new message. */ export const StageSpecSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 83); + messageDesc(file_api_v1alpha1_generated, 87); /** * StageStats contains a summary of the collective state of a Project's @@ -3685,7 +3825,7 @@ export type StageStats = Message<"github.com.akuity.kargo.api.v1alpha1.StageStat * Use `create(StageStatsSchema)` to create a new message. */ export const StageStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 84); + messageDesc(file_api_v1alpha1_generated, 88); /** * StageStatus describes a Stages's current and recent Freight, health, and @@ -3794,7 +3934,7 @@ export type StageStatus = Message<"github.com.akuity.kargo.api.v1alpha1.StageSta * Use `create(StageStatusSchema)` to create a new message. */ export const StageStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 85); + messageDesc(file_api_v1alpha1_generated, 89); /** * StepExecutionMetadata tracks metadata pertaining to the execution of @@ -3863,7 +4003,7 @@ export type StepExecutionMetadata = Message<"github.com.akuity.kargo.api.v1alpha * Use `create(StepExecutionMetadataSchema)` to create a new message. */ export const StepExecutionMetadataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 86); + messageDesc(file_api_v1alpha1_generated, 90); /** * Subscription represents a subscription to some kind of artifact repository. @@ -3920,7 +4060,7 @@ export type Subscription = Message<"github.com.akuity.kargo.api.v1alpha1.Subscri * Use `create(SubscriptionSchema)` to create a new message. */ export const SubscriptionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 87); + messageDesc(file_api_v1alpha1_generated, 91); /** * Verification describes how to verify that a Promotion has been successful @@ -3959,7 +4099,7 @@ export type Verification = Message<"github.com.akuity.kargo.api.v1alpha1.Verific * Use `create(VerificationSchema)` to create a new message. */ export const VerificationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 88); + messageDesc(file_api_v1alpha1_generated, 92); /** * VerificationInfo contains the details of an instance of a Verification @@ -4029,7 +4169,7 @@ export type VerificationInfo = Message<"github.com.akuity.kargo.api.v1alpha1.Ver * Use `create(VerificationInfoSchema)` to create a new message. */ export const VerificationInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 89); + messageDesc(file_api_v1alpha1_generated, 93); /** * VerifiedStage describes a Stage in which Freight has been verified. @@ -4061,7 +4201,7 @@ export type VerifiedStage = Message<"github.com.akuity.kargo.api.v1alpha1.Verifi * Use `create(VerifiedStageSchema)` to create a new message. */ export const VerifiedStageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 90); + messageDesc(file_api_v1alpha1_generated, 94); /** * Warehouse is a source of Freight. @@ -4096,7 +4236,7 @@ export type Warehouse = Message<"github.com.akuity.kargo.api.v1alpha1.Warehouse" * Use `create(WarehouseSchema)` to create a new message. */ export const WarehouseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 91); + messageDesc(file_api_v1alpha1_generated, 95); /** * WarehouseList is a list of Warehouse resources. @@ -4120,7 +4260,7 @@ export type WarehouseList = Message<"github.com.akuity.kargo.api.v1alpha1.Wareho * Use `create(WarehouseListSchema)` to create a new message. */ export const WarehouseListSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 92); + messageDesc(file_api_v1alpha1_generated, 96); /** * WarehouseSpec describes sources of versioned artifacts to be included in @@ -4203,7 +4343,7 @@ export type WarehouseSpec = Message<"github.com.akuity.kargo.api.v1alpha1.Wareho * Use `create(WarehouseSpecSchema)` to create a new message. */ export const WarehouseSpecSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 93); + messageDesc(file_api_v1alpha1_generated, 97); /** * WarehouseStats contains a summary of the collective state of a Project's @@ -4233,7 +4373,7 @@ export type WarehouseStats = Message<"github.com.akuity.kargo.api.v1alpha1.Wareh * Use `create(WarehouseStatsSchema)` to create a new message. */ export const WarehouseStatsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 94); + messageDesc(file_api_v1alpha1_generated, 98); /** * WarehouseStatus describes a Warehouse's most recently observed state. @@ -4292,7 +4432,7 @@ export type WarehouseStatus = Message<"github.com.akuity.kargo.api.v1alpha1.Ware * Use `create(WarehouseStatusSchema)` to create a new message. */ export const WarehouseStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 95); + messageDesc(file_api_v1alpha1_generated, 99); /** * WebhookReceiverConfig describes the configuration for a single webhook @@ -4399,7 +4539,7 @@ export type WebhookReceiverConfig = Message<"github.com.akuity.kargo.api.v1alpha * Use `create(WebhookReceiverConfigSchema)` to create a new message. */ export const WebhookReceiverConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 96); + messageDesc(file_api_v1alpha1_generated, 100); /** * WebhookReceiverDetails encapsulates the details of a webhook receiver. @@ -4434,5 +4574,5 @@ export type WebhookReceiverDetails = Message<"github.com.akuity.kargo.api.v1alph * Use `create(WebhookReceiverDetailsSchema)` to create a new message. */ export const WebhookReceiverDetailsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_api_v1alpha1_generated, 97); + messageDesc(file_api_v1alpha1_generated, 101); diff --git a/ui/src/gen/schema/projectconfigs.kargo.akuity.io_v1alpha1.json b/ui/src/gen/schema/projectconfigs.kargo.akuity.io_v1alpha1.json index 1bfc750cb6..c6149f00b7 100644 --- a/ui/src/gen/schema/projectconfigs.kargo.akuity.io_v1alpha1.json +++ b/ui/src/gen/schema/projectconfigs.kargo.akuity.io_v1alpha1.json @@ -25,6 +25,30 @@ "description": "AutoPromotionEnabled indicates whether new Freight can automatically be\npromoted into the Stage referenced by the Stage field. Note: There are may\nbe other conditions also required for an auto-promotion to occur. This\nfield defaults to false, but is commonly set to true for Stages that\nsubscribe to Warehouses instead of other, upstream Stages. This allows\nusers to define Stages that are automatically updated as soon as new\nartifacts are detected.", "type": "boolean" }, + "promotionWindows": { + "description": "PromotionWindows defines time windows during which automatic promotions\nare allowed to occur. If not specified, automatic promotions can occur at\nany time.", + "items": { + "properties": { + "kind": { + "description": "Kind is the kind of the time window", + "enum": [ + "PromotionWindow", + "ClusterPromotionWindow" + ], + "type": "string" + }, + "name": { + "description": "Name is the name of the time window.", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, "stage": { "description": "Stage is the name of the Stage to which this policy applies.\n\nDeprecated: Use StageSelector instead.", "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$", diff --git a/ui/src/gen/schema/promotionwindows.kargo.akuity.io_v1alpha1.json b/ui/src/gen/schema/promotionwindows.kargo.akuity.io_v1alpha1.json new file mode 100644 index 0000000000..988ca30d72 --- /dev/null +++ b/ui/src/gen/schema/promotionwindows.kargo.akuity.io_v1alpha1.json @@ -0,0 +1,50 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "type": "object" + }, + "spec": { + "description": "Spec describes the composition of an AutoPromotionWindow, including the\nrecurring time window and time zone.", + "properties": { + "duration": { + "description": "Duration is the length of time that the window lasts after the start\ntime defined by the Schedule.", + "type": "string" + }, + "kind": { + "description": "Kind is either \"deny\" or \"allow\", indicating whether the time window\nrepresents a period during which promotions are denied or allowed.", + "enum": [ + "deny", + "allow" + ], + "type": "string" + }, + "schedule": { + "description": "Schedule describes a recurring time window.\nExample: \"0 0 * * 1-5\" means every weekday at midnight.", + "type": "string" + }, + "timeZone": { + "description": "TimeZone is the IANA time zone name that applies to the time window.\nIf not specified, UTC is assumed.", + "type": "string" + } + }, + "required": [ + "duration", + "schedule" + ], + "type": "object" + } + }, + "required": [ + "spec" + ], + "type": "object" +} \ No newline at end of file