From 9e59644b86f2851c4b92ef923528c0efc4b74bd9 Mon Sep 17 00:00:00 2001 From: Prema <107519450+premadk@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:06:09 -0800 Subject: [PATCH] Add kafka eventbus spec (#12) Signed-off-by: Prema devi Kuppuswamy Signed-off-by: David Farr --- .github/workflows/ci.yaml | 4 +- api/event-bus.html | 221 ++++ api/event-bus.md | 225 ++++ api/jsonschema/schema.json | 63 + api/openapi-spec/swagger.json | 63 + .../controller-manager/controller-config.yaml | 7 + manifests/install.yaml | 7 + manifests/namespace-install.yaml | 7 + pkg/apis/eventbus/v1alpha1/eventbus_types.go | 7 +- pkg/apis/eventbus/v1alpha1/generated.pb.go | 1175 +++++++++++++++-- pkg/apis/eventbus/v1alpha1/generated.proto | 52 + pkg/apis/eventbus/v1alpha1/kafka_eventbus.go | 44 + .../eventbus/v1alpha1/openapi_generated.go | 124 +- .../v1alpha1/zz_generated.deepcopy.go | 83 ++ 14 files changed, 1957 insertions(+), 125 deletions(-) create mode 100644 pkg/apis/eventbus/v1alpha1/kafka_eventbus.go diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e837646b49..681794918e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,7 +5,9 @@ on: - "master" - "release-*" pull_request: - branches: [ master ] + branches: + - "master" + - "feature/*" permissions: contents: read diff --git a/api/event-bus.html b/api/event-bus.html index d6c93e6af0..707a6991b4 100644 --- a/api/event-bus.html +++ b/api/event-bus.html @@ -63,6 +63,19 @@

BusConfig (Optional) + + +kafka
+ + +KafkaConfig + + + + +(Optional) + +

ContainerTemplate @@ -188,6 +201,20 @@

EventBus (Optional) + + +kafka
+ + +KafkaBus + + + + +(Optional) +

Kafka eventbus

+ + @@ -250,6 +277,20 @@

EventBusSpec (Optional) + + +kafka
+ + +KafkaBus + + + + +(Optional) +

Kafka eventbus

+ +

EventBusStatus @@ -632,6 +673,186 @@

JetStreamConfig +

KafkaBus +

+

+(Appears on: +EventBusSpec) +

+

+

KafkaBus holds the KafkaBus EventBus information

+

+ + + + + + + + + + + + + +
FieldDescription
+exotic
+ + +KafkaConfig + + +
+

Exotic holds an exotic Kafka config

+
+

KafkaConfig +

+

+(Appears on: +BusConfig, +KafkaBus) +

+

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+url
+ +string + +
+

URL to kafka cluster, multiple URLs separated by comma

+
+tls
+ +github.com/argoproj/argo-events/pkg/apis/common.TLSConfig + +
+(Optional) +

TLS configuration for the kafka client.

+
+sasl
+ +github.com/argoproj/argo-events/pkg/apis/common.SASLConfig + +
+(Optional) +

SASL configuration for the kafka client

+
+consumerGroup
+ + +KafkaConsumerGroup + + +
+(Optional) +

Consumer group for kafka client

+
+accessSecret
+ + +Kubernetes core/v1.SecretKeySelector + + +
+(Optional) +

Secret for auth

+
+streamConfig
+ +string + +
+(Optional) +

Optional configuration for the kafka, if specified, it will be merged with the default configuration in controller-config. +It accepts a YAML format configuration, available fields include, “maxRetry”, “configVersion (sarama config version)”, “requiredAcks”, “replication”.

+
+

KafkaConsumerGroup +

+

+(Appears on: +KafkaConfig) +

+

+

+ + + + + + + + + + + + + + + + + + + + + +
FieldDescription
+groupName
+ +string + +
+

The name for the consumer group to use

+
+rebalanceStrategy
+ +string + +
+(Optional) +

Rebalance strategy can be one of: sticky, roundrobin, range. Range is the default.

+
+startOldest
+ +bool + +
+(Optional) +

When starting up a new group do we want to start from the oldest event (true) or the newest event (false), defaults to false

+

NATSBus

diff --git a/api/event-bus.md b/api/event-bus.md index e4c1642e42..873aa8c1b7 100644 --- a/api/event-bus.md +++ b/api/event-bus.md @@ -74,6 +74,15 @@ NATSConfig (Optional) + + +kafka
+ KafkaConfig + + +(Optional) + +

@@ -190,6 +199,18 @@ NATS eventbus (Optional) + + +kafka
+KafkaBus + + +(Optional) +

+Kafka eventbus +

+ + @@ -250,6 +271,18 @@ NATS eventbus (Optional) + + +kafka
+KafkaBus + + +(Optional) +

+Kafka eventbus +

+ +

@@ -635,6 +668,198 @@ Secret for auth +

+KafkaBus +

+

+(Appears on: +EventBusSpec) +

+

+

+KafkaBus holds the KafkaBus EventBus information +

+

+ + + + + + + + + + + + + +
+Field + +Description +
+exotic
+ KafkaConfig +
+

+Exotic holds an exotic Kafka config +

+
+

+KafkaConfig +

+

+(Appears on: +BusConfig, +KafkaBus) +

+

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field + +Description +
+url
string +
+

+URL to kafka cluster, multiple URLs separated by comma +

+
+tls
+github.com/argoproj/argo-events/pkg/apis/common.TLSConfig +
+(Optional) +

+TLS configuration for the kafka client. +

+
+sasl
+github.com/argoproj/argo-events/pkg/apis/common.SASLConfig +
+(Optional) +

+SASL configuration for the kafka client +

+
+consumerGroup
+ KafkaConsumerGroup + +
+(Optional) +

+Consumer group for kafka client +

+
+accessSecret
+ +Kubernetes core/v1.SecretKeySelector +
+(Optional) +

+Secret for auth +

+
+streamConfig
string +
+(Optional) +

+Optional configuration for the kafka, if specified, it will be merged +with the default configuration in controller-config. It accepts a YAML +format configuration, available fields include, “maxRetry”, +“configVersion (sarama config version)”, “requiredAcks”, “replication”. +

+
+

+KafkaConsumerGroup +

+

+(Appears on: +KafkaConfig) +

+

+

+ + + + + + + + + + + + + + + + + + + + + +
+Field + +Description +
+groupName
string +
+

+The name for the consumer group to use +

+
+rebalanceStrategy
string +
+(Optional) +

+Rebalance strategy can be one of: sticky, roundrobin, range. Range is +the default. +

+
+startOldest
bool +
+(Optional) +

+When starting up a new group do we want to start from the oldest event +(true) or the newest event (false), defaults to false +

+

NATSBus

diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json index f80c6ebec7..3d41b9642f 100644 --- a/api/jsonschema/schema.json +++ b/api/jsonschema/schema.json @@ -287,6 +287,9 @@ "jetstream": { "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.JetStreamConfig" }, + "kafka": { + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaConfig" + }, "nats": { "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.NATSConfig" } @@ -377,6 +380,10 @@ "jetstream": { "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.JetStreamBus" }, + "kafka": { + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaBus", + "description": "Kafka eventbus" + }, "nats": { "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.NATSBus", "description": "NATS eventbus" @@ -516,6 +523,62 @@ }, "type": "object" }, + "io.argoproj.eventbus.v1alpha1.KafkaBus": { + "description": "KafkaBus holds the KafkaBus EventBus information", + "properties": { + "exotic": { + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaConfig", + "description": "Exotic holds an exotic Kafka config" + } + }, + "type": "object" + }, + "io.argoproj.eventbus.v1alpha1.KafkaConfig": { + "properties": { + "accessSecret": { + "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector", + "description": "Secret for auth" + }, + "consumerGroup": { + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaConsumerGroup", + "description": "Consumer group for kafka client" + }, + "sasl": { + "$ref": "#/definitions/io.argoproj.common.SASLConfig", + "description": "SASL configuration for the kafka client" + }, + "streamConfig": { + "description": "Optional configuration for the kafka, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxRetry\", \"configVersion (sarama config version)\", \"requiredAcks\", \"replication\".", + "type": "string" + }, + "tls": { + "$ref": "#/definitions/io.argoproj.common.TLSConfig", + "description": "TLS configuration for the kafka client." + }, + "url": { + "description": "URL to kafka cluster, multiple URLs separated by comma", + "type": "string" + } + }, + "type": "object" + }, + "io.argoproj.eventbus.v1alpha1.KafkaConsumerGroup": { + "properties": { + "groupName": { + "description": "The name for the consumer group to use", + "type": "string" + }, + "rebalanceStrategy": { + "description": "Rebalance strategy can be one of: sticky, roundrobin, range. Range is the default.", + "type": "string" + }, + "startOldest": { + "description": "When starting up a new group do we want to start from the oldest event (true) or the newest event (false), defaults to false", + "type": "boolean" + } + }, + "type": "object" + }, "io.argoproj.eventbus.v1alpha1.NATSBus": { "description": "NATSBus holds the NATS eventbus information", "properties": { diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index f4601c78c2..0263f307d8 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -289,6 +289,9 @@ "jetstream": { "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.JetStreamConfig" }, + "kafka": { + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaConfig" + }, "nats": { "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.NATSConfig" } @@ -370,6 +373,10 @@ "jetstream": { "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.JetStreamBus" }, + "kafka": { + "description": "Kafka eventbus", + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaBus" + }, "nats": { "description": "NATS eventbus", "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.NATSBus" @@ -508,6 +515,62 @@ } } }, + "io.argoproj.eventbus.v1alpha1.KafkaBus": { + "description": "KafkaBus holds the KafkaBus EventBus information", + "type": "object", + "properties": { + "exotic": { + "description": "Exotic holds an exotic Kafka config", + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaConfig" + } + } + }, + "io.argoproj.eventbus.v1alpha1.KafkaConfig": { + "type": "object", + "properties": { + "accessSecret": { + "description": "Secret for auth", + "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector" + }, + "consumerGroup": { + "description": "Consumer group for kafka client", + "$ref": "#/definitions/io.argoproj.eventbus.v1alpha1.KafkaConsumerGroup" + }, + "sasl": { + "description": "SASL configuration for the kafka client", + "$ref": "#/definitions/io.argoproj.common.SASLConfig" + }, + "streamConfig": { + "description": "Optional configuration for the kafka, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxRetry\", \"configVersion (sarama config version)\", \"requiredAcks\", \"replication\".", + "type": "string" + }, + "tls": { + "description": "TLS configuration for the kafka client.", + "$ref": "#/definitions/io.argoproj.common.TLSConfig" + }, + "url": { + "description": "URL to kafka cluster, multiple URLs separated by comma", + "type": "string" + } + } + }, + "io.argoproj.eventbus.v1alpha1.KafkaConsumerGroup": { + "type": "object", + "properties": { + "groupName": { + "description": "The name for the consumer group to use", + "type": "string" + }, + "rebalanceStrategy": { + "description": "Rebalance strategy can be one of: sticky, roundrobin, range. Range is the default.", + "type": "string" + }, + "startOldest": { + "description": "When starting up a new group do we want to start from the oldest event (true) or the newest event (false), defaults to false", + "type": "boolean" + } + } + }, "io.argoproj.eventbus.v1alpha1.NATSBus": { "description": "NATSBus holds the NATS eventbus information", "type": "object", diff --git a/manifests/base/controller-manager/controller-config.yaml b/manifests/base/controller-manager/controller-config.yaml index d49d58d746..0d8b2065d8 100644 --- a/manifests/base/controller-manager/controller-config.yaml +++ b/manifests/base/controller-manager/controller-config.yaml @@ -62,3 +62,10 @@ data: metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1 configReloaderImage: natsio/nats-server-config-reloader:0.7.0 startCommand: /nats-server + kafka: + streamConfig: | + # Default Kafka config, can be overridden by EventBus Kafka specs + maxRetry: 3 + configVersion: 2.5.0 + requiredAcks: -1 + replication: 3 diff --git a/manifests/install.yaml b/manifests/install.yaml index f6ad665089..712e6432c4 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -366,6 +366,13 @@ data: metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1 configReloaderImage: natsio/nats-server-config-reloader:0.7.0 startCommand: /nats-server + kafka: + streamConfig: | + # Default Kafka config, can be overridden by EventBus Kafka specs + maxRetry: 3 + configVersion: 2.5.0 + requiredAcks: -1 + replication: 3 kind: ConfigMap metadata: name: argo-events-controller-config diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml index 5f5878839e..1b037a3ab2 100644 --- a/manifests/namespace-install.yaml +++ b/manifests/namespace-install.yaml @@ -286,6 +286,13 @@ data: metricsExporterImage: natsio/prometheus-nats-exporter:0.9.1 configReloaderImage: natsio/nats-server-config-reloader:0.7.0 startCommand: /nats-server + kafka: + streamConfig: | + # Default Kafka config, can be overridden by EventBus Kafka specs + maxRetry: 3 + configVersion: 2.5.0 + requiredAcks: -1 + replication: 3 kind: ConfigMap metadata: name: argo-events-controller-config diff --git a/pkg/apis/eventbus/v1alpha1/eventbus_types.go b/pkg/apis/eventbus/v1alpha1/eventbus_types.go index 06069d6fa2..556a965c99 100644 --- a/pkg/apis/eventbus/v1alpha1/eventbus_types.go +++ b/pkg/apis/eventbus/v1alpha1/eventbus_types.go @@ -36,6 +36,9 @@ type EventBusSpec struct { NATS *NATSBus `json:"nats,omitempty" protobuf:"bytes,1,opt,name=nats"` // +optional JetStream *JetStreamBus `json:"jetstream,omitempty" protobuf:"bytes,2,opt,name=jetstream"` + // +optional + // Kafka eventbus + Kafka *KafkaBus `json:"kafka,omitempty" protobuf:"bytes,3,opt,name=kafka"` } // EventBusStatus holds the status of the eventbus resource @@ -51,8 +54,8 @@ type BusConfig struct { NATS *NATSConfig `json:"nats,omitempty" protobuf:"bytes,1,opt,name=nats"` // +optional JetStream *JetStreamConfig `json:"jetstream,omitempty" protobuf:"bytes,2,opt,name=jetstream"` - // +optional (TODO) - Kafka *interface{} `json:"kafka,omitempty" protobuf:"bytes,2,opt,name=kafka"` + // +optional + Kafka *KafkaConfig `json:"kafka,omitempty" protobuf:"bytes,3,opt,name=kafka"` } const ( diff --git a/pkg/apis/eventbus/v1alpha1/generated.pb.go b/pkg/apis/eventbus/v1alpha1/generated.pb.go index 3025c8d848..9ab3859388 100644 --- a/pkg/apis/eventbus/v1alpha1/generated.pb.go +++ b/pkg/apis/eventbus/v1alpha1/generated.pb.go @@ -272,10 +272,94 @@ func (m *JetStreamConfig) XXX_DiscardUnknown() { var xxx_messageInfo_JetStreamConfig proto.InternalMessageInfo +func (m *KafkaBus) Reset() { *m = KafkaBus{} } +func (*KafkaBus) ProtoMessage() {} +func (*KafkaBus) Descriptor() ([]byte, []int) { + return fileDescriptor_871e47633eb7aad4, []int{8} +} +func (m *KafkaBus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KafkaBus) 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 *KafkaBus) XXX_Merge(src proto.Message) { + xxx_messageInfo_KafkaBus.Merge(m, src) +} +func (m *KafkaBus) XXX_Size() int { + return m.Size() +} +func (m *KafkaBus) XXX_DiscardUnknown() { + xxx_messageInfo_KafkaBus.DiscardUnknown(m) +} + +var xxx_messageInfo_KafkaBus proto.InternalMessageInfo + +func (m *KafkaConfig) Reset() { *m = KafkaConfig{} } +func (*KafkaConfig) ProtoMessage() {} +func (*KafkaConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_871e47633eb7aad4, []int{9} +} +func (m *KafkaConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KafkaConfig) 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 *KafkaConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_KafkaConfig.Merge(m, src) +} +func (m *KafkaConfig) XXX_Size() int { + return m.Size() +} +func (m *KafkaConfig) XXX_DiscardUnknown() { + xxx_messageInfo_KafkaConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_KafkaConfig proto.InternalMessageInfo + +func (m *KafkaConsumerGroup) Reset() { *m = KafkaConsumerGroup{} } +func (*KafkaConsumerGroup) ProtoMessage() {} +func (*KafkaConsumerGroup) Descriptor() ([]byte, []int) { + return fileDescriptor_871e47633eb7aad4, []int{10} +} +func (m *KafkaConsumerGroup) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KafkaConsumerGroup) 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 *KafkaConsumerGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_KafkaConsumerGroup.Merge(m, src) +} +func (m *KafkaConsumerGroup) XXX_Size() int { + return m.Size() +} +func (m *KafkaConsumerGroup) XXX_DiscardUnknown() { + xxx_messageInfo_KafkaConsumerGroup.DiscardUnknown(m) +} + +var xxx_messageInfo_KafkaConsumerGroup proto.InternalMessageInfo + func (m *NATSBus) Reset() { *m = NATSBus{} } func (*NATSBus) ProtoMessage() {} func (*NATSBus) Descriptor() ([]byte, []int) { - return fileDescriptor_871e47633eb7aad4, []int{8} + return fileDescriptor_871e47633eb7aad4, []int{11} } func (m *NATSBus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -303,7 +387,7 @@ var xxx_messageInfo_NATSBus proto.InternalMessageInfo func (m *NATSConfig) Reset() { *m = NATSConfig{} } func (*NATSConfig) ProtoMessage() {} func (*NATSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_871e47633eb7aad4, []int{9} + return fileDescriptor_871e47633eb7aad4, []int{12} } func (m *NATSConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -331,7 +415,7 @@ var xxx_messageInfo_NATSConfig proto.InternalMessageInfo func (m *NativeStrategy) Reset() { *m = NativeStrategy{} } func (*NativeStrategy) ProtoMessage() {} func (*NativeStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_871e47633eb7aad4, []int{10} + return fileDescriptor_871e47633eb7aad4, []int{13} } func (m *NativeStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -359,7 +443,7 @@ var xxx_messageInfo_NativeStrategy proto.InternalMessageInfo func (m *PersistenceStrategy) Reset() { *m = PersistenceStrategy{} } func (*PersistenceStrategy) ProtoMessage() {} func (*PersistenceStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_871e47633eb7aad4, []int{11} + return fileDescriptor_871e47633eb7aad4, []int{14} } func (m *PersistenceStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -394,6 +478,9 @@ func init() { proto.RegisterType((*JetStreamBus)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.JetStreamBus") proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.JetStreamBus.NodeSelectorEntry") proto.RegisterType((*JetStreamConfig)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.JetStreamConfig") + proto.RegisterType((*KafkaBus)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.KafkaBus") + proto.RegisterType((*KafkaConfig)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.KafkaConfig") + proto.RegisterType((*KafkaConsumerGroup)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.KafkaConsumerGroup") proto.RegisterType((*NATSBus)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.NATSBus") proto.RegisterType((*NATSConfig)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.NATSConfig") proto.RegisterType((*NativeStrategy)(nil), "github.com.argoproj.argo_events.pkg.apis.eventbus.v1alpha1.NativeStrategy") @@ -406,120 +493,134 @@ func init() { } var fileDescriptor_871e47633eb7aad4 = []byte{ - // 1802 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0xdb, 0x6e, 0x1b, 0xc7, - 0x19, 0xd6, 0x4a, 0x94, 0x44, 0x0e, 0x69, 0x1d, 0x46, 0x4a, 0xb3, 0x16, 0x62, 0xd2, 0x60, 0x91, - 0x42, 0x45, 0xe2, 0x65, 0x1d, 0x04, 0xad, 0x9b, 0x1b, 0x57, 0xab, 0x28, 0xb5, 0x1c, 0xd1, 0x51, - 0x87, 0x8e, 0x81, 0xa6, 0x41, 0xdd, 0xd1, 0x6a, 0x44, 0xad, 0xcc, 0xdd, 0x61, 0x67, 0x66, 0x09, - 0xb1, 0x57, 0x45, 0xfb, 0x02, 0x41, 0x51, 0x14, 0x7d, 0x83, 0x02, 0x7d, 0x80, 0xbe, 0x42, 0x7d, - 0xd1, 0x8b, 0xdc, 0x35, 0x57, 0x44, 0xcc, 0xa0, 0x40, 0x81, 0xbe, 0x81, 0xaf, 0x8a, 0x99, 0x9d, - 0x3d, 0x70, 0x77, 0x99, 0xc8, 0x26, 0xdd, 0xa0, 0x77, 0x9c, 0xff, 0xf0, 0xfd, 0x87, 0xfd, 0xf7, - 0x9f, 0x6f, 0x09, 0xee, 0x77, 0x5d, 0x71, 0x1e, 0x9c, 0x58, 0x0e, 0xf5, 0x5a, 0x98, 0x75, 0x69, - 0x9f, 0xd1, 0x0b, 0xf5, 0xe3, 0x16, 0x19, 0x10, 0x5f, 0xf0, 0x56, 0xff, 0x49, 0xb7, 0x85, 0xfb, - 0x2e, 0x6f, 0xa9, 0xf3, 0x49, 0xc0, 0x5b, 0x83, 0xdb, 0xb8, 0xd7, 0x3f, 0xc7, 0xb7, 0x5b, 0x5d, - 0xe2, 0x13, 0x86, 0x05, 0x39, 0xb5, 0xfa, 0x8c, 0x0a, 0x0a, 0xdf, 0x4b, 0xb0, 0xac, 0x08, 0x4b, - 0xfd, 0x78, 0x1c, 0x62, 0x59, 0xfd, 0x27, 0x5d, 0x4b, 0x62, 0x59, 0x11, 0x96, 0x15, 0x61, 0xed, - 0xdc, 0xbd, 0x72, 0x1e, 0x0e, 0xf5, 0x3c, 0xea, 0x67, 0x83, 0xef, 0xdc, 0x4a, 0x01, 0x74, 0x69, - 0x97, 0xb6, 0x94, 0xf8, 0x24, 0x38, 0x53, 0x27, 0x75, 0x50, 0xbf, 0xb4, 0x79, 0xf3, 0xc9, 0x1d, - 0x6e, 0xb9, 0x54, 0x42, 0xb6, 0x1c, 0xca, 0x48, 0x6b, 0x90, 0xab, 0x67, 0xe7, 0xdd, 0xc4, 0xc6, - 0xc3, 0xce, 0xb9, 0xeb, 0x13, 0x36, 0x8c, 0xf2, 0x68, 0x31, 0xc2, 0x69, 0xc0, 0x1c, 0xf2, 0x42, - 0x5e, 0xbc, 0xe5, 0x11, 0x81, 0x8b, 0x62, 0xb5, 0xa6, 0x79, 0xb1, 0xc0, 0x17, 0xae, 0x97, 0x0f, - 0xf3, 0xc3, 0x6f, 0x72, 0xe0, 0xce, 0x39, 0xf1, 0x70, 0xd6, 0xaf, 0xf9, 0x1f, 0x03, 0x54, 0xec, - 0x80, 0xef, 0x53, 0xff, 0xcc, 0xed, 0xc2, 0x53, 0x50, 0xf2, 0xb1, 0xe0, 0xa6, 0x71, 0xd3, 0xd8, - 0xad, 0xbe, 0xf3, 0x81, 0xf5, 0xf2, 0x4f, 0xd0, 0x7a, 0xb0, 0xf7, 0xb0, 0x13, 0xa2, 0xda, 0xe5, - 0xf1, 0xa8, 0x51, 0x92, 0x67, 0xa4, 0xd0, 0xe1, 0x25, 0xa8, 0x5c, 0x10, 0xc1, 0x05, 0x23, 0xd8, - 0x33, 0x17, 0x55, 0xa8, 0x0f, 0x67, 0x09, 0x75, 0x9f, 0x88, 0x8e, 0x02, 0xd3, 0xf1, 0xae, 0x8d, - 0x47, 0x8d, 0x4a, 0x2c, 0x44, 0x49, 0xb0, 0xe6, 0xdf, 0x16, 0xc1, 0xe6, 0x3e, 0xf5, 0x05, 0x96, - 0xfd, 0x79, 0x48, 0xbc, 0x7e, 0x0f, 0x0b, 0x02, 0x7f, 0x0e, 0x2a, 0xd1, 0xe3, 0x8b, 0x4a, 0xdf, - 0xb5, 0xc2, 0x7e, 0xca, 0x90, 0x96, 0x1c, 0x08, 0x6b, 0x70, 0xdb, 0x42, 0xda, 0x08, 0x91, 0x5f, - 0x07, 0x2e, 0x23, 0x9e, 0xcc, 0xcb, 0xde, 0x7c, 0x3a, 0x6a, 0x2c, 0xc8, 0x80, 0x91, 0x96, 0xa3, - 0x04, 0x0d, 0x9e, 0x80, 0x75, 0xd7, 0xc3, 0x5d, 0x72, 0x1c, 0xf4, 0x7a, 0xc7, 0xb4, 0xe7, 0x3a, - 0x43, 0x55, 0x70, 0xc5, 0xbe, 0xa3, 0xdd, 0xd6, 0x0f, 0x27, 0xd5, 0xcf, 0x47, 0x8d, 0x1b, 0xf9, - 0x59, 0xb4, 0x12, 0x03, 0x94, 0x05, 0x94, 0x31, 0x38, 0x71, 0x02, 0xe6, 0x8a, 0xa1, 0xac, 0x8d, - 0x5c, 0x0a, 0x73, 0x49, 0x15, 0xf1, 0xdd, 0xa2, 0x22, 0x3a, 0x93, 0xa6, 0xf6, 0x96, 0x4c, 0x22, - 0x23, 0x44, 0x59, 0xc0, 0xe6, 0x3f, 0x16, 0x41, 0xf9, 0x40, 0x36, 0xde, 0x0e, 0x38, 0xfc, 0x15, - 0x28, 0xcb, 0xb9, 0x3d, 0xc5, 0x02, 0xeb, 0x76, 0xfd, 0x20, 0x15, 0x29, 0x1e, 0xbf, 0xe4, 0x91, - 0x49, 0x6b, 0x19, 0xfb, 0xa3, 0x93, 0x0b, 0xe2, 0x88, 0x36, 0x11, 0xd8, 0x86, 0xba, 0x7e, 0x90, - 0xc8, 0x50, 0x8c, 0x0a, 0x2f, 0x40, 0x89, 0xf7, 0x89, 0xa3, 0x87, 0xe3, 0xde, 0x2c, 0xc3, 0x11, - 0x65, 0xdd, 0xe9, 0x13, 0xc7, 0xae, 0xe9, 0xa8, 0x25, 0x79, 0x42, 0x2a, 0x06, 0x64, 0x60, 0x85, - 0x0b, 0x2c, 0x02, 0xae, 0xbb, 0x76, 0x7f, 0x2e, 0xd1, 0x14, 0xa2, 0xbd, 0xa6, 0xe3, 0xad, 0x84, - 0x67, 0xa4, 0x23, 0x35, 0xff, 0x69, 0x80, 0x5a, 0x64, 0x7a, 0xe4, 0x72, 0x01, 0x3f, 0xcd, 0xb5, - 0xd4, 0xba, 0x5a, 0x4b, 0xa5, 0xb7, 0x6a, 0xe8, 0x86, 0x0e, 0x55, 0x8e, 0x24, 0xa9, 0x76, 0xba, - 0x60, 0xd9, 0x15, 0xc4, 0xe3, 0xe6, 0xe2, 0xcd, 0xa5, 0xdd, 0xea, 0x3b, 0xef, 0xcf, 0xa3, 0x42, - 0xfb, 0x9a, 0x0e, 0xb8, 0x7c, 0x28, 0xa1, 0x51, 0x18, 0xa1, 0xf9, 0xef, 0x54, 0x65, 0xb2, 0xc9, - 0x10, 0x4f, 0xac, 0x94, 0xfd, 0x59, 0x57, 0x8a, 0x8c, 0x9c, 0xdd, 0x27, 0x41, 0x7e, 0x9f, 0xdc, - 0x9b, 0xcb, 0x3e, 0x51, 0x65, 0x4e, 0x5d, 0x26, 0x5f, 0x1a, 0x60, 0x6d, 0xf2, 0x79, 0xc3, 0xc7, - 0xf1, 0x2c, 0x85, 0xe5, 0xfe, 0xe8, 0xea, 0x69, 0x84, 0xf7, 0x98, 0xf5, 0xf5, 0x83, 0x03, 0x3d, - 0xb0, 0xe2, 0xa8, 0x25, 0xa7, 0xeb, 0x3c, 0x98, 0xa5, 0xce, 0x78, 0xef, 0x27, 0xe1, 0xc2, 0x33, - 0xd2, 0x41, 0x9a, 0xbf, 0x5f, 0x03, 0xb5, 0x74, 0x37, 0xe0, 0xf7, 0xc1, 0xea, 0x80, 0x30, 0xee, - 0x52, 0x5f, 0x55, 0x58, 0xb1, 0xd7, 0xb5, 0xe7, 0xea, 0xa3, 0x50, 0x8c, 0x22, 0x3d, 0xdc, 0x05, - 0x65, 0x46, 0xfa, 0x3d, 0xd7, 0xc1, 0x5c, 0x25, 0xbb, 0x6c, 0xd7, 0xe4, 0x78, 0x22, 0x2d, 0x43, - 0xb1, 0x16, 0xfe, 0xc1, 0x00, 0x9b, 0x4e, 0x76, 0x2b, 0xeb, 0xb7, 0xb1, 0x3d, 0x4b, 0x81, 0xb9, - 0x55, 0x6f, 0xbf, 0x36, 0x1e, 0x35, 0xf2, 0x37, 0x00, 0xca, 0x87, 0x87, 0x7f, 0x35, 0xc0, 0x75, - 0x46, 0x7a, 0x14, 0x9f, 0x12, 0x96, 0x73, 0x30, 0x4b, 0xaf, 0x22, 0xb9, 0x1b, 0xe3, 0x51, 0xe3, - 0x3a, 0x9a, 0x16, 0x13, 0x4d, 0x4f, 0x07, 0xfe, 0xc5, 0x00, 0xa6, 0x47, 0x04, 0x73, 0x1d, 0x9e, - 0xcf, 0x75, 0xf9, 0x55, 0xe4, 0xfa, 0xc6, 0x78, 0xd4, 0x30, 0xdb, 0x53, 0x42, 0xa2, 0xa9, 0xc9, - 0xc0, 0xdf, 0x19, 0xa0, 0xda, 0x97, 0x13, 0xc2, 0x05, 0xf1, 0x1d, 0x62, 0xae, 0xa8, 0xe4, 0x3e, - 0x9a, 0x25, 0xb9, 0xe3, 0x04, 0xae, 0x23, 0x24, 0xb7, 0xe9, 0x0e, 0xed, 0xf5, 0xf1, 0xa8, 0x51, - 0x4d, 0x29, 0x50, 0x3a, 0x28, 0x74, 0x52, 0xdb, 0x76, 0x55, 0x25, 0xf0, 0xe3, 0x17, 0x7e, 0x51, - 0xdb, 0x1a, 0x20, 0x9c, 0xea, 0xe8, 0x94, 0x5a, 0xba, 0x7f, 0x34, 0x40, 0xcd, 0xa7, 0xa7, 0xa4, - 0x43, 0x7a, 0xc4, 0x11, 0x94, 0x99, 0x65, 0xb5, 0x7c, 0x3f, 0x99, 0xd7, 0x66, 0xb2, 0x1e, 0xa4, - 0xc0, 0x0f, 0x7c, 0xc1, 0x86, 0xf6, 0xb6, 0x7e, 0x19, 0x6b, 0x69, 0x15, 0x9a, 0xc8, 0x02, 0x7e, - 0x0c, 0xaa, 0x82, 0xf6, 0x24, 0x07, 0x74, 0xa9, 0xcf, 0xcd, 0x8a, 0x4a, 0xaa, 0x5e, 0xc4, 0x14, - 0x1e, 0xc6, 0x66, 0xf6, 0x96, 0x06, 0xae, 0x26, 0x32, 0x8e, 0xd2, 0x38, 0x90, 0xe4, 0x49, 0x08, - 0x50, 0x9d, 0xfd, 0x5e, 0x11, 0xf4, 0x31, 0x3d, 0x7d, 0x29, 0x1e, 0x02, 0x7d, 0xb0, 0x11, 0xd3, - 0x9f, 0x0e, 0x71, 0x18, 0x11, 0xdc, 0xac, 0xaa, 0x12, 0x0a, 0x19, 0xdb, 0x11, 0x75, 0x70, 0x2f, - 0x64, 0x18, 0x88, 0x9c, 0x11, 0x26, 0x9f, 0xbe, 0x6d, 0xea, 0x62, 0x36, 0x0e, 0x33, 0x48, 0x28, - 0x87, 0x0d, 0x7f, 0x0a, 0x36, 0xfb, 0xcc, 0xa5, 0x2a, 0x85, 0x1e, 0xe6, 0xfc, 0x01, 0xf6, 0x88, - 0x59, 0x53, 0x9b, 0xef, 0xba, 0x86, 0xd9, 0x3c, 0xce, 0x1a, 0xa0, 0xbc, 0x8f, 0xdc, 0x86, 0x91, - 0xd0, 0xbc, 0x96, 0x6c, 0xc3, 0xc8, 0x17, 0xc5, 0x5a, 0xf8, 0x01, 0x28, 0xe3, 0xb3, 0x33, 0xd7, - 0x97, 0x96, 0x6b, 0xaa, 0x85, 0x6f, 0x14, 0x95, 0xb6, 0xa7, 0x6d, 0x42, 0x9c, 0xe8, 0x84, 0x62, - 0x5f, 0x78, 0x1f, 0x40, 0x4e, 0xd8, 0xc0, 0x75, 0xc8, 0x9e, 0xe3, 0xd0, 0xc0, 0x17, 0x2a, 0xf7, - 0x75, 0x95, 0xfb, 0x8e, 0xce, 0x1d, 0x76, 0x72, 0x16, 0xa8, 0xc0, 0x4b, 0x66, 0xcf, 0x89, 0x10, - 0xae, 0xdf, 0xe5, 0xe6, 0x86, 0x42, 0x50, 0x51, 0x3b, 0x5a, 0x86, 0x62, 0x2d, 0x7c, 0x0b, 0x54, - 0xb8, 0xc0, 0x4c, 0xec, 0xb1, 0x2e, 0x37, 0x37, 0x6f, 0x2e, 0xed, 0x56, 0xc2, 0x1b, 0xb4, 0x13, - 0x09, 0x51, 0xa2, 0x87, 0xef, 0x82, 0x1a, 0x4f, 0x11, 0x77, 0x13, 0x2a, 0xe8, 0x0d, 0x39, 0xc1, - 0x69, 0x42, 0x8f, 0x26, 0xac, 0xa0, 0x05, 0x80, 0x87, 0x2f, 0x8f, 0xf1, 0x50, 0x6e, 0x43, 0x73, - 0x4b, 0xf9, 0xac, 0x49, 0x2a, 0xd9, 0x8e, 0xa5, 0x28, 0x65, 0xb1, 0x73, 0x17, 0x6c, 0xe6, 0x5e, - 0x15, 0xb8, 0x01, 0x96, 0x9e, 0x90, 0x61, 0x78, 0x89, 0x21, 0xf9, 0x13, 0x6e, 0x83, 0xe5, 0x01, - 0xee, 0x05, 0x24, 0x24, 0xe8, 0x28, 0x3c, 0xbc, 0xb7, 0x78, 0xc7, 0x68, 0xfe, 0xdd, 0x00, 0xeb, - 0x99, 0x6f, 0x0c, 0x78, 0x03, 0x2c, 0x05, 0xac, 0xa7, 0x2f, 0xc1, 0xaa, 0x6e, 0xe7, 0xd2, 0xc7, - 0xe8, 0x08, 0x49, 0x39, 0xfc, 0x05, 0xa8, 0x61, 0xc7, 0x21, 0x9c, 0x87, 0x83, 0xa4, 0x6f, 0xeb, - 0x37, 0xa7, 0x10, 0x72, 0x46, 0xc4, 0x87, 0x64, 0x18, 0x25, 0x18, 0x36, 0x60, 0x2f, 0xe5, 0x8e, - 0x26, 0xc0, 0xe0, 0x9d, 0x4c, 0xdb, 0x96, 0x54, 0x12, 0xf1, 0xcb, 0x3f, 0xbd, 0x75, 0xcd, 0x7f, - 0x19, 0x60, 0x55, 0xb3, 0x28, 0xe8, 0x83, 0x15, 0x1f, 0x0b, 0x77, 0x40, 0x34, 0x57, 0x99, 0x89, - 0xf7, 0x3e, 0x50, 0x48, 0xf1, 0xfa, 0x05, 0x92, 0x4b, 0x84, 0x32, 0xa4, 0xa3, 0xc0, 0x0b, 0xb0, - 0x42, 0x2e, 0xa9, 0x70, 0x23, 0x56, 0x3f, 0xaf, 0xaf, 0x4b, 0x15, 0xeb, 0x40, 0x21, 0x23, 0x1d, - 0xa1, 0xf9, 0x95, 0x01, 0x40, 0x62, 0xf2, 0x4d, 0x0f, 0xeb, 0x2d, 0x50, 0x71, 0x7a, 0x01, 0x17, - 0x84, 0x1d, 0xbe, 0xaf, 0x3f, 0xcf, 0xd4, 0xcc, 0xee, 0x47, 0x42, 0x94, 0xe8, 0xe1, 0xdb, 0xa0, - 0x84, 0x03, 0x71, 0xae, 0x9b, 0x6e, 0x4a, 0x2a, 0xba, 0x17, 0x88, 0xf3, 0xe7, 0xf2, 0x91, 0x05, - 0xe2, 0x3c, 0x6a, 0x01, 0x52, 0x56, 0xb9, 0x39, 0x28, 0xcd, 0x71, 0x0e, 0x9a, 0x9f, 0xad, 0x83, - 0xb5, 0xc9, 0xc6, 0xc3, 0xb7, 0x53, 0xa4, 0xcb, 0x50, 0x6b, 0x26, 0xfe, 0x2e, 0x28, 0x20, 0x5e, - 0x51, 0x2d, 0x8b, 0x57, 0xaa, 0x25, 0x7b, 0x75, 0x2f, 0x7d, 0x1b, 0x57, 0x77, 0x31, 0x57, 0x2c, - 0x7d, 0xbb, 0x5c, 0xf1, 0xff, 0x87, 0x7e, 0xfd, 0x29, 0x4b, 0x4a, 0x56, 0xd4, 0xe5, 0xf9, 0xe9, - 0xfc, 0xde, 0xfd, 0xf9, 0xd0, 0x92, 0xd5, 0x39, 0xd1, 0x92, 0x34, 0xd3, 0x2b, 0xbf, 0x2a, 0xa6, - 0x57, 0xc0, 0x7d, 0x2a, 0xaf, 0x80, 0xfb, 0x34, 0xc1, 0x8a, 0x87, 0x2f, 0xf7, 0xba, 0x44, 0x31, - 0xab, 0x4a, 0xb8, 0xf8, 0xda, 0x4a, 0x82, 0xb4, 0xe6, 0x7f, 0xce, 0x8f, 0x8a, 0x49, 0x46, 0xed, - 0xa5, 0x48, 0x46, 0x21, 0xd7, 0xba, 0x36, 0x23, 0xd7, 0x5a, 0xbb, 0x32, 0xd7, 0x5a, 0x9f, 0x81, - 0x6b, 0xbd, 0x09, 0x56, 0x3d, 0x7c, 0xd9, 0xe6, 0x9a, 0x1e, 0x95, 0xec, 0xaa, 0xfc, 0x24, 0x6e, - 0x87, 0x22, 0x14, 0xe9, 0x64, 0x62, 0x1e, 0xbe, 0xb4, 0x87, 0x82, 0x48, 0x6e, 0x14, 0xd3, 0xa8, - 0xb6, 0x96, 0xa1, 0x58, 0xab, 0x01, 0x3b, 0xc1, 0x09, 0x57, 0xa4, 0x28, 0x01, 0x94, 0x22, 0x14, - 0xe9, 0x5e, 0x94, 0x0a, 0xc1, 0x23, 0xb0, 0xcd, 0xf0, 0x99, 0xb8, 0x47, 0x30, 0x13, 0x27, 0x04, - 0x8b, 0x87, 0xae, 0x47, 0x68, 0x20, 0xcc, 0xed, 0xf8, 0x02, 0xd8, 0x46, 0x05, 0x7a, 0x54, 0xe8, - 0x05, 0x0f, 0xc1, 0x96, 0x94, 0x1f, 0xc8, 0x57, 0xd8, 0xa5, 0x7e, 0x04, 0xf6, 0x9a, 0x02, 0x7b, - 0x7d, 0x3c, 0x6a, 0x6c, 0xa1, 0xbc, 0x1a, 0x15, 0xf9, 0xc0, 0x9f, 0x80, 0x0d, 0x29, 0x3e, 0x22, - 0x98, 0x93, 0x08, 0xe7, 0x3b, 0x21, 0xad, 0x91, 0x93, 0x88, 0x32, 0x3a, 0x94, 0xb3, 0x86, 0xfb, - 0x60, 0x53, 0xca, 0xf6, 0xa9, 0xe7, 0xb9, 0x71, 0x5d, 0xaf, 0x2b, 0x08, 0xb5, 0xc8, 0x51, 0x56, - 0x89, 0xf2, 0xf6, 0xb3, 0x53, 0xc5, 0x3f, 0x2f, 0x82, 0xad, 0x82, 0x4b, 0x4d, 0xd6, 0xc7, 0x05, - 0x65, 0xb8, 0x4b, 0x92, 0xd1, 0x36, 0x92, 0xfa, 0x3a, 0x19, 0x1d, 0xca, 0x59, 0xc3, 0xc7, 0x00, - 0x84, 0x97, 0x7f, 0x9b, 0x9e, 0xea, 0xc0, 0xf6, 0x5d, 0xf9, 0xa8, 0xf7, 0x62, 0xe9, 0xf3, 0x51, - 0xe3, 0x56, 0xd1, 0x7f, 0xc7, 0x51, 0x3e, 0xe2, 0x11, 0xed, 0x05, 0x1e, 0x49, 0x1c, 0x50, 0x0a, - 0x12, 0xfe, 0x12, 0x80, 0x81, 0xd2, 0x77, 0xdc, 0xdf, 0x44, 0x97, 0xfb, 0xd7, 0xfe, 0x09, 0x69, - 0x45, 0x7f, 0x73, 0x5b, 0x3f, 0x0b, 0xb0, 0x2f, 0xe4, 0xfb, 0xa1, 0x66, 0xef, 0x51, 0x8c, 0x82, - 0x52, 0x88, 0xb6, 0xf5, 0xf4, 0x59, 0x7d, 0xe1, 0xf3, 0x67, 0xf5, 0x85, 0x2f, 0x9e, 0xd5, 0x17, - 0x7e, 0x3b, 0xae, 0x1b, 0x4f, 0xc7, 0x75, 0xe3, 0xf3, 0x71, 0xdd, 0xf8, 0x62, 0x5c, 0x37, 0xbe, - 0x1c, 0xd7, 0x8d, 0xcf, 0xbe, 0xaa, 0x2f, 0x7c, 0x52, 0x8e, 0xae, 0x95, 0xff, 0x06, 0x00, 0x00, - 0xff, 0xff, 0xca, 0xde, 0x5c, 0x19, 0x8b, 0x1a, 0x00, 0x00, + // 2026 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0x5b, 0x6f, 0x1b, 0xc7, + 0x15, 0xd6, 0x92, 0x94, 0x44, 0x0e, 0xa9, 0xdb, 0x48, 0x69, 0xd6, 0x42, 0x4c, 0x1a, 0x2c, 0x52, + 0xa8, 0x48, 0xbc, 0xac, 0x83, 0xb4, 0x75, 0xdd, 0x07, 0x97, 0x2b, 0x2b, 0xb6, 0x6c, 0x51, 0x56, + 0x87, 0xb2, 0x81, 0xa4, 0x41, 0xdd, 0xd1, 0x6a, 0x44, 0xad, 0xb4, 0x17, 0x76, 0x67, 0x96, 0x15, + 0xfb, 0x54, 0xb4, 0x0f, 0x7d, 0x0d, 0x8a, 0xa2, 0xe8, 0x3f, 0x28, 0xd0, 0x1f, 0xd0, 0x7f, 0x50, + 0xd4, 0x0f, 0x05, 0x9a, 0x97, 0xa2, 0x79, 0x22, 0x62, 0x06, 0xfd, 0x13, 0x7e, 0x69, 0x31, 0xb3, + 0xb3, 0x17, 0x72, 0x57, 0xb1, 0x64, 0x52, 0x35, 0xfa, 0xc6, 0x39, 0x97, 0xef, 0x5c, 0xf6, 0xcc, + 0x99, 0x73, 0x24, 0xf0, 0xb0, 0x63, 0xb2, 0x63, 0xff, 0x40, 0x33, 0x5c, 0xbb, 0x81, 0xbd, 0x8e, + 0xdb, 0xf5, 0xdc, 0x13, 0xf1, 0xe3, 0x26, 0xe9, 0x11, 0x87, 0xd1, 0x46, 0xf7, 0xb4, 0xd3, 0xc0, + 0x5d, 0x93, 0x36, 0xc4, 0xf9, 0xc0, 0xa7, 0x8d, 0xde, 0x2d, 0x6c, 0x75, 0x8f, 0xf1, 0xad, 0x46, + 0x87, 0x38, 0xc4, 0xc3, 0x8c, 0x1c, 0x6a, 0x5d, 0xcf, 0x65, 0x2e, 0xbc, 0x13, 0x63, 0x69, 0x21, + 0x96, 0xf8, 0xf1, 0x2c, 0xc0, 0xd2, 0xba, 0xa7, 0x1d, 0x8d, 0x63, 0x69, 0x21, 0x96, 0x16, 0x62, + 0xad, 0xdf, 0xbd, 0xb0, 0x1f, 0x86, 0x6b, 0xdb, 0xae, 0x33, 0x6e, 0x7c, 0xfd, 0x66, 0x02, 0xa0, + 0xe3, 0x76, 0xdc, 0x86, 0x20, 0x1f, 0xf8, 0x47, 0xe2, 0x24, 0x0e, 0xe2, 0x97, 0x14, 0xaf, 0x9f, + 0xde, 0xa6, 0x9a, 0xe9, 0x72, 0xc8, 0x86, 0xe1, 0x7a, 0xa4, 0xd1, 0x4b, 0xc5, 0xb3, 0xfe, 0x61, + 0x2c, 0x63, 0x63, 0xe3, 0xd8, 0x74, 0x88, 0xd7, 0x0f, 0xfd, 0x68, 0x78, 0x84, 0xba, 0xbe, 0x67, + 0x90, 0x4b, 0x69, 0xd1, 0x86, 0x4d, 0x18, 0xce, 0xb2, 0xd5, 0x38, 0x4f, 0xcb, 0xf3, 0x1d, 0x66, + 0xda, 0x69, 0x33, 0xdf, 0x7b, 0x95, 0x02, 0x35, 0x8e, 0x89, 0x8d, 0xc7, 0xf5, 0xea, 0xff, 0xcc, + 0x81, 0x92, 0xee, 0xd3, 0x4d, 0xd7, 0x39, 0x32, 0x3b, 0xf0, 0x10, 0x14, 0x1c, 0xcc, 0xa8, 0xaa, + 0xdc, 0x50, 0x36, 0xca, 0x1f, 0x7c, 0xa4, 0xbd, 0xfe, 0x17, 0xd4, 0x76, 0x9b, 0xfb, 0xed, 0x00, + 0x55, 0x2f, 0x0e, 0x07, 0xb5, 0x02, 0x3f, 0x23, 0x81, 0x0e, 0xcf, 0x40, 0xe9, 0x84, 0x30, 0xca, + 0x3c, 0x82, 0x6d, 0x35, 0x27, 0x4c, 0x3d, 0x9a, 0xc4, 0xd4, 0x43, 0xc2, 0xda, 0x02, 0x4c, 0xda, + 0x5b, 0x18, 0x0e, 0x6a, 0xa5, 0x88, 0x88, 0x62, 0x63, 0xf0, 0x18, 0xcc, 0x9e, 0xe2, 0xa3, 0x53, + 0xac, 0xe6, 0x85, 0xd5, 0xfb, 0x93, 0x58, 0x7d, 0xc4, 0x81, 0xa4, 0xc5, 0xd2, 0x70, 0x50, 0x9b, + 0x15, 0x04, 0x14, 0x18, 0xa8, 0xff, 0x25, 0x07, 0x56, 0x36, 0x5d, 0x87, 0x61, 0xfe, 0x25, 0xf6, + 0x89, 0xdd, 0xb5, 0x30, 0x23, 0xf0, 0x63, 0x50, 0x0a, 0x0b, 0x25, 0x4c, 0xf2, 0x86, 0x16, 0x7c, + 0x39, 0x6e, 0x46, 0xe3, 0xa5, 0xa7, 0xf5, 0x6e, 0x69, 0x48, 0x0a, 0x21, 0xf2, 0x73, 0xdf, 0xf4, + 0x88, 0xcd, 0x7d, 0xd1, 0x57, 0x9e, 0x0f, 0x6a, 0x33, 0x3c, 0xb4, 0x90, 0x4b, 0x51, 0x8c, 0x06, + 0x0f, 0xc0, 0x92, 0x69, 0xe3, 0x0e, 0xd9, 0xf3, 0x2d, 0x6b, 0xcf, 0xb5, 0x4c, 0xa3, 0x2f, 0x52, + 0x5b, 0xd2, 0x6f, 0x4b, 0xb5, 0xa5, 0xed, 0x51, 0xf6, 0xcb, 0x41, 0xed, 0x7a, 0xba, 0xea, 0xb5, + 0x58, 0x00, 0x8d, 0x03, 0x72, 0x1b, 0x94, 0x18, 0xbe, 0x67, 0xb2, 0x3e, 0x8f, 0x8d, 0x9c, 0x31, + 0x99, 0xc8, 0x6f, 0x66, 0x05, 0xd1, 0x1e, 0x15, 0xd5, 0x57, 0xb9, 0x13, 0x63, 0x44, 0x34, 0x0e, + 0x58, 0xff, 0x7b, 0x0e, 0x14, 0xb7, 0x78, 0xb2, 0x75, 0x9f, 0xc2, 0x9f, 0x81, 0x22, 0xbf, 0x21, + 0x87, 0x98, 0x61, 0x99, 0xae, 0xef, 0x24, 0x2c, 0x45, 0x85, 0x1e, 0x7f, 0x26, 0x2e, 0xcd, 0x6d, + 0x3f, 0x3e, 0x38, 0x21, 0x06, 0x6b, 0x11, 0x86, 0x75, 0x28, 0xe3, 0x07, 0x31, 0x0d, 0x45, 0xa8, + 0xf0, 0x04, 0x14, 0x68, 0x97, 0x18, 0xb2, 0x0c, 0x1f, 0x4c, 0x52, 0x10, 0xa1, 0xd7, 0xed, 0x2e, + 0x31, 0xf4, 0x8a, 0xb4, 0x5a, 0xe0, 0x27, 0x24, 0x6c, 0x40, 0x0f, 0xcc, 0x51, 0x86, 0x99, 0x4f, + 0x65, 0xd6, 0x1e, 0x4e, 0xc5, 0x9a, 0x40, 0xd4, 0x17, 0xa5, 0xbd, 0xb9, 0xe0, 0x8c, 0xa4, 0xa5, + 0xfa, 0xbf, 0x14, 0x50, 0x09, 0x45, 0x77, 0x4c, 0xca, 0xe0, 0xa7, 0xa9, 0x94, 0x6a, 0x17, 0x4b, + 0x29, 0xd7, 0x16, 0x09, 0x5d, 0x96, 0xa6, 0x8a, 0x21, 0x25, 0x91, 0x4e, 0x13, 0xcc, 0x9a, 0x8c, + 0xd8, 0x54, 0xcd, 0xdd, 0xc8, 0x6f, 0x94, 0x3f, 0xb8, 0x37, 0x8d, 0x08, 0xf5, 0x05, 0x69, 0x70, + 0x76, 0x9b, 0x43, 0xa3, 0xc0, 0x42, 0xfd, 0x1f, 0xb9, 0x38, 0x32, 0x9e, 0x64, 0x88, 0x47, 0x9a, + 0xd7, 0xe6, 0xa4, 0xcd, 0x8b, 0x5b, 0x1e, 0xef, 0x5c, 0x7e, 0xba, 0x73, 0x3d, 0x98, 0x4a, 0xe7, + 0x12, 0x61, 0x9e, 0xdb, 0xb6, 0xc8, 0x68, 0xdb, 0xba, 0x37, 0x71, 0xdb, 0xe2, 0xe6, 0xd2, 0x3d, + 0xeb, 0x4b, 0x05, 0x2c, 0x8e, 0x96, 0x15, 0x7c, 0x16, 0x95, 0x6c, 0x90, 0xd5, 0xef, 0x5f, 0xdc, + 0x74, 0xf0, 0x30, 0x6b, 0x5f, 0x5f, 0x9f, 0xd0, 0x06, 0x73, 0x86, 0xe8, 0xa1, 0x32, 0x9d, 0x5b, + 0x93, 0xc4, 0x16, 0x3d, 0x64, 0xb1, 0xb9, 0xe0, 0x8c, 0xa4, 0x91, 0xfa, 0x6f, 0x16, 0x41, 0x25, + 0x99, 0x74, 0xf8, 0x6d, 0x30, 0xdf, 0x23, 0x1e, 0x35, 0x5d, 0x47, 0x44, 0x58, 0xd2, 0x97, 0xa4, + 0xe6, 0xfc, 0xd3, 0x80, 0x8c, 0x42, 0x3e, 0xdc, 0x00, 0x45, 0x8f, 0x74, 0x2d, 0xd3, 0xc0, 0x54, + 0x38, 0x3b, 0xab, 0x57, 0xf8, 0x2d, 0x40, 0x92, 0x86, 0x22, 0x2e, 0xfc, 0x9d, 0x02, 0x56, 0x8c, + 0xf1, 0xe6, 0x2f, 0x3f, 0x5e, 0x6b, 0x92, 0x00, 0x53, 0x2f, 0x8a, 0xfe, 0xd6, 0x70, 0x50, 0x4b, + 0x3f, 0x34, 0x28, 0x6d, 0x1e, 0xfe, 0x59, 0x01, 0xd7, 0x3c, 0x62, 0xb9, 0xf8, 0x90, 0x78, 0x29, + 0x05, 0xb5, 0x70, 0x15, 0xce, 0x5d, 0x1f, 0x0e, 0x6a, 0xd7, 0xd0, 0x79, 0x36, 0xd1, 0xf9, 0xee, + 0xc0, 0x3f, 0x29, 0x40, 0xb5, 0x09, 0xf3, 0x4c, 0x83, 0xa6, 0x7d, 0x9d, 0xbd, 0x0a, 0x5f, 0xdf, + 0x19, 0x0e, 0x6a, 0x6a, 0xeb, 0x1c, 0x93, 0xe8, 0x5c, 0x67, 0xe0, 0xaf, 0x15, 0x50, 0xee, 0xf2, + 0x0a, 0xa1, 0x8c, 0x38, 0x06, 0x51, 0xe7, 0x84, 0x73, 0x8f, 0x27, 0x71, 0x6e, 0x2f, 0x86, 0x6b, + 0x33, 0x3e, 0xac, 0x75, 0xfa, 0xfa, 0xd2, 0x70, 0x50, 0x2b, 0x27, 0x18, 0x28, 0x69, 0x14, 0x1a, + 0x89, 0xa6, 0x3e, 0x2f, 0x1c, 0xf8, 0xc1, 0xa5, 0x2f, 0x6a, 0x4b, 0x02, 0x04, 0x55, 0x1d, 0x9e, + 0x12, 0xbd, 0xfd, 0xf7, 0x0a, 0xa8, 0x38, 0xee, 0x21, 0x69, 0x13, 0x8b, 0x18, 0xcc, 0xf5, 0xd4, + 0xa2, 0xe8, 0xf1, 0x9f, 0x4c, 0xab, 0x01, 0x6a, 0xbb, 0x09, 0xf0, 0x2d, 0x87, 0x79, 0x7d, 0x7d, + 0x4d, 0x5e, 0xc6, 0x4a, 0x92, 0x85, 0x46, 0xbc, 0x80, 0x4f, 0x40, 0x99, 0xb9, 0x16, 0x1f, 0x6a, + 0x4d, 0xd7, 0xa1, 0x6a, 0x49, 0x38, 0x55, 0xcd, 0x1a, 0x48, 0xf6, 0x23, 0x31, 0x7d, 0x55, 0x02, + 0x97, 0x63, 0x1a, 0x45, 0x49, 0x1c, 0x48, 0xd2, 0xb3, 0x0e, 0x10, 0x99, 0xfd, 0x56, 0x16, 0xf4, + 0x9e, 0x7b, 0xf8, 0x5a, 0xe3, 0x0e, 0x74, 0xc0, 0x72, 0x34, 0x65, 0xb5, 0x89, 0xe1, 0x11, 0x46, + 0xd5, 0xb2, 0x08, 0x21, 0x73, 0x30, 0xdc, 0x71, 0x0d, 0x6c, 0x05, 0x83, 0x0c, 0x22, 0x47, 0xc4, + 0xe3, 0x5f, 0x5f, 0x57, 0x65, 0x30, 0xcb, 0xdb, 0x63, 0x48, 0x28, 0x85, 0x0d, 0xef, 0x83, 0x95, + 0xae, 0x67, 0xba, 0xc2, 0x05, 0x0b, 0x53, 0xba, 0x8b, 0x6d, 0xa2, 0x56, 0x44, 0xe7, 0xbb, 0x26, + 0x61, 0x56, 0xf6, 0xc6, 0x05, 0x50, 0x5a, 0x87, 0x77, 0xc3, 0x90, 0xa8, 0x2e, 0xc4, 0xdd, 0x30, + 0xd4, 0x45, 0x11, 0x17, 0x7e, 0x04, 0x8a, 0xf8, 0xe8, 0xc8, 0x74, 0xb8, 0xe4, 0xa2, 0x48, 0xe1, + 0x3b, 0x59, 0xa1, 0x35, 0xa5, 0x4c, 0x80, 0x13, 0x9e, 0x50, 0xa4, 0x0b, 0x1f, 0x02, 0x48, 0x89, + 0xd7, 0x33, 0x0d, 0xd2, 0x34, 0x0c, 0xd7, 0x77, 0x98, 0xf0, 0x7d, 0x49, 0xf8, 0xbe, 0x2e, 0x7d, + 0x87, 0xed, 0x94, 0x04, 0xca, 0xd0, 0xe2, 0xde, 0x53, 0xc2, 0x98, 0xe9, 0x74, 0xa8, 0xba, 0x2c, + 0x10, 0x84, 0xd5, 0xb6, 0xa4, 0xa1, 0x88, 0x0b, 0xdf, 0x03, 0x25, 0xca, 0xb0, 0xc7, 0x9a, 0x5e, + 0x87, 0xaa, 0x2b, 0x37, 0xf2, 0x1b, 0xa5, 0xe0, 0xa1, 0x6e, 0x87, 0x44, 0x14, 0xf3, 0xe1, 0x87, + 0xa0, 0x42, 0x13, 0x9b, 0x88, 0x0a, 0x05, 0xf4, 0x32, 0xaf, 0xe0, 0xe4, 0x86, 0x82, 0x46, 0xa4, + 0xa0, 0x06, 0x80, 0x8d, 0xcf, 0xf6, 0x70, 0x9f, 0x77, 0x43, 0x75, 0x55, 0xe8, 0x2c, 0xf2, 0x89, + 0xb5, 0x15, 0x51, 0x51, 0x42, 0x62, 0xfd, 0x2e, 0x58, 0x49, 0x5d, 0x15, 0xb8, 0x0c, 0xf2, 0xa7, + 0xa4, 0x1f, 0x3c, 0x62, 0x88, 0xff, 0x84, 0x6b, 0x60, 0xb6, 0x87, 0x2d, 0x9f, 0x04, 0x7b, 0x00, + 0x0a, 0x0e, 0x77, 0x72, 0xb7, 0x95, 0xfa, 0xdf, 0x14, 0xb0, 0x34, 0xb6, 0x34, 0xc1, 0xeb, 0x20, + 0xef, 0x7b, 0x96, 0x7c, 0x04, 0xcb, 0x32, 0x9d, 0xf9, 0x27, 0x68, 0x07, 0x71, 0x3a, 0xfc, 0x09, + 0xa8, 0x60, 0xc3, 0x20, 0x94, 0x06, 0x85, 0x24, 0x5f, 0xeb, 0x77, 0xcf, 0x99, 0xfb, 0x3d, 0xc2, + 0x1e, 0x91, 0x7e, 0xe8, 0x60, 0x90, 0x80, 0x66, 0x42, 0x1d, 0x8d, 0x80, 0xc1, 0xdb, 0x63, 0x69, + 0xcb, 0x0b, 0x27, 0xa2, 0xcb, 0x7f, 0x7e, 0xea, 0xea, 0xbf, 0x00, 0xc5, 0x70, 0xa0, 0x81, 0xa7, + 0x60, 0x8e, 0x9c, 0xb9, 0xcc, 0x34, 0xe4, 0xac, 0x32, 0xb5, 0xed, 0x0e, 0xf0, 0x41, 0x62, 0x4b, + 0x40, 0x23, 0x69, 0xa2, 0xfe, 0x9f, 0x3c, 0x28, 0x27, 0x64, 0x5e, 0x95, 0xbe, 0x27, 0x20, 0xcf, + 0x2c, 0x2a, 0xb3, 0x76, 0xe7, 0xd2, 0xbd, 0x79, 0x7f, 0x27, 0xdc, 0xa5, 0xe7, 0x39, 0xec, 0xfe, + 0x4e, 0x1b, 0x71, 0x3c, 0xf8, 0x31, 0x28, 0x50, 0x4c, 0x2d, 0x39, 0x5a, 0xfc, 0xf0, 0xf2, 0xc3, + 0x59, 0xb3, 0xbd, 0x93, 0x5c, 0xd2, 0xf9, 0x19, 0x09, 0x48, 0xf8, 0x5b, 0x05, 0x2c, 0x18, 0xae, + 0x43, 0x7d, 0x9b, 0x78, 0xf7, 0x3d, 0xd7, 0xef, 0xca, 0x11, 0x61, 0x77, 0x1a, 0x59, 0x8d, 0x51, + 0xf5, 0x95, 0xe1, 0xa0, 0xb6, 0x30, 0x42, 0x42, 0xa3, 0x76, 0x53, 0xa5, 0x37, 0x7b, 0x95, 0xa5, + 0x37, 0x77, 0xe1, 0xd2, 0xfb, 0xab, 0x02, 0x60, 0x3a, 0x1e, 0xd8, 0x00, 0xa5, 0x0e, 0xff, 0x21, + 0x9a, 0x53, 0x50, 0x0e, 0xd1, 0xe2, 0x7e, 0x3f, 0x64, 0xa0, 0x58, 0x86, 0x77, 0x64, 0x8f, 0x1c, + 0x60, 0x0b, 0x27, 0x9e, 0x7b, 0xb9, 0xba, 0x47, 0x1d, 0x19, 0x8d, 0x0b, 0xa0, 0xb4, 0x0e, 0xfc, + 0x2e, 0x28, 0x8b, 0x4e, 0xf4, 0xd8, 0x3a, 0x24, 0x34, 0xd8, 0xcc, 0x8b, 0xf1, 0x43, 0xd7, 0x8e, + 0x59, 0x28, 0x29, 0x57, 0xff, 0xb7, 0x02, 0xe6, 0xe5, 0xbe, 0x03, 0x1d, 0x30, 0xe7, 0x60, 0x66, + 0xf6, 0x88, 0xbc, 0x42, 0x13, 0x6d, 0xa8, 0xbb, 0x02, 0x29, 0x9a, 0x60, 0xc4, 0x2d, 0x0a, 0x68, + 0x48, 0x5a, 0x81, 0x27, 0xd1, 0x95, 0xcd, 0x4d, 0xf5, 0x2f, 0x4e, 0x59, 0x37, 0xf6, 0x2b, 0x05, + 0x80, 0x58, 0xe4, 0x55, 0x17, 0xf6, 0x3d, 0x50, 0x32, 0x2c, 0x9f, 0x32, 0xe2, 0x6d, 0xdf, 0x93, + 0x5f, 0x43, 0xb4, 0xfd, 0xcd, 0x90, 0x88, 0x62, 0x3e, 0x7c, 0x1f, 0x14, 0xb0, 0xcf, 0x8e, 0x65, + 0xdf, 0x52, 0xf9, 0x4d, 0x6a, 0xfa, 0xec, 0xf8, 0x25, 0x2f, 0x3d, 0x9f, 0x1d, 0x47, 0x1f, 0x4d, + 0x48, 0xa5, 0xea, 0xb9, 0x30, 0xc5, 0x7a, 0xae, 0x7f, 0xb6, 0x04, 0x16, 0x47, 0x13, 0x0f, 0xdf, + 0x4f, 0xec, 0x2d, 0x8a, 0x78, 0xa9, 0xa3, 0x0d, 0x3e, 0x63, 0x77, 0x09, 0x63, 0xc9, 0x5d, 0x28, + 0x96, 0xf1, 0xe9, 0x37, 0xff, 0x26, 0xa6, 0xdf, 0xec, 0x75, 0xab, 0xf0, 0x66, 0xd7, 0xad, 0xff, + 0x9f, 0x0d, 0xe6, 0x0f, 0xe3, 0x73, 0xfd, 0x9c, 0x98, 0x3f, 0x3f, 0x9d, 0xde, 0xdd, 0x9f, 0xce, + 0x64, 0x3f, 0x3f, 0xa5, 0xc9, 0x3e, 0xb9, 0x2c, 0x15, 0xaf, 0x6a, 0x59, 0xca, 0x58, 0x1f, 0x4a, + 0x57, 0xb0, 0x3e, 0xd4, 0xc1, 0x9c, 0x8d, 0xcf, 0x9a, 0x1d, 0x22, 0x96, 0x93, 0x52, 0xd0, 0xf8, + 0x5a, 0x82, 0x82, 0x24, 0xe7, 0x7f, 0xbe, 0x62, 0x64, 0xcf, 0xe9, 0x95, 0xd7, 0x9a, 0xd3, 0x33, + 0xd7, 0x95, 0x85, 0x09, 0xd7, 0x95, 0xc5, 0x0b, 0xaf, 0x2b, 0x4b, 0x13, 0xac, 0x2b, 0xef, 0x82, + 0x79, 0x1b, 0x9f, 0xb5, 0xa8, 0xdc, 0x30, 0x0a, 0x7a, 0x79, 0x38, 0xa8, 0xcd, 0xb7, 0x02, 0x12, + 0x0a, 0x79, 0xdc, 0x31, 0x1b, 0x9f, 0xe9, 0x7d, 0x46, 0xf8, 0x7a, 0x11, 0x6d, 0x22, 0x2d, 0x49, + 0x43, 0x11, 0x57, 0x02, 0xb6, 0xfd, 0x03, 0x2a, 0xf6, 0x8a, 0x18, 0x90, 0x93, 0x50, 0xc8, 0xbb, + 0xec, 0x36, 0x01, 0x77, 0xc0, 0x9a, 0x87, 0x8f, 0xd8, 0x03, 0x82, 0x3d, 0x76, 0x40, 0x30, 0xdb, + 0x37, 0x6d, 0xe2, 0xfa, 0x4c, 0x5d, 0x8b, 0x1e, 0x80, 0x35, 0x94, 0xc1, 0x47, 0x99, 0x5a, 0x70, + 0x1b, 0xac, 0x72, 0xfa, 0x16, 0xbf, 0xc2, 0xa6, 0xeb, 0x84, 0x60, 0x6f, 0x09, 0xb0, 0xb7, 0x87, + 0x83, 0xda, 0x2a, 0x4a, 0xb3, 0x51, 0x96, 0x0e, 0xfc, 0x11, 0x58, 0xe6, 0xe4, 0x1d, 0x82, 0x29, + 0x09, 0x71, 0xbe, 0x11, 0x8c, 0x67, 0xbc, 0x12, 0xd1, 0x18, 0x0f, 0xa5, 0xa4, 0xe1, 0x26, 0x58, + 0xe1, 0xb4, 0x4d, 0xd7, 0xb6, 0xcd, 0x28, 0xae, 0xb7, 0x05, 0x84, 0x68, 0xe4, 0x68, 0x9c, 0x89, + 0xd2, 0xf2, 0x93, 0x6f, 0x5b, 0x7f, 0xcc, 0x81, 0xd5, 0x8c, 0x47, 0x8d, 0xc7, 0x47, 0x99, 0xeb, + 0xe1, 0x0e, 0x89, 0x4b, 0x5b, 0x89, 0xe3, 0x6b, 0x8f, 0xf1, 0x50, 0x4a, 0x1a, 0x3e, 0x03, 0x20, + 0x78, 0xfc, 0x5b, 0xee, 0xa1, 0x34, 0xac, 0xdf, 0xe5, 0x9f, 0xba, 0x19, 0x51, 0x5f, 0x0e, 0x6a, + 0x37, 0xb3, 0xfe, 0xcb, 0x13, 0xfa, 0xc3, 0x9e, 0xba, 0x96, 0x6f, 0x93, 0x58, 0x01, 0x25, 0x20, + 0xe1, 0x4f, 0x01, 0xe8, 0x09, 0x7e, 0xdb, 0xfc, 0x65, 0xf8, 0xb8, 0x7f, 0xed, 0xbf, 0x0b, 0xb4, + 0xf0, 0x1f, 0x52, 0xda, 0x8f, 0x7d, 0xec, 0x30, 0x7e, 0x3f, 0x44, 0xed, 0x3d, 0x8d, 0x50, 0x50, + 0x02, 0x51, 0xd7, 0x9e, 0xbf, 0xa8, 0xce, 0x7c, 0xfe, 0xa2, 0x3a, 0xf3, 0xc5, 0x8b, 0xea, 0xcc, + 0xaf, 0x86, 0x55, 0xe5, 0xf9, 0xb0, 0xaa, 0x7c, 0x3e, 0xac, 0x2a, 0x5f, 0x0c, 0xab, 0xca, 0x97, + 0xc3, 0xaa, 0xf2, 0xd9, 0x57, 0xd5, 0x99, 0x4f, 0x8a, 0xe1, 0xb3, 0xf2, 0xdf, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x5b, 0x19, 0x61, 0x86, 0x9f, 0x1e, 0x00, 0x00, } func (m *BusConfig) Marshal() (dAtA []byte, err error) { @@ -542,6 +643,18 @@ func (m *BusConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Kafka != nil { + { + size, err := m.Kafka.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } if m.JetStream != nil { { size, err := m.JetStream.MarshalToSizedBuffer(dAtA[:i]) @@ -739,6 +852,18 @@ func (m *EventBusSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Kafka != nil { + { + size, err := m.Kafka.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } if m.JetStream != nil { { size, err := m.JetStream.MarshalToSizedBuffer(dAtA[:i]) @@ -1076,6 +1201,163 @@ func (m *JetStreamConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *KafkaBus) 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 *KafkaBus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KafkaBus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Exotic != nil { + { + size, err := m.Exotic.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 *KafkaConfig) 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 *KafkaConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KafkaConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.StreamConfig) + copy(dAtA[i:], m.StreamConfig) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StreamConfig))) + i-- + dAtA[i] = 0x32 + if m.AccessSecret != nil { + { + size, err := m.AccessSecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.ConsumerGroup != nil { + { + size, err := m.ConsumerGroup.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.SASL != nil { + { + size, err := m.SASL.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.TLS != nil { + { + size, err := m.TLS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.URL) + copy(dAtA[i:], m.URL) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.URL))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *KafkaConsumerGroup) 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 *KafkaConsumerGroup) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KafkaConsumerGroup) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.StartOldest { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.RebalanceStrategy) + copy(dAtA[i:], m.RebalanceStrategy) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RebalanceStrategy))) + i-- + dAtA[i] = 0x12 + i -= len(m.GroupName) + copy(dAtA[i:], m.GroupName) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.GroupName))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *NATSBus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1498,6 +1780,10 @@ func (m *BusConfig) Size() (n int) { l = m.JetStream.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Kafka != nil { + l = m.Kafka.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -1564,6 +1850,10 @@ func (m *EventBusSpec) Size() (n int) { l = m.JetStream.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Kafka != nil { + l = m.Kafka.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -1684,6 +1974,62 @@ func (m *JetStreamConfig) Size() (n int) { return n } +func (m *KafkaBus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Exotic != nil { + l = m.Exotic.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *KafkaConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.URL) + n += 1 + l + sovGenerated(uint64(l)) + if m.TLS != nil { + l = m.TLS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SASL != nil { + l = m.SASL.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ConsumerGroup != nil { + l = m.ConsumerGroup.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AccessSecret != nil { + l = m.AccessSecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.StreamConfig) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *KafkaConsumerGroup) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.GroupName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RebalanceStrategy) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + func (m *NATSBus) Size() (n int) { if m == nil { return 0 @@ -1857,6 +2203,7 @@ func (this *BusConfig) String() string { s := strings.Join([]string{`&BusConfig{`, `NATS:` + strings.Replace(this.NATS.String(), "NATSConfig", "NATSConfig", 1) + `,`, `JetStream:` + strings.Replace(this.JetStream.String(), "JetStreamConfig", "JetStreamConfig", 1) + `,`, + `Kafka:` + strings.Replace(this.Kafka.String(), "KafkaConfig", "KafkaConfig", 1) + `,`, `}`, }, "") return s @@ -1908,6 +2255,7 @@ func (this *EventBusSpec) String() string { s := strings.Join([]string{`&EventBusSpec{`, `NATS:` + strings.Replace(this.NATS.String(), "NATSBus", "NATSBus", 1) + `,`, `JetStream:` + strings.Replace(this.JetStream.String(), "JetStreamBus", "JetStreamBus", 1) + `,`, + `Kafka:` + strings.Replace(this.Kafka.String(), "KafkaBus", "KafkaBus", 1) + `,`, `}`, }, "") return s @@ -1983,11 +2331,48 @@ func (this *JetStreamConfig) String() string { }, "") return s } -func (this *NATSBus) String() string { +func (this *KafkaBus) String() string { if this == nil { return "nil" } - s := strings.Join([]string{`&NATSBus{`, + s := strings.Join([]string{`&KafkaBus{`, + `Exotic:` + strings.Replace(this.Exotic.String(), "KafkaConfig", "KafkaConfig", 1) + `,`, + `}`, + }, "") + return s +} +func (this *KafkaConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KafkaConfig{`, + `URL:` + fmt.Sprintf("%v", this.URL) + `,`, + `TLS:` + strings.Replace(fmt.Sprintf("%v", this.TLS), "TLSConfig", "common.TLSConfig", 1) + `,`, + `SASL:` + strings.Replace(fmt.Sprintf("%v", this.SASL), "SASLConfig", "common.SASLConfig", 1) + `,`, + `ConsumerGroup:` + strings.Replace(this.ConsumerGroup.String(), "KafkaConsumerGroup", "KafkaConsumerGroup", 1) + `,`, + `AccessSecret:` + strings.Replace(fmt.Sprintf("%v", this.AccessSecret), "SecretKeySelector", "v1.SecretKeySelector", 1) + `,`, + `StreamConfig:` + fmt.Sprintf("%v", this.StreamConfig) + `,`, + `}`, + }, "") + return s +} +func (this *KafkaConsumerGroup) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KafkaConsumerGroup{`, + `GroupName:` + fmt.Sprintf("%v", this.GroupName) + `,`, + `RebalanceStrategy:` + fmt.Sprintf("%v", this.RebalanceStrategy) + `,`, + `StartOldest:` + fmt.Sprintf("%v", this.StartOldest) + `,`, + `}`, + }, "") + return s +} +func (this *NATSBus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NATSBus{`, `Native:` + strings.Replace(this.Native.String(), "NativeStrategy", "NativeStrategy", 1) + `,`, `Exotic:` + strings.Replace(this.Exotic.String(), "NATSConfig", "NATSConfig", 1) + `,`, `}`, @@ -2180,6 +2565,42 @@ func (m *BusConfig) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kafka", 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.Kafka == nil { + m.Kafka = &KafkaConfig{} + } + if err := m.Kafka.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -2719,6 +3140,42 @@ func (m *EventBusSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kafka", 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.Kafka == nil { + m.Kafka = &KafkaBus{} + } + if err := m.Kafka.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3770,6 +4227,484 @@ func (m *JetStreamConfig) Unmarshal(dAtA []byte) error { } return nil } +func (m *KafkaBus) 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: KafkaBus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KafkaBus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Exotic", 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.Exotic == nil { + m.Exotic = &KafkaConfig{} + } + if err := m.Exotic.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 *KafkaConfig) 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: KafkaConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KafkaConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URL", 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.URL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TLS", 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.TLS == nil { + m.TLS = &common.TLSConfig{} + } + if err := m.TLS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SASL", 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.SASL == nil { + m.SASL = &common.SASLConfig{} + } + if err := m.SASL.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsumerGroup", 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.ConsumerGroup == nil { + m.ConsumerGroup = &KafkaConsumerGroup{} + } + if err := m.ConsumerGroup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessSecret", 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.AccessSecret == nil { + m.AccessSecret = &v1.SecretKeySelector{} + } + if err := m.AccessSecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StreamConfig", 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.StreamConfig = 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 *KafkaConsumerGroup) 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: KafkaConsumerGroup: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KafkaConsumerGroup: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupName", 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.GroupName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RebalanceStrategy", 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.RebalanceStrategy = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartOldest", 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.StartOldest = 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 *NATSBus) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/eventbus/v1alpha1/generated.proto b/pkg/apis/eventbus/v1alpha1/generated.proto index e0d03920f5..0fd7327bcd 100644 --- a/pkg/apis/eventbus/v1alpha1/generated.proto +++ b/pkg/apis/eventbus/v1alpha1/generated.proto @@ -37,6 +37,9 @@ message BusConfig { // +optional optional JetStreamConfig jetstream = 2; + + // +optional + optional KafkaConfig kafka = 3; } // ContainerTemplate defines customized spec for a container @@ -79,6 +82,10 @@ message EventBusSpec { // +optional optional JetStreamBus jetstream = 2; + + // +optional + // Kafka eventbus + optional KafkaBus kafka = 3; } // EventBusStatus holds the status of the eventbus resource @@ -201,6 +208,51 @@ message JetStreamConfig { optional string streamConfig = 3; } +// KafkaBus holds the KafkaBus EventBus information +message KafkaBus { + // Exotic holds an exotic Kafka config + optional KafkaConfig exotic = 1; +} + +message KafkaConfig { + // URL to kafka cluster, multiple URLs separated by comma + optional string url = 1; + + // TLS configuration for the kafka client. + // +optional + optional github.com.argoproj.argo_events.pkg.apis.common.TLSConfig tls = 2; + + // SASL configuration for the kafka client + // +optional + optional github.com.argoproj.argo_events.pkg.apis.common.SASLConfig sasl = 3; + + // Consumer group for kafka client + // +optional + optional KafkaConsumerGroup consumerGroup = 4; + + // Secret for auth + // +optional + optional k8s.io.api.core.v1.SecretKeySelector accessSecret = 5; + + // Optional configuration for the kafka, if specified, it will be merged with the default configuration in controller-config. + // It accepts a YAML format configuration, available fields include, "maxRetry", "configVersion (sarama config version)", "requiredAcks", "replication". + // +optional + optional string streamConfig = 6; +} + +message KafkaConsumerGroup { + // The name for the consumer group to use + optional string groupName = 1; + + // Rebalance strategy can be one of: sticky, roundrobin, range. Range is the default. + // +optional + optional string rebalanceStrategy = 2; + + // When starting up a new group do we want to start from the oldest event (true) or the newest event (false), defaults to false + // +optional + optional bool startOldest = 3; +} + // NATSBus holds the NATS eventbus information message NATSBus { // Native means to bring up a native NATS service diff --git a/pkg/apis/eventbus/v1alpha1/kafka_eventbus.go b/pkg/apis/eventbus/v1alpha1/kafka_eventbus.go new file mode 100644 index 0000000000..dcbf106ca1 --- /dev/null +++ b/pkg/apis/eventbus/v1alpha1/kafka_eventbus.go @@ -0,0 +1,44 @@ +package v1alpha1 + +import ( + apicommon "github.com/argoproj/argo-events/pkg/apis/common" + corev1 "k8s.io/api/core/v1" +) + +// KafkaBus holds the KafkaBus EventBus information +type KafkaBus struct { + // Exotic holds an exotic Kafka config + Exotic *KafkaConfig `json:"exotic,omitempty" protobuf:"bytes,1,opt,name=exotic"` +} + +type KafkaConfig struct { + // URL to kafka cluster, multiple URLs separated by comma + URL string `json:"url,omitempty" protobuf:"bytes,1,opt,name=url"` + // TLS configuration for the kafka client. + // +optional + TLS *apicommon.TLSConfig `json:"tls,omitempty" protobuf:"bytes,2,opt,name=tls"` + // SASL configuration for the kafka client + // +optional + SASL *apicommon.SASLConfig `json:"sasl,omitempty" protobuf:"bytes,3,opt,name=sasl"` + // Consumer group for kafka client + // +optional + ConsumerGroup *KafkaConsumerGroup `json:"consumerGroup,omitempty" protobuf:"bytes,4,opt,name=consumerGroup"` + // Secret for auth + // +optional + AccessSecret *corev1.SecretKeySelector `json:"accessSecret,omitempty" protobuf:"bytes,5,opt,name=accessSecret"` + // Optional configuration for the kafka, if specified, it will be merged with the default configuration in controller-config. + // It accepts a YAML format configuration, available fields include, "maxRetry", "configVersion (sarama config version)", "requiredAcks", "replication". + // +optional + StreamConfig string `json:"streamConfig,omitempty" protobuf:"bytes,6,opt,name=streamConfig"` +} + +type KafkaConsumerGroup struct { + // The name for the consumer group to use + GroupName string `json:"groupName,omitempty" protobuf:"bytes,1,opt,name=groupName"` + // Rebalance strategy can be one of: sticky, roundrobin, range. Range is the default. + // +optional + RebalanceStrategy string `json:"rebalanceStrategy,omitempty" protobuf:"bytes,2,opt,name=rebalanceStrategy"` + // When starting up a new group do we want to start from the oldest event (true) or the newest event (false), defaults to false + // +optional + StartOldest bool `json:"startOldest,omitempty" default:"false" protobuf:"bytes,3,opt,name=startOldest"` +} diff --git a/pkg/apis/eventbus/v1alpha1/openapi_generated.go b/pkg/apis/eventbus/v1alpha1/openapi_generated.go index b6a1a9f68a..0c3c3ed550 100644 --- a/pkg/apis/eventbus/v1alpha1/openapi_generated.go +++ b/pkg/apis/eventbus/v1alpha1/openapi_generated.go @@ -38,6 +38,9 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.EventBusStatus": schema_pkg_apis_eventbus_v1alpha1_EventBusStatus(ref), "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamBus": schema_pkg_apis_eventbus_v1alpha1_JetStreamBus(ref), "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamConfig": schema_pkg_apis_eventbus_v1alpha1_JetStreamConfig(ref), + "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaBus": schema_pkg_apis_eventbus_v1alpha1_KafkaBus(ref), + "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConfig": schema_pkg_apis_eventbus_v1alpha1_KafkaConfig(ref), + "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConsumerGroup": schema_pkg_apis_eventbus_v1alpha1_KafkaConsumerGroup(ref), "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.NATSBus": schema_pkg_apis_eventbus_v1alpha1_NATSBus(ref), "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.NATSConfig": schema_pkg_apis_eventbus_v1alpha1_NATSConfig(ref), "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.NativeStrategy": schema_pkg_apis_eventbus_v1alpha1_NativeStrategy(ref), @@ -62,11 +65,16 @@ func schema_pkg_apis_eventbus_v1alpha1_BusConfig(ref common.ReferenceCallback) c Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamConfig"), }, }, + "kafka": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConfig"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamConfig", "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.NATSConfig"}, + "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamConfig", "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConfig", "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.NATSConfig"}, } } @@ -217,11 +225,17 @@ func schema_pkg_apis_eventbus_v1alpha1_EventBusSpec(ref common.ReferenceCallback Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamBus"), }, }, + "kafka": { + SchemaProps: spec.SchemaProps{ + Description: "Kafka eventbus", + Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaBus"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamBus", "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.NATSBus"}, + "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.JetStreamBus", "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaBus", "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.NATSBus"}, } } @@ -477,6 +491,112 @@ func schema_pkg_apis_eventbus_v1alpha1_JetStreamConfig(ref common.ReferenceCallb } } +func schema_pkg_apis_eventbus_v1alpha1_KafkaBus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "KafkaBus holds the KafkaBus EventBus information", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "exotic": { + SchemaProps: spec.SchemaProps{ + Description: "Exotic holds an exotic Kafka config", + Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConfig"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConfig"}, + } +} + +func schema_pkg_apis_eventbus_v1alpha1_KafkaConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "url": { + SchemaProps: spec.SchemaProps{ + Description: "URL to kafka cluster, multiple URLs separated by comma", + Type: []string{"string"}, + Format: "", + }, + }, + "tls": { + SchemaProps: spec.SchemaProps{ + Description: "TLS configuration for the kafka client.", + Ref: ref("github.com/argoproj/argo-events/pkg/apis/common.TLSConfig"), + }, + }, + "sasl": { + SchemaProps: spec.SchemaProps{ + Description: "SASL configuration for the kafka client", + Ref: ref("github.com/argoproj/argo-events/pkg/apis/common.SASLConfig"), + }, + }, + "consumerGroup": { + SchemaProps: spec.SchemaProps{ + Description: "Consumer group for kafka client", + Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConsumerGroup"), + }, + }, + "accessSecret": { + SchemaProps: spec.SchemaProps{ + Description: "Secret for auth", + Ref: ref("k8s.io/api/core/v1.SecretKeySelector"), + }, + }, + "streamConfig": { + SchemaProps: spec.SchemaProps{ + Description: "Optional configuration for the kafka, if specified, it will be merged with the default configuration in controller-config. It accepts a YAML format configuration, available fields include, \"maxRetry\", \"configVersion (sarama config version)\", \"requiredAcks\", \"replication\".", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-events/pkg/apis/common.SASLConfig", "github.com/argoproj/argo-events/pkg/apis/common.TLSConfig", "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1.KafkaConsumerGroup", "k8s.io/api/core/v1.SecretKeySelector"}, + } +} + +func schema_pkg_apis_eventbus_v1alpha1_KafkaConsumerGroup(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "groupName": { + SchemaProps: spec.SchemaProps{ + Description: "The name for the consumer group to use", + Type: []string{"string"}, + Format: "", + }, + }, + "rebalanceStrategy": { + SchemaProps: spec.SchemaProps{ + Description: "Rebalance strategy can be one of: sticky, roundrobin, range. Range is the default.", + Type: []string{"string"}, + Format: "", + }, + }, + "startOldest": { + SchemaProps: spec.SchemaProps{ + Description: "When starting up a new group do we want to start from the oldest event (true) or the newest event (false), defaults to false", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + }, + }, + } +} + func schema_pkg_apis_eventbus_v1alpha1_NATSBus(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/eventbus/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/eventbus/v1alpha1/zz_generated.deepcopy.go index 68524f4cd5..953bad11cb 100644 --- a/pkg/apis/eventbus/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/eventbus/v1alpha1/zz_generated.deepcopy.go @@ -40,6 +40,11 @@ func (in *BusConfig) DeepCopyInto(out *BusConfig) { *out = new(JetStreamConfig) (*in).DeepCopyInto(*out) } + if in.Kafka != nil { + in, out := &in.Kafka, &out.Kafka + *out = new(KafkaConfig) + (*in).DeepCopyInto(*out) + } return } @@ -149,6 +154,11 @@ func (in *EventBusSpec) DeepCopyInto(out *EventBusSpec) { *out = new(JetStreamBus) (*in).DeepCopyInto(*out) } + if in.Kafka != nil { + in, out := &in.Kafka, &out.Kafka + *out = new(KafkaBus) + (*in).DeepCopyInto(*out) + } return } @@ -301,6 +311,79 @@ func (in *JetStreamConfig) DeepCopy() *JetStreamConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KafkaBus) DeepCopyInto(out *KafkaBus) { + *out = *in + if in.Exotic != nil { + in, out := &in.Exotic, &out.Exotic + *out = new(KafkaConfig) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KafkaBus. +func (in *KafkaBus) DeepCopy() *KafkaBus { + if in == nil { + return nil + } + out := new(KafkaBus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KafkaConfig) DeepCopyInto(out *KafkaConfig) { + *out = *in + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = new(common.TLSConfig) + (*in).DeepCopyInto(*out) + } + if in.SASL != nil { + in, out := &in.SASL, &out.SASL + *out = new(common.SASLConfig) + (*in).DeepCopyInto(*out) + } + if in.ConsumerGroup != nil { + in, out := &in.ConsumerGroup, &out.ConsumerGroup + *out = new(KafkaConsumerGroup) + **out = **in + } + if in.AccessSecret != nil { + in, out := &in.AccessSecret, &out.AccessSecret + *out = new(v1.SecretKeySelector) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KafkaConfig. +func (in *KafkaConfig) DeepCopy() *KafkaConfig { + if in == nil { + return nil + } + out := new(KafkaConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KafkaConsumerGroup) DeepCopyInto(out *KafkaConsumerGroup) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KafkaConsumerGroup. +func (in *KafkaConsumerGroup) DeepCopy() *KafkaConsumerGroup { + if in == nil { + return nil + } + out := new(KafkaConsumerGroup) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NATSBus) DeepCopyInto(out *NATSBus) { *out = *in