From 6abeb33669306723bb5c7e28f138f4e98b67bc6e Mon Sep 17 00:00:00 2001
From: Saravanan Balasubramanian
<33908564+sarabala1979@users.noreply.github.com>
Date: Thu, 22 Oct 2020 06:09:30 -0700
Subject: [PATCH] feat(calendar): Support catchup on calendar eventsource
closes #897 (#911)
* feat(calendar): Support catchup on calendar eventsource
* codegen
* updated
* Update event_persist.go
* Update start.go
* Update start.go
* Added test
* updated
* Update event_persist_test.go
* updated
* updated
* updated
* addressed comments
* Update start.go
* updated
* Reverted comment event
* Update event_persist.go
* Update event_persist.go
* Fixed codegen and added maxCatchupDuration
* Update calendar.yaml
* Update start.go
* Refactored Spec
* updated
* missed changes
* Addressed Derek Comments
* Update start.go
* Update calendar.yaml
* Update calendar.yaml
* Update start.go
---
api/event-source.html | 137 +
api/event-source.md | 3836 ++++++++++++++++-
api/openapi-spec/swagger.json | 43 +
docs/eventsources/catup.md | 30 +
eventsources/eventing.go | 2 +-
eventsources/persist/event_persist.go | 133 +
eventsources/persist/event_persist_test.go | 73 +
eventsources/sources/calendar/start.go | 185 +-
examples/event-sources/calendar.yaml | 11 +
manifests/install.yaml | 8 +-
manifests/namespace-install.yaml | 8 +-
pkg/apis/eventsource/v1alpha1/generated.pb.go | 1360 ++++--
pkg/apis/eventsource/v1alpha1/generated.proto | 27 +
.../eventsource/v1alpha1/openapi_generated.go | 89 +
pkg/apis/eventsource/v1alpha1/types.go | 27 +
.../v1alpha1/zz_generated.deepcopy.go | 63 +
16 files changed, 5652 insertions(+), 380 deletions(-)
create mode 100644 docs/eventsources/catup.md
create mode 100644 eventsources/persist/event_persist.go
create mode 100644 eventsources/persist/event_persist_test.go
diff --git a/api/event-source.html b/api/event-source.html
index 2b0800e8a5..6954ee96ec 100644
--- a/api/event-source.html
+++ b/api/event-source.html
@@ -291,6 +291,99 @@
CalendarEventSource
Metadata holds the user defined metadata which will passed along the event payload.
+
+
+persistence
+
+
+EventPersistence
+
+
+ |
+
+ Persistence hold the configuration for event persistence
+ |
+
+
+
+CatchupConfiguration
+
+
+(Appears on:
+EventPersistence)
+
+
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+enabled
+
+bool
+
+ |
+
+ Enabled enables to triggered the missed schedule when eventsource restarts
+ |
+
+
+
+maxDuration
+
+string
+
+ |
+
+ MaxDuration holds max catchup duration
+ |
+
+
+
+ConfigMapPersistence
+
+
+(Appears on:
+EventPersistence)
+
+
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+name
+
+string
+
+ |
+
+ Name of the configmap
+ |
+
+
+
+createIfNotExist
+
+bool
+
+ |
+
+ CreateIfNotExist will create configmap if it doesn’t exists
+ |
+
EmitterEventSource
@@ -423,6 +516,50 @@ EmitterEventSource
+EventPersistence
+
+
+(Appears on:
+CalendarEventSource)
+
+
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+catchup
+
+
+CatchupConfiguration
+
+
+ |
+
+ Catchup enables to triggered the missed schedule when eventsource restarts
+ |
+
+
+
+configMap
+
+
+ConfigMapPersistence
+
+
+ |
+
+ ConfigMap holds configmap details for persistence
+ |
+
+
+
EventSource
diff --git a/api/event-source.md b/api/event-source.md
index 537b511b22..789da454d3 100644
--- a/api/event-source.md
+++ b/api/event-source.md
@@ -1,3307 +1,6539 @@
+
Packages:
+
+
+
+
argoproj.io/v1alpha1
+
+
+
+
Package v1alpha1 is the v1alpha1 version of the API.
+
+
+
Resource Types:
+
+
+
AMQPEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
AMQPEventSource refers to an event-source for AMQP stream events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
url string
+
|
+
+
+
URL for rabbitmq service
+
+
|
+
+
+
+
exchangeName string
+
|
+
+
+
ExchangeName is the exchange name For more information, visit
https://www.rabbitmq.com/tutorials/amqp-concepts.html
+
+
|
+
+
+
+
exchangeType string
+
|
+
+
+
ExchangeType is rabbitmq exchange type
+
+
|
+
+
+
+
routingKey string
+
|
+
+
+
Routing key for bindings
+
+
|
+
+
+
+
connectionBackoff
github.com/argoproj/argo-events/pkg/apis/common.Backoff
+
|
+
+
(Optional)
+
+
Backoff holds parameters applied to connection.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the amqp client.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
AzureEventsHubEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
AzureEventsHubEventSource describes the event source for azure events
hub More info at
https://docs.microsoft.com/en-us/azure/event-hubs/
+
+
+
+
+
CalendarEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
CalendarEventSource describes a time based dependency. One of the fields
(schedule, interval, or recurrence) must be passed. Schedule takes
precedence over interval; interval takes precedence over recurrence
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
schedule string
+
|
+
+
+
Schedule is a cron-like expression. For reference, see:
https://en.wikipedia.org/wiki/Cron
+
+
|
+
+
+
+
interval string
+
|
+
+
+
Interval is a string that describes an interval duration, e.g. 1s, 30m,
2h…
+
+
|
+
+
+
+
exclusionDates \[\]string
+
|
+
+
|
+
+
+
+
timezone string
+
|
+
+
(Optional)
+
+
Timezone in which to run the schedule
+
+
|
+
+
+
+
userPayload encoding/json.RawMessage
+
|
+
+
(Optional)
+
+
UserPayload will be sent to sensor as extra data once the event is
triggered Deprecated. Please use Metadata instead.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
+
+persistence
+ EventPersistence
+
+
+ |
+
+
+
+
+
+Persistence hold the configuration for event persistence
+
+
+
+ |
+
+
+
+
+
+
+
+CatchupConfiguration
+
+
+
+
+
+(Appears on:
+EventPersistence)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Field
+
+ |
+
+
+
+Description
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+enabled bool
+
+ |
+
+
+
+
+
+Enabled enables to triggered the missed schedule when eventsource
+restarts
+
+
+
+ |
+
+
+
+
+
+
+
+maxDuration string
+
+ |
+
+
+
+
+
+MaxDuration holds max catchup duration
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+ConfigMapPersistence
+
+
+
+
+
+(Appears on:
+EventPersistence)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Field
+
+ |
+
+
+
+Description
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+name string
+
+ |
+
+
+
+
+
+Name of the configmap
+
+
+
+ |
+
+
+
+
+
+
+
+createIfNotExist bool
+
+ |
+
+
+
+
+
+CreateIfNotExist will create configmap if it doesn’t exists
+
+
+
+ |
+
+
+
+
+
+
+
+
EmitterEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
EmitterEventSource describes the event source for emitter More info at
https://emitter.io/develop/getting-started/
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
broker string
+
|
+
+
+
Broker URI to connect to.
+
+
|
+
+
+
+
channelKey string
+
|
+
+
+
ChannelKey refers to the channel key
+
+
|
+
+
+
+
channelName string
+
|
+
+
+
ChannelName refers to the channel name
+
+
|
+
+
+
+
username
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
Username to use to connect to broker
+
+
|
+
+
+
+
password
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
Password to use to connect to broker
+
+
|
+
+
+
+
connectionBackoff
github.com/argoproj/argo-events/pkg/apis/common.Backoff
+
|
+
+
(Optional)
+
+
Backoff holds parameters applied to connection.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the emitter client.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+EventPersistence
+
+
+
+
+
+(Appears on:
+CalendarEventSource)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Field
+
+ |
+
+
+
+Description
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+catchup
+
+CatchupConfiguration
+
+ |
+
+
+
+
+
+Catchup enables to triggered the missed schedule when eventsource
+restarts
+
+
+
+ |
+
+
+
+
+
+
+
+configMap
+
+ConfigMapPersistence
+
+ |
+
+
+
+
+
+ConfigMap holds configmap details for persistence
+
+
|
+
+
+
+
+
EventSource
+
+
+
+
EventSource is the definition of a eventsource resource
+
+
+
+
+
EventSourceSpec
+
+
+
(Appears on:
EventSource)
+
+
+
+
EventSourceSpec refers to specification of event-source resource
+
+
+
+
+
EventSourceStatus
+
+
+
(Appears on:
EventSource)
+
+
+
+
EventSourceStatus holds the status of the event-source resource
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
Status
github.com/argoproj/argo-events/pkg/apis/common.Status
+
|
+
+
+
(Members of Status are embedded into this type.)
+
+
|
+
+
+
+
+
FileEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
FileEventSource describes an event-source for file related events.
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
eventType string
+
|
+
+
+
Type of file operations to watch Refer
https://github.com/fsnotify/fsnotify/blob/master/fsnotify.go
for more information
+
+
|
+
+
+
+
watchPathConfig
WatchPathConfig
+
|
+
+
+
WatchPathConfig contains configuration about the file path to watch
+
+
|
+
+
+
+
polling bool
+
|
+
+
+
Use polling instead of inotify
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
GenericEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
GenericEventSource refers to a generic event source. It can be used to
implement a custom event source.
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
url string
+
|
+
+
+
URL of the gRPC server that implements the event source.
+
+
|
+
+
+
+
config string
+
|
+
+
+
Config is the event source configuration
+
+
|
+
+
+
+
insecure bool
+
|
+
+
+
Insecure determines the type of connection.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
GithubEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
GithubEventSource refers to event-source for github related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
id int64
+
|
+
+
+
Id is the webhook’s id
+
+
|
+
+
+
+
webhook
WebhookContext
+
|
+
+
+
Webhook refers to the configuration required to run a http server
+
+
|
+
+
+
+
owner string
+
|
+
+
+
Owner refers to GitHub owner name i.e. argoproj
+
+
|
+
+
+
+
repository string
+
|
+
+
+
Repository refers to GitHub repo name i.e. argo-events
+
+
|
+
+
+
+
events \[\]string
+
|
+
+
|
+
+
+
+
apiToken
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
APIToken refers to a K8s secret containing github api token
+
+
|
+
+
+
+
webhookSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
WebhookSecret refers to K8s secret containing GitHub webhook secret
https://developer.github.com/webhooks/securing/
+
+
|
+
+
+
+
insecure bool
+
|
+
+
+
Insecure tls verification
+
+
|
+
+
+
+
active bool
+
|
+
+
(Optional)
+
+
Active refers to status of the webhook for event deliveries.
https://developer.github.com/webhooks/creating/\#active
+
+
|
+
+
+
+
contentType string
+
|
+
+
+
ContentType of the event delivery
+
+
|
+
+
+
+
githubBaseURL string
+
|
+
+
(Optional)
+
+
GitHub base URL (for GitHub Enterprise)
+
+
|
+
+
+
+
githubUploadURL string
+
|
+
+
(Optional)
+
+
GitHub upload URL (for GitHub Enterprise)
+
+
|
+
+
+
+
deleteHookOnFinish bool
+
|
+
+
(Optional)
+
+
DeleteHookOnFinish determines whether to delete the GitHub hook for the
repository once the event source is stopped.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
GitlabEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
GitlabEventSource refers to event-source related to Gitlab events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
webhook
WebhookContext
+
|
+
+
+
Webhook holds configuration to run a http server
+
+
|
+
+
+
+
projectID string
+
|
+
+
+
ProjectID is the id of project for which integration needs to setup
+
+
|
+
+
+
+
events \[\]string
+
|
+
+
+
Events are gitlab event to listen to. Refer
https://github.com/xanzy/go-gitlab/blob/bf34eca5d13a9f4c3f501d8a97b8ac226d55e4d9/projects.go\#L794.
+
+
|
+
+
+
+
accessToken
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
AccessToken is reference to k8 secret which holds the gitlab api access
information
+
+
|
+
+
+
+
enableSSLVerification bool
+
|
+
+
(Optional)
+
+
EnableSSLVerification to enable ssl verification
+
+
|
+
+
+
+
gitlabBaseURL string
+
|
+
+
+
GitlabBaseURL is the base URL for API requests to a custom endpoint
+
+
|
+
+
+
+
deleteHookOnFinish bool
+
|
+
+
(Optional)
+
+
DeleteHookOnFinish determines whether to delete the GitLab hook for the
project once the event source is stopped.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
HDFSEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
HDFSEventSource refers to event-source for HDFS related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
WatchPathConfig
WatchPathConfig
+
|
+
+
+
(Members of WatchPathConfig are embedded into this type.)
+
+
|
+
+
+
+
type string
+
|
+
+
+
Type of file operations to watch
+
+
|
+
+
+
+
checkInterval string
+
|
+
+
+
CheckInterval is a string that describes an interval duration to check
the directory state, e.g. 1s, 30m, 2h… (defaults to 1m)
+
+
|
+
+
+
+
addresses \[\]string
+
|
+
+
|
+
+
+
+
hdfsUser string
+
|
+
+
+
HDFSUser is the user to access HDFS file system. It is ignored if either
ccache or keytab is used.
+
+
|
+
+
+
+
krbCCacheSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
KrbCCacheSecret is the secret selector for Kerberos ccache Either ccache
or keytab can be set to use Kerberos.
+
+
|
+
+
+
+
krbKeytabSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
KrbKeytabSecret is the secret selector for Kerberos keytab Either ccache
or keytab can be set to use Kerberos.
+
+
|
+
+
+
+
krbUsername string
+
|
+
+
+
KrbUsername is the Kerberos username used with Kerberos keytab It must
be set if keytab is used.
+
+
|
+
+
+
+
krbRealm string
+
|
+
+
+
KrbRealm is the Kerberos realm used with Kerberos keytab It must be set
if keytab is used.
+
+
|
+
+
+
+
krbConfigConfigMap
Kubernetes core/v1.ConfigMapKeySelector
+
|
+
+
+
KrbConfig is the configmap selector for Kerberos config as string It
must be set if either ccache or keytab is used.
+
+
|
+
+
+
+
krbServicePrincipalName string
+
|
+
+
+
KrbServicePrincipalName is the principal name of Kerberos service It
must be set if either ccache or keytab is used.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
KafkaConsumerGroup
+
+
+
(Appears on:
KafkaEventSource)
+
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
groupName string
+
|
+
+
+
The name for the consumer group to use
+
+
|
+
+
+
+
oldest 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
+
+
|
+
+
+
+
rebalanceStrategy string
+
|
+
+
(Optional)
+
+
Rebalance strategy can be one of: sticky, roundrobin, range. Range is
the default.
+
+
|
+
+
+
+
+
KafkaEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
KafkaEventSource refers to event-source for Kafka related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
url string
+
|
+
+
+
URL to kafka cluster, multiple URLs separated by comma
+
+
|
+
+
+
+
partition string
+
|
+
+
+
Partition name
+
+
|
+
+
+
+
topic string
+
|
+
+
+
Topic name
+
+
|
+
+
+
+
connectionBackoff
github.com/argoproj/argo-events/pkg/apis/common.Backoff
+
|
+
+
+
Backoff holds parameters applied to connection.
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the kafka client.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
consumerGroup
KafkaConsumerGroup
+
|
+
+
(Optional)
+
+
Consumer group for kafka client
+
+
|
+
+
+
+
limitEventsPerSecond int64
+
|
+
+
(Optional)
+
+
Sets a limit on how many events get read from kafka per second.
+
+
|
+
+
+
+
version string
+
|
+
+
(Optional)
+
+
Specify what kafka version is being connected to enables certain
features in sarama, defaults to 1.0.0
+
+
|
+
+
+
+
+
MQTTEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
MQTTEventSource refers to event-source for MQTT related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
url string
+
|
+
+
+
URL to connect to broker
+
+
|
+
+
+
+
topic string
+
|
+
+
+
Topic name
+
+
|
+
+
+
+
clientId string
+
|
+
+
+
ClientID is the id of the client
+
+
|
+
+
+
+
connectionBackoff
github.com/argoproj/argo-events/pkg/apis/common.Backoff
+
|
+
+
+
ConnectionBackoff holds backoff applied to connection.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the mqtt client.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
NATSEventsSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
NATSEventsSource refers to event-source for NATS related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
url string
+
|
+
+
+
URL to connect to NATS cluster
+
+
|
+
+
+
+
subject string
+
|
+
+
+
Subject holds the name of the subject onto which messages are published
+
+
|
+
+
+
+
connectionBackoff
github.com/argoproj/argo-events/pkg/apis/common.Backoff
+
|
+
+
+
ConnectionBackoff holds backoff applied to connection.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the nats client.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
NSQEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
NSQEventSource describes the event source for NSQ PubSub More info at
https://godoc.org/github.com/nsqio/go-nsq
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
hostAddress string
+
|
+
+
+
HostAddress is the address of the host for NSQ lookup
+
+
|
+
+
+
+
topic string
+
|
+
+
+
Topic to subscribe to.
+
+
|
+
+
+
+
channel string
+
|
+
+
+
Channel used for subscription
+
+
|
+
+
+
+
connectionBackoff
github.com/argoproj/argo-events/pkg/apis/common.Backoff
+
|
+
+
(Optional)
+
+
Backoff holds parameters applied to connection.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the nsq client.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
PubSubEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
PubSubEventSource refers to event-source for GCP PubSub related events.
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
projectID string
+
|
+
+
(Optional)
+
+
ProjectID is GCP project ID for the subscription. Required if you run
Argo Events outside of GKE/GCE. (otherwise, the default value is its
project)
+
+
|
+
+
+
+
topicProjectID string
+
|
+
+
(Optional)
+
+
TopicProjectID is GCP project ID for the topic. By default, it is same
as ProjectID.
+
+
|
+
+
+
+
topic string
+
|
+
+
(Optional)
+
+
Topic to which the subscription should belongs. Required if you want the
eventsource to create a new subscription. If you specify this field
along with an existing subscription, it will be verified whether it
actually belongs to the specified topic.
+
+
|
+
+
+
+
subscriptionID string
+
|
+
+
(Optional)
+
+
SubscriptionID is ID of subscription. Required if you use existing
subscription. The default value will be auto generated hash based on
this eventsource setting, so the subscription might be recreated every
time you update the setting, which has a possibility of event loss.
+
+
|
+
+
+
+
credentialSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
CredentialSecret references to the secret that contains JSON credentials
to access GCP. If it is missing, it implicitly uses Workload Identity to
access.
https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity
+
+
|
+
+
+
+
deleteSubscriptionOnFinish bool
+
|
+
+
(Optional)
+
+
DeleteSubscriptionOnFinish determines whether to delete the GCP PubSub
subscription once the event source is stopped.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
credentialsFile string
+
|
+
+
+
CredentialsFile is the file that contains credentials to authenticate
for GCP Deprecated, use CredentialSecret instead
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
PulsarEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
PulsarEventSource describes the event source for Apache Pulsar
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
topics \[\]string
+
|
+
+
+
Name of the topics to subscribe to.
+
+
|
+
+
+
+
type string
+
|
+
+
(Optional)
+
+
Type of the subscription. Only “exclusive” and “shared” is supported.
Defaults to exclusive.
+
+
|
+
+
+
+
url string
+
|
+
+
+
Configure the service URL for the Pulsar service.
+
+
|
+
+
+
+
tlsTrustCertsSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
Trusted TLS certificate secret.
+
+
|
+
+
+
+
tlsAllowInsecureConnection bool
+
|
+
+
(Optional)
+
+
Whether the Pulsar client accept untrusted TLS certificate from broker.
+
+
|
+
+
+
+
tlsValidateHostname bool
+
|
+
+
(Optional)
+
+
Whether the Pulsar client verify the validity of the host name from
broker.
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the pulsar client.
+
+
|
+
+
+
+
connectionBackoff
github.com/argoproj/argo-events/pkg/apis/common.Backoff
+
|
+
+
(Optional)
+
+
Backoff holds parameters applied to connection.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
RedisEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
RedisEventSource describes an event source for the Redis PubSub. More
info at
https://godoc.org/github.com/go-redis/redis\#example-PubSub
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
hostAddress string
+
|
+
+
+
HostAddress refers to the address of the Redis host/server
+
+
|
+
+
+
+
password
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
Password required for authentication if any.
+
+
|
+
+
+
+
namespace string
+
|
+
+
(Optional)
+
+
Namespace to use to retrieve the password from. It should only be
specified if password is declared
+
+
|
+
+
+
+
db int32
+
|
+
+
(Optional)
+
+
DB to use. If not specified, default DB 0 will be used.
+
+
|
+
+
+
+
channels \[\]string
+
|
+
+
|
+
+
+
+
tls
github.com/argoproj/argo-events/pkg/apis/common.TLSConfig
+
|
+
+
(Optional)
+
+
TLS configuration for the redis client.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
ResourceEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
ResourceEventSource refers to a event-source for K8s resource related
events.
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
namespace string
+
|
+
+
+
Namespace where resource is deployed
+
+
|
+
+
+
+
filter
ResourceFilter
+
|
+
+
(Optional)
+
+
Filter is applied on the metadata of the resource If you apply filter,
then the internal event informer will only monitor objects that pass the
filter.
+
+
|
+
+
+
+
GroupVersionResource
Kubernetes meta/v1.GroupVersionResource
+
|
+
+
+
(Members of GroupVersionResource are embedded into this
type.)
+
+
+
Group of the resource
+
+
|
+
+
+
+
eventTypes
\[\]ResourceEventType
+
|
+
+
+
EventTypes is the list of event type to watch. Possible values are -
ADD, UPDATE and DELETE.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
ResourceEventType (string
alias)
+
+
+
+
(Appears on:
ResourceEventSource)
+
+
+
+
ResourceEventType is the type of event for the K8s resource mutation
+
+
+
+
ResourceFilter
+
+
+
(Appears on:
ResourceEventSource)
+
+
+
+
ResourceFilter contains K8 ObjectMeta information to further filter
resource event objects
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
prefix string
+
|
+
+
(Optional)
+
+
Prefix filter is applied on the resource name.
+
+
|
+
+
+
+
labels
\[\]Selector
+
|
+
+
(Optional)
+
+
Labels provide listing options to K8s API to watch resource/s. Refer
https://kubernetes.io/docs/concepts/overview/working-with-objects/label-selectors/
for more info.
+
+
|
+
+
+
+
fields
\[\]Selector
+
|
+
+
(Optional)
+
+
Fields provide field filters similar to K8s field selector (see
https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/).
Unlike K8s field selector, it supports arbitrary fileds like
“spec.serviceAccountName”, and the value could be a string or a regex.
-Same as K8s field selector, operator “=”, “==” and “!=” are supported.
+Same as K8s field selector, operator “=”, “==” and “\!=” are supported.
+
+
|
+
+
+
+
createdBy
Kubernetes meta/v1.Time
+
|
+
+
(Optional)
+
+
If resource is created before the specified time then the event is
treated as valid.
+
+
|
+
+
+
+
afterStart bool
+
|
+
+
(Optional)
+
+
If the resource is created after the start time then the event is
treated as valid.
+
+
|
+
+
+
+
+
SNSEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
SNSEventSource refers to event-source for AWS SNS related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
webhook
WebhookContext
+
|
+
+
+
Webhook configuration for http server
+
+
|
+
+
+
+
topicArn string
+
|
+
+
+
TopicArn
+
+
|
+
+
+
+
accessKey
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
AccessKey refers K8 secret containing aws access key
+
+
|
+
+
+
+
secretKey
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
SecretKey refers K8 secret containing aws secret key
+
+
|
+
+
+
+
region string
+
|
+
+
+
Region is AWS region
+
+
|
+
+
+
+
roleARN string
+
|
+
+
(Optional)
+
+
RoleARN is the Amazon Resource Name (ARN) of the role to assume.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
SQSEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
SQSEventSource refers to event-source for AWS SQS related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
accessKey
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
AccessKey refers K8 secret containing aws access key
+
+
|
+
+
+
+
secretKey
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
SecretKey refers K8 secret containing aws secret key
+
+
|
+
+
+
+
region string
+
|
+
+
+
Region is AWS region
+
+
|
+
+
+
+
queue string
+
|
+
+
+
Queue is AWS SQS queue to listen to for messages
+
+
|
+
+
+
+
waitTimeSeconds int64
+
|
+
+
+
WaitTimeSeconds is The duration (in seconds) for which the call waits
for a message to arrive in the queue before returning.
+
+
|
+
+
+
+
roleARN string
+
|
+
+
(Optional)
+
+
RoleARN is the Amazon Resource Name (ARN) of the role to assume.
+
+
|
+
+
+
+
jsonBody bool
+
|
+
+
(Optional)
+
+
JSONBody specifies that all event body payload coming from this source
will be JSON
+
+
|
+
+
+
+
queueAccountId string
+
|
+
+
(Optional)
+
+
QueueAccountID is the ID of the account that created the queue to
monitor
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
Selector
+
+
+
(Appears on:
ResourceFilter)
+
+
+
+
Selector represents conditional operation to select K8s objects.
+
+
+
+
+
Service
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
Service holds the service information eventsource exposes
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
ports
\[\]Kubernetes core/v1.ServicePort
+
|
+
+
+
The list of ports that are exposed by this ClusterIP service.
+
+
|
+
+
+
+
clusterIP string
+
|
+
+
(Optional)
+
+
clusterIP is the IP address of the service and is usually assigned
randomly by the master. If an address is specified manually and is not
in use by others, it will be allocated to the service; otherwise,
@@ -3310,530 +6542,1002 @@ updates. Valid values are “None”, empty string (“”), or a valid IP
address. “None” can be specified for headless services when proxying is
not required. More info:
https://kubernetes.io/docs/concepts/services-networking/service/\#virtual-ips-and-service-proxies
+
+
|
+
+
+
+
+
SlackEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
SlackEventSource refers to event-source for Slack related events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
signingSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
Slack App signing secret
+
+
|
+
+
+
+
token
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
Token for URL verification handshake
+
+
|
+
+
+
+
webhook
WebhookContext
+
|
+
+
+
Webhook holds configuration for a REST endpoint
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
StorageGridEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
StorageGridEventSource refers to event-source for StorageGrid related
events
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
webhook
WebhookContext
+
|
+
+
+
Webhook holds configuration for a REST endpoint
+
+
|
+
+
+
+
events \[\]string
+
|
+
+
|
+
+
+
+
filter
StorageGridFilter
+
|
+
+
+
Filter on object key which caused the notification.
+
+
|
+
+
+
+
topicArn string
+
|
+
+
+
TopicArn
+
+
|
+
+
+
+
bucket string
+
|
+
+
+
Name of the bucket to register notifications for.
+
+
|
+
+
+
+
region string
+
|
+
+
(Optional)
+
+
S3 region. Defaults to us-east-1
+
+
|
+
+
+
+
authToken
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
Auth token for storagegrid api
+
+
|
+
+
+
+
apiURL string
+
|
+
+
+
APIURL is the url of the storagegrid api.
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
StorageGridFilter
+
+
+
(Appears on:
StorageGridEventSource)
+
+
+
+
StorageGridFilter represents filters to apply to bucket notifications
for specifying constraints on objects
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
prefix string
+
|
+
+
|
+
+
+
+
suffix string
+
|
+
+
|
+
+
+
+
+
StripeEventSource
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
StripeEventSource describes the event source for stripe webhook
notifications More info at
https://stripe.com/docs/webhooks
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
webhook
WebhookContext
+
|
+
+
+
Webhook holds configuration for a REST endpoint
+
+
|
+
+
+
+
createWebhook bool
+
|
+
+
(Optional)
+
+
CreateWebhook if specified creates a new webhook programmatically.
+
+
|
+
+
+
+
apiKey
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
APIKey refers to K8s secret that holds Stripe API key. Used only if
CreateWebhook is enabled.
+
+
|
+
+
+
+
eventFilter \[\]string
+
|
+
+
(Optional)
+
+
EventFilter describes the type of events to listen to. If not specified,
all types of events will be processed. More info at
https://stripe.com/docs/api/events/list
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
+
Template
+
+
+
(Appears on:
EventSourceSpec)
+
+
+
+
Template holds the information of an EventSource deployment template
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
metadata
github.com/argoproj/argo-events/pkg/apis/common.Metadata
+
|
+
+
+
Metadata sets the pods’s metadata, i.e. annotations and labels
+
+
|
+
+
+
+
serviceAccountName string
+
|
+
+
(Optional)
+
+
ServiceAccountName is the name of the ServiceAccount to use to run event
source pod. More info:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
+
+
|
+
+
+
+
container
Kubernetes core/v1.Container
+
|
+
+
(Optional)
+
+
Container is the main container image to run in the event source pod
+
+
|
+
+
+
+
volumes
\[\]Kubernetes core/v1.Volume
+
|
+
+
(Optional)
+
+
Volumes is a list of volumes that can be mounted by containers in an
eventsource.
+
+
|
+
+
+
+
securityContext
Kubernetes core/v1.PodSecurityContext
+
|
+
+
(Optional)
+
+
SecurityContext holds pod-level security attributes and common container
settings. Optional: Defaults to empty. See type description for default
values of each field.
+
+
|
+
+
+
+
affinity
Kubernetes core/v1.Affinity
+
|
+
+
(Optional)
+
+
If specified, the pod’s scheduling constraints
+
+
|
+
+
+
+
tolerations
\[\]Kubernetes core/v1.Toleration
+
|
+
+
(Optional)
+
+
If specified, the pod’s tolerations.
+
+
|
+
+
+
+
nodeSelector map\[string\]string
+
|
+
+
(Optional)
+
+
NodeSelector is a selector which must be true for the pod to fit on a
node. Selector which must match a node’s labels for the pod to be
scheduled on that node. More info:
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+
+
|
+
+
+
+
+
WatchPathConfig
+
+
+
(Appears on:
FileEventSource,
HDFSEventSource)
+
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
directory string
+
|
+
+
+
Directory to watch for events
+
+
|
+
+
+
+
path string
+
|
+
+
+
Path is relative path of object to watch with respect to the directory
+
+
|
+
+
+
+
pathRegexp string
+
|
+
+
+
PathRegexp is regexp of relative path of object to watch with respect to
the directory
+
+
|
+
+
+
+
+
WebhookContext
+
+
+
(Appears on:
EventSourceSpec,
GithubEventSource,
@@ -3842,139 +7546,265 @@ WebhookContext
SlackEventSource,
StorageGridEventSource,
StripeEventSource)
+
+
+
+
WebhookContext holds a general purpose REST API context
+
+
+
+
+
+
+
Field
+
|
+
+
Description
+
|
+
+
+
+
+
+
endpoint string
+
|
+
+
+
REST API endpoint
+
+
|
+
+
+
+
method string
+
|
+
+
+
Method is HTTP request method that indicates the desired action to be
performed for a given resource. See RFC7231 Hypertext Transfer Protocol
(HTTP/1.1): Semantics and Content
+
+
|
+
+
+
+
port string
+
|
+
+
+
Port on which HTTP server is listening for incoming events.
+
+
|
+
+
+
+
url string
+
|
+
+
+
URL is the url of the server.
+
+
|
+
+
+
+
serverCertSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
ServerCertPath refers the file that contains the cert.
+
+
|
+
+
+
+
serverKeySecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
+
ServerKeyPath refers the file that contains private key
+
+
|
+
+
+
+
metadata map\[string\]string
+
|
+
+
(Optional)
+
+
Metadata holds the user defined metadata which will passed along the
event payload.
+
+
|
+
+
+
+
authSecret
Kubernetes core/v1.SecretKeySelector
+
|
+
+
(Optional)
+
+
AuthSecret holds a secret selector that contains a bearer token for
authentication
+
+
|
+
+
+
+
serverCertPath string
+
|
+
+
+
DeprecatedServerCertPath refers the file that contains the cert.
+
+
|
+
+
+
+
serverKeyPath string
+
|
+
+
+
DeprecatedServerKeyPath refers the file that contains private key
+
+
|
+
+
+
+
+
+
Generated with gen-crd-api-reference-docs
.
+
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index bd5d26d498..01aee0ca0d 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -531,6 +531,10 @@
"type": "string"
}
},
+ "persistence": {
+ "description": "Persistence hold the configuration for event persistence",
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.EventPersistence"
+ },
"schedule": {
"description": "Schedule is a cron-like expression. For reference, see: https://en.wikipedia.org/wiki/Cron",
"type": "string"
@@ -546,6 +550,32 @@
}
}
},
+ "io.argoproj.eventsource.v1alpha1.CatchupConfiguration": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "description": "Enabled enables to triggered the missed schedule when eventsource restarts",
+ "type": "boolean"
+ },
+ "maxDuration": {
+ "description": "MaxDuration holds max catchup duration",
+ "type": "string"
+ }
+ }
+ },
+ "io.argoproj.eventsource.v1alpha1.ConfigMapPersistence": {
+ "type": "object",
+ "properties": {
+ "createIfNotExist": {
+ "description": "CreateIfNotExist will create configmap if it doesn't exists",
+ "type": "boolean"
+ },
+ "name": {
+ "description": "Name of the configmap",
+ "type": "string"
+ }
+ }
+ },
"io.argoproj.eventsource.v1alpha1.EmitterEventSource": {
"description": "EmitterEventSource describes the event source for emitter More info at https://emitter.io/develop/getting-started/",
"type": "object",
@@ -596,6 +626,19 @@
}
}
},
+ "io.argoproj.eventsource.v1alpha1.EventPersistence": {
+ "type": "object",
+ "properties": {
+ "catchup": {
+ "description": "Catchup enables to triggered the missed schedule when eventsource restarts",
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.CatchupConfiguration"
+ },
+ "configMap": {
+ "description": "ConfigMap holds configmap details for persistence",
+ "$ref": "#/definitions/io.argoproj.eventsource.v1alpha1.ConfigMapPersistence"
+ }
+ }
+ },
"io.argoproj.eventsource.v1alpha1.EventSource": {
"description": "EventSource is the definition of a eventsource resource",
"type": "object",
diff --git a/docs/eventsources/catup.md b/docs/eventsources/catup.md
new file mode 100644
index 0000000000..7daea97cc2
--- /dev/null
+++ b/docs/eventsources/catup.md
@@ -0,0 +1,30 @@
+# Calender EventSource - Catchup
+Catchup feature allow Calender eventsources to execute the missed schedules from last run.
+## Enable Catchup forEventSource Definition
+User can configure catchup on each events in eventsource.
+
+```yaml
+ example-with-catchup:
+ # Catchup the missed events from last Event timestamp. last event will be persisted in configmap.
+ schedule: "* * * * *"
+ persistence:
+ catchup:
+ enabled: true # Check missed schedules from last persisted event time on Every start
+ maxDuration: 5m # maximum amount of duration go back for the catchup
+ configMap: # Configmap for persist the last successful event timestamp
+ createIfNotExist: true
+ name: test-configmap
+```
+Last calender event persisted in configured configmap. Multiple event can use the same configmap to persist the events.
+```yaml
+data:
+ calendar.example-with-catchup: '{"eventTime":"2020-10-19 22:50:00.0003192 +0000 UTC m=+683.567066901"}'
+```
+
+## Disable the catchup
+Set `false` to catchup-->enabled element
+
+```yaml
+catchup:
+ enabled: false
+```
\ No newline at end of file
diff --git a/eventsources/eventing.go b/eventsources/eventing.go
index 4f26b0adfb..b74e6f21b5 100644
--- a/eventsources/eventing.go
+++ b/eventsources/eventing.go
@@ -81,7 +81,7 @@ func GetEventingServers(eventSource *v1alpha1.EventSource) map[apicommon.EventSo
if len(eventSource.Spec.Calendar) != 0 {
servers := []EventingServer{}
for k, v := range eventSource.Spec.Calendar {
- servers = append(servers, &calendar.EventListener{EventSourceName: eventSource.Name, EventName: k, CalendarEventSource: v})
+ servers = append(servers, &calendar.EventListener{EventSourceName: eventSource.Name, EventName: k, CalendarEventSource: v, Namespace: eventSource.Namespace})
}
result[apicommon.CalendarEvent] = servers
}
diff --git a/eventsources/persist/event_persist.go b/eventsources/persist/event_persist.go
new file mode 100644
index 0000000000..d7d4afa212
--- /dev/null
+++ b/eventsources/persist/event_persist.go
@@ -0,0 +1,133 @@
+package persist
+
+import (
+ "fmt"
+
+ "github.com/pkg/errors"
+ v1 "k8s.io/api/core/v1"
+ apierr "k8s.io/apimachinery/pkg/api/errors"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/client-go/kubernetes"
+
+ "github.com/argoproj/argo-events/common"
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
+)
+
+type EventPersist interface {
+ Save(event *Event) error
+ Get(key string) (*Event, error)
+ IsEnabled() bool
+}
+
+type Event struct {
+ EventKey string
+ EventPayload string
+}
+
+type ConfigMapPersist struct {
+ kubeClient kubernetes.Interface
+ name string
+ namespace string
+ createIfNotExist bool
+}
+
+func createConfigmap(client kubernetes.Interface, name, namespace string) (*v1.ConfigMap, error) {
+ cm := v1.ConfigMap{}
+ cm.Name = name
+ cm.Namespace = namespace
+ return client.CoreV1().ConfigMaps(namespace).Create(&cm)
+}
+
+func NewConfigMapPersist(client kubernetes.Interface, configmap *v1alpha1.ConfigMapPersistence, namespace string) (EventPersist, error) {
+ if configmap == nil {
+ return nil, fmt.Errorf("persistence configuration is nil")
+ }
+ _, err := client.CoreV1().ConfigMaps(namespace).Get(configmap.Name, metav1.GetOptions{})
+ if err != nil {
+ if apierr.IsNotFound(err) && configmap.CreateIfNotExist {
+ _, err = createConfigmap(client, configmap.Name, namespace)
+ if err != nil {
+ if !apierr.IsAlreadyExists(err) {
+ return nil, err
+ }
+ }
+ } else {
+ return nil, err
+ }
+ }
+ cmp := ConfigMapPersist{
+ kubeClient: client,
+ name: configmap.Name,
+ namespace: namespace,
+ createIfNotExist: configmap.CreateIfNotExist,
+ }
+ return &cmp, nil
+}
+
+func (cmp *ConfigMapPersist) IsEnabled() bool {
+ return true
+}
+
+func (cmp *ConfigMapPersist) Save(event *Event) error {
+ if event == nil {
+ return errors.Errorf("event object is nil")
+ }
+ //Using Connect util func for backoff retry if K8s API returns error
+ err := common.Connect(&common.DefaultRetry, func() error {
+ cm, err := cmp.kubeClient.CoreV1().ConfigMaps(cmp.namespace).Get(cmp.name, metav1.GetOptions{})
+ if err != nil {
+ if apierr.IsNotFound(err) && cmp.createIfNotExist {
+ cm, err = createConfigmap(cmp.kubeClient, cmp.name, cmp.namespace)
+ if err != nil {
+ return err
+ }
+ } else {
+ return err
+ }
+ }
+
+ if len(cm.Data) == 0 {
+ cm.Data = make(map[string]string)
+ }
+
+ cm.Data[event.EventKey] = event.EventPayload
+ _, err = cmp.kubeClient.CoreV1().ConfigMaps(cmp.namespace).Update(cm)
+
+ return err
+ })
+
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (cmp *ConfigMapPersist) Get(key string) (*Event, error) {
+ cm, err := cmp.kubeClient.CoreV1().ConfigMaps(cmp.namespace).Get(cmp.name, metav1.GetOptions{})
+ if err != nil {
+ if apierr.IsNotFound(err) {
+ return nil, nil
+ }
+ return nil, err
+ }
+ payload, exist := cm.Data[key]
+ if !exist {
+ return nil, nil
+ }
+ return &Event{EventKey: key, EventPayload: payload}, nil
+}
+
+type NullPersistence struct {
+}
+
+func (n *NullPersistence) Save(event *Event) error {
+ return nil
+}
+
+func (n *NullPersistence) Get(key string) (*Event, error) {
+ return nil, nil
+}
+
+func (cmp *NullPersistence) IsEnabled() bool {
+ return false
+}
diff --git a/eventsources/persist/event_persist_test.go b/eventsources/persist/event_persist_test.go
new file mode 100644
index 0000000000..1ab11ac90b
--- /dev/null
+++ b/eventsources/persist/event_persist_test.go
@@ -0,0 +1,73 @@
+package persist
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ apierr "k8s.io/apimachinery/pkg/api/errors"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/client-go/kubernetes/fake"
+
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
+)
+
+func TestConfigMapPersist(t *testing.T) {
+ kubeClient := fake.NewSimpleClientset()
+ conf := &v1alpha1.ConfigMapPersistence{
+ Name: "test-config",
+ CreateIfNotExist: true,
+ }
+ cp, err := NewConfigMapPersist(kubeClient, conf, "default")
+ assert.NoError(t, err)
+ assert.True(t, cp.IsEnabled())
+ cm, err := kubeClient.CoreV1().ConfigMaps("default").Get("test-config", v1.GetOptions{})
+ assert.NoError(t, err)
+ assert.NotNil(t, cm)
+ assert.Nil(t, cm.Data)
+
+ t.Run("SaveAndGetEvent", func(t *testing.T) {
+ event := Event{
+ EventKey: "test.test",
+ EventPayload: "{test}",
+ }
+ err = cp.Save(&event)
+ assert.NoError(t, err)
+
+ event1, err := cp.Get("test.test")
+ assert.NoError(t, err)
+ assert.NotNil(t, event1)
+ assert.Equal(t, "test.test", event1.EventKey)
+
+ event1, err = cp.Get("test.test1")
+ assert.NoError(t, err)
+ assert.Nil(t, event1)
+ })
+
+ t.Run("GetWithDeletedMap", func(t *testing.T) {
+ err = kubeClient.CoreV1().ConfigMaps("default").Delete("test-config", &v1.DeleteOptions{})
+ assert.NoError(t, err)
+ event1, err := cp.Get("test.test")
+ assert.NoError(t, err)
+ assert.Nil(t, event1)
+ })
+
+ t.Run("SaveAndGetEventWithDeletedMap", func(t *testing.T) {
+ err = kubeClient.CoreV1().ConfigMaps("default").Delete("test-config", &v1.DeleteOptions{})
+ assert.True(t, apierr.IsNotFound(err))
+ event := Event{
+ EventKey: "test.test",
+ EventPayload: "{test}",
+ }
+ err = cp.Save(&event)
+ assert.NoError(t, err)
+
+ event1, err := cp.Get("test.test")
+ assert.NoError(t, err)
+ assert.NotNil(t, event1)
+ assert.Equal(t, "test.test", event1.EventKey)
+
+ event1, err = cp.Get("test.test1")
+ assert.NoError(t, err)
+ assert.Nil(t, event1)
+ })
+}
diff --git a/eventsources/sources/calendar/start.go b/eventsources/sources/calendar/start.go
index 340d9f04d8..4facfb39c3 100644
--- a/eventsources/sources/calendar/start.go
+++ b/eventsources/sources/calendar/start.go
@@ -19,24 +19,31 @@ package calendar
import (
"context"
"encoding/json"
+ "fmt"
+ "os"
+ "strings"
"time"
- "github.com/pkg/errors"
- cronlib "github.com/robfig/cron"
- "go.uber.org/zap"
-
"github.com/argoproj/argo-events/common"
"github.com/argoproj/argo-events/common/logging"
+ "github.com/argoproj/argo-events/eventsources/persist"
apicommon "github.com/argoproj/argo-events/pkg/apis/common"
"github.com/argoproj/argo-events/pkg/apis/events"
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
+ "github.com/pkg/errors"
+ cronlib "github.com/robfig/cron"
+ "go.uber.org/zap"
+ "k8s.io/client-go/kubernetes"
)
// EventListener implements Eventing for calendar based events
type EventListener struct {
EventSourceName string
EventName string
+ Namespace string
CalendarEventSource v1alpha1.CalendarEventSource
+ log *zap.Logger
+ eventPersistence persist.EventPersist
}
// GetEventSourceName returns name of event source
@@ -54,25 +61,103 @@ func (el *EventListener) GetEventSourceType() apicommon.EventSourceType {
return apicommon.CalendarEvent
}
+// initializePersistence initialize the persistence object.
+// This func can move to eventing.go once we start supporting persistence for all sources.
+func (el *EventListener) initializePersistence(ctx context.Context, persistence *v1alpha1.EventPersistence) error {
+ el.log.Info("Initializing Persistence")
+ if persistence.ConfigMap != nil {
+ kubeConfig, _ := os.LookupEnv(common.EnvVarKubeConfig)
+
+ restConfig, err := common.GetClientConfig(kubeConfig)
+ if err != nil {
+ return errors.Wrapf(err, "failed to get a K8s rest config for the event source %s", el.GetEventName())
+ }
+ kubeClientset, err := kubernetes.NewForConfig(restConfig)
+ if err != nil {
+ return errors.Wrapf(err, "failed to set up a K8s client for the event source %s", el.GetEventName())
+ }
+
+ el.eventPersistence, err = persist.NewConfigMapPersist(kubeClientset, persistence.ConfigMap, el.Namespace)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (el *EventListener) getPersistenceKey() string {
+ return fmt.Sprintf("%s.%s", el.EventSourceName, el.EventName)
+}
+
+// getExecutionTime return starting schedule time for execution
+func (el *EventListener) getExecutionTime() (time.Time, error) {
+ lastT := time.Now()
+ if el.eventPersistence.IsEnabled() && el.CalendarEventSource.Persistence.IsCatchUpEnabled() {
+ lastEvent, err := el.eventPersistence.Get(el.getPersistenceKey())
+ if err != nil {
+ el.log.Error("failed to get last persisted event.", zap.Error(err))
+ return lastT, errors.Wrap(err, "failed to get last persisted event.")
+ }
+ if lastEvent != nil && lastEvent.EventPayload != "" {
+ var eventData events.CalendarEventData
+ err := json.Unmarshal([]byte(lastEvent.EventPayload), &eventData)
+ if err != nil {
+ el.log.Info("failed to marshal last persisted event.", zap.Error(err))
+ return lastT, errors.Wrap(err, "failed to marshal last persisted event.")
+ }
+ eventTime := strings.Split(eventData.EventTime, " m=")
+ lastT, err = time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", eventTime[0])
+ if err != nil {
+ el.log.Error("failed to parse the persisted last event timestamp", zap.Error(err))
+ return lastT, errors.Wrap(err, "failed to parse the persisted last event timestamp.")
+ }
+ }
+
+ if el.CalendarEventSource.Persistence.Catchup.MaxDuration != "" {
+ duration, err := time.ParseDuration(el.CalendarEventSource.Persistence.Catchup.MaxDuration)
+ if err != nil {
+ return lastT, err
+ }
+
+ // Set maxCatchupDuration in execution time if last persisted event time is greater than maxCatchupDuration
+ if duration < time.Since(lastT) {
+ el.log.Info("set execution time", zap.Any("maxDuration", el.CalendarEventSource.Persistence.Catchup.MaxDuration))
+ lastT = time.Now().Add(-duration)
+ }
+ }
+ }
+ return lastT, nil
+}
+
// StartListening starts listening events
func (el *EventListener) StartListening(ctx context.Context, dispatch func([]byte) error) error {
- log := logging.FromContext(ctx).
+ el.log = logging.FromContext(ctx).
With(logging.LabelEventSourceType, el.GetEventSourceType(), logging.LabelEventName, el.GetEventName()).Desugar()
- log.Info("started processing the calendar event source...")
+ el.log.Info("started processing the calendar event source...")
calendarEventSource := &el.CalendarEventSource
- log.Info("resolving calendar schedule...")
+ el.log.Info("resolving calendar schedule...")
schedule, err := resolveSchedule(calendarEventSource)
if err != nil {
return err
}
- log.Info("parsing exclusion dates if any...")
+ el.log.Info("parsing exclusion dates if any...")
exDates, err := common.ParseExclusionDates(calendarEventSource.ExclusionDates)
if err != nil {
return err
}
+ el.eventPersistence = &persist.NullPersistence{}
+ if calendarEventSource.Persistence != nil {
+ err = el.initializePersistence(ctx, calendarEventSource.Persistence)
+ if err != nil {
+ return err
+ }
+ } else {
+ el.log.Info("Persistence disabled")
+ }
+
var next Next
next = func(last time.Time) time.Time {
nextT := schedule.Next(last)
@@ -88,45 +173,89 @@ func (el *EventListener) StartListening(ctx context.Context, dispatch func([]byt
return nextT
}
- lastT := time.Now()
+ lastT, err := el.getExecutionTime()
+ if err != nil {
+ return err
+ }
+
var location *time.Location
if calendarEventSource.Timezone != "" {
- log.Info("loading location for the schedule...", zap.Any("location", calendarEventSource.Timezone))
+ el.log.Info("loading location for the schedule...", zap.Any("location", calendarEventSource.Timezone))
location, err = time.LoadLocation(calendarEventSource.Timezone)
if err != nil {
return errors.Wrapf(err, "failed to load location for event source %s / %s", el.GetEventSourceName(), el.GetEventName())
}
lastT = lastT.In(location)
}
+ sendEventFunc := func(tx time.Time) error {
+ eventData := &events.CalendarEventData{
+ EventTime: tx.String(),
+ UserPayload: calendarEventSource.UserPayload,
+ Metadata: calendarEventSource.Metadata,
+ }
+ payload, err := json.Marshal(eventData)
+ if err != nil {
+ el.log.Error("failed to marshal the event data", zap.Error(err))
+ // no need to continue as further event payloads will suffer same fate as this one.
+ return errors.Wrapf(err, "failed to marshal the event data for event source %s / %s", el.GetEventSourceName(), el.GetEventName())
+ }
+ el.log.Info("dispatching calendar event...")
+ err = dispatch(payload)
+ if err != nil {
+ el.log.Error("failed to dispatch calendar event", zap.Error(err))
+ return errors.Wrapf(err, "failed to dispatch calendar event")
+ }
+ if el.eventPersistence != nil && el.eventPersistence.IsEnabled() {
+ event := persist.Event{EventKey: el.getPersistenceKey(), EventPayload: string(payload)}
+ err = el.eventPersistence.Save(&event)
+ if err != nil {
+ el.log.Error("failed to persist calendar event", zap.Error(err))
+ }
+ }
+ return nil
+ }
+ el.log.Info("Calendar event start time:", zap.Any("Time", lastT.Format(time.RFC822)))
for {
t := next(lastT)
+
+ // Catchup scenario
+ // Trigger the event immediately if the current schedule time is earlier then
+ if time.Now().After(t) {
+ el.log.Info("triggering catchup events", zap.Any(logging.LabelTime, t.UTC().String()))
+ err = sendEventFunc(t)
+ if err != nil {
+ el.log.Error("failed to dispatch calendar event", zap.Error(err))
+ if el.eventPersistence.IsEnabled() {
+ time.Sleep(100 * time.Millisecond)
+ continue
+ }
+ }
+ lastT = t
+ if location != nil {
+ lastT = lastT.In(location)
+ }
+ continue
+ }
+
timer := time.After(time.Until(t))
- log.Info("expected next calendar event", zap.Any(logging.LabelTime, t.UTC().String()))
+ el.log.Info("expected next calendar event", zap.Any(logging.LabelTime, t.UTC().String()))
select {
case tx := <-timer:
+ err = sendEventFunc(tx)
+ if err != nil {
+ el.log.Error("failed to dispatch calendar event", zap.Error(err))
+ if el.eventPersistence.IsEnabled() {
+ time.Sleep(100 * time.Millisecond)
+ continue
+ }
+ }
lastT = tx
if location != nil {
lastT = lastT.In(location)
}
- response := &events.CalendarEventData{
- EventTime: tx.String(),
- UserPayload: calendarEventSource.UserPayload,
- Metadata: calendarEventSource.Metadata,
- }
- payload, err := json.Marshal(response)
- if err != nil {
- log.Error("failed to marshal the event data", zap.Error(err))
- // no need to continue as further event payloads will suffer same fate as this one.
- return errors.Wrapf(err, "failed to marshal the event data for event source %s / %s", el.GetEventSourceName(), el.GetEventName())
- }
- log.Info("dispatching calendar event...")
- err = dispatch(payload)
- if err != nil {
- log.Error("failed to dispatch calendar event", zap.Error(err))
- }
case <-ctx.Done():
- log.Info("exiting calendar event listener...")
+ el.log.Info("exiting calendar event listener...")
return nil
}
}
diff --git a/examples/event-sources/calendar.yaml b/examples/event-sources/calendar.yaml
index 6641eebd49..7f3654527c 100644
--- a/examples/event-sources/calendar.yaml
+++ b/examples/event-sources/calendar.yaml
@@ -8,6 +8,17 @@ spec:
# creates an event every 10 seconds
interval: 10s
+# example-with-catchup:
+# # Catchup the missed events from last Event timestamp. last event will be persisted in configmap.
+# schedule: "* * * * *"
+# persistence:
+# catchup:
+# enabled: true
+# maxDuration: 5m
+# configMap:
+# createIfNotExist: true
+# name: test-configmap
+#
# example-with-schedule:
# # schedules an event at 30 minutes past each hour
# schedule: "30 * * * *"
diff --git a/manifests/install.yaml b/manifests/install.yaml
index 0f7152df05..7df334f08d 100644
--- a/manifests/install.yaml
+++ b/manifests/install.yaml
@@ -301,12 +301,12 @@ spec:
spec:
containers:
- env:
- - name: EVENTSOURCE_IMAGE
- value: argoproj/eventsource:latest
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
+ - name: EVENTSOURCE_IMAGE
+ value: argoproj/eventsource:latest
image: argoproj/eventsource-controller:latest
imagePullPolicy: Always
livenessProbe:
@@ -344,12 +344,12 @@ spec:
spec:
containers:
- env:
- - name: SENSOR_IMAGE
- value: argoproj/sensor:latest
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
+ - name: SENSOR_IMAGE
+ value: argoproj/sensor:latest
image: argoproj/sensor-controller:latest
livenessProbe:
httpGet:
diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml
index b4e52ea7a8..161f58cef3 100644
--- a/manifests/namespace-install.yaml
+++ b/manifests/namespace-install.yaml
@@ -220,12 +220,12 @@ spec:
- args:
- --namespaced
env:
- - name: EVENTSOURCE_IMAGE
- value: argoproj/eventsource:latest
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
+ - name: EVENTSOURCE_IMAGE
+ value: argoproj/eventsource:latest
image: argoproj/eventsource-controller:latest
imagePullPolicy: Always
livenessProbe:
@@ -265,12 +265,12 @@ spec:
- args:
- --namespaced
env:
- - name: SENSOR_IMAGE
- value: argoproj/sensor:latest
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
+ - name: SENSOR_IMAGE
+ value: argoproj/sensor:latest
image: argoproj/sensor-controller:latest
livenessProbe:
httpGet:
diff --git a/pkg/apis/eventsource/v1alpha1/generated.pb.go b/pkg/apis/eventsource/v1alpha1/generated.pb.go
index b1c3ef73b2..f8b1ae4d71 100644
--- a/pkg/apis/eventsource/v1alpha1/generated.pb.go
+++ b/pkg/apis/eventsource/v1alpha1/generated.pb.go
@@ -130,10 +130,66 @@ func (m *CalendarEventSource) XXX_DiscardUnknown() {
var xxx_messageInfo_CalendarEventSource proto.InternalMessageInfo
+func (m *CatchupConfiguration) Reset() { *m = CatchupConfiguration{} }
+func (*CatchupConfiguration) ProtoMessage() {}
+func (*CatchupConfiguration) Descriptor() ([]byte, []int) {
+ return fileDescriptor_c9ac5d6cd016403b, []int{3}
+}
+func (m *CatchupConfiguration) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *CatchupConfiguration) 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 *CatchupConfiguration) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_CatchupConfiguration.Merge(m, src)
+}
+func (m *CatchupConfiguration) XXX_Size() int {
+ return m.Size()
+}
+func (m *CatchupConfiguration) XXX_DiscardUnknown() {
+ xxx_messageInfo_CatchupConfiguration.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CatchupConfiguration proto.InternalMessageInfo
+
+func (m *ConfigMapPersistence) Reset() { *m = ConfigMapPersistence{} }
+func (*ConfigMapPersistence) ProtoMessage() {}
+func (*ConfigMapPersistence) Descriptor() ([]byte, []int) {
+ return fileDescriptor_c9ac5d6cd016403b, []int{4}
+}
+func (m *ConfigMapPersistence) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *ConfigMapPersistence) 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 *ConfigMapPersistence) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ConfigMapPersistence.Merge(m, src)
+}
+func (m *ConfigMapPersistence) XXX_Size() int {
+ return m.Size()
+}
+func (m *ConfigMapPersistence) XXX_DiscardUnknown() {
+ xxx_messageInfo_ConfigMapPersistence.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConfigMapPersistence proto.InternalMessageInfo
+
func (m *EmitterEventSource) Reset() { *m = EmitterEventSource{} }
func (*EmitterEventSource) ProtoMessage() {}
func (*EmitterEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{3}
+ return fileDescriptor_c9ac5d6cd016403b, []int{5}
}
func (m *EmitterEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -158,10 +214,38 @@ func (m *EmitterEventSource) XXX_DiscardUnknown() {
var xxx_messageInfo_EmitterEventSource proto.InternalMessageInfo
+func (m *EventPersistence) Reset() { *m = EventPersistence{} }
+func (*EventPersistence) ProtoMessage() {}
+func (*EventPersistence) Descriptor() ([]byte, []int) {
+ return fileDescriptor_c9ac5d6cd016403b, []int{6}
+}
+func (m *EventPersistence) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *EventPersistence) 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 *EventPersistence) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EventPersistence.Merge(m, src)
+}
+func (m *EventPersistence) XXX_Size() int {
+ return m.Size()
+}
+func (m *EventPersistence) XXX_DiscardUnknown() {
+ xxx_messageInfo_EventPersistence.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EventPersistence proto.InternalMessageInfo
+
func (m *EventSource) Reset() { *m = EventSource{} }
func (*EventSource) ProtoMessage() {}
func (*EventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{4}
+ return fileDescriptor_c9ac5d6cd016403b, []int{7}
}
func (m *EventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -189,7 +273,7 @@ var xxx_messageInfo_EventSource proto.InternalMessageInfo
func (m *EventSourceList) Reset() { *m = EventSourceList{} }
func (*EventSourceList) ProtoMessage() {}
func (*EventSourceList) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{5}
+ return fileDescriptor_c9ac5d6cd016403b, []int{8}
}
func (m *EventSourceList) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -217,7 +301,7 @@ var xxx_messageInfo_EventSourceList proto.InternalMessageInfo
func (m *EventSourceSpec) Reset() { *m = EventSourceSpec{} }
func (*EventSourceSpec) ProtoMessage() {}
func (*EventSourceSpec) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{6}
+ return fileDescriptor_c9ac5d6cd016403b, []int{9}
}
func (m *EventSourceSpec) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -245,7 +329,7 @@ var xxx_messageInfo_EventSourceSpec proto.InternalMessageInfo
func (m *EventSourceStatus) Reset() { *m = EventSourceStatus{} }
func (*EventSourceStatus) ProtoMessage() {}
func (*EventSourceStatus) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{7}
+ return fileDescriptor_c9ac5d6cd016403b, []int{10}
}
func (m *EventSourceStatus) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -273,7 +357,7 @@ var xxx_messageInfo_EventSourceStatus proto.InternalMessageInfo
func (m *FileEventSource) Reset() { *m = FileEventSource{} }
func (*FileEventSource) ProtoMessage() {}
func (*FileEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{8}
+ return fileDescriptor_c9ac5d6cd016403b, []int{11}
}
func (m *FileEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -301,7 +385,7 @@ var xxx_messageInfo_FileEventSource proto.InternalMessageInfo
func (m *GenericEventSource) Reset() { *m = GenericEventSource{} }
func (*GenericEventSource) ProtoMessage() {}
func (*GenericEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{9}
+ return fileDescriptor_c9ac5d6cd016403b, []int{12}
}
func (m *GenericEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -329,7 +413,7 @@ var xxx_messageInfo_GenericEventSource proto.InternalMessageInfo
func (m *GithubEventSource) Reset() { *m = GithubEventSource{} }
func (*GithubEventSource) ProtoMessage() {}
func (*GithubEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{10}
+ return fileDescriptor_c9ac5d6cd016403b, []int{13}
}
func (m *GithubEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -357,7 +441,7 @@ var xxx_messageInfo_GithubEventSource proto.InternalMessageInfo
func (m *GitlabEventSource) Reset() { *m = GitlabEventSource{} }
func (*GitlabEventSource) ProtoMessage() {}
func (*GitlabEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{11}
+ return fileDescriptor_c9ac5d6cd016403b, []int{14}
}
func (m *GitlabEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -385,7 +469,7 @@ var xxx_messageInfo_GitlabEventSource proto.InternalMessageInfo
func (m *HDFSEventSource) Reset() { *m = HDFSEventSource{} }
func (*HDFSEventSource) ProtoMessage() {}
func (*HDFSEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{12}
+ return fileDescriptor_c9ac5d6cd016403b, []int{15}
}
func (m *HDFSEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -413,7 +497,7 @@ var xxx_messageInfo_HDFSEventSource proto.InternalMessageInfo
func (m *KafkaConsumerGroup) Reset() { *m = KafkaConsumerGroup{} }
func (*KafkaConsumerGroup) ProtoMessage() {}
func (*KafkaConsumerGroup) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{13}
+ return fileDescriptor_c9ac5d6cd016403b, []int{16}
}
func (m *KafkaConsumerGroup) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -441,7 +525,7 @@ var xxx_messageInfo_KafkaConsumerGroup proto.InternalMessageInfo
func (m *KafkaEventSource) Reset() { *m = KafkaEventSource{} }
func (*KafkaEventSource) ProtoMessage() {}
func (*KafkaEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{14}
+ return fileDescriptor_c9ac5d6cd016403b, []int{17}
}
func (m *KafkaEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -469,7 +553,7 @@ var xxx_messageInfo_KafkaEventSource proto.InternalMessageInfo
func (m *MQTTEventSource) Reset() { *m = MQTTEventSource{} }
func (*MQTTEventSource) ProtoMessage() {}
func (*MQTTEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{15}
+ return fileDescriptor_c9ac5d6cd016403b, []int{18}
}
func (m *MQTTEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -497,7 +581,7 @@ var xxx_messageInfo_MQTTEventSource proto.InternalMessageInfo
func (m *NATSEventsSource) Reset() { *m = NATSEventsSource{} }
func (*NATSEventsSource) ProtoMessage() {}
func (*NATSEventsSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{16}
+ return fileDescriptor_c9ac5d6cd016403b, []int{19}
}
func (m *NATSEventsSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -525,7 +609,7 @@ var xxx_messageInfo_NATSEventsSource proto.InternalMessageInfo
func (m *NSQEventSource) Reset() { *m = NSQEventSource{} }
func (*NSQEventSource) ProtoMessage() {}
func (*NSQEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{17}
+ return fileDescriptor_c9ac5d6cd016403b, []int{20}
}
func (m *NSQEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -553,7 +637,7 @@ var xxx_messageInfo_NSQEventSource proto.InternalMessageInfo
func (m *PubSubEventSource) Reset() { *m = PubSubEventSource{} }
func (*PubSubEventSource) ProtoMessage() {}
func (*PubSubEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{18}
+ return fileDescriptor_c9ac5d6cd016403b, []int{21}
}
func (m *PubSubEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -581,7 +665,7 @@ var xxx_messageInfo_PubSubEventSource proto.InternalMessageInfo
func (m *PulsarEventSource) Reset() { *m = PulsarEventSource{} }
func (*PulsarEventSource) ProtoMessage() {}
func (*PulsarEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{19}
+ return fileDescriptor_c9ac5d6cd016403b, []int{22}
}
func (m *PulsarEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -609,7 +693,7 @@ var xxx_messageInfo_PulsarEventSource proto.InternalMessageInfo
func (m *RedisEventSource) Reset() { *m = RedisEventSource{} }
func (*RedisEventSource) ProtoMessage() {}
func (*RedisEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{20}
+ return fileDescriptor_c9ac5d6cd016403b, []int{23}
}
func (m *RedisEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -637,7 +721,7 @@ var xxx_messageInfo_RedisEventSource proto.InternalMessageInfo
func (m *ResourceEventSource) Reset() { *m = ResourceEventSource{} }
func (*ResourceEventSource) ProtoMessage() {}
func (*ResourceEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{21}
+ return fileDescriptor_c9ac5d6cd016403b, []int{24}
}
func (m *ResourceEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -665,7 +749,7 @@ var xxx_messageInfo_ResourceEventSource proto.InternalMessageInfo
func (m *ResourceFilter) Reset() { *m = ResourceFilter{} }
func (*ResourceFilter) ProtoMessage() {}
func (*ResourceFilter) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{22}
+ return fileDescriptor_c9ac5d6cd016403b, []int{25}
}
func (m *ResourceFilter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -693,7 +777,7 @@ var xxx_messageInfo_ResourceFilter proto.InternalMessageInfo
func (m *SNSEventSource) Reset() { *m = SNSEventSource{} }
func (*SNSEventSource) ProtoMessage() {}
func (*SNSEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{23}
+ return fileDescriptor_c9ac5d6cd016403b, []int{26}
}
func (m *SNSEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -721,7 +805,7 @@ var xxx_messageInfo_SNSEventSource proto.InternalMessageInfo
func (m *SQSEventSource) Reset() { *m = SQSEventSource{} }
func (*SQSEventSource) ProtoMessage() {}
func (*SQSEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{24}
+ return fileDescriptor_c9ac5d6cd016403b, []int{27}
}
func (m *SQSEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -749,7 +833,7 @@ var xxx_messageInfo_SQSEventSource proto.InternalMessageInfo
func (m *Selector) Reset() { *m = Selector{} }
func (*Selector) ProtoMessage() {}
func (*Selector) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{25}
+ return fileDescriptor_c9ac5d6cd016403b, []int{28}
}
func (m *Selector) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -777,7 +861,7 @@ var xxx_messageInfo_Selector proto.InternalMessageInfo
func (m *Service) Reset() { *m = Service{} }
func (*Service) ProtoMessage() {}
func (*Service) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{26}
+ return fileDescriptor_c9ac5d6cd016403b, []int{29}
}
func (m *Service) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -805,7 +889,7 @@ var xxx_messageInfo_Service proto.InternalMessageInfo
func (m *SlackEventSource) Reset() { *m = SlackEventSource{} }
func (*SlackEventSource) ProtoMessage() {}
func (*SlackEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{27}
+ return fileDescriptor_c9ac5d6cd016403b, []int{30}
}
func (m *SlackEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -833,7 +917,7 @@ var xxx_messageInfo_SlackEventSource proto.InternalMessageInfo
func (m *StorageGridEventSource) Reset() { *m = StorageGridEventSource{} }
func (*StorageGridEventSource) ProtoMessage() {}
func (*StorageGridEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{28}
+ return fileDescriptor_c9ac5d6cd016403b, []int{31}
}
func (m *StorageGridEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -861,7 +945,7 @@ var xxx_messageInfo_StorageGridEventSource proto.InternalMessageInfo
func (m *StorageGridFilter) Reset() { *m = StorageGridFilter{} }
func (*StorageGridFilter) ProtoMessage() {}
func (*StorageGridFilter) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{29}
+ return fileDescriptor_c9ac5d6cd016403b, []int{32}
}
func (m *StorageGridFilter) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -889,7 +973,7 @@ var xxx_messageInfo_StorageGridFilter proto.InternalMessageInfo
func (m *StripeEventSource) Reset() { *m = StripeEventSource{} }
func (*StripeEventSource) ProtoMessage() {}
func (*StripeEventSource) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{30}
+ return fileDescriptor_c9ac5d6cd016403b, []int{33}
}
func (m *StripeEventSource) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -917,7 +1001,7 @@ var xxx_messageInfo_StripeEventSource proto.InternalMessageInfo
func (m *Template) Reset() { *m = Template{} }
func (*Template) ProtoMessage() {}
func (*Template) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{31}
+ return fileDescriptor_c9ac5d6cd016403b, []int{34}
}
func (m *Template) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -945,7 +1029,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo
func (m *WatchPathConfig) Reset() { *m = WatchPathConfig{} }
func (*WatchPathConfig) ProtoMessage() {}
func (*WatchPathConfig) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{32}
+ return fileDescriptor_c9ac5d6cd016403b, []int{35}
}
func (m *WatchPathConfig) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -973,7 +1057,7 @@ var xxx_messageInfo_WatchPathConfig proto.InternalMessageInfo
func (m *WebhookContext) Reset() { *m = WebhookContext{} }
func (*WebhookContext) ProtoMessage() {}
func (*WebhookContext) Descriptor() ([]byte, []int) {
- return fileDescriptor_c9ac5d6cd016403b, []int{33}
+ return fileDescriptor_c9ac5d6cd016403b, []int{36}
}
func (m *WebhookContext) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@@ -1005,8 +1089,11 @@ func init() {
proto.RegisterMapType((map[string]string)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.AzureEventsHubEventSource.MetadataEntry")
proto.RegisterType((*CalendarEventSource)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.CalendarEventSource")
proto.RegisterMapType((map[string]string)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.CalendarEventSource.MetadataEntry")
+ proto.RegisterType((*CatchupConfiguration)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.CatchupConfiguration")
+ proto.RegisterType((*ConfigMapPersistence)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.ConfigMapPersistence")
proto.RegisterType((*EmitterEventSource)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EmitterEventSource")
proto.RegisterMapType((map[string]string)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EmitterEventSource.MetadataEntry")
+ proto.RegisterType((*EventPersistence)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventPersistence")
proto.RegisterType((*EventSource)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSource")
proto.RegisterType((*EventSourceList)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceList")
proto.RegisterType((*EventSourceSpec)(nil), "github.aaakk.us.kg.argoproj.argo_events.pkg.apis.eventsource.v1alpha1.EventSourceSpec")
@@ -1088,311 +1175,323 @@ func init() {
}
var fileDescriptor_c9ac5d6cd016403b = []byte{
- // 4856 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3c, 0x4b, 0x6f, 0x23, 0x47,
- 0x7a, 0xa6, 0x48, 0x51, 0xd4, 0x47, 0x3d, 0x6b, 0xc6, 0x36, 0xad, 0x5d, 0x8f, 0x26, 0x32, 0x76,
- 0x30, 0x93, 0xf5, 0x52, 0xf1, 0x24, 0x9b, 0x38, 0x36, 0xe2, 0x85, 0x28, 0x69, 0x34, 0x63, 0x3d,
- 0x46, 0xfa, 0x28, 0xf9, 0xb1, 0x7e, 0x6d, 0xb3, 0x59, 0x24, 0xdb, 0x6c, 0x76, 0x53, 0xdd, 0xc5,
- 0x99, 0x91, 0x81, 0x24, 0x8b, 0x20, 0xaf, 0x8d, 0xe3, 0x64, 0x17, 0xd9, 0x04, 0x41, 0x72, 0xcb,
- 0x21, 0x0b, 0x24, 0xc7, 0x00, 0xf9, 0x0d, 0x06, 0x72, 0xd9, 0xdc, 0x16, 0x08, 0x20, 0xd8, 0x4a,
- 0x90, 0x5b, 0x4e, 0xb9, 0x2c, 0x36, 0x08, 0x10, 0xd4, 0xa3, 0xab, 0x1f, 0x6c, 0xcd, 0x88, 0x16,
- 0xc9, 0xb9, 0xe4, 0x32, 0x23, 0x7e, 0xef, 0xae, 0xfa, 0xbe, 0xfa, 0xea, 0xab, 0xfa, 0xba, 0x61,
- 0xb7, 0x69, 0xb1, 0x56, 0xaf, 0x56, 0x36, 0xdd, 0xce, 0xaa, 0xe1, 0x35, 0xdd, 0xae, 0xe7, 0x7e,
- 0x2c, 0xfe, 0xf8, 0x16, 0x7d, 0x40, 0x1d, 0xe6, 0xaf, 0x76, 0xdb, 0xcd, 0x55, 0xa3, 0x6b, 0xf9,
- 0xab, 0xf2, 0xb7, 0xdb, 0xf3, 0x4c, 0xba, 0xfa, 0xe0, 0x15, 0xc3, 0xee, 0xb6, 0x8c, 0x57, 0x56,
- 0x9b, 0xd4, 0xa1, 0x9e, 0xc1, 0x68, 0xbd, 0xdc, 0xf5, 0x5c, 0xe6, 0x92, 0xdf, 0x0a, 0xc5, 0x95,
- 0x03, 0x71, 0xe2, 0x8f, 0x8f, 0x24, 0x7b, 0xb9, 0xdb, 0x6e, 0x96, 0xb9, 0xb8, 0x72, 0x44, 0x5c,
- 0x39, 0x10, 0xb7, 0xf4, 0x9d, 0x0b, 0x5b, 0x63, 0xba, 0x9d, 0x8e, 0xeb, 0x24, 0xf5, 0x2f, 0x7d,
- 0x2b, 0x22, 0xa0, 0xe9, 0x36, 0xdd, 0x55, 0x01, 0xae, 0xf5, 0x1a, 0xe2, 0x97, 0xf8, 0x21, 0xfe,
- 0x52, 0xe4, 0x2b, 0xed, 0x57, 0xfd, 0xb2, 0xe5, 0x72, 0x91, 0xab, 0xa6, 0xeb, 0xf1, 0x07, 0xeb,
- 0x13, 0xf9, 0x6b, 0x21, 0x4d, 0xc7, 0x30, 0x5b, 0x96, 0x43, 0xbd, 0x93, 0xd0, 0x8e, 0x0e, 0x65,
- 0x46, 0x1a, 0xd7, 0xea, 0x79, 0x5c, 0x5e, 0xcf, 0x61, 0x56, 0x87, 0xf6, 0x31, 0xfc, 0xfa, 0x93,
- 0x18, 0x7c, 0xb3, 0x45, 0x3b, 0x46, 0x92, 0x6f, 0xe5, 0xef, 0x27, 0x61, 0x7e, 0x6d, 0xf7, 0x60,
- 0x7f, 0x93, 0x0f, 0x50, 0x55, 0x8c, 0x27, 0x79, 0x11, 0xb2, 0x3d, 0xcf, 0x2e, 0x65, 0xae, 0x67,
- 0x6e, 0x4e, 0x57, 0x8a, 0x9f, 0x9f, 0x2e, 0x3f, 0x73, 0x76, 0xba, 0x9c, 0x3d, 0xc2, 0x1d, 0xe4,
- 0x70, 0xf2, 0x2a, 0xcc, 0xd0, 0x47, 0x66, 0xcb, 0x70, 0x9a, 0x74, 0xcf, 0xe8, 0xd0, 0xd2, 0x84,
- 0xa0, 0xbb, 0xaa, 0xe8, 0x66, 0x36, 0x23, 0x38, 0x8c, 0x51, 0x46, 0x39, 0x0f, 0x4f, 0xba, 0xb4,
- 0x94, 0x4d, 0xe7, 0xe4, 0x38, 0x8c, 0x51, 0x92, 0xdb, 0x00, 0x9e, 0xdb, 0x63, 0x96, 0xd3, 0xdc,
- 0xa6, 0x27, 0xa5, 0x9c, 0xe0, 0x23, 0x8a, 0x0f, 0x50, 0x63, 0x30, 0x42, 0x45, 0x7e, 0x1b, 0x16,
- 0x4d, 0xd7, 0x71, 0xa8, 0xc9, 0x2c, 0xd7, 0xa9, 0x18, 0x66, 0xdb, 0x6d, 0x34, 0x4a, 0x93, 0xd7,
- 0x33, 0x37, 0x8b, 0xb7, 0x5f, 0x2d, 0x5f, 0xd8, 0xd1, 0xa4, 0xa7, 0x94, 0x15, 0x7f, 0xe5, 0xd9,
- 0xb3, 0xd3, 0xe5, 0xc5, 0xf5, 0xa4, 0x58, 0xec, 0xd7, 0x44, 0x5e, 0x86, 0xc2, 0xc7, 0xbe, 0xeb,
- 0x54, 0xdc, 0xfa, 0x49, 0x29, 0x7f, 0x3d, 0x73, 0xb3, 0x50, 0x59, 0x50, 0x06, 0x17, 0xde, 0xac,
- 0xde, 0xdf, 0xe3, 0x70, 0xd4, 0x14, 0xe4, 0x08, 0xb2, 0xcc, 0xf6, 0x4b, 0x53, 0xc2, 0xbc, 0xd7,
- 0x06, 0x36, 0xef, 0x70, 0xa7, 0xba, 0xee, 0x3a, 0x0d, 0xab, 0x59, 0x99, 0xe2, 0x73, 0x75, 0xb8,
- 0x53, 0x45, 0x2e, 0x8f, 0xfc, 0x49, 0x06, 0x0a, 0xdc, 0xc7, 0xea, 0x06, 0x33, 0x4a, 0x85, 0xeb,
- 0xd9, 0x9b, 0xc5, 0xdb, 0xef, 0x97, 0x2f, 0x15, 0x64, 0xe5, 0x84, 0xb7, 0x94, 0x77, 0x95, 0xf8,
- 0x4d, 0x87, 0x79, 0x27, 0xe1, 0x33, 0x06, 0x60, 0xd4, 0xfa, 0x97, 0x5e, 0x87, 0xd9, 0x18, 0x31,
- 0x59, 0x80, 0x6c, 0x9b, 0x9e, 0x48, 0x47, 0x43, 0xfe, 0x27, 0xb9, 0x0a, 0x93, 0x0f, 0x0c, 0xbb,
- 0xa7, 0x9c, 0x0a, 0xe5, 0x8f, 0xd7, 0x26, 0x5e, 0xcd, 0xac, 0xfc, 0x38, 0x07, 0x2f, 0xac, 0x7d,
- 0xd2, 0xf3, 0xa8, 0xd0, 0xed, 0xdf, 0xed, 0xd5, 0xa2, 0x2e, 0x7b, 0x1d, 0x72, 0x8d, 0xe3, 0xba,
- 0xa3, 0x7c, 0x76, 0x46, 0x19, 0x91, 0xbb, 0x73, 0xb0, 0xb1, 0x87, 0x02, 0x43, 0xba, 0x70, 0xc5,
- 0x6f, 0x19, 0x1e, 0xad, 0xaf, 0x99, 0x26, 0xf5, 0xfd, 0x6d, 0x7a, 0xa2, 0x9d, 0xb7, 0x78, 0xfb,
- 0x1b, 0x65, 0x19, 0x3e, 0xfc, 0xb1, 0xcb, 0x3c, 0x92, 0xcb, 0x0f, 0x5e, 0x29, 0x57, 0xa9, 0xe9,
- 0x51, 0xb6, 0x4d, 0x4f, 0xaa, 0xd4, 0xa6, 0x26, 0x73, 0xbd, 0xca, 0xf3, 0x67, 0xa7, 0xcb, 0x57,
- 0xaa, 0xfd, 0x52, 0x30, 0x4d, 0x34, 0xa9, 0xc3, 0x7c, 0x02, 0x2c, 0x1c, 0xfe, 0xc2, 0xda, 0xae,
- 0x9c, 0x9d, 0x2e, 0xcf, 0x27, 0xb4, 0x61, 0x52, 0x24, 0xb9, 0x05, 0x53, 0xad, 0x5e, 0x4d, 0x3c,
- 0x8b, 0x0c, 0x8b, 0x79, 0xf5, 0xf0, 0x53, 0x77, 0x25, 0x18, 0x03, 0x3c, 0xf9, 0x71, 0xd4, 0x19,
- 0x26, 0x85, 0x33, 0x34, 0x2e, 0xeb, 0x0c, 0xe7, 0xcd, 0xc8, 0xb8, 0xdc, 0xe2, 0xe7, 0x59, 0xb8,
- 0xb2, 0x6e, 0xd8, 0xd4, 0xa9, 0x1b, 0x5e, 0xd4, 0x21, 0x5e, 0x86, 0x02, 0x5f, 0xf1, 0xea, 0x3d,
- 0x9b, 0x2a, 0xa7, 0xd0, 0x26, 0x54, 0x15, 0x1c, 0x35, 0x05, 0xa7, 0xb6, 0x1c, 0x46, 0xbd, 0x07,
- 0x86, 0xad, 0x96, 0x33, 0x4d, 0x7d, 0x4f, 0xc1, 0x51, 0x53, 0x90, 0xd7, 0x60, 0x8e, 0x3e, 0x32,
- 0xed, 0x9e, 0x6f, 0xb9, 0xce, 0x86, 0xc1, 0xa8, 0x5f, 0xca, 0x5e, 0xcf, 0xf2, 0x05, 0xe9, 0xec,
- 0x74, 0x79, 0x6e, 0x33, 0x86, 0xc1, 0x04, 0x25, 0xd7, 0xc4, 0x97, 0xe3, 0x4f, 0x5c, 0x27, 0x98,
- 0x2f, 0xad, 0xe9, 0x50, 0xc1, 0x51, 0x53, 0x90, 0x5d, 0x28, 0xf6, 0x7c, 0xea, 0xed, 0x1b, 0x27,
- 0xb6, 0x6b, 0xd4, 0xc5, 0xe2, 0x35, 0x53, 0xf9, 0xe6, 0xd9, 0xe9, 0x72, 0xf1, 0x28, 0x04, 0xff,
- 0xe2, 0x74, 0xb9, 0x44, 0x1d, 0xd3, 0xad, 0x5b, 0x4e, 0x73, 0x95, 0x2f, 0x28, 0x65, 0x34, 0x1e,
- 0xee, 0x52, 0xdf, 0x37, 0x9a, 0x14, 0xa3, 0xfc, 0xe4, 0xcf, 0xa2, 0x0e, 0x90, 0x17, 0x0e, 0xf0,
- 0xbd, 0x4b, 0x3a, 0x40, 0xca, 0xd8, 0x8f, 0x6b, 0xea, 0xff, 0x26, 0x0f, 0x64, 0xb3, 0x63, 0x31,
- 0x46, 0x63, 0x33, 0x7f, 0x03, 0xf2, 0x35, 0xcf, 0x6d, 0x53, 0x4f, 0xcd, 0xfb, 0x9c, 0xd2, 0x9f,
- 0xaf, 0x08, 0x28, 0x2a, 0x2c, 0x4f, 0x29, 0x3c, 0xc1, 0x38, 0xd4, 0xe6, 0x91, 0x39, 0x11, 0x4f,
- 0x29, 0xeb, 0x1a, 0x83, 0x11, 0x2a, 0xf2, 0x6d, 0x28, 0xaa, 0x5f, 0x22, 0xe0, 0x64, 0xfe, 0xba,
- 0xa2, 0x98, 0x8a, 0xeb, 0x21, 0x0a, 0xa3, 0x74, 0xe4, 0x3e, 0x14, 0xf8, 0x34, 0x38, 0x41, 0x90,
- 0x5e, 0x78, 0x09, 0x98, 0xe1, 0xe3, 0x76, 0xa4, 0x58, 0x51, 0x0b, 0xe1, 0x02, 0xbb, 0x86, 0xef,
- 0x3f, 0x74, 0xbd, 0xba, 0xca, 0x68, 0x83, 0x08, 0xdc, 0x57, 0xac, 0xa8, 0x85, 0xa4, 0xe7, 0xca,
- 0xfc, 0x53, 0xc9, 0x95, 0x53, 0x17, 0xcd, 0x95, 0x85, 0x21, 0xe7, 0xca, 0xcf, 0xa2, 0xd1, 0x31,
- 0x2d, 0xa2, 0xe3, 0xa3, 0x4b, 0x46, 0x47, 0xbf, 0x7b, 0x8e, 0x2b, 0x38, 0xfe, 0x6d, 0x02, 0x8a,
- 0xd1, 0xa8, 0xf8, 0x5e, 0xe4, 0xd9, 0x32, 0x62, 0xe0, 0x7e, 0x25, 0xe2, 0x31, 0x7a, 0xcb, 0x18,
- 0x3e, 0x0f, 0xa7, 0xe6, 0x3e, 0x74, 0xbf, 0xf6, 0x31, 0x35, 0x19, 0x37, 0x24, 0x8c, 0x8e, 0x10,
- 0x16, 0x9a, 0x4b, 0xba, 0x90, 0xf3, 0xbb, 0xd4, 0x54, 0x19, 0x75, 0xef, 0xb2, 0x23, 0x17, 0xda,
- 0x5e, 0xed, 0x52, 0x33, 0x4c, 0xe9, 0xfc, 0x17, 0x0a, 0x4d, 0xe4, 0x11, 0xe4, 0x7d, 0x66, 0xb0,
- 0x9e, 0xaf, 0xf2, 0xea, 0xfe, 0x10, 0x75, 0x0a, 0xb9, 0xe1, 0xda, 0x21, 0x7f, 0xa3, 0xd2, 0xb7,
- 0xf2, 0x45, 0x06, 0xe6, 0x23, 0xd4, 0x3b, 0x96, 0xcf, 0xc8, 0xfb, 0x7d, 0x23, 0x5c, 0xbe, 0xd8,
- 0x08, 0x73, 0x6e, 0x31, 0xbe, 0xda, 0x19, 0x02, 0x48, 0x64, 0x74, 0x5d, 0x98, 0xb4, 0x18, 0xed,
- 0xf8, 0xa5, 0x09, 0xe1, 0x98, 0x6f, 0x0e, 0xef, 0x51, 0x2b, 0xb3, 0x4a, 0xed, 0xe4, 0x3d, 0xae,
- 0x00, 0xa5, 0x9e, 0x95, 0xff, 0xfc, 0x76, 0xec, 0x11, 0xf9, 0xb0, 0x8b, 0xfd, 0x3b, 0x07, 0x55,
- 0x7a, 0xbe, 0x58, 0xff, 0x32, 0x89, 0xfd, 0x7b, 0x04, 0x87, 0x31, 0x4a, 0x72, 0x0c, 0x05, 0x46,
- 0x3b, 0x5d, 0xdb, 0x60, 0xc1, 0x96, 0x6b, 0xeb, 0x92, 0x4f, 0x70, 0xa8, 0xc4, 0xc9, 0x25, 0x2d,
- 0xf8, 0x85, 0x5a, 0x0d, 0xe9, 0xc0, 0x94, 0x4f, 0xbd, 0x07, 0x96, 0x49, 0x95, 0x7b, 0xdc, 0xb9,
- 0xa4, 0xc6, 0xaa, 0x94, 0x56, 0x29, 0xf2, 0xcd, 0x95, 0xfa, 0x81, 0x81, 0x0e, 0xf2, 0x0d, 0x98,
- 0xf2, 0x68, 0xd7, 0xb6, 0x4c, 0x43, 0x2c, 0xf1, 0x93, 0x92, 0x0c, 0x25, 0x08, 0x03, 0x1c, 0xf9,
- 0x1d, 0x98, 0xec, 0x58, 0x8e, 0xe5, 0xaa, 0xfd, 0xd7, 0xbb, 0xc3, 0x0d, 0x93, 0xf2, 0x2e, 0x97,
- 0x2d, 0x97, 0x16, 0x3d, 0xad, 0x02, 0x86, 0x52, 0xad, 0x28, 0x08, 0x4c, 0x95, 0xb3, 0xd5, 0x16,
- 0xe0, 0xfd, 0x21, 0xdb, 0xa0, 0xb7, 0x04, 0xf1, 0x15, 0x2e, 0x00, 0xa3, 0xd6, 0x4f, 0x3e, 0x81,
- 0x5c, 0xc3, 0xb2, 0x69, 0x69, 0x4a, 0xd8, 0xf1, 0xce, 0x90, 0xed, 0xb8, 0x63, 0xd9, 0x54, 0xda,
- 0x10, 0xd6, 0x03, 0x96, 0x4d, 0x51, 0xe8, 0x14, 0x03, 0xe1, 0x51, 0x29, 0x63, 0x48, 0x95, 0x51,
- 0xd2, 0x00, 0x54, 0xe2, 0x13, 0x03, 0x11, 0x80, 0x51, 0xeb, 0x27, 0x7f, 0x98, 0x81, 0xa9, 0x87,
- 0xb4, 0xd6, 0x72, 0xdd, 0xb6, 0xca, 0x3c, 0xef, 0x0d, 0xd9, 0x96, 0xb7, 0xa5, 0x74, 0x69, 0x8a,
- 0x2e, 0x11, 0x14, 0x14, 0x03, 0xe5, 0x7c, 0x46, 0x8c, 0xce, 0x71, 0xb7, 0x04, 0x23, 0x99, 0x91,
- 0xb5, 0xce, 0x71, 0x37, 0x31, 0x23, 0xbc, 0x9a, 0x44, 0xa1, 0x93, 0x87, 0x46, 0xdb, 0x68, 0xb4,
- 0x8d, 0x52, 0x71, 0x24, 0xa1, 0xb1, 0xcd, 0x65, 0x27, 0x42, 0x43, 0xc0, 0x50, 0xaa, 0xe5, 0xcf,
- 0xde, 0x39, 0x66, 0xac, 0x34, 0x33, 0x92, 0x67, 0xdf, 0x3d, 0x66, 0x2c, 0xf1, 0xec, 0xbb, 0x07,
- 0x87, 0x87, 0x28, 0x74, 0x72, 0xdd, 0x8e, 0xc1, 0xfc, 0xd2, 0xec, 0x48, 0x74, 0xef, 0x19, 0xcc,
- 0x4f, 0xe8, 0xde, 0x5b, 0x3b, 0xac, 0xa2, 0xd0, 0x49, 0x1e, 0x40, 0xd6, 0x77, 0xfc, 0xd2, 0x9c,
- 0x50, 0xfd, 0xf6, 0x90, 0x55, 0x57, 0x1d, 0xa5, 0x59, 0x9f, 0x23, 0x55, 0xf7, 0xaa, 0xc8, 0x15,
- 0x0a, 0xbd, 0xc7, 0x7e, 0x69, 0x7e, 0x34, 0x7a, 0x8f, 0xfb, 0xf4, 0x1e, 0x70, 0xbd, 0xc7, 0x3e,
- 0xf9, 0xbd, 0x0c, 0xe4, 0xbb, 0xbd, 0x5a, 0xb5, 0x57, 0x2b, 0x2d, 0x08, 0xdd, 0xdf, 0x1d, 0xb2,
- 0xee, 0x7d, 0x21, 0x5c, 0xaa, 0xd7, 0x3b, 0x08, 0x09, 0x44, 0xa5, 0x59, 0x18, 0x21, 0xb5, 0x96,
- 0x16, 0x47, 0x62, 0xc4, 0x96, 0x90, 0x96, 0x30, 0x42, 0x02, 0x51, 0x69, 0x0e, 0x8c, 0xb0, 0x8d,
- 0x5a, 0x89, 0x8c, 0xca, 0x08, 0xdb, 0x48, 0x31, 0xc2, 0x36, 0xa4, 0x11, 0xb6, 0x51, 0xe3, 0xae,
- 0xdf, 0xaa, 0x37, 0xfc, 0xd2, 0x95, 0x91, 0xb8, 0xfe, 0xdd, 0x7a, 0x23, 0xe9, 0xfa, 0x77, 0x37,
- 0xee, 0x54, 0x51, 0xe8, 0xe4, 0x4b, 0x8e, 0x6f, 0x1b, 0x66, 0xbb, 0x74, 0x75, 0x24, 0x4b, 0x4e,
- 0x95, 0xcb, 0x4e, 0x2c, 0x39, 0x02, 0x86, 0x52, 0x2d, 0xf9, 0xab, 0x0c, 0x14, 0x7d, 0xe6, 0x7a,
- 0x46, 0x93, 0x6e, 0x79, 0x56, 0xbd, 0xf4, 0xec, 0x70, 0xaa, 0x8e, 0xa4, 0x19, 0xa1, 0x06, 0x69,
- 0x8c, 0xae, 0x58, 0x23, 0x18, 0x8c, 0x1a, 0x42, 0xfe, 0x2e, 0x03, 0x73, 0x46, 0xec, 0x6c, 0xa7,
- 0xf4, 0x9c, 0xb0, 0xad, 0x36, 0xec, 0x94, 0x10, 0x3f, 0x40, 0x12, 0xe6, 0x3d, 0xa7, 0xcc, 0x9b,
- 0x8b, 0x23, 0x31, 0x61, 0x91, 0x70, 0x5f, 0x9f, 0x79, 0x56, 0x97, 0x96, 0x9e, 0x1f, 0x89, 0xfb,
- 0x56, 0x85, 0xf0, 0x84, 0xfb, 0x4a, 0x20, 0x2a, 0xcd, 0x22, 0x75, 0x53, 0x59, 0xe6, 0x95, 0x4a,
- 0x23, 0x49, 0xdd, 0x41, 0x11, 0x19, 0x4f, 0xdd, 0x0a, 0x8a, 0x81, 0x72, 0xee, 0xcb, 0x1e, 0xad,
- 0x5b, 0x7e, 0xe9, 0x85, 0x91, 0xf8, 0x32, 0x72, 0xd9, 0x09, 0x5f, 0x16, 0x30, 0x94, 0x6a, 0xf9,
- 0x72, 0xee, 0xf8, 0xc7, 0xa5, 0xa5, 0x91, 0x2c, 0xe7, 0x7b, 0xfe, 0x71, 0x62, 0x39, 0xdf, 0xab,
- 0x1e, 0x20, 0x57, 0xa8, 0x96, 0x73, 0xdb, 0x37, 0xbc, 0xd2, 0xd7, 0x46, 0xb4, 0x9c, 0x73, 0xe1,
- 0x7d, 0xcb, 0x39, 0x07, 0xa2, 0xd2, 0x2c, 0xbc, 0x40, 0x5c, 0xad, 0x58, 0x66, 0xe9, 0xeb, 0x23,
- 0xf1, 0x82, 0x2d, 0x29, 0x3d, 0xe1, 0x05, 0x0a, 0x8a, 0x81, 0xf2, 0xa5, 0x1e, 0x40, 0x58, 0x03,
- 0xa4, 0x9c, 0x18, 0x1c, 0x44, 0x4f, 0x0c, 0x8a, 0xb7, 0x5f, 0x1f, 0xf8, 0xf4, 0xa4, 0xfa, 0xab,
- 0x6b, 0x1e, 0xb3, 0x1a, 0x86, 0xc9, 0x22, 0xc7, 0x0d, 0x4b, 0x7f, 0x9e, 0x81, 0xd9, 0xd8, 0xbe,
- 0x3f, 0x45, 0x75, 0x2b, 0xae, 0x1a, 0x87, 0x7f, 0xf2, 0x18, 0xb5, 0xe8, 0x8f, 0x32, 0x30, 0xad,
- 0x2b, 0x80, 0x14, 0x6b, 0xea, 0x71, 0x6b, 0x2e, 0x7b, 0x5e, 0x21, 0x54, 0xa5, 0x5b, 0xc2, 0xc7,
- 0x26, 0x56, 0x0a, 0x8c, 0x7e, 0x6c, 0xb4, 0xba, 0x74, 0x8b, 0x7e, 0x90, 0x81, 0x99, 0x68, 0x41,
- 0x90, 0x62, 0x90, 0x19, 0x37, 0x68, 0xf7, 0x92, 0x06, 0x29, 0x6d, 0xeb, 0xae, 0xc3, 0xe8, 0x23,
- 0x96, 0x9c, 0x27, 0x5d, 0x17, 0x8c, 0x7e, 0x9e, 0x12, 0xb7, 0x57, 0x89, 0x51, 0x81, 0xb0, 0x48,
- 0x48, 0x31, 0x85, 0xc6, 0x4d, 0xb9, 0x7f, 0x49, 0x53, 0xa4, 0xae, 0xf3, 0xbd, 0x57, 0x57, 0x0c,
- 0xa3, 0x1f, 0x15, 0x5e, 0x89, 0x9c, 0x63, 0xc9, 0x1f, 0x67, 0x60, 0x5a, 0xd7, 0x0f, 0xa3, 0x1f,
- 0x14, 0x5e, 0x97, 0xc8, 0x0c, 0xdf, 0x6f, 0xca, 0x1f, 0x64, 0xa0, 0x10, 0xd4, 0x13, 0xa3, 0x77,
- 0xd9, 0xea, 0x5e, 0xf5, 0x9c, 0x21, 0x11, 0x76, 0x1c, 0x8f, 0xcd, 0x8e, 0x83, 0xf3, 0xec, 0xf8,
- 0x34, 0x03, 0xc5, 0x48, 0xad, 0x91, 0x62, 0x4a, 0x23, 0x6e, 0xca, 0x65, 0x0f, 0x48, 0x95, 0xb2,
- 0xf3, 0xad, 0x89, 0x14, 0x1d, 0xa3, 0xb7, 0x46, 0x29, 0x7b, 0xac, 0x35, 0x41, 0xf5, 0x31, 0x16,
- 0x6b, 0xb8, 0xb2, 0xf3, 0xc3, 0x59, 0x57, 0x22, 0xa3, 0x0f, 0x67, 0x5e, 0xe1, 0x3c, 0x66, 0x91,
- 0x0b, 0xcb, 0x92, 0xd1, 0xc7, 0xb3, 0xd4, 0x95, 0x6e, 0xcb, 0x5f, 0x66, 0x60, 0x21, 0x59, 0x9b,
- 0xa4, 0x58, 0xd4, 0x8e, 0x5b, 0x74, 0x74, 0x59, 0x8b, 0x22, 0x1a, 0xd3, 0xed, 0xfa, 0xdb, 0x0c,
- 0x5c, 0x49, 0xa9, 0x4b, 0x52, 0x4c, 0x73, 0xe2, 0xa6, 0xbd, 0x33, 0xaa, 0xdb, 0xf4, 0xa4, 0x67,
- 0x47, 0x0a, 0x93, 0xd1, 0x7b, 0xb6, 0x52, 0x96, 0x6e, 0xcd, 0x67, 0x19, 0x98, 0x89, 0x16, 0x28,
- 0x29, 0xe6, 0x34, 0xe3, 0xe6, 0x1c, 0x0c, 0xfd, 0x4e, 0x2d, 0xe9, 0xdf, 0x61, 0xa9, 0x32, 0x7a,
- 0xff, 0x96, 0xba, 0xce, 0xcf, 0x13, 0x41, 0xe1, 0x32, 0xfa, 0x3c, 0xb1, 0x57, 0x3d, 0x78, 0x6c,
- 0x9e, 0xd0, 0x45, 0xcc, 0x38, 0xf2, 0x84, 0x50, 0x76, 0xbe, 0xc7, 0x44, 0x8b, 0x99, 0xd1, 0x7b,
- 0x4c, 0xa0, 0x2d, 0xd5, 0x9e, 0x15, 0x06, 0x8b, 0x7d, 0x17, 0x7f, 0xe4, 0x23, 0x7d, 0xb5, 0x28,
- 0xaf, 0xf2, 0x7e, 0x63, 0xf0, 0x3a, 0xe9, 0xf1, 0x37, 0x88, 0xff, 0x92, 0x85, 0xf9, 0x44, 0xcd,
- 0x40, 0x56, 0x61, 0x5a, 0x08, 0x13, 0xbd, 0x71, 0xf2, 0x6e, 0x6d, 0x51, 0xb1, 0x4f, 0x6f, 0x06,
- 0x08, 0x0c, 0x69, 0xc8, 0x8f, 0x32, 0x30, 0xff, 0xd0, 0x60, 0x66, 0x6b, 0xdf, 0x60, 0x2d, 0x79,
- 0xa7, 0x3d, 0xa4, 0x0c, 0xf2, 0x76, 0x5c, 0x6a, 0xe5, 0x79, 0x65, 0xc7, 0x7c, 0x02, 0x81, 0x49,
- 0xfd, 0xe4, 0x16, 0x4c, 0x75, 0x5d, 0xdb, 0xb6, 0x9c, 0xa6, 0xb8, 0x76, 0x2b, 0x84, 0xb5, 0xea,
- 0xbe, 0x04, 0x63, 0x80, 0x8f, 0x37, 0xa7, 0xe5, 0x86, 0x72, 0x05, 0x93, 0x18, 0xd2, 0x71, 0xdd,
- 0xb6, 0xff, 0x7e, 0x16, 0x48, 0xbf, 0x97, 0x3d, 0xa9, 0x91, 0xf2, 0x06, 0xe4, 0xcd, 0x70, 0xd2,
- 0x22, 0x9d, 0x2a, 0x6a, 0x6c, 0x15, 0x56, 0x76, 0x27, 0xf9, 0xd4, 0xec, 0x79, 0x54, 0x8d, 0x69,
- 0xa4, 0x3b, 0x49, 0xc2, 0x51, 0x53, 0xc4, 0x7a, 0x29, 0x72, 0x4f, 0xec, 0xa5, 0xf8, 0xac, 0xbf,
- 0x27, 0xec, 0xa3, 0xa1, 0x87, 0xdb, 0xd8, 0x9a, 0xc1, 0xa6, 0x60, 0xb1, 0x6f, 0x57, 0x48, 0x96,
- 0x60, 0xc2, 0xaa, 0x0b, 0x01, 0xd9, 0x0a, 0x28, 0xd5, 0x13, 0xf7, 0x36, 0x70, 0xc2, 0xaa, 0x13,
- 0x16, 0xde, 0xbb, 0x8d, 0xa2, 0xd0, 0x95, 0x97, 0xc0, 0x7d, 0xb7, 0x6c, 0x2f, 0xc1, 0xa4, 0xfb,
- 0xd0, 0xa1, 0x9e, 0x6a, 0x20, 0xd2, 0xe7, 0x69, 0xf7, 0x39, 0x10, 0x25, 0x4e, 0xb4, 0xbc, 0xd2,
- 0xae, 0xeb, 0x5b, 0xcc, 0xf5, 0xfa, 0x5b, 0x5e, 0x35, 0x06, 0x23, 0x54, 0x64, 0x05, 0xf2, 0xd2,
- 0x2a, 0x31, 0x95, 0xd3, 0x15, 0xe0, 0xde, 0x24, 0x37, 0x14, 0xa8, 0x30, 0xe4, 0x3e, 0x14, 0x8c,
- 0xae, 0x75, 0xe8, 0xb6, 0xa9, 0xa3, 0x3a, 0x7c, 0x06, 0xe9, 0x1d, 0x5a, 0xdb, 0xbf, 0x27, 0x58,
- 0x51, 0x0b, 0x21, 0x1f, 0xc2, 0xac, 0x7a, 0x30, 0xc9, 0xa3, 0x9a, 0x58, 0x2f, 0x28, 0x75, 0xf1,
- 0xec, 0x74, 0x79, 0xf6, 0xed, 0x28, 0x3f, 0xc6, 0xc5, 0xc5, 0xdc, 0xbf, 0xf0, 0x44, 0xf7, 0xbf,
- 0x01, 0x79, 0xc3, 0x64, 0xd6, 0x03, 0x5a, 0x9a, 0x16, 0xb4, 0x3a, 0xa8, 0xd6, 0x04, 0x14, 0x15,
- 0x56, 0xb4, 0x72, 0xf1, 0x49, 0x52, 0xcb, 0x2d, 0x24, 0x5a, 0xb9, 0x42, 0x14, 0x46, 0xe9, 0xc8,
- 0xeb, 0x30, 0x2b, 0x1d, 0xa4, 0x62, 0xf8, 0xf4, 0x08, 0x77, 0x4a, 0x45, 0xc1, 0xf8, 0xac, 0x62,
- 0x9c, 0xdd, 0x8a, 0x22, 0x31, 0x4e, 0x4b, 0xd6, 0x60, 0x5e, 0x02, 0x8e, 0xba, 0xb6, 0x6b, 0xd4,
- 0x39, 0xfb, 0x8c, 0x60, 0xd7, 0xcb, 0xeb, 0x56, 0x1c, 0x8d, 0x49, 0x7a, 0xf2, 0x26, 0x90, 0x3a,
- 0xb5, 0x29, 0xa3, 0x77, 0x5d, 0xb7, 0x7d, 0xdf, 0xb9, 0x63, 0x39, 0x96, 0xdf, 0x2a, 0xcd, 0x8a,
- 0x47, 0x5d, 0x52, 0x52, 0xc8, 0x46, 0x1f, 0x05, 0xa6, 0x70, 0x91, 0x3f, 0x8d, 0xc6, 0xbe, 0xbc,
- 0xfe, 0xfb, 0x70, 0xd8, 0x35, 0xd9, 0xb8, 0x42, 0xff, 0x6c, 0x52, 0x84, 0x7e, 0xbc, 0x04, 0x8b,
- 0x86, 0x77, 0x66, 0x7c, 0xe1, 0xbd, 0x0a, 0xd3, 0x5c, 0x2c, 0x35, 0xd9, 0xbd, 0x0d, 0xb5, 0xb4,
- 0xeb, 0x3c, 0xbe, 0x1f, 0x20, 0x30, 0xa4, 0x89, 0x84, 0x6d, 0xf6, 0xdc, 0xb0, 0x7d, 0x07, 0x8a,
- 0x86, 0x68, 0xfa, 0x95, 0x91, 0x3b, 0x50, 0x1b, 0xe1, 0x3c, 0x77, 0xe9, 0xb5, 0x90, 0x1b, 0xa3,
- 0xa2, 0x48, 0x15, 0x9e, 0xa5, 0x8e, 0x51, 0xb3, 0x69, 0xb5, 0xba, 0xf3, 0x16, 0xf5, 0xac, 0x86,
- 0x65, 0x1a, 0xcc, 0x72, 0x1d, 0xd1, 0x59, 0x58, 0xa8, 0xbc, 0xa8, 0x4c, 0x7f, 0x76, 0x33, 0x8d,
- 0x08, 0xd3, 0x79, 0x55, 0x9c, 0xd8, 0x86, 0x8e, 0x93, 0x7c, 0x5f, 0x9c, 0x84, 0x48, 0x8c, 0xd3,
- 0x9e, 0xe3, 0xe4, 0x85, 0xcb, 0x3b, 0xf9, 0xf4, 0xb0, 0x9c, 0x3c, 0xee, 0x67, 0xe3, 0x72, 0xf2,
- 0x9f, 0x14, 0x60, 0x3e, 0x51, 0xdb, 0xa7, 0xee, 0x01, 0x33, 0x4f, 0x79, 0x0f, 0x78, 0x1d, 0x72,
- 0x8c, 0x2f, 0xaa, 0x13, 0xf1, 0x6e, 0x7c, 0xb1, 0x9a, 0x0a, 0x0c, 0x77, 0x0f, 0xb3, 0x45, 0xcd,
- 0x76, 0xd0, 0x5d, 0xad, 0x32, 0xa1, 0x76, 0x8f, 0xf5, 0x28, 0x12, 0xe3, 0xb4, 0xe4, 0x9b, 0x30,
- 0x6d, 0xd4, 0xeb, 0x1e, 0xf5, 0x7d, 0xea, 0x8b, 0x7d, 0xe3, 0x74, 0x65, 0x96, 0xc7, 0xd6, 0x5a,
- 0x00, 0xc4, 0x10, 0xcf, 0xb3, 0x47, 0xab, 0xde, 0xf0, 0x8f, 0x7c, 0xea, 0x09, 0x87, 0x8e, 0x34,
- 0x5c, 0xf3, 0xa1, 0xe4, 0x70, 0xd4, 0x14, 0xa4, 0x0e, 0xf3, 0x6d, 0xaf, 0xb6, 0xbe, 0x6e, 0x98,
- 0x2d, 0xaa, 0xb2, 0x59, 0x7e, 0xe0, 0x9e, 0xfd, 0xed, 0xb8, 0x04, 0x4c, 0x8a, 0x54, 0x5a, 0xb6,
- 0xe9, 0x09, 0x33, 0x6a, 0x5f, 0x25, 0x67, 0x06, 0x5a, 0xa2, 0x12, 0x30, 0x29, 0x92, 0x67, 0xb8,
- 0xb6, 0x57, 0x0b, 0xba, 0x87, 0x45, 0xf8, 0x44, 0x32, 0xdc, 0x76, 0x88, 0xc2, 0x28, 0x1d, 0x1f,
- 0xb0, 0xb6, 0x57, 0x43, 0x6a, 0xd8, 0x1d, 0x91, 0x42, 0x23, 0x03, 0xb6, 0xad, 0xe0, 0xa8, 0x29,
- 0x48, 0x17, 0x08, 0x7f, 0x3a, 0x31, 0xef, 0xf2, 0xdf, 0x5d, 0xa3, 0x2b, 0xb2, 0x69, 0xf1, 0xf6,
- 0xcd, 0xb4, 0xa7, 0xd1, 0x44, 0xd1, 0x07, 0x7a, 0x8e, 0x07, 0xf4, 0x76, 0x9f, 0x1c, 0x4c, 0x91,
- 0x4d, 0xde, 0x85, 0xe7, 0xdb, 0x5e, 0x4d, 0xf5, 0xdf, 0xed, 0x7b, 0x96, 0x63, 0x5a, 0x5d, 0x43,
- 0xf6, 0x63, 0xcb, 0x5c, 0xbc, 0xac, 0xcc, 0x7d, 0x7e, 0x3b, 0x9d, 0x0c, 0xcf, 0xe3, 0x8f, 0x17,
- 0x24, 0x33, 0x43, 0x29, 0x48, 0x12, 0xe1, 0x3a, 0xae, 0x95, 0xe2, 0x9f, 0x33, 0x40, 0xc4, 0xfd,
- 0xc2, 0xba, 0xeb, 0xf8, 0xbd, 0x0e, 0xf5, 0xb6, 0x3c, 0xb7, 0xd7, 0xe5, 0x99, 0xa9, 0xc9, 0xff,
- 0x88, 0x74, 0x6f, 0xea, 0xcc, 0xb4, 0x15, 0x20, 0x30, 0xa4, 0xe1, 0xbb, 0x29, 0xd7, 0xae, 0x53,
- 0x9f, 0x09, 0x15, 0x91, 0xdd, 0xd4, 0x7d, 0x01, 0x45, 0x85, 0x25, 0x5b, 0xb0, 0xe8, 0xd1, 0x9a,
- 0x61, 0x1b, 0x0e, 0x2f, 0xa1, 0x3d, 0x83, 0xd1, 0xe6, 0x89, 0x8a, 0xe9, 0x17, 0x14, 0xcb, 0x22,
- 0x26, 0x09, 0xb0, 0x9f, 0x67, 0xe5, 0x8b, 0x3c, 0x2c, 0x24, 0x2f, 0x46, 0x9e, 0x54, 0x47, 0xf1,
- 0x7c, 0x6b, 0x78, 0xcc, 0x12, 0x49, 0x2b, 0x99, 0x6f, 0x03, 0x04, 0x86, 0x34, 0x7c, 0xff, 0xcd,
- 0xdc, 0xae, 0x65, 0x26, 0xf7, 0xdf, 0x87, 0x1c, 0x88, 0x12, 0x97, 0xde, 0x12, 0x9f, 0x1b, 0x5b,
- 0x4b, 0xbc, 0x6a, 0x72, 0x9f, 0x1c, 0x72, 0x93, 0xfb, 0x60, 0x6f, 0xa5, 0x7d, 0x1a, 0x0d, 0x08,
- 0xd9, 0xa5, 0xf9, 0xc1, 0x90, 0x6f, 0xbd, 0x2e, 0x1e, 0x11, 0x3c, 0x3c, 0x67, 0xcd, 0xa8, 0x3f,
- 0xab, 0x57, 0x00, 0x0e, 0x86, 0x61, 0x52, 0x2c, 0x50, 0x64, 0x55, 0x12, 0x03, 0x61, 0x5c, 0x35,
- 0xd9, 0x87, 0xab, 0xb6, 0xd5, 0xb1, 0x98, 0xdc, 0xa6, 0xed, 0x53, 0xaf, 0x4a, 0x4d, 0xd7, 0xa9,
- 0x8b, 0x25, 0x33, 0x5b, 0xf9, 0xba, 0x7a, 0x8c, 0xab, 0x3b, 0x29, 0x34, 0x98, 0xca, 0x49, 0x6e,
- 0xc1, 0xd4, 0x03, 0xea, 0xf9, 0xdc, 0x89, 0x21, 0xfe, 0x26, 0xd7, 0x5b, 0x12, 0x8c, 0x01, 0xfe,
- 0x72, 0x6b, 0xc3, 0xbf, 0xe6, 0x60, 0x3e, 0x71, 0xe1, 0xf7, 0xa4, 0x08, 0xd3, 0x01, 0x33, 0xf1,
- 0x98, 0x80, 0x79, 0x19, 0x0a, 0xa6, 0x6d, 0x51, 0x87, 0xdd, 0xab, 0xab, 0xc0, 0x0a, 0x7b, 0x7f,
- 0x25, 0x7c, 0x03, 0x35, 0xc5, 0xd3, 0x0e, 0xaf, 0x68, 0x1c, 0x4c, 0x5e, 0xf4, 0x8d, 0x93, 0xfc,
- 0x28, 0xdf, 0xce, 0x9c, 0x1a, 0x4a, 0xbe, 0x49, 0x4c, 0xec, 0xb8, 0xf2, 0xcd, 0x3f, 0xe6, 0x60,
- 0x21, 0x79, 0x75, 0xfb, 0x24, 0xa7, 0xba, 0x05, 0x53, 0x7e, 0x4f, 0xbc, 0x49, 0xa2, 0xdc, 0x4a,
- 0xfb, 0x7b, 0x55, 0x82, 0x31, 0xc0, 0xa7, 0x3b, 0x4b, 0xf6, 0xa9, 0x38, 0x4b, 0xee, 0xa2, 0xce,
- 0x32, 0xec, 0x95, 0xfb, 0xd3, 0xfe, 0x97, 0xf7, 0x3e, 0x18, 0xf2, 0x65, 0xfb, 0xb8, 0xbc, 0xe5,
- 0x3f, 0x72, 0x30, 0x17, 0xbf, 0xae, 0xe0, 0x9b, 0xd5, 0x96, 0xeb, 0x33, 0xb5, 0x85, 0x57, 0x3e,
- 0xa3, 0x37, 0xab, 0x77, 0x43, 0x14, 0x46, 0xe9, 0x2e, 0xb6, 0x30, 0xdd, 0x82, 0x29, 0xf5, 0x36,
- 0x9e, 0x5a, 0x97, 0xb4, 0xa3, 0xa9, 0x37, 0xf6, 0x30, 0xc0, 0xff, 0xff, 0xaa, 0x64, 0xfb, 0xe4,
- 0x07, 0xfd, 0xab, 0xd2, 0x7b, 0x43, 0xbd, 0x9b, 0x1a, 0x97, 0x9b, 0xfd, 0xef, 0x24, 0x2c, 0xf6,
- 0xb5, 0x2c, 0xc4, 0x4f, 0x67, 0x32, 0x17, 0x38, 0x9d, 0x79, 0x03, 0xe6, 0x84, 0x1f, 0xed, 0x27,
- 0xce, 0x74, 0x74, 0x9b, 0xea, 0x61, 0x0c, 0x8b, 0x09, 0xea, 0x8b, 0xed, 0x36, 0xdf, 0x80, 0x39,
- 0xbf, 0x57, 0xf3, 0x4d, 0xcf, 0xea, 0x72, 0x87, 0xb8, 0xb7, 0xa1, 0x4e, 0x7c, 0xb5, 0x92, 0x6a,
- 0x0c, 0x8b, 0x09, 0x6a, 0xd2, 0x84, 0x05, 0xd3, 0xa3, 0x75, 0xea, 0x30, 0xcb, 0xb0, 0x55, 0x4d,
- 0x39, 0xd0, 0x9b, 0xa1, 0x57, 0xcf, 0x4e, 0x97, 0x17, 0xd6, 0x13, 0x22, 0xb0, 0x4f, 0x28, 0xa9,
- 0xc1, 0x92, 0x3c, 0x65, 0x89, 0x1a, 0xa4, 0xcf, 0x68, 0xe4, 0x96, 0x72, 0x45, 0x19, 0xbd, 0xb4,
- 0x71, 0x2e, 0x25, 0x3e, 0x46, 0xca, 0x80, 0xaf, 0x83, 0x6e, 0xc3, 0x7c, 0x68, 0xa5, 0x7f, 0xc7,
- 0xb2, 0x83, 0x5a, 0xf7, 0x97, 0x14, 0xd3, 0x0b, 0x1b, 0xb4, 0xeb, 0x51, 0xd3, 0x60, 0xb4, 0xbe,
- 0x1e, 0x27, 0xc4, 0x24, 0xe7, 0x28, 0x8e, 0x8b, 0xfa, 0x5c, 0x70, 0x5c, 0xfe, 0xff, 0x5f, 0x79,
- 0xee, 0xff, 0x89, 0xab, 0x58, 0xb2, 0x02, 0x79, 0xe1, 0x72, 0x7c, 0x91, 0xd5, 0x87, 0x8d, 0xc2,
- 0x17, 0x7d, 0x54, 0x98, 0x0b, 0x1c, 0xe0, 0xa8, 0xdc, 0x9e, 0x3d, 0x27, 0xb7, 0x77, 0xe1, 0x0a,
- 0xb3, 0xfd, 0x43, 0xaf, 0xe7, 0xb3, 0x75, 0xea, 0x31, 0x5f, 0x79, 0x64, 0x6e, 0xe0, 0xaf, 0x2d,
- 0x1c, 0xee, 0x54, 0x93, 0x52, 0x30, 0x4d, 0x34, 0xf7, 0x4b, 0x66, 0xfb, 0x6b, 0xb6, 0xed, 0x3e,
- 0x0c, 0x6e, 0x05, 0xc2, 0x25, 0x57, 0x2d, 0xa6, 0xda, 0x2f, 0x0f, 0x77, 0xaa, 0xe7, 0x50, 0xe2,
- 0x63, 0xa4, 0x90, 0x5d, 0xf1, 0x54, 0x6f, 0x19, 0xb6, 0x55, 0x37, 0x18, 0xe5, 0x49, 0x49, 0x9c,
- 0xac, 0x48, 0xa7, 0xff, 0x9a, 0x12, 0xce, 0x4d, 0x4e, 0x92, 0x60, 0x1a, 0xdf, 0xa8, 0xbe, 0xf9,
- 0x91, 0x9a, 0xc3, 0x0a, 0x4f, 0x25, 0x87, 0x4d, 0x3f, 0x31, 0x78, 0x63, 0xf1, 0x06, 0x43, 0x8a,
- 0xb7, 0x84, 0xcb, 0x8f, 0x2b, 0xde, 0xfe, 0x29, 0x07, 0x0b, 0xc9, 0x7e, 0x90, 0xaf, 0xba, 0xb1,
- 0x89, 0xbe, 0xe1, 0x3f, 0x31, 0x8c, 0x37, 0xfc, 0x57, 0x61, 0x9a, 0x3b, 0x9d, 0xdf, 0x35, 0xcc,
- 0xe0, 0xc3, 0x05, 0x3a, 0xed, 0xed, 0x05, 0x08, 0x0c, 0x69, 0xc8, 0x12, 0x4c, 0xd4, 0x6b, 0xea,
- 0x5d, 0x56, 0x7d, 0x6d, 0xba, 0x51, 0xc1, 0x89, 0x7a, 0x8d, 0xdc, 0x84, 0x82, 0xda, 0x31, 0x05,
- 0x37, 0x8d, 0x42, 0xad, 0xda, 0x4e, 0xf9, 0xa8, 0xb1, 0xa3, 0xda, 0xa3, 0x8c, 0xe0, 0x60, 0x22,
- 0x39, 0x73, 0x63, 0x7b, 0x53, 0x3f, 0x07, 0x57, 0x52, 0xfa, 0xb5, 0xe3, 0x13, 0x96, 0xb9, 0xc0,
- 0x84, 0x1d, 0x43, 0xbe, 0x61, 0xd9, 0x8c, 0x7a, 0x43, 0xba, 0xca, 0x0e, 0x8c, 0xba, 0x23, 0x84,
- 0xca, 0x3c, 0x21, 0xff, 0x46, 0xa5, 0x88, 0x47, 0xef, 0x55, 0x71, 0x58, 0x18, 0x9c, 0x50, 0x04,
- 0x2f, 0xd4, 0x66, 0xd5, 0x7c, 0x5f, 0xe8, 0x05, 0xf8, 0xad, 0x14, 0x09, 0xe1, 0x09, 0x4a, 0x1a,
- 0x16, 0x53, 0xb5, 0x92, 0x75, 0x00, 0xdd, 0x1c, 0x13, 0xdc, 0x0c, 0xbc, 0x74, 0x76, 0xba, 0x0c,
- 0xba, 0x7b, 0xc6, 0xff, 0x85, 0x38, 0x88, 0x8c, 0x8c, 0xb6, 0xc8, 0x69, 0x11, 0xb6, 0xf8, 0x47,
- 0x52, 0x26, 0x87, 0xf2, 0x91, 0x94, 0x94, 0xe9, 0x1d, 0x5b, 0x61, 0x9e, 0x85, 0xb9, 0xf8, 0x44,
- 0x92, 0x1b, 0x90, 0xef, 0x7a, 0xb4, 0x61, 0x3d, 0x4a, 0x7e, 0x20, 0x65, 0x5f, 0x40, 0x51, 0x61,
- 0x89, 0x0b, 0x79, 0xdb, 0xa8, 0xf1, 0x10, 0x97, 0xdf, 0x1c, 0xd8, 0xba, 0xf4, 0xfb, 0xf3, 0x6a,
- 0x89, 0xd2, 0x0a, 0x77, 0x84, 0x78, 0x54, 0x6a, 0xb8, 0xc2, 0x86, 0x45, 0xed, 0xba, 0xbc, 0x06,
- 0x1d, 0x85, 0xc2, 0x3b, 0x42, 0x3c, 0x2a, 0x35, 0xe4, 0x3d, 0x98, 0x36, 0x3d, 0xca, 0xf7, 0x85,
- 0x95, 0x13, 0xb5, 0x37, 0xf9, 0xe5, 0x8b, 0xb9, 0xec, 0xa1, 0xd5, 0xa1, 0x61, 0x38, 0xae, 0x07,
- 0x42, 0x30, 0x94, 0x47, 0x6e, 0x03, 0x18, 0x0d, 0x46, 0xbd, 0x2a, 0x33, 0x3c, 0xa6, 0x36, 0x20,
- 0xba, 0x7f, 0x63, 0x4d, 0x63, 0x30, 0x42, 0xb5, 0xf2, 0xf3, 0x1c, 0xcc, 0xc5, 0xfb, 0xce, 0x9f,
- 0xd2, 0x15, 0xf6, 0xcb, 0x50, 0x10, 0x5b, 0xc1, 0x35, 0xcf, 0x49, 0x7e, 0x10, 0xe9, 0x50, 0xc1,
- 0x51, 0x53, 0x10, 0x84, 0x69, 0xe3, 0xab, 0x7d, 0xe3, 0x4a, 0xde, 0xdb, 0xe9, 0xaf, 0x5b, 0x85,
- 0x62, 0xb8, 0x4c, 0x3f, 0x20, 0x1f, 0x6c, 0xdf, 0x28, 0x64, 0x6a, 0x30, 0x86, 0x62, 0xb8, 0xe7,
- 0x7b, 0xb4, 0x19, 0xec, 0x07, 0x23, 0x9e, 0x8f, 0x02, 0x8a, 0x0a, 0x4b, 0x6e, 0xc1, 0x94, 0xe7,
- 0xda, 0x74, 0x0d, 0xf7, 0xd4, 0xb5, 0xb5, 0x3e, 0x30, 0x40, 0x09, 0xc6, 0x00, 0x3f, 0x8a, 0x62,
- 0x39, 0xee, 0x00, 0xe3, 0x5a, 0x28, 0xfe, 0x61, 0x12, 0xe6, 0xe2, 0xaf, 0x1a, 0xc4, 0xa7, 0x35,
- 0x33, 0x82, 0x69, 0x9d, 0x18, 0xf6, 0xb4, 0x66, 0x1f, 0x3b, 0xad, 0x2f, 0xc1, 0xe4, 0x71, 0x8f,
- 0xf6, 0x82, 0x0f, 0x6f, 0xe9, 0x42, 0xfc, 0x80, 0x03, 0x51, 0xe2, 0xc8, 0x1a, 0xcc, 0x3f, 0x34,
- 0x2c, 0xc6, 0x03, 0x5c, 0x9e, 0xcb, 0xcb, 0x93, 0xbc, 0x6c, 0xf4, 0xfa, 0x3b, 0x86, 0xc6, 0x24,
- 0xfd, 0x20, 0xee, 0x33, 0x58, 0xa5, 0xfb, 0x06, 0xcc, 0x09, 0x23, 0xd7, 0x4c, 0xd3, 0xed, 0x89,
- 0x73, 0xf6, 0x42, 0xfc, 0x90, 0xe0, 0x20, 0x8a, 0xdd, 0xc0, 0x04, 0x75, 0xdc, 0x59, 0x87, 0xf3,
- 0x9d, 0x89, 0xb8, 0xcb, 0x8c, 0xcb, 0x59, 0x7f, 0x17, 0x0a, 0x81, 0x5f, 0xf0, 0x4a, 0x54, 0xf3,
- 0x85, 0x95, 0x28, 0x77, 0x11, 0x21, 0x64, 0x15, 0xa6, 0xdd, 0x2e, 0xf5, 0x8c, 0xb4, 0xcb, 0xc1,
- 0xfb, 0x01, 0x02, 0x43, 0x1a, 0xee, 0x25, 0x52, 0x6b, 0xe2, 0xb8, 0xe6, 0x2d, 0x0e, 0x54, 0x46,
- 0xac, 0x7c, 0x3f, 0x03, 0xc1, 0x27, 0x60, 0xc8, 0x06, 0x4c, 0x76, 0x5d, 0x8f, 0xc9, 0x7a, 0xba,
- 0x78, 0x7b, 0x39, 0xdd, 0x9d, 0xe5, 0x75, 0xb3, 0xeb, 0xb1, 0x50, 0x22, 0xff, 0xe5, 0xa3, 0x64,
- 0xe6, 0x76, 0x9a, 0x76, 0xcf, 0x67, 0xd4, 0xbb, 0xb7, 0x9f, 0xb4, 0x73, 0x3d, 0x40, 0x60, 0x48,
- 0xb3, 0xf2, 0x3f, 0x59, 0x58, 0x48, 0xbe, 0x5d, 0x41, 0x3e, 0x84, 0x59, 0xdf, 0x6a, 0x3a, 0x96,
- 0xd3, 0x54, 0x15, 0x77, 0x66, 0xe0, 0x5e, 0xbc, 0x6a, 0x94, 0x1f, 0xe3, 0xe2, 0xc8, 0x1d, 0x98,
- 0x64, 0xa2, 0xff, 0x68, 0xa0, 0xd0, 0x9d, 0x96, 0xc7, 0x5d, 0x6d, 0xea, 0xa0, 0x64, 0x8f, 0x66,
- 0xb5, 0xec, 0xf8, 0xb2, 0xda, 0xa7, 0xfd, 0x0d, 0xc7, 0x1f, 0x0c, 0xf9, 0xfd, 0x96, 0x71, 0x45,
- 0xc0, 0x7f, 0x4f, 0xc2, 0x73, 0xe9, 0x6f, 0xb2, 0x3c, 0xa5, 0x1d, 0x43, 0xd8, 0xc3, 0x36, 0x71,
- 0x6e, 0x0f, 0x1b, 0xd3, 0x15, 0x4a, 0x76, 0x48, 0x6f, 0xa6, 0xe8, 0x01, 0x78, 0x4c, 0x91, 0x12,
- 0xdd, 0xcb, 0xe4, 0x9e, 0xb8, 0x97, 0xb9, 0x01, 0xf9, 0x5a, 0xcf, 0x6c, 0xab, 0xe3, 0xd3, 0xe8,
- 0xe7, 0x03, 0x05, 0x14, 0x15, 0x36, 0x92, 0x74, 0xf2, 0x8f, 0x4d, 0x3a, 0x3c, 0x89, 0xf6, 0x58,
- 0x4b, 0x76, 0xed, 0x4d, 0x0d, 0x9e, 0x44, 0x03, 0x5e, 0x0c, 0xc5, 0x88, 0x1e, 0xd7, 0xae, 0x75,
- 0x84, 0x3b, 0x6a, 0xfd, 0x0f, 0x7b, 0x5c, 0xf7, 0xef, 0x1d, 0xe1, 0x0e, 0x2a, 0x2c, 0xf9, 0x51,
- 0xff, 0x7a, 0x6f, 0x8e, 0xe4, 0xed, 0xa9, 0x71, 0x79, 0xbd, 0x09, 0x8b, 0x7d, 0x73, 0x7e, 0xe1,
- 0x7a, 0xe6, 0x06, 0xe4, 0xfd, 0x5e, 0x83, 0xd3, 0x25, 0xda, 0xed, 0xab, 0x02, 0x8a, 0x0a, 0xbb,
- 0xf2, 0xc3, 0x1c, 0xd7, 0x92, 0x78, 0xe7, 0xe9, 0x29, 0x45, 0xd5, 0xeb, 0x30, 0x2b, 0x2b, 0x8a,
- 0xb7, 0x23, 0x5d, 0xea, 0x85, 0x48, 0x9f, 0x5c, 0x14, 0x89, 0x71, 0x5a, 0x72, 0x4f, 0xb8, 0xc9,
- 0xc0, 0x7b, 0x72, 0x50, 0x9e, 0xc4, 0x53, 0xa8, 0x12, 0x40, 0x5e, 0x81, 0xa2, 0x78, 0x08, 0x39,
- 0xe4, 0xaa, 0xb4, 0x16, 0x6d, 0xa5, 0x9b, 0x21, 0x18, 0xa3, 0x34, 0xf1, 0x93, 0xbd, 0xc9, 0xa1,
- 0x9c, 0xec, 0xf5, 0xcd, 0xca, 0xd8, 0xaa, 0xe8, 0x3c, 0xe8, 0x4f, 0xcc, 0x11, 0xb3, 0xef, 0x43,
- 0x7f, 0xbf, 0x39, 0xf0, 0xb9, 0x56, 0x60, 0x8a, 0x3c, 0x37, 0x4b, 0xe9, 0x75, 0x79, 0x13, 0x88,
- 0xfa, 0xb2, 0x9c, 0xda, 0xbe, 0x45, 0x3e, 0xb5, 0xad, 0x5b, 0x60, 0xab, 0x7d, 0x14, 0x98, 0xc2,
- 0x45, 0xde, 0x84, 0x69, 0xd3, 0x75, 0x98, 0x61, 0x39, 0x7a, 0xe5, 0x7d, 0xf1, 0x9c, 0xd6, 0x3c,
- 0x49, 0x24, 0x97, 0x1e, 0xfd, 0x13, 0x43, 0x76, 0xb2, 0x09, 0x53, 0x0f, 0x5c, 0xbb, 0xd7, 0x51,
- 0xe7, 0x2b, 0xc5, 0xdb, 0x4b, 0x69, 0x92, 0xde, 0x12, 0x24, 0x91, 0x06, 0x16, 0xc9, 0x82, 0x01,
- 0x2f, 0xa1, 0x30, 0x2f, 0x4e, 0xd7, 0x2d, 0x76, 0xa2, 0x02, 0x40, 0xdd, 0x56, 0xdd, 0x48, 0x13,
- 0xb7, 0xef, 0xd6, 0xab, 0x71, 0x6a, 0xf5, 0x71, 0xe4, 0x38, 0x10, 0x93, 0x32, 0xc9, 0x1d, 0x28,
- 0x18, 0x8d, 0x86, 0xe5, 0x58, 0xec, 0x44, 0x1d, 0x41, 0x7e, 0x3d, 0x4d, 0xfe, 0x9a, 0xa2, 0x51,
- 0xaf, 0x38, 0xa8, 0x5f, 0xa8, 0x79, 0xc9, 0x11, 0x14, 0x99, 0x6b, 0xab, 0x1d, 0xa2, 0xaf, 0xea,
- 0xbc, 0x6b, 0x69, 0xa2, 0x0e, 0x35, 0x59, 0x78, 0xc8, 0x1b, 0xc2, 0x7c, 0x8c, 0xca, 0x21, 0x7f,
- 0x91, 0x81, 0x19, 0xc7, 0xad, 0xd3, 0x20, 0xf4, 0xd4, 0x77, 0xe8, 0xde, 0x1d, 0xd2, 0xa7, 0x11,
- 0xcb, 0x7b, 0x11, 0xd9, 0x32, 0x42, 0xf4, 0xb7, 0x1a, 0xa3, 0x28, 0x8c, 0x19, 0xb1, 0xf4, 0x1d,
- 0x58, 0xec, 0x63, 0x1c, 0x28, 0x5a, 0xfe, 0x3a, 0x03, 0xc9, 0x1e, 0x61, 0xbe, 0xbd, 0xad, 0x5b,
- 0x9e, 0x10, 0x78, 0x92, 0x3c, 0xcd, 0xdc, 0x08, 0x10, 0x18, 0xd2, 0x90, 0xeb, 0x90, 0xeb, 0x1a,
- 0xac, 0x95, 0xbc, 0x82, 0xe2, 0x22, 0x51, 0x60, 0xc8, 0x6d, 0x00, 0xfe, 0x3f, 0xd2, 0x26, 0x7d,
- 0xd4, 0x55, 0xbb, 0x75, 0x7d, 0xc0, 0xb2, 0xaf, 0x31, 0x18, 0xa1, 0x5a, 0xf9, 0x49, 0x1e, 0xe6,
- 0xe2, 0x0b, 0x2f, 0xdf, 0x1e, 0x50, 0xa7, 0xde, 0x75, 0x2d, 0x87, 0x25, 0xbf, 0x14, 0xbd, 0xa9,
- 0xe0, 0xa8, 0x29, 0x78, 0x12, 0xe9, 0x50, 0xd6, 0x72, 0xeb, 0xc9, 0x24, 0xb2, 0x2b, 0xa0, 0xa8,
- 0xb0, 0xc2, 0x7c, 0xd7, 0x63, 0xca, 0xac, 0xd0, 0x7c, 0xd7, 0x63, 0x28, 0x30, 0xc1, 0x0d, 0x5a,
- 0xee, 0x9c, 0x1b, 0xb4, 0x26, 0x2c, 0xf0, 0x50, 0xa6, 0xde, 0x3a, 0xf5, 0xd8, 0x57, 0xbe, 0xd0,
- 0xad, 0x26, 0x44, 0x60, 0x9f, 0x50, 0xf1, 0x99, 0x72, 0x01, 0x13, 0xcc, 0x5f, 0xb1, 0xe5, 0xb9,
- 0x1a, 0x97, 0x80, 0x49, 0x91, 0xa3, 0x38, 0x27, 0x89, 0xcf, 0xe3, 0x00, 0x7d, 0x84, 0x47, 0x00,
- 0x7c, 0x2f, 0xa5, 0x1e, 0xb6, 0x30, 0xc8, 0xc3, 0xce, 0x89, 0xc3, 0x3b, 0xcd, 0x8c, 0x11, 0x41,
- 0xe4, 0x2e, 0xcc, 0x85, 0x83, 0xcb, 0xfd, 0x4f, 0xb5, 0x4f, 0x5f, 0x57, 0xa6, 0x94, 0xc2, 0x6b,
- 0xe8, 0x6a, 0x8c, 0x0e, 0x13, 0x7c, 0x64, 0x13, 0x66, 0xf5, 0xf8, 0x09, 0x41, 0x10, 0x6f, 0x6c,
- 0x4e, 0x0a, 0x52, 0x64, 0x18, 0xe7, 0xba, 0x54, 0xca, 0xab, 0x94, 0x3f, 0xff, 0xf2, 0xda, 0x33,
- 0x3f, 0xfd, 0xf2, 0xda, 0x33, 0x3f, 0xfb, 0xf2, 0xda, 0x33, 0xdf, 0x3f, 0xbb, 0x96, 0xf9, 0xfc,
- 0xec, 0x5a, 0xe6, 0xa7, 0x67, 0xd7, 0x32, 0x3f, 0x3b, 0xbb, 0x96, 0xf9, 0xe2, 0xec, 0x5a, 0xe6,
- 0x87, 0xff, 0x7e, 0xed, 0x99, 0xef, 0x16, 0x82, 0xd9, 0xf8, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0xd3, 0xf0, 0x8a, 0x3d, 0x0a, 0x64, 0x00, 0x00,
+ // 5041 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0xdd, 0x6f, 0x23, 0x47,
+ 0x72, 0xb8, 0x29, 0x52, 0x14, 0x55, 0x5c, 0x7d, 0xf5, 0xae, 0x6d, 0x5a, 0x67, 0xaf, 0xf6, 0x27,
+ 0xe3, 0x16, 0xbb, 0xbf, 0xf3, 0x51, 0xb1, 0x92, 0x4b, 0x1c, 0x1b, 0xf1, 0x41, 0x94, 0xb4, 0x5a,
+ 0x59, 0x1f, 0x2b, 0x15, 0x25, 0x7f, 0x9c, 0xbf, 0x6e, 0x38, 0x6c, 0x92, 0x63, 0x0d, 0x67, 0xa8,
+ 0x99, 0xe6, 0xee, 0xca, 0x40, 0x2e, 0x46, 0x90, 0xaf, 0x3b, 0xc7, 0xc9, 0x19, 0xb9, 0x04, 0x41,
+ 0xf2, 0x96, 0x87, 0x1c, 0x90, 0x3c, 0x06, 0xc8, 0xdf, 0x60, 0x20, 0x2f, 0x97, 0xb7, 0x03, 0x0e,
+ 0x10, 0x6c, 0x25, 0xc8, 0x5b, 0x9e, 0xf2, 0x72, 0xb8, 0x20, 0x40, 0xd0, 0x1f, 0xd3, 0xf3, 0xc1,
+ 0xd1, 0xae, 0x68, 0x91, 0xdc, 0x97, 0x3c, 0x49, 0xac, 0xaa, 0xae, 0xaa, 0xe9, 0xae, 0xaa, 0xee,
+ 0xea, 0xae, 0x6e, 0xd8, 0x69, 0x5a, 0xac, 0xd5, 0xad, 0x95, 0x4d, 0xb7, 0xbd, 0x64, 0x78, 0x4d,
+ 0xb7, 0xe3, 0xb9, 0x1f, 0x89, 0x7f, 0xbe, 0x4d, 0xef, 0x53, 0x87, 0xf9, 0x4b, 0x9d, 0xa3, 0xe6,
+ 0x92, 0xd1, 0xb1, 0xfc, 0x25, 0xf9, 0xdb, 0xed, 0x7a, 0x26, 0x5d, 0xba, 0xff, 0xb2, 0x61, 0x77,
+ 0x5a, 0xc6, 0xcb, 0x4b, 0x4d, 0xea, 0x50, 0xcf, 0x60, 0xb4, 0x5e, 0xee, 0x78, 0x2e, 0x73, 0xc9,
+ 0xef, 0x84, 0xec, 0xca, 0x01, 0x3b, 0xf1, 0xcf, 0x87, 0xb2, 0x79, 0xb9, 0x73, 0xd4, 0x2c, 0x73,
+ 0x76, 0xe5, 0x08, 0xbb, 0x72, 0xc0, 0x6e, 0xfe, 0xbb, 0x17, 0xd6, 0xc6, 0x74, 0xdb, 0x6d, 0xd7,
+ 0x49, 0xca, 0x9f, 0xff, 0x76, 0x84, 0x41, 0xd3, 0x6d, 0xba, 0x4b, 0x02, 0x5c, 0xeb, 0x36, 0xc4,
+ 0x2f, 0xf1, 0x43, 0xfc, 0xa7, 0xc8, 0x17, 0x8f, 0x5e, 0xf1, 0xcb, 0x96, 0xcb, 0x59, 0x2e, 0x99,
+ 0xae, 0xc7, 0x3f, 0xac, 0x87, 0xe5, 0x6f, 0x84, 0x34, 0x6d, 0xc3, 0x6c, 0x59, 0x0e, 0xf5, 0x4e,
+ 0x42, 0x3d, 0xda, 0x94, 0x19, 0x69, 0xad, 0x96, 0xce, 0x6b, 0xe5, 0x75, 0x1d, 0x66, 0xb5, 0x69,
+ 0x4f, 0x83, 0xdf, 0x7c, 0x5c, 0x03, 0xdf, 0x6c, 0xd1, 0xb6, 0x91, 0x6c, 0xb7, 0xf8, 0xf7, 0xe3,
+ 0x30, 0xb3, 0xb2, 0xb3, 0xbf, 0xb7, 0xce, 0x3b, 0xa8, 0x2a, 0xfa, 0x93, 0xbc, 0x00, 0xd9, 0xae,
+ 0x67, 0x97, 0x32, 0x37, 0x32, 0xb7, 0x26, 0x2b, 0xc5, 0x2f, 0x4e, 0x17, 0x9e, 0x3a, 0x3b, 0x5d,
+ 0xc8, 0x1e, 0xe2, 0x36, 0x72, 0x38, 0x79, 0x05, 0xae, 0xd0, 0x87, 0x66, 0xcb, 0x70, 0x9a, 0x74,
+ 0xd7, 0x68, 0xd3, 0xd2, 0x98, 0xa0, 0xbb, 0xa6, 0xe8, 0xae, 0xac, 0x47, 0x70, 0x18, 0xa3, 0x8c,
+ 0xb6, 0x3c, 0x38, 0xe9, 0xd0, 0x52, 0x36, 0xbd, 0x25, 0xc7, 0x61, 0x8c, 0x92, 0x2c, 0x03, 0x78,
+ 0x6e, 0x97, 0x59, 0x4e, 0x73, 0x8b, 0x9e, 0x94, 0x72, 0xa2, 0x1d, 0x51, 0xed, 0x00, 0x35, 0x06,
+ 0x23, 0x54, 0xe4, 0x77, 0x61, 0xce, 0x74, 0x1d, 0x87, 0x9a, 0xcc, 0x72, 0x9d, 0x8a, 0x61, 0x1e,
+ 0xb9, 0x8d, 0x46, 0x69, 0xfc, 0x46, 0xe6, 0x56, 0x71, 0xf9, 0x95, 0xf2, 0x85, 0x0d, 0x4d, 0x5a,
+ 0x4a, 0x59, 0xb5, 0xaf, 0x3c, 0x7d, 0x76, 0xba, 0x30, 0xb7, 0x9a, 0x64, 0x8b, 0xbd, 0x92, 0xc8,
+ 0x4b, 0x50, 0xf8, 0xc8, 0x77, 0x9d, 0x8a, 0x5b, 0x3f, 0x29, 0xe5, 0x6f, 0x64, 0x6e, 0x15, 0x2a,
+ 0xb3, 0x4a, 0xe1, 0xc2, 0x1b, 0xd5, 0x7b, 0xbb, 0x1c, 0x8e, 0x9a, 0x82, 0x1c, 0x42, 0x96, 0xd9,
+ 0x7e, 0x69, 0x42, 0xa8, 0xf7, 0x6a, 0xdf, 0xea, 0x1d, 0x6c, 0x57, 0x57, 0x5d, 0xa7, 0x61, 0x35,
+ 0x2b, 0x13, 0x7c, 0xac, 0x0e, 0xb6, 0xab, 0xc8, 0xf9, 0x91, 0x1f, 0x65, 0xa0, 0xc0, 0x6d, 0xac,
+ 0x6e, 0x30, 0xa3, 0x54, 0xb8, 0x91, 0xbd, 0x55, 0x5c, 0x7e, 0xaf, 0x7c, 0x29, 0x27, 0x2b, 0x27,
+ 0xac, 0xa5, 0xbc, 0xa3, 0xd8, 0xaf, 0x3b, 0xcc, 0x3b, 0x09, 0xbf, 0x31, 0x00, 0xa3, 0x96, 0x3f,
+ 0xff, 0x1a, 0x4c, 0xc5, 0x88, 0xc9, 0x2c, 0x64, 0x8f, 0xe8, 0x89, 0x34, 0x34, 0xe4, 0xff, 0x92,
+ 0x6b, 0x30, 0x7e, 0xdf, 0xb0, 0xbb, 0xca, 0xa8, 0x50, 0xfe, 0x78, 0x75, 0xec, 0x95, 0xcc, 0xe2,
+ 0x4f, 0x72, 0xf0, 0xdc, 0xca, 0xc7, 0x5d, 0x8f, 0x0a, 0xd9, 0xfe, 0xdd, 0x6e, 0x2d, 0x6a, 0xb2,
+ 0x37, 0x20, 0xd7, 0x38, 0xae, 0x3b, 0xca, 0x66, 0xaf, 0x28, 0x25, 0x72, 0x77, 0xf6, 0xd7, 0x76,
+ 0x51, 0x60, 0x48, 0x07, 0xae, 0xfa, 0x2d, 0xc3, 0xa3, 0xf5, 0x15, 0xd3, 0xa4, 0xbe, 0xbf, 0x45,
+ 0x4f, 0xb4, 0xf1, 0x16, 0x97, 0xbf, 0x59, 0x96, 0xee, 0xc3, 0x3f, 0xbb, 0xcc, 0x3d, 0xb9, 0x7c,
+ 0xff, 0xe5, 0x72, 0x95, 0x9a, 0x1e, 0x65, 0x5b, 0xf4, 0xa4, 0x4a, 0x6d, 0x6a, 0x32, 0xd7, 0xab,
+ 0x3c, 0x7b, 0x76, 0xba, 0x70, 0xb5, 0xda, 0xcb, 0x05, 0xd3, 0x58, 0x93, 0x3a, 0xcc, 0x24, 0xc0,
+ 0xc2, 0xe0, 0x2f, 0x2c, 0xed, 0xea, 0xd9, 0xe9, 0xc2, 0x4c, 0x42, 0x1a, 0x26, 0x59, 0x92, 0xdb,
+ 0x30, 0xd1, 0xea, 0xd6, 0xc4, 0xb7, 0x48, 0xb7, 0x98, 0x51, 0x1f, 0x3f, 0x71, 0x57, 0x82, 0x31,
+ 0xc0, 0x93, 0x9f, 0x44, 0x8d, 0x61, 0x5c, 0x18, 0x43, 0xe3, 0xb2, 0xc6, 0x70, 0xde, 0x88, 0x8c,
+ 0xca, 0x2c, 0xfe, 0x27, 0x07, 0x57, 0x57, 0x0d, 0x9b, 0x3a, 0x75, 0xc3, 0x8b, 0x1a, 0xc4, 0x4b,
+ 0x50, 0xe0, 0x11, 0xaf, 0xde, 0xb5, 0xa9, 0x32, 0x0a, 0xad, 0x42, 0x55, 0xc1, 0x51, 0x53, 0x70,
+ 0x6a, 0xcb, 0x61, 0xd4, 0xbb, 0x6f, 0xd8, 0x2a, 0x9c, 0x69, 0xea, 0x4d, 0x05, 0x47, 0x4d, 0x41,
+ 0x5e, 0x85, 0x69, 0xfa, 0xd0, 0xb4, 0xbb, 0xbe, 0xe5, 0x3a, 0x6b, 0x06, 0xa3, 0x7e, 0x29, 0x7b,
+ 0x23, 0xcb, 0x03, 0xd2, 0xd9, 0xe9, 0xc2, 0xf4, 0x7a, 0x0c, 0x83, 0x09, 0x4a, 0x2e, 0x89, 0x87,
+ 0xe3, 0x8f, 0x5d, 0x27, 0x18, 0x2f, 0x2d, 0xe9, 0x40, 0xc1, 0x51, 0x53, 0x90, 0x1d, 0x28, 0x76,
+ 0x7d, 0xea, 0xed, 0x19, 0x27, 0xb6, 0x6b, 0xd4, 0x45, 0xf0, 0xba, 0x52, 0xf9, 0xd6, 0xd9, 0xe9,
+ 0x42, 0xf1, 0x30, 0x04, 0xff, 0xea, 0x74, 0xa1, 0x44, 0x1d, 0xd3, 0xad, 0x5b, 0x4e, 0x73, 0x89,
+ 0x07, 0x94, 0x32, 0x1a, 0x0f, 0x76, 0xa8, 0xef, 0x1b, 0x4d, 0x8a, 0xd1, 0xf6, 0xe4, 0xcf, 0xa2,
+ 0x06, 0x90, 0x17, 0x06, 0xf0, 0xfd, 0x4b, 0x1a, 0x40, 0x4a, 0xdf, 0x5f, 0x7c, 0xe8, 0xc9, 0xef,
+ 0x67, 0xa0, 0xd8, 0xa1, 0x9e, 0x6f, 0xf9, 0x8c, 0x3a, 0x26, 0x55, 0xe1, 0xef, 0xde, 0x25, 0x75,
+ 0x12, 0xba, 0xec, 0x85, 0x6c, 0x2b, 0x33, 0xbc, 0xc7, 0x22, 0x00, 0x8c, 0x0a, 0xbd, 0x9c, 0xfd,
+ 0x3d, 0x84, 0x6b, 0xab, 0x06, 0x33, 0x5b, 0xdd, 0x8e, 0x8c, 0xbf, 0x5d, 0xcf, 0xe0, 0x93, 0x00,
+ 0x77, 0x4b, 0xea, 0x18, 0x35, 0x9b, 0xd6, 0x05, 0x9f, 0x42, 0xe8, 0x96, 0xeb, 0x12, 0x8c, 0x01,
+ 0x9e, 0x7c, 0x07, 0x8a, 0x6d, 0xe3, 0xe1, 0x9a, 0x6a, 0xa9, 0xec, 0xef, 0xaa, 0x22, 0x2f, 0xee,
+ 0x84, 0x28, 0x8c, 0xd2, 0x2d, 0xfe, 0x00, 0xae, 0x49, 0x91, 0x3b, 0x46, 0x27, 0xf2, 0x6d, 0x3c,
+ 0x14, 0x3a, 0x3c, 0x1a, 0x24, 0x42, 0xa1, 0x08, 0x05, 0x02, 0x43, 0xd6, 0x60, 0xd6, 0xf4, 0xa8,
+ 0xc1, 0xe8, 0x66, 0x63, 0xd7, 0x65, 0xeb, 0x0f, 0x2d, 0x9f, 0x09, 0xa9, 0x85, 0x4a, 0x49, 0x51,
+ 0xcf, 0xae, 0x26, 0xf0, 0xd8, 0xd3, 0x62, 0xf1, 0x6f, 0xf2, 0x40, 0xd6, 0xdb, 0x16, 0x63, 0x34,
+ 0xe6, 0x78, 0x37, 0x21, 0x5f, 0xf3, 0xdc, 0x23, 0xea, 0x29, 0x05, 0xa6, 0x15, 0xcb, 0x7c, 0x45,
+ 0x40, 0x51, 0x61, 0xf9, 0x8c, 0xce, 0xe7, 0x77, 0x87, 0xda, 0x3c, 0x30, 0x8e, 0xc5, 0x67, 0xf4,
+ 0x55, 0x8d, 0xc1, 0x08, 0x15, 0xef, 0x29, 0xf5, 0x4b, 0xc4, 0xbb, 0x6c, 0xbc, 0xa7, 0x56, 0x43,
+ 0x14, 0x46, 0xe9, 0xc8, 0x3d, 0x28, 0x70, 0x2f, 0x70, 0x82, 0x18, 0x79, 0xe1, 0x08, 0x7c, 0x85,
+ 0x9b, 0xed, 0xa1, 0x6a, 0x8a, 0x9a, 0x09, 0x67, 0xd8, 0x31, 0x7c, 0xff, 0x81, 0xeb, 0xd5, 0xd5,
+ 0x82, 0xa2, 0x1f, 0x86, 0x7b, 0xaa, 0x29, 0x6a, 0x26, 0xe9, 0x4b, 0x95, 0xfc, 0x13, 0x59, 0xaa,
+ 0x4c, 0x5c, 0x74, 0xa9, 0x52, 0x18, 0xf0, 0x52, 0xe5, 0xb3, 0x68, 0x70, 0x9a, 0x14, 0xc1, 0xe9,
+ 0xc3, 0xcb, 0x06, 0x82, 0x1e, 0xf3, 0x1c, 0xd5, 0xb4, 0xf4, 0xf9, 0x18, 0xcc, 0x26, 0xc3, 0x10,
+ 0xf9, 0x18, 0x26, 0x4c, 0x19, 0x2b, 0x04, 0x93, 0xe2, 0x72, 0xf5, 0xd2, 0xc1, 0xb7, 0x37, 0xf2,
+ 0x54, 0x8a, 0x3c, 0xc8, 0x28, 0x0c, 0x06, 0x02, 0xc9, 0x27, 0x19, 0x98, 0x34, 0x83, 0x70, 0xa1,
+ 0x56, 0x3d, 0x97, 0x16, 0x9f, 0x12, 0x7e, 0x2a, 0x53, 0x67, 0xa7, 0x0b, 0x93, 0x1a, 0x83, 0xa1,
+ 0xd0, 0xc5, 0x5f, 0x8c, 0x41, 0x31, 0x1a, 0x29, 0xbe, 0x1f, 0x19, 0x6f, 0xd9, 0x1f, 0xbf, 0x16,
+ 0xf1, 0x22, 0x9d, 0xc5, 0x84, 0x4a, 0x70, 0x6a, 0xee, 0x57, 0xf7, 0x6a, 0x1f, 0x51, 0x93, 0xf1,
+ 0xc1, 0x09, 0x23, 0x46, 0x08, 0x8b, 0x4c, 0x2f, 0x1d, 0xc8, 0xf9, 0x1d, 0x6a, 0xaa, 0xcf, 0xdd,
+ 0x1d, 0xc4, 0xb4, 0x22, 0x75, 0xaf, 0x76, 0xa8, 0x19, 0x86, 0x56, 0xfe, 0x0b, 0x85, 0x24, 0xf2,
+ 0x10, 0xf2, 0x3e, 0x33, 0x58, 0xd7, 0x57, 0x4b, 0xbd, 0xbd, 0x01, 0xca, 0x14, 0x7c, 0xc3, 0x78,
+ 0x2a, 0x7f, 0xa3, 0x92, 0xb7, 0xf8, 0x65, 0x06, 0x66, 0x22, 0xd4, 0xdb, 0x96, 0xcf, 0xc8, 0x7b,
+ 0x3d, 0x3d, 0x5c, 0xbe, 0x58, 0x0f, 0xf3, 0xd6, 0xa2, 0x7f, 0xb5, 0x83, 0x04, 0x90, 0x48, 0xef,
+ 0xba, 0x30, 0x6e, 0x31, 0xda, 0xf6, 0x4b, 0x63, 0xc2, 0x59, 0xdf, 0x18, 0xdc, 0xa7, 0x56, 0xa6,
+ 0x94, 0xd8, 0xf1, 0x4d, 0x2e, 0x00, 0xa5, 0x9c, 0xc5, 0xff, 0xf8, 0x4e, 0xec, 0x13, 0x79, 0xb7,
+ 0x8b, 0x94, 0x92, 0x83, 0x2a, 0x5d, 0x7f, 0x37, 0x9c, 0xf5, 0xc2, 0x94, 0x32, 0x82, 0xc3, 0x18,
+ 0x25, 0x39, 0x86, 0x02, 0xa3, 0xed, 0x8e, 0x6d, 0xb0, 0x20, 0x0b, 0xd8, 0xb8, 0xe4, 0x17, 0x1c,
+ 0x28, 0x76, 0x32, 0xcc, 0x07, 0xbf, 0x50, 0x8b, 0x21, 0x6d, 0x98, 0xf0, 0xa9, 0x77, 0xdf, 0x32,
+ 0xa9, 0x32, 0x8f, 0x3b, 0x97, 0x94, 0x58, 0x95, 0xdc, 0xa4, 0xcf, 0xab, 0x1f, 0x18, 0xc8, 0x20,
+ 0xdf, 0x84, 0x09, 0x8f, 0x76, 0x6c, 0xcb, 0x34, 0xc4, 0xb4, 0x37, 0x2e, 0xc9, 0x50, 0x82, 0x30,
+ 0xc0, 0x91, 0x1f, 0xc0, 0x78, 0xdb, 0x72, 0x2c, 0x57, 0xa5, 0x04, 0xef, 0x0c, 0xd6, 0x4d, 0xca,
+ 0x3b, 0x9c, 0xb7, 0x0c, 0xb7, 0x7a, 0x58, 0x05, 0x0c, 0xa5, 0x58, 0x91, 0xa3, 0x9a, 0x6a, 0x19,
+ 0xa9, 0x56, 0xa5, 0xef, 0x0d, 0x58, 0x07, 0xbd, 0x4a, 0x8d, 0x47, 0xfd, 0x00, 0x8c, 0x5a, 0x3e,
+ 0xf9, 0x18, 0x72, 0x0d, 0xcb, 0xe6, 0x2b, 0x51, 0xae, 0xc7, 0xdb, 0x03, 0xd6, 0xe3, 0x8e, 0x65,
+ 0x53, 0xa9, 0x43, 0x98, 0xa2, 0x5a, 0x36, 0x45, 0x21, 0x53, 0x74, 0x84, 0x47, 0x25, 0x8f, 0x01,
+ 0x25, 0xeb, 0x49, 0x05, 0x50, 0xb1, 0x4f, 0x74, 0x44, 0x00, 0x46, 0x2d, 0x9f, 0xfc, 0x51, 0x06,
+ 0x26, 0x1e, 0xd0, 0x5a, 0xcb, 0x75, 0x8f, 0xd4, 0x6c, 0xfc, 0xee, 0x80, 0x75, 0x79, 0x4b, 0x72,
+ 0x97, 0xaa, 0xe8, 0xe5, 0xb1, 0x82, 0x62, 0x20, 0x9c, 0x8f, 0x88, 0xd1, 0x3e, 0xee, 0x94, 0x60,
+ 0x28, 0x23, 0xb2, 0xd2, 0x3e, 0xee, 0x24, 0x46, 0x64, 0x65, 0x67, 0x7f, 0x0f, 0x85, 0x4c, 0xee,
+ 0x1a, 0x47, 0x46, 0xe3, 0xc8, 0x28, 0x15, 0x87, 0xe2, 0x1a, 0x5b, 0x9c, 0x77, 0xc2, 0x35, 0x04,
+ 0x0c, 0xa5, 0x58, 0xfe, 0xed, 0xed, 0x63, 0xc6, 0x4a, 0x57, 0x86, 0xf2, 0xed, 0x3b, 0xc7, 0x8c,
+ 0x25, 0xbe, 0x7d, 0x67, 0xff, 0xe0, 0x00, 0x85, 0x4c, 0x2e, 0xdb, 0x31, 0x98, 0x5f, 0x9a, 0x1a,
+ 0x8a, 0xec, 0x5d, 0x83, 0xf9, 0x09, 0xd9, 0xbb, 0x2b, 0x07, 0x55, 0x14, 0x32, 0xc9, 0x7d, 0xc8,
+ 0xfa, 0x8e, 0x5f, 0x9a, 0x16, 0xa2, 0xdf, 0x1a, 0xb0, 0xe8, 0xaa, 0xa3, 0x24, 0xeb, 0xad, 0xcd,
+ 0xea, 0x6e, 0x15, 0xb9, 0x40, 0x21, 0xf7, 0xd8, 0x2f, 0xcd, 0x0c, 0x47, 0xee, 0x71, 0x8f, 0xdc,
+ 0x7d, 0x2e, 0xf7, 0xd8, 0xe7, 0x79, 0x70, 0xbe, 0xd3, 0xad, 0x55, 0xbb, 0xb5, 0xd2, 0xac, 0x90,
+ 0xfd, 0xbd, 0x01, 0xcb, 0xde, 0x13, 0xcc, 0xa5, 0x78, 0xbd, 0x82, 0x90, 0x40, 0x54, 0x92, 0x85,
+ 0x12, 0x52, 0x6a, 0x69, 0x6e, 0x28, 0x4a, 0x6c, 0x08, 0x6e, 0x09, 0x25, 0x24, 0x10, 0x95, 0xe4,
+ 0x40, 0x09, 0xdb, 0xa8, 0x95, 0xc8, 0xb0, 0x94, 0xb0, 0x8d, 0x14, 0x25, 0x6c, 0x43, 0x2a, 0x61,
+ 0x1b, 0x35, 0x6e, 0xfa, 0xad, 0x7a, 0xc3, 0x2f, 0x5d, 0x1d, 0x8a, 0xe9, 0xdf, 0xad, 0x37, 0x92,
+ 0xa6, 0x7f, 0x77, 0xed, 0x4e, 0x15, 0x85, 0x4c, 0x1e, 0x72, 0x7c, 0xdb, 0x30, 0x8f, 0x4a, 0xd7,
+ 0x86, 0x12, 0x72, 0xaa, 0x9c, 0x77, 0x22, 0xe4, 0x08, 0x18, 0x4a, 0xb1, 0xe4, 0xaf, 0x32, 0x50,
+ 0xf4, 0x99, 0xeb, 0x19, 0x4d, 0xba, 0xe1, 0x59, 0xf5, 0xd2, 0xd3, 0x83, 0xc9, 0xc4, 0x92, 0x6a,
+ 0x84, 0x12, 0xa4, 0x32, 0x3a, 0x8b, 0x8f, 0x60, 0x30, 0xaa, 0x08, 0xf9, 0xbb, 0x0c, 0x4c, 0x1b,
+ 0xb1, 0xed, 0xc6, 0xd2, 0x33, 0x42, 0xb7, 0xda, 0xa0, 0xa7, 0x84, 0xf8, 0x9e, 0xa6, 0x50, 0xef,
+ 0x19, 0xa5, 0xde, 0x74, 0x1c, 0x89, 0x09, 0x8d, 0x84, 0xf9, 0xfa, 0xcc, 0xb3, 0x3a, 0xb4, 0xf4,
+ 0xec, 0x50, 0xcc, 0xb7, 0x2a, 0x98, 0x27, 0xcc, 0x57, 0x02, 0x51, 0x49, 0x16, 0x53, 0x37, 0x95,
+ 0xa9, 0x6f, 0xa9, 0x34, 0x94, 0xa9, 0x3b, 0x48, 0xac, 0xe3, 0x53, 0xb7, 0x82, 0x62, 0x20, 0x9c,
+ 0xdb, 0xb2, 0x47, 0xeb, 0x96, 0x5f, 0x7a, 0x6e, 0x28, 0xb6, 0x8c, 0x9c, 0x77, 0xc2, 0x96, 0x05,
+ 0x0c, 0xa5, 0x58, 0x1e, 0xce, 0x1d, 0xff, 0xb8, 0x34, 0x3f, 0x94, 0x70, 0xbe, 0xeb, 0x1f, 0x27,
+ 0xc2, 0xf9, 0x6e, 0x75, 0x1f, 0xb9, 0x40, 0x15, 0xce, 0x6d, 0xdf, 0xf0, 0x4a, 0xdf, 0x18, 0x52,
+ 0x38, 0xe7, 0xcc, 0x7b, 0xc2, 0x39, 0x07, 0xa2, 0x92, 0x2c, 0xac, 0x40, 0x9c, 0xf6, 0x59, 0x66,
+ 0xe9, 0xf9, 0xa1, 0x58, 0xc1, 0x86, 0xe4, 0x9e, 0xb0, 0x02, 0x05, 0xc5, 0x40, 0xf8, 0x7c, 0x17,
+ 0x20, 0xcc, 0x01, 0x52, 0x76, 0x51, 0xf6, 0xa3, 0xbb, 0x28, 0xc5, 0xe5, 0xd7, 0xfa, 0xde, 0x51,
+ 0xaa, 0xfe, 0xfa, 0x8a, 0xc7, 0xac, 0x86, 0x61, 0xb2, 0xc8, 0x16, 0xcc, 0xfc, 0x9f, 0x67, 0x60,
+ 0x2a, 0xb6, 0xee, 0x4f, 0x11, 0xdd, 0x8a, 0x8b, 0xc6, 0xc1, 0x6f, 0x86, 0x47, 0x35, 0xfa, 0xe3,
+ 0x0c, 0x4c, 0xea, 0x0c, 0x20, 0x45, 0x9b, 0x7a, 0x5c, 0x9b, 0xcb, 0xee, 0x57, 0x08, 0x51, 0xe9,
+ 0x9a, 0xf0, 0xbe, 0x89, 0xa5, 0x02, 0xc3, 0xef, 0x1b, 0x2d, 0x2e, 0x5d, 0xa3, 0x1f, 0x66, 0xe0,
+ 0x4a, 0x34, 0x21, 0x48, 0x51, 0xc8, 0x8c, 0x2b, 0xb4, 0x73, 0x49, 0x85, 0x94, 0xb4, 0x55, 0xd7,
+ 0x61, 0xf4, 0x21, 0x4b, 0x8e, 0x93, 0xce, 0x0b, 0x86, 0x3f, 0x4e, 0x89, 0x03, 0xd5, 0x44, 0xaf,
+ 0x40, 0x98, 0x24, 0xa4, 0xa8, 0x42, 0xe3, 0xaa, 0x5c, 0xf6, 0xe4, 0x44, 0xca, 0x3a, 0xdf, 0x7a,
+ 0x75, 0xc6, 0x30, 0xfc, 0x5e, 0xe1, 0x99, 0xc8, 0x39, 0x9a, 0xfc, 0x49, 0x06, 0x26, 0x75, 0xfe,
+ 0x30, 0xfc, 0x4e, 0xe1, 0x79, 0x89, 0x9c, 0xe1, 0x7b, 0x55, 0xf9, 0xc3, 0x0c, 0x14, 0x82, 0x7c,
+ 0x62, 0xf8, 0x26, 0x5b, 0xdd, 0xad, 0x9e, 0xd3, 0x25, 0x42, 0x8f, 0xe3, 0x91, 0xe9, 0xb1, 0x7f,
+ 0x9e, 0x1e, 0x9f, 0x66, 0xa0, 0x18, 0xc9, 0x35, 0x52, 0x54, 0x69, 0xc4, 0x55, 0xb9, 0xec, 0x06,
+ 0xa9, 0x12, 0x76, 0xbe, 0x36, 0x91, 0xa4, 0x63, 0xf8, 0xda, 0x28, 0x61, 0x8f, 0xd4, 0x26, 0xc8,
+ 0x3e, 0x46, 0xa2, 0x0d, 0x17, 0x76, 0xbe, 0x3b, 0xeb, 0x4c, 0x64, 0xf8, 0xee, 0xcc, 0x33, 0x9c,
+ 0x47, 0x04, 0xb9, 0x30, 0x2d, 0x19, 0xbe, 0x3f, 0x4b, 0x59, 0xe9, 0xba, 0xfc, 0x65, 0x06, 0x66,
+ 0x93, 0xb9, 0x49, 0x8a, 0x46, 0x47, 0x71, 0x8d, 0x0e, 0x2f, 0xab, 0x51, 0x44, 0x62, 0xba, 0x5e,
+ 0x7f, 0x9b, 0x81, 0xab, 0x29, 0x79, 0x49, 0x8a, 0x6a, 0x4e, 0x5c, 0xb5, 0xb7, 0x87, 0x55, 0xe0,
+ 0x91, 0xb4, 0xec, 0x48, 0x62, 0x32, 0x7c, 0xcb, 0x56, 0xc2, 0xd2, 0xb5, 0xf9, 0x2c, 0x03, 0x57,
+ 0xa2, 0x09, 0x4a, 0x8a, 0x3a, 0xcd, 0xb8, 0x3a, 0xfb, 0x03, 0x3f, 0x67, 0x4c, 0xda, 0x77, 0x98,
+ 0xaa, 0x0c, 0xdf, 0xbe, 0xa5, 0xac, 0xf3, 0xe7, 0x89, 0x20, 0x71, 0x19, 0xfe, 0x3c, 0xb1, 0x5b,
+ 0xdd, 0x7f, 0xe4, 0x3c, 0xa1, 0x93, 0x98, 0x51, 0xcc, 0x13, 0x42, 0xd8, 0xf9, 0x16, 0x13, 0x4d,
+ 0x66, 0x86, 0x6f, 0x31, 0x81, 0xb4, 0x54, 0x7d, 0x16, 0x19, 0xcc, 0xf5, 0x1c, 0xfc, 0x91, 0x0f,
+ 0xf5, 0xd1, 0xa2, 0x3c, 0xca, 0xfb, 0xad, 0xfe, 0xf3, 0xa4, 0x47, 0x9f, 0x20, 0xfe, 0x4b, 0x16,
+ 0x66, 0x12, 0x39, 0x03, 0x59, 0x82, 0x49, 0xc1, 0x4c, 0x94, 0x6b, 0xca, 0xb3, 0xb5, 0x39, 0xd5,
+ 0x7c, 0x72, 0x3d, 0x40, 0x60, 0x48, 0x43, 0x3e, 0xcf, 0xc0, 0xcc, 0x03, 0x83, 0x99, 0xad, 0x3d,
+ 0x83, 0xb5, 0xe4, 0x31, 0xf0, 0x80, 0x66, 0x90, 0xb7, 0xe2, 0x5c, 0x2b, 0xcf, 0x2a, 0x3d, 0x66,
+ 0x12, 0x08, 0x4c, 0xca, 0x27, 0xb7, 0x61, 0xa2, 0xe3, 0xda, 0xb6, 0xe5, 0x34, 0xc5, 0xb1, 0x5b,
+ 0xa4, 0x16, 0x67, 0x4f, 0x82, 0x31, 0xc0, 0xc7, 0xeb, 0x25, 0x73, 0x03, 0x39, 0x82, 0x49, 0x74,
+ 0xe9, 0xa8, 0x2a, 0x10, 0xfe, 0x20, 0x0b, 0xa4, 0xd7, 0xca, 0x1e, 0x57, 0xdb, 0x7b, 0x13, 0xf2,
+ 0x66, 0x38, 0x68, 0x91, 0xea, 0x1d, 0xd5, 0xb7, 0x0a, 0x2b, 0x0b, 0xe6, 0x7c, 0x6a, 0x76, 0x3d,
+ 0xaa, 0xfa, 0x34, 0x52, 0x30, 0x27, 0xe1, 0xa8, 0x29, 0x62, 0xf5, 0x25, 0xb9, 0xc7, 0xd6, 0x97,
+ 0x7c, 0xd6, 0x5b, 0xa6, 0xf8, 0xe1, 0xc0, 0xdd, 0x6d, 0x54, 0xc3, 0xf0, 0xcb, 0x09, 0x98, 0xeb,
+ 0x59, 0x15, 0x92, 0x79, 0x18, 0xb3, 0x64, 0x61, 0x58, 0xb6, 0x02, 0x4a, 0xf4, 0xd8, 0xe6, 0x1a,
+ 0x8e, 0x59, 0x75, 0xc2, 0xc2, 0x73, 0xb7, 0x61, 0x24, 0xba, 0xf2, 0x10, 0xb8, 0xe7, 0x94, 0xed,
+ 0x45, 0x18, 0x77, 0x1f, 0x38, 0xd4, 0x53, 0x45, 0x55, 0x7a, 0x3f, 0xed, 0x1e, 0x07, 0xa2, 0xc4,
+ 0x89, 0x2a, 0x6c, 0xda, 0x71, 0x7d, 0x8b, 0xb9, 0x5e, 0x6f, 0x15, 0xb6, 0xc6, 0x60, 0x84, 0x8a,
+ 0x2c, 0x42, 0x5e, 0x6a, 0x25, 0x86, 0x72, 0xb2, 0x02, 0xdc, 0x9a, 0xe4, 0x82, 0x02, 0x15, 0x86,
+ 0xdc, 0x83, 0x82, 0xd1, 0xb1, 0x0e, 0xdc, 0x23, 0xea, 0xa8, 0xaa, 0xa7, 0x7e, 0xea, 0xa9, 0x56,
+ 0xf6, 0x36, 0x45, 0x53, 0xd4, 0x4c, 0xc8, 0x07, 0x30, 0xa5, 0x3e, 0x4c, 0xb6, 0x51, 0x85, 0x85,
+ 0x17, 0xe4, 0x3a, 0x77, 0x76, 0xba, 0x30, 0xf5, 0x56, 0xb4, 0x3d, 0xc6, 0xd9, 0xc5, 0xcc, 0xbf,
+ 0xf0, 0x58, 0xf3, 0xbf, 0x09, 0x79, 0xc3, 0x64, 0xd6, 0x7d, 0x5a, 0x9a, 0x14, 0xb4, 0xda, 0xa9,
+ 0x56, 0x04, 0x14, 0x15, 0x56, 0x94, 0xb7, 0xf1, 0x41, 0x52, 0xe1, 0x16, 0x12, 0xe5, 0x6d, 0x21,
+ 0x0a, 0xa3, 0x74, 0xe4, 0x35, 0x98, 0x92, 0x06, 0x52, 0x31, 0x7c, 0x7a, 0x88, 0xdb, 0xa5, 0xa2,
+ 0x68, 0xf8, 0xb4, 0x6a, 0x38, 0xb5, 0x11, 0x45, 0x62, 0x9c, 0x96, 0xac, 0xc0, 0x8c, 0x04, 0x1c,
+ 0x76, 0x6c, 0xd7, 0xa8, 0xf3, 0xe6, 0x57, 0x44, 0x73, 0x1d, 0x5e, 0x37, 0xe2, 0x68, 0x4c, 0xd2,
+ 0x93, 0x37, 0x80, 0xd4, 0xa9, 0x4d, 0x19, 0xbd, 0xeb, 0xba, 0x47, 0xf7, 0x9c, 0x3b, 0x96, 0x63,
+ 0xf9, 0xad, 0xd2, 0x94, 0xf8, 0xd4, 0x79, 0xc5, 0x85, 0xac, 0xf5, 0x50, 0x60, 0x4a, 0x2b, 0xf2,
+ 0xa7, 0x51, 0xdf, 0x97, 0xc7, 0x7f, 0x1f, 0x0c, 0x3a, 0x27, 0x1b, 0x95, 0xeb, 0x9f, 0x8d, 0x0b,
+ 0xd7, 0x8f, 0xa7, 0x60, 0x51, 0xf7, 0xce, 0x8c, 0xce, 0xbd, 0x97, 0x60, 0x92, 0xb3, 0xa5, 0x26,
+ 0xdb, 0x5c, 0x53, 0xa1, 0x5d, 0xcf, 0xe3, 0x7b, 0x01, 0x02, 0x43, 0x9a, 0x88, 0xdb, 0x66, 0xcf,
+ 0x75, 0xdb, 0xb7, 0xa1, 0x68, 0x88, 0x3a, 0x74, 0xe9, 0xb9, 0x7d, 0x95, 0x56, 0x8a, 0x92, 0xdc,
+ 0x95, 0xb0, 0x35, 0x46, 0x59, 0x91, 0x2a, 0x3c, 0x2d, 0xab, 0x63, 0xab, 0xd5, 0xed, 0x37, 0xa9,
+ 0x67, 0x35, 0x2c, 0x53, 0x16, 0xc7, 0x8e, 0x0b, 0xab, 0x7a, 0x41, 0xa9, 0xfe, 0xf4, 0x7a, 0x1a,
+ 0x11, 0xa6, 0xb7, 0x55, 0x7e, 0x62, 0x1b, 0xda, 0x4f, 0xf2, 0x3d, 0x7e, 0x12, 0x22, 0x31, 0x4e,
+ 0x7b, 0x8e, 0x91, 0x17, 0x2e, 0x6f, 0xe4, 0x93, 0x83, 0x32, 0xf2, 0xb8, 0x9d, 0x8d, 0xca, 0xc8,
+ 0x7f, 0x5a, 0x80, 0x99, 0x44, 0x6e, 0x9f, 0xba, 0x06, 0xcc, 0x3c, 0xe1, 0x35, 0xe0, 0x0d, 0xc8,
+ 0x31, 0x1e, 0x54, 0xc7, 0xe2, 0x55, 0xd1, 0x22, 0x9a, 0x0a, 0x0c, 0x37, 0x0f, 0xb3, 0x45, 0xcd,
+ 0xa3, 0xa0, 0xe0, 0x5f, 0xcd, 0x84, 0xda, 0x3c, 0x56, 0xa3, 0x48, 0x8c, 0xd3, 0x92, 0x6f, 0xc1,
+ 0xa4, 0x51, 0xaf, 0x7b, 0xd4, 0xf7, 0xa9, 0x2f, 0xd6, 0x8d, 0x93, 0xb2, 0x10, 0x72, 0x25, 0x00,
+ 0x62, 0x88, 0xe7, 0xb3, 0x47, 0xab, 0xde, 0xf0, 0x0f, 0x7d, 0xea, 0x09, 0x83, 0x8e, 0xdc, 0x01,
+ 0xe0, 0x5d, 0xc9, 0xe1, 0xa8, 0x29, 0x48, 0x1d, 0x66, 0x8e, 0xbc, 0xda, 0xea, 0xaa, 0x61, 0xb6,
+ 0xa8, 0x9a, 0xcd, 0xf2, 0x7d, 0x5f, 0x23, 0xd9, 0x8a, 0x73, 0xc0, 0x24, 0x4b, 0x25, 0x65, 0x8b,
+ 0x9e, 0x30, 0xa3, 0xf6, 0x75, 0xe6, 0xcc, 0x40, 0x4a, 0x94, 0x03, 0x26, 0x59, 0xf2, 0x19, 0xee,
+ 0xc8, 0xab, 0x05, 0x15, 0xd5, 0xc2, 0x7d, 0x22, 0x33, 0xdc, 0x56, 0x88, 0xc2, 0x28, 0x1d, 0xef,
+ 0xb0, 0x23, 0xaf, 0x86, 0xd4, 0xb0, 0xdb, 0x62, 0x0a, 0x8d, 0x74, 0xd8, 0x96, 0x82, 0xa3, 0xa6,
+ 0x20, 0x1d, 0x20, 0xfc, 0xeb, 0xc4, 0xb8, 0xeb, 0x42, 0x54, 0x31, 0x9b, 0x16, 0x97, 0x6f, 0xa5,
+ 0x7d, 0x8d, 0x26, 0x8a, 0x7e, 0xd0, 0x33, 0xdc, 0xa1, 0xb7, 0x7a, 0xf8, 0x60, 0x0a, 0x6f, 0xf2,
+ 0x0e, 0x3c, 0x7b, 0xe4, 0xd5, 0x54, 0xfd, 0xdd, 0x9e, 0x67, 0x39, 0xa6, 0xd5, 0x31, 0x64, 0x8d,
+ 0xba, 0x9c, 0x8b, 0x17, 0x94, 0xba, 0xcf, 0x6e, 0xa5, 0x93, 0xe1, 0x79, 0xed, 0xe3, 0x09, 0xc9,
+ 0x95, 0x81, 0x24, 0x24, 0x09, 0x77, 0x1d, 0x55, 0xa4, 0xf8, 0xe7, 0x0c, 0x10, 0x71, 0xbe, 0xb0,
+ 0xea, 0x3a, 0x7e, 0xb7, 0x4d, 0xbd, 0x0d, 0xcf, 0xed, 0x76, 0xf8, 0xcc, 0xd4, 0xe4, 0xff, 0x44,
+ 0xaa, 0x37, 0xf5, 0xcc, 0xb4, 0x11, 0x20, 0x30, 0xa4, 0xe1, 0xab, 0x29, 0xd7, 0xae, 0x53, 0x7d,
+ 0x67, 0x41, 0xaf, 0xa6, 0xee, 0x09, 0x28, 0x2a, 0x2c, 0xd9, 0x80, 0x39, 0x8f, 0xd6, 0x0c, 0xdb,
+ 0x70, 0x78, 0x0a, 0xed, 0x19, 0x8c, 0x36, 0x4f, 0x94, 0x4f, 0x3f, 0xa7, 0x9a, 0xcc, 0x61, 0x92,
+ 0x00, 0x7b, 0xdb, 0x2c, 0x7e, 0x99, 0x87, 0xd9, 0xe4, 0xc1, 0xc8, 0xe3, 0xf2, 0x28, 0x3e, 0xdf,
+ 0x1a, 0x1e, 0xb3, 0x22, 0x37, 0x3a, 0xc2, 0xf9, 0x36, 0x40, 0x60, 0x48, 0xc3, 0xd7, 0xdf, 0xcc,
+ 0xed, 0x58, 0x66, 0x72, 0xfd, 0x7d, 0xc0, 0x81, 0x28, 0x71, 0xe9, 0xd7, 0x04, 0x72, 0x23, 0xbb,
+ 0x26, 0xa0, 0x0a, 0xff, 0xc7, 0x07, 0x5c, 0xf8, 0xdf, 0xdf, 0x45, 0xc9, 0x4f, 0xa3, 0x0e, 0x21,
+ 0xab, 0x34, 0xdf, 0x1f, 0xf0, 0xa9, 0x57, 0x1f, 0x17, 0x98, 0x7e, 0x94, 0x81, 0x29, 0x33, 0x6a,
+ 0xcf, 0xea, 0x5a, 0xc4, 0xfe, 0x20, 0x54, 0x8a, 0x39, 0x8a, 0xcc, 0x4a, 0x62, 0x20, 0x8c, 0x8b,
+ 0x26, 0x7b, 0x70, 0xcd, 0xb6, 0xda, 0x16, 0x93, 0xcb, 0xb4, 0x3d, 0xea, 0x55, 0xa9, 0xe9, 0x3a,
+ 0x75, 0x11, 0x32, 0xb3, 0x95, 0xe7, 0xd5, 0x67, 0x5c, 0xdb, 0x4e, 0xa1, 0xc1, 0xd4, 0x96, 0xe4,
+ 0x36, 0x4c, 0xdc, 0xa7, 0x9e, 0xcf, 0x8d, 0x18, 0xe2, 0x97, 0x0b, 0xdf, 0x94, 0x60, 0x0c, 0xf0,
+ 0x97, 0x8b, 0x0d, 0xff, 0x9a, 0x83, 0x99, 0xc4, 0x81, 0xdf, 0xe3, 0x3c, 0x4c, 0x3b, 0xcc, 0xd8,
+ 0x23, 0x1c, 0xe6, 0x25, 0x28, 0x98, 0xb6, 0x45, 0x1d, 0xb6, 0x59, 0x57, 0x8e, 0x15, 0xd6, 0xfe,
+ 0x4a, 0xf8, 0x1a, 0x6a, 0x8a, 0x27, 0xed, 0x5e, 0x51, 0x3f, 0x18, 0xbf, 0xe8, 0x2d, 0x9c, 0xfc,
+ 0x30, 0x2f, 0x0c, 0x4f, 0x0c, 0x64, 0xbe, 0x49, 0x0c, 0xec, 0xa8, 0xe6, 0x9b, 0x7f, 0xcc, 0xc1,
+ 0x6c, 0xf2, 0xe8, 0xf6, 0x71, 0x46, 0x75, 0x1b, 0x26, 0xfc, 0xae, 0xb8, 0x49, 0xa2, 0xcc, 0x4a,
+ 0xdb, 0x7b, 0x55, 0x82, 0x31, 0xc0, 0xa7, 0x1b, 0x4b, 0xf6, 0x89, 0x18, 0x4b, 0xee, 0xa2, 0xc6,
+ 0x32, 0xe8, 0xc8, 0xfd, 0x69, 0xef, 0x7d, 0xd2, 0xf7, 0x07, 0x7c, 0xd8, 0x3e, 0x2a, 0x6b, 0xf9,
+ 0xf7, 0x1c, 0x4c, 0xc7, 0x8f, 0x2b, 0xf8, 0x62, 0xb5, 0xe5, 0xfa, 0x4c, 0x2d, 0xe1, 0x95, 0xcd,
+ 0xe8, 0xc5, 0xea, 0xdd, 0x10, 0x85, 0x51, 0xba, 0x8b, 0x05, 0xa6, 0xdb, 0x30, 0xa1, 0x6e, 0x28,
+ 0xaa, 0xb8, 0xa4, 0x0d, 0x4d, 0xdd, 0x62, 0xc4, 0x00, 0xff, 0x7f, 0x51, 0xc9, 0xf6, 0xc9, 0x0f,
+ 0x7b, 0xa3, 0xd2, 0xbb, 0x03, 0x3d, 0x9b, 0x1a, 0xd9, 0x75, 0xf5, 0x71, 0x98, 0xeb, 0x29, 0x59,
+ 0x88, 0xef, 0xce, 0x64, 0x2e, 0xb0, 0x3b, 0xf3, 0x3a, 0x4c, 0x0b, 0x3b, 0xda, 0x4b, 0xec, 0xe9,
+ 0xe8, 0x32, 0xd5, 0x83, 0x18, 0x16, 0x13, 0xd4, 0x17, 0x5b, 0x6d, 0xbe, 0x0e, 0xd3, 0x7e, 0xb7,
+ 0xe6, 0x9b, 0x9e, 0xd5, 0xe1, 0x06, 0xb1, 0xb9, 0xa6, 0x76, 0x7c, 0xb5, 0x90, 0x6a, 0x0c, 0x8b,
+ 0x09, 0x6a, 0xd2, 0x14, 0xd7, 0x8c, 0xeb, 0xd4, 0x61, 0x96, 0x61, 0xab, 0x9c, 0xb2, 0xaf, 0xdb,
+ 0xb2, 0xd7, 0xd4, 0x4d, 0xe4, 0x18, 0x0b, 0xec, 0x61, 0x4a, 0x6a, 0x30, 0x2f, 0x77, 0x59, 0xa2,
+ 0x0a, 0xe9, 0x3d, 0x1a, 0xb9, 0xa4, 0x5c, 0x54, 0x4a, 0xcf, 0xaf, 0x9d, 0x4b, 0x89, 0x8f, 0xe0,
+ 0xd2, 0xe7, 0x15, 0xd9, 0x2d, 0x98, 0x09, 0xb5, 0xf4, 0xef, 0x58, 0x76, 0x90, 0xeb, 0xfe, 0x3f,
+ 0xd5, 0xe8, 0xb9, 0x35, 0xda, 0xf1, 0xa8, 0x69, 0x30, 0x5a, 0x5f, 0x8d, 0x13, 0x62, 0xb2, 0xe5,
+ 0x30, 0xb6, 0x8b, 0x7a, 0x4c, 0x70, 0x54, 0xf6, 0xff, 0x9f, 0x79, 0x6e, 0xff, 0x89, 0xa3, 0x58,
+ 0xb2, 0x08, 0x79, 0x61, 0x72, 0x3c, 0xc8, 0xea, 0xcd, 0x46, 0x61, 0x8b, 0x3e, 0x2a, 0xcc, 0x05,
+ 0x36, 0x70, 0xd4, 0xdc, 0x9e, 0x3d, 0x67, 0x6e, 0xef, 0xc0, 0x55, 0x66, 0xfb, 0x07, 0x5e, 0xd7,
+ 0x67, 0xab, 0xd4, 0x63, 0xbe, 0xb2, 0xc8, 0x5c, 0xdf, 0x0f, 0x80, 0x1c, 0x6c, 0x57, 0x93, 0x5c,
+ 0x30, 0x8d, 0x35, 0xb7, 0x4b, 0x66, 0xfb, 0x2b, 0xb6, 0xed, 0x3e, 0x08, 0x4e, 0x05, 0xc2, 0x90,
+ 0xab, 0x82, 0xa9, 0xb6, 0xcb, 0x83, 0xed, 0xea, 0x39, 0x94, 0xf8, 0x08, 0x2e, 0x64, 0x47, 0x7c,
+ 0xd5, 0x9b, 0x86, 0x6d, 0xd5, 0x0d, 0x46, 0xf9, 0xa4, 0x24, 0x76, 0x56, 0xa4, 0xd1, 0x7f, 0x43,
+ 0x31, 0xe7, 0x2a, 0x27, 0x49, 0x30, 0xad, 0xdd, 0xb0, 0x9e, 0xa1, 0x49, 0x9d, 0xc3, 0x0a, 0x4f,
+ 0x64, 0x0e, 0x9b, 0x7c, 0xac, 0xf3, 0xc6, 0xfc, 0x0d, 0x06, 0xe4, 0x6f, 0x09, 0x93, 0x1f, 0x95,
+ 0xbf, 0xfd, 0x53, 0x0e, 0x66, 0x93, 0xf5, 0x20, 0x5f, 0x77, 0x61, 0x13, 0x7d, 0xf5, 0x60, 0x6c,
+ 0x10, 0xaf, 0x1e, 0x2c, 0xc1, 0x24, 0x37, 0x3a, 0xbf, 0x63, 0x98, 0xc1, 0x63, 0x0e, 0x7a, 0xda,
+ 0xdb, 0x0d, 0x10, 0x18, 0xd2, 0x90, 0x79, 0x18, 0xab, 0xd7, 0xd4, 0x5d, 0x56, 0x7d, 0x6c, 0xba,
+ 0x56, 0xc1, 0xb1, 0x7a, 0x8d, 0xdc, 0x82, 0x82, 0x5a, 0x31, 0x05, 0x27, 0x8d, 0x42, 0xac, 0x5a,
+ 0x4e, 0xf9, 0xa8, 0xb1, 0xc3, 0x5a, 0xa3, 0x0c, 0x61, 0x63, 0x22, 0x39, 0x72, 0xa3, 0xb2, 0x9a,
+ 0x5f, 0xe4, 0xe0, 0x6a, 0x4a, 0xbd, 0x76, 0x7c, 0xc0, 0x32, 0x17, 0x18, 0xb0, 0x63, 0xc8, 0x37,
+ 0x2c, 0x9b, 0x51, 0x6f, 0x40, 0x47, 0xd9, 0x81, 0x52, 0x77, 0x04, 0x53, 0x39, 0x4f, 0xc8, 0xff,
+ 0x51, 0x09, 0xe2, 0xde, 0x7b, 0x4d, 0x6c, 0x16, 0x06, 0x3b, 0x14, 0xc1, 0x85, 0xda, 0xac, 0x1a,
+ 0xef, 0x0b, 0x5d, 0x80, 0xdf, 0x48, 0xe1, 0x10, 0xee, 0xa0, 0xa4, 0x61, 0x31, 0x55, 0x2a, 0x59,
+ 0x05, 0xd0, 0xc5, 0x31, 0xc1, 0xc9, 0xc0, 0x8b, 0x67, 0xa7, 0x0b, 0xa0, 0xab, 0x67, 0xfc, 0x5f,
+ 0x89, 0x8d, 0xc8, 0x48, 0x6f, 0x8b, 0x39, 0x2d, 0xd2, 0x2c, 0xfe, 0x6e, 0xcf, 0xf8, 0x40, 0xde,
+ 0xed, 0x49, 0x19, 0xde, 0x91, 0x25, 0xe6, 0x59, 0x98, 0x8e, 0x0f, 0x24, 0xb9, 0x09, 0xf9, 0x8e,
+ 0x47, 0x1b, 0xd6, 0xc3, 0xe4, 0xa3, 0x31, 0x7b, 0x02, 0x8a, 0x0a, 0x4b, 0x5c, 0xc8, 0xdb, 0x46,
+ 0x8d, 0xbb, 0xb8, 0x7c, 0x73, 0x60, 0xe3, 0xd2, 0xf7, 0xe7, 0x55, 0x88, 0xd2, 0x02, 0xb7, 0x05,
+ 0x7b, 0x54, 0x62, 0xb8, 0xc0, 0x86, 0x45, 0xed, 0xba, 0x3c, 0x06, 0x1d, 0x86, 0xc0, 0x3b, 0x82,
+ 0x3d, 0x2a, 0x31, 0xe4, 0x5d, 0x98, 0x94, 0x2f, 0xed, 0xd4, 0x2b, 0x27, 0x6a, 0x6d, 0xf2, 0xff,
+ 0x2f, 0x66, 0xb2, 0x07, 0x56, 0x9b, 0x86, 0xee, 0xb8, 0x1a, 0x30, 0xc1, 0x90, 0x1f, 0x59, 0x06,
+ 0x30, 0x1a, 0x8c, 0x7a, 0x55, 0x66, 0x78, 0x4c, 0x2d, 0x40, 0x74, 0xfd, 0xc6, 0x8a, 0xc6, 0x60,
+ 0x84, 0x6a, 0xf1, 0x97, 0x39, 0x98, 0x8e, 0xd7, 0x9d, 0x3f, 0xa1, 0x23, 0xec, 0x97, 0xa0, 0x20,
+ 0x96, 0x82, 0x2b, 0x9e, 0x93, 0x7c, 0xa3, 0xeb, 0x40, 0xc1, 0x51, 0x53, 0x10, 0x84, 0x49, 0xe3,
+ 0xeb, 0x3d, 0xbb, 0x26, 0xcf, 0xed, 0xf4, 0x83, 0x6b, 0x21, 0x1b, 0xce, 0xd3, 0x0f, 0xc8, 0xfb,
+ 0x5b, 0x37, 0x0a, 0x9e, 0x1a, 0x8c, 0x21, 0x1b, 0x6e, 0xf9, 0x1e, 0x6d, 0x06, 0xeb, 0xc1, 0x88,
+ 0xe5, 0xa3, 0x80, 0xa2, 0xc2, 0x92, 0xdb, 0x30, 0xe1, 0xb9, 0x36, 0x5d, 0xc1, 0x5d, 0x75, 0x6c,
+ 0xad, 0x37, 0x0c, 0x50, 0x82, 0x31, 0xc0, 0x0f, 0x23, 0x59, 0x8e, 0x1b, 0xc0, 0xa8, 0x02, 0xc5,
+ 0x3f, 0x8c, 0xc3, 0x74, 0xfc, 0xaa, 0x41, 0x7c, 0x58, 0x33, 0x43, 0x18, 0xd6, 0xb1, 0x41, 0x0f,
+ 0x6b, 0xf6, 0x91, 0xc3, 0xfa, 0x22, 0x8c, 0x1f, 0x77, 0x69, 0x37, 0x78, 0x0b, 0x4e, 0x27, 0xe2,
+ 0xfb, 0x1c, 0x88, 0x12, 0x47, 0x56, 0x60, 0xe6, 0x81, 0x61, 0x31, 0xee, 0xe0, 0x72, 0x5f, 0x5e,
+ 0xee, 0xe4, 0x65, 0xa3, 0xc7, 0xdf, 0x31, 0x34, 0x26, 0xe9, 0xfb, 0x31, 0x9f, 0xfe, 0x32, 0xdd,
+ 0xd7, 0x61, 0x5a, 0x28, 0xb9, 0x62, 0x9a, 0x6e, 0x57, 0xec, 0xb3, 0x17, 0xe2, 0x9b, 0x04, 0xfb,
+ 0x51, 0xec, 0x1a, 0x26, 0xa8, 0xe3, 0xc6, 0x3a, 0x98, 0x77, 0x26, 0xe2, 0x26, 0x33, 0x2a, 0x63,
+ 0xfd, 0x3d, 0x28, 0x04, 0x76, 0xc1, 0x33, 0x51, 0xdd, 0x2e, 0xcc, 0x44, 0xb9, 0x89, 0x08, 0x26,
+ 0x4b, 0x30, 0xe9, 0x76, 0x68, 0xec, 0xb9, 0x37, 0x1d, 0xb7, 0xef, 0x05, 0x08, 0x0c, 0x69, 0xb8,
+ 0x95, 0x48, 0xa9, 0x89, 0xed, 0x9a, 0x37, 0x39, 0x50, 0x29, 0xb1, 0xf8, 0x49, 0x06, 0x82, 0x27,
+ 0x60, 0xc8, 0x1a, 0x8c, 0x77, 0x5c, 0x8f, 0xc9, 0x7c, 0xba, 0xb8, 0xbc, 0x90, 0x6e, 0xce, 0xf2,
+ 0xb8, 0xd9, 0xf5, 0x58, 0xc8, 0x91, 0xff, 0xf2, 0x51, 0x36, 0xe6, 0x7a, 0x9a, 0x76, 0xd7, 0x67,
+ 0xd4, 0xdb, 0xdc, 0x4b, 0xea, 0xb9, 0x1a, 0x20, 0x30, 0xa4, 0x59, 0xfc, 0xef, 0x2c, 0xcc, 0x26,
+ 0x6f, 0x57, 0x90, 0x0f, 0x60, 0xca, 0xb7, 0x9a, 0x8e, 0xe5, 0x34, 0x55, 0xc6, 0x9d, 0xe9, 0xbb,
+ 0x16, 0xaf, 0x1a, 0x6d, 0x8f, 0x71, 0x76, 0xe4, 0x0e, 0x8c, 0x33, 0x51, 0x7f, 0xd4, 0x97, 0xeb,
+ 0x4e, 0xca, 0xed, 0xae, 0x23, 0xea, 0xa0, 0x6c, 0x1e, 0x9d, 0xd5, 0xb2, 0xa3, 0x9b, 0xd5, 0x3e,
+ 0xed, 0x2d, 0x38, 0x7e, 0x7f, 0xc0, 0xf7, 0x5b, 0x46, 0xe5, 0x01, 0xff, 0x35, 0x0e, 0xcf, 0xa4,
+ 0xdf, 0x64, 0x79, 0x42, 0x2b, 0x86, 0xb0, 0x86, 0x6d, 0xec, 0xdc, 0x1a, 0x36, 0xa6, 0x33, 0x94,
+ 0xec, 0x80, 0x6e, 0xa6, 0xe8, 0x0e, 0x78, 0x44, 0x92, 0x12, 0x5d, 0xcb, 0xe4, 0x1e, 0xbb, 0x96,
+ 0xb9, 0x09, 0xf9, 0x5a, 0xd7, 0x3c, 0x52, 0xdb, 0xa7, 0xd1, 0x27, 0x15, 0x05, 0x14, 0x15, 0x36,
+ 0x32, 0xe9, 0xe4, 0x1f, 0x39, 0xe9, 0xf0, 0x49, 0xb4, 0xcb, 0x5a, 0xb2, 0x6a, 0x6f, 0xa2, 0xff,
+ 0x49, 0x34, 0x68, 0x8b, 0x21, 0x1b, 0x51, 0xe3, 0xda, 0xb1, 0x0e, 0x71, 0x5b, 0xc5, 0xff, 0xb0,
+ 0xc6, 0x75, 0x6f, 0xf3, 0x10, 0xb7, 0x51, 0x61, 0xc9, 0xe7, 0xbd, 0xf1, 0xde, 0x1c, 0xca, 0xed,
+ 0xa9, 0x51, 0x59, 0xbd, 0x09, 0x73, 0x3d, 0x63, 0x7e, 0xe1, 0x7c, 0xe6, 0x26, 0xe4, 0xfd, 0x6e,
+ 0x83, 0xd3, 0x25, 0xca, 0xed, 0xab, 0x02, 0x8a, 0x0a, 0xbb, 0xf8, 0xe3, 0x1c, 0x97, 0x92, 0xb8,
+ 0xf3, 0xf4, 0x84, 0xbc, 0xea, 0x35, 0x98, 0x92, 0x19, 0xc5, 0x5b, 0x91, 0x2a, 0xf5, 0x42, 0xa4,
+ 0x4e, 0x2e, 0x8a, 0xc4, 0x38, 0x2d, 0xd9, 0x14, 0x66, 0xd2, 0xf7, 0x9a, 0x1c, 0x94, 0x25, 0xf1,
+ 0x29, 0x54, 0x31, 0x20, 0x2f, 0x43, 0x51, 0x7c, 0x84, 0xec, 0x72, 0x95, 0x5a, 0x8b, 0xb2, 0xd2,
+ 0xf5, 0x10, 0x8c, 0x51, 0x9a, 0xf8, 0xce, 0xde, 0xf8, 0x40, 0x76, 0xf6, 0x7a, 0x46, 0x65, 0x64,
+ 0x59, 0x74, 0x1e, 0xf4, 0x13, 0x73, 0xc4, 0xec, 0x79, 0xe8, 0xef, 0xb7, 0xfb, 0xde, 0xd7, 0x0a,
+ 0x54, 0x91, 0xfb, 0x66, 0x29, 0xb5, 0x2e, 0x6f, 0x00, 0x51, 0x2f, 0xcb, 0xa9, 0xe5, 0x5b, 0xe4,
+ 0xf5, 0x77, 0x5d, 0x02, 0x5b, 0xed, 0xa1, 0xc0, 0x94, 0x56, 0xe4, 0x0d, 0xf1, 0x1a, 0x25, 0x33,
+ 0x2c, 0x47, 0x47, 0xde, 0x17, 0xce, 0x29, 0xcd, 0x93, 0x44, 0xfa, 0x5d, 0x49, 0xf9, 0x13, 0xc3,
+ 0xe6, 0x64, 0x1d, 0x26, 0xee, 0xbb, 0x76, 0xb7, 0xad, 0xf6, 0x57, 0x8a, 0xcb, 0xf3, 0x69, 0x9c,
+ 0xde, 0x14, 0x24, 0x91, 0x02, 0x16, 0xd9, 0x04, 0x83, 0xb6, 0x84, 0xc2, 0x8c, 0xd8, 0x5d, 0xb7,
+ 0xd8, 0x89, 0x72, 0x00, 0x75, 0x5a, 0x75, 0x33, 0x8d, 0xdd, 0x9e, 0x5b, 0xaf, 0xc6, 0xa9, 0xd5,
+ 0x7b, 0xdd, 0x71, 0x20, 0x26, 0x79, 0x92, 0x3b, 0x50, 0x30, 0x1a, 0x0d, 0xcb, 0xb1, 0xd8, 0x89,
+ 0xda, 0x82, 0x7c, 0x3e, 0x8d, 0xff, 0x8a, 0xa2, 0x51, 0x57, 0x1c, 0xd4, 0x2f, 0xd4, 0x6d, 0xc9,
+ 0x21, 0x14, 0x99, 0x6b, 0xab, 0x15, 0xa2, 0xaf, 0xf2, 0xbc, 0xeb, 0x69, 0xac, 0x0e, 0x34, 0x59,
+ 0xb8, 0xc9, 0x1b, 0xc2, 0x7c, 0x8c, 0xf2, 0x21, 0x7f, 0x91, 0x81, 0x2b, 0x8e, 0x5b, 0xa7, 0x81,
+ 0xeb, 0xa9, 0x77, 0xe8, 0xde, 0x19, 0xd0, 0xd3, 0x88, 0xe5, 0xdd, 0x08, 0x6f, 0xe9, 0x21, 0xfa,
+ 0xad, 0xc6, 0x28, 0x0a, 0x63, 0x4a, 0xcc, 0x7f, 0x17, 0xe6, 0x7a, 0x1a, 0xf6, 0xe5, 0x2d, 0x7f,
+ 0x9d, 0x81, 0x64, 0x8d, 0x30, 0x5f, 0xde, 0xd6, 0x2d, 0x4f, 0x30, 0x3c, 0x49, 0xee, 0x66, 0xae,
+ 0x05, 0x08, 0x0c, 0x69, 0xc8, 0x0d, 0xc8, 0x75, 0x0c, 0xd6, 0x4a, 0x1e, 0x41, 0x71, 0x96, 0x28,
+ 0x30, 0x64, 0x19, 0x80, 0xff, 0x45, 0xda, 0xa4, 0x0f, 0x3b, 0x6a, 0xb5, 0xae, 0x37, 0x58, 0xf6,
+ 0x34, 0x06, 0x23, 0x54, 0x8b, 0x3f, 0xcd, 0xc3, 0x74, 0x3c, 0xf0, 0xf2, 0xe5, 0x01, 0x75, 0xea,
+ 0x1d, 0xd7, 0x72, 0x58, 0xf2, 0xf1, 0xf2, 0x75, 0x05, 0x47, 0x4d, 0xc1, 0x27, 0x91, 0x36, 0x65,
+ 0x2d, 0xb7, 0x9e, 0x9c, 0x44, 0x76, 0x04, 0x14, 0x15, 0x56, 0xa8, 0xef, 0x7a, 0x4c, 0xa9, 0x15,
+ 0xaa, 0xef, 0x7a, 0x0c, 0x05, 0x26, 0x38, 0x41, 0xcb, 0x9d, 0x73, 0x82, 0xd6, 0x84, 0x59, 0xee,
+ 0xca, 0xd4, 0x5b, 0xa5, 0x1e, 0xfb, 0xda, 0x07, 0xba, 0xd5, 0x04, 0x0b, 0xec, 0x61, 0x2a, 0x5e,
+ 0xce, 0x17, 0x30, 0xd1, 0xf8, 0x6b, 0x96, 0x3c, 0x57, 0xe3, 0x1c, 0x30, 0xc9, 0x72, 0x18, 0xfb,
+ 0x24, 0xf1, 0x71, 0xec, 0xa3, 0x8e, 0xf0, 0x10, 0x80, 0xaf, 0xa5, 0xd4, 0xc7, 0x16, 0xfa, 0xf9,
+ 0xd8, 0x69, 0xb1, 0x79, 0xa7, 0x1b, 0x63, 0x84, 0x11, 0xb9, 0x0b, 0xd3, 0x61, 0xe7, 0x72, 0xfb,
+ 0x53, 0xe5, 0xd3, 0x37, 0x94, 0x2a, 0xa5, 0xf0, 0x18, 0xba, 0x1a, 0xa3, 0xc3, 0x44, 0x3b, 0xb2,
+ 0x0e, 0x53, 0xba, 0xff, 0x04, 0x23, 0x88, 0x17, 0x36, 0x27, 0x19, 0x29, 0x32, 0x8c, 0xb7, 0xba,
+ 0xd4, 0x94, 0x57, 0x29, 0x7f, 0xf1, 0xd5, 0xf5, 0xa7, 0x7e, 0xf6, 0xd5, 0xf5, 0xa7, 0x7e, 0xfe,
+ 0xd5, 0xf5, 0xa7, 0x3e, 0x39, 0xbb, 0x9e, 0xf9, 0xe2, 0xec, 0x7a, 0xe6, 0x67, 0x67, 0xd7, 0x33,
+ 0x3f, 0x3f, 0xbb, 0x9e, 0xf9, 0xf2, 0xec, 0x7a, 0xe6, 0xc7, 0xff, 0x76, 0xfd, 0xa9, 0xef, 0x15,
+ 0x82, 0xd1, 0xf8, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xba, 0x1a, 0x32, 0x49, 0x9d, 0x66, 0x00,
+ 0x00,
}
func (m *AMQPEventSource) Marshal() (dAtA []byte, err error) {
@@ -1595,6 +1694,18 @@ func (m *CalendarEventSource) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ if m.Persistence != nil {
+ {
+ size, err := m.Persistence.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ }
if len(m.Metadata) > 0 {
keysForMetadata := make([]string, 0, len(m.Metadata))
for k := range m.Metadata {
@@ -1653,6 +1764,78 @@ func (m *CalendarEventSource) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
+func (m *CatchupConfiguration) 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 *CatchupConfiguration) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *CatchupConfiguration) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ i -= len(m.MaxDuration)
+ copy(dAtA[i:], m.MaxDuration)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.MaxDuration)))
+ i--
+ dAtA[i] = 0x12
+ i--
+ if m.Enabled {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x8
+ return len(dAtA) - i, nil
+}
+
+func (m *ConfigMapPersistence) 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 *ConfigMapPersistence) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *ConfigMapPersistence) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ i--
+ if m.CreateIfNotExist {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x10
+ 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 *EmitterEventSource) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -1771,6 +1954,53 @@ func (m *EmitterEventSource) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
+func (m *EventPersistence) 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 *EventPersistence) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *EventPersistence) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.ConfigMap != nil {
+ {
+ size, err := m.ConfigMap.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Catchup != nil {
+ {
+ size, err := m.Catchup.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 *EventSource) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -5095,6 +5325,34 @@ func (m *CalendarEventSource) Size() (n int) {
n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize))
}
}
+ if m.Persistence != nil {
+ l = m.Persistence.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ return n
+}
+
+func (m *CatchupConfiguration) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ n += 2
+ l = len(m.MaxDuration)
+ n += 1 + l + sovGenerated(uint64(l))
+ return n
+}
+
+func (m *ConfigMapPersistence) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Name)
+ n += 1 + l + sovGenerated(uint64(l))
+ n += 2
return n
}
@@ -5138,6 +5396,23 @@ func (m *EmitterEventSource) Size() (n int) {
return n
}
+func (m *EventPersistence) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Catchup != nil {
+ l = m.Catchup.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ if m.ConfigMap != nil {
+ l = m.ConfigMap.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ return n
+}
+
func (m *EventSource) Size() (n int) {
if m == nil {
return 0
@@ -6314,17 +6589,40 @@ func (this *CalendarEventSource) String() string {
`Timezone:` + fmt.Sprintf("%v", this.Timezone) + `,`,
`UserPayload:` + valueToStringGenerated(this.UserPayload) + `,`,
`Metadata:` + mapStringForMetadata + `,`,
+ `Persistence:` + strings.Replace(this.Persistence.String(), "EventPersistence", "EventPersistence", 1) + `,`,
`}`,
}, "")
return s
}
-func (this *EmitterEventSource) String() string {
+func (this *CatchupConfiguration) String() string {
if this == nil {
return "nil"
}
- keysForMetadata := make([]string, 0, len(this.Metadata))
- for k := range this.Metadata {
- keysForMetadata = append(keysForMetadata, k)
+ s := strings.Join([]string{`&CatchupConfiguration{`,
+ `Enabled:` + fmt.Sprintf("%v", this.Enabled) + `,`,
+ `MaxDuration:` + fmt.Sprintf("%v", this.MaxDuration) + `,`,
+ `}`,
+ }, "")
+ return s
+}
+func (this *ConfigMapPersistence) String() string {
+ if this == nil {
+ return "nil"
+ }
+ s := strings.Join([]string{`&ConfigMapPersistence{`,
+ `Name:` + fmt.Sprintf("%v", this.Name) + `,`,
+ `CreateIfNotExist:` + fmt.Sprintf("%v", this.CreateIfNotExist) + `,`,
+ `}`,
+ }, "")
+ return s
+}
+func (this *EmitterEventSource) String() string {
+ if this == nil {
+ return "nil"
+ }
+ keysForMetadata := make([]string, 0, len(this.Metadata))
+ for k := range this.Metadata {
+ keysForMetadata = append(keysForMetadata, k)
}
github_com_gogo_protobuf_sortkeys.Strings(keysForMetadata)
mapStringForMetadata := "map[string]string{"
@@ -6346,6 +6644,17 @@ func (this *EmitterEventSource) String() string {
}, "")
return s
}
+func (this *EventPersistence) String() string {
+ if this == nil {
+ return "nil"
+ }
+ s := strings.Join([]string{`&EventPersistence{`,
+ `Catchup:` + strings.Replace(this.Catchup.String(), "CatchupConfiguration", "CatchupConfiguration", 1) + `,`,
+ `ConfigMap:` + strings.Replace(this.ConfigMap.String(), "ConfigMapPersistence", "ConfigMapPersistence", 1) + `,`,
+ `}`,
+ }, "")
+ return s
+}
func (this *EventSource) String() string {
if this == nil {
return "nil"
@@ -8336,6 +8645,252 @@ func (m *CalendarEventSource) Unmarshal(dAtA []byte) error {
}
m.Metadata[mapkey] = mapvalue
iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Persistence", 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.Persistence == nil {
+ m.Persistence = &EventPersistence{}
+ }
+ if err := m.Persistence.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 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *CatchupConfiguration) 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: CatchupConfiguration: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: CatchupConfiguration: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Enabled", 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.Enabled = bool(v != 0)
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MaxDuration", 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.MaxDuration = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipGenerated(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *ConfigMapPersistence) 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: ConfigMapPersistence: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: ConfigMapPersistence: 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)
+ }
+ 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.Name = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CreateIfNotExist", 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.CreateIfNotExist = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -8800,6 +9355,131 @@ func (m *EmitterEventSource) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *EventPersistence) 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: EventPersistence: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: EventPersistence: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Catchup", 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.Catchup == nil {
+ m.Catchup = &CatchupConfiguration{}
+ }
+ if err := m.Catchup.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ConfigMap", 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.ConfigMap == nil {
+ m.ConfigMap = &ConfigMapPersistence{}
+ }
+ if err := m.ConfigMap.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 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *EventSource) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
diff --git a/pkg/apis/eventsource/v1alpha1/generated.proto b/pkg/apis/eventsource/v1alpha1/generated.proto
index 96bbafb8c9..dc968817d3 100644
--- a/pkg/apis/eventsource/v1alpha1/generated.proto
+++ b/pkg/apis/eventsource/v1alpha1/generated.proto
@@ -106,6 +106,25 @@ message CalendarEventSource {
// Metadata holds the user defined metadata which will passed along the event payload.
// +optional
map metadata = 6;
+
+ // Persistence hold the configuration for event persistence
+ optional EventPersistence persistence = 7;
+}
+
+message CatchupConfiguration {
+ // Enabled enables to triggered the missed schedule when eventsource restarts
+ optional bool enabled = 1;
+
+ // MaxDuration holds max catchup duration
+ optional string maxDuration = 2;
+}
+
+message ConfigMapPersistence {
+ // Name of the configmap
+ optional string name = 1;
+
+ // CreateIfNotExist will create configmap if it doesn't exists
+ optional bool createIfNotExist = 2;
}
// EmitterEventSource describes the event source for emitter
@@ -146,6 +165,14 @@ message EmitterEventSource {
map metadata = 9;
}
+message EventPersistence {
+ // Catchup enables to triggered the missed schedule when eventsource restarts
+ optional CatchupConfiguration catchup = 1;
+
+ // ConfigMap holds configmap details for persistence
+ optional ConfigMapPersistence configMap = 2;
+}
+
// EventSource is the definition of a eventsource resource
// +genclient
// +kubebuilder:resource:shortName=es
diff --git a/pkg/apis/eventsource/v1alpha1/openapi_generated.go b/pkg/apis/eventsource/v1alpha1/openapi_generated.go
index b5fab2c38b..404c8996e5 100644
--- a/pkg/apis/eventsource/v1alpha1/openapi_generated.go
+++ b/pkg/apis/eventsource/v1alpha1/openapi_generated.go
@@ -32,7 +32,10 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AMQPEventSource": schema_pkg_apis_eventsource_v1alpha1_AMQPEventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.AzureEventsHubEventSource": schema_pkg_apis_eventsource_v1alpha1_AzureEventsHubEventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CalendarEventSource": schema_pkg_apis_eventsource_v1alpha1_CalendarEventSource(ref),
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CatchupConfiguration": schema_pkg_apis_eventsource_v1alpha1_CatchupConfiguration(ref),
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ConfigMapPersistence": schema_pkg_apis_eventsource_v1alpha1_ConfigMapPersistence(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EmitterEventSource": schema_pkg_apis_eventsource_v1alpha1_EmitterEventSource(ref),
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventPersistence": schema_pkg_apis_eventsource_v1alpha1_EventPersistence(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventSource": schema_pkg_apis_eventsource_v1alpha1_EventSource(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventSourceList": schema_pkg_apis_eventsource_v1alpha1_EventSourceList(ref),
"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventSourceSpec": schema_pkg_apis_eventsource_v1alpha1_EventSourceSpec(ref),
@@ -264,10 +267,70 @@ func schema_pkg_apis_eventsource_v1alpha1_CalendarEventSource(ref common.Referen
},
},
},
+ "persistence": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Persistence hold the configuration for event persistence",
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventPersistence"),
+ },
+ },
},
Required: []string{"schedule", "interval"},
},
},
+ Dependencies: []string{
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.EventPersistence"},
+ }
+}
+
+func schema_pkg_apis_eventsource_v1alpha1_CatchupConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition {
+ return common.OpenAPIDefinition{
+ Schema: spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Type: []string{"object"},
+ Properties: map[string]spec.Schema{
+ "enabled": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Enabled enables to triggered the missed schedule when eventsource restarts",
+ Type: []string{"boolean"},
+ Format: "",
+ },
+ },
+ "maxDuration": {
+ SchemaProps: spec.SchemaProps{
+ Description: "MaxDuration holds max catchup duration",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
+func schema_pkg_apis_eventsource_v1alpha1_ConfigMapPersistence(ref common.ReferenceCallback) common.OpenAPIDefinition {
+ return common.OpenAPIDefinition{
+ Schema: spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Type: []string{"object"},
+ Properties: map[string]spec.Schema{
+ "name": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Name of the configmap",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
+ "createIfNotExist": {
+ SchemaProps: spec.SchemaProps{
+ Description: "CreateIfNotExist will create configmap if it doesn't exists",
+ Type: []string{"boolean"},
+ Format: "",
+ },
+ },
+ },
+ },
+ },
}
}
@@ -354,6 +417,32 @@ func schema_pkg_apis_eventsource_v1alpha1_EmitterEventSource(ref common.Referenc
}
}
+func schema_pkg_apis_eventsource_v1alpha1_EventPersistence(ref common.ReferenceCallback) common.OpenAPIDefinition {
+ return common.OpenAPIDefinition{
+ Schema: spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Type: []string{"object"},
+ Properties: map[string]spec.Schema{
+ "catchup": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Catchup enables to triggered the missed schedule when eventsource restarts",
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CatchupConfiguration"),
+ },
+ },
+ "configMap": {
+ SchemaProps: spec.SchemaProps{
+ Description: "ConfigMap holds configmap details for persistence",
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ConfigMapPersistence"),
+ },
+ },
+ },
+ },
+ },
+ Dependencies: []string{
+ "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.CatchupConfiguration", "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1.ConfigMapPersistence"},
+ }
+}
+
func schema_pkg_apis_eventsource_v1alpha1_EventSource(ref common.ReferenceCallback) common.OpenAPIDefinition {
return common.OpenAPIDefinition{
Schema: spec.Schema{
diff --git a/pkg/apis/eventsource/v1alpha1/types.go b/pkg/apis/eventsource/v1alpha1/types.go
index 1aa809967c..5ae3842bed 100644
--- a/pkg/apis/eventsource/v1alpha1/types.go
+++ b/pkg/apis/eventsource/v1alpha1/types.go
@@ -182,6 +182,33 @@ type CalendarEventSource struct {
// Metadata holds the user defined metadata which will passed along the event payload.
// +optional
Metadata map[string]string `json:"metadata,omitempty" protobuf:"bytes,6,rep,name=metadata"`
+ // Persistence hold the configuration for event persistence
+ Persistence *EventPersistence `json:"persistence,omitempty" protobuf:"bytes,7,opt,name=persistence"`
+}
+
+type EventPersistence struct {
+ // Catchup enables to triggered the missed schedule when eventsource restarts
+ Catchup *CatchupConfiguration `json:"catchup,omitempty" protobuf:"bytes,1,opt,name=catchup"`
+ // ConfigMap holds configmap details for persistence
+ ConfigMap *ConfigMapPersistence `json:"configMap,omitempty" protobuf:"bytes,2,opt,name=configMap"`
+}
+
+func (ep *EventPersistence) IsCatchUpEnabled() bool {
+ return ep.Catchup != nil && ep.Catchup.Enabled
+}
+
+type CatchupConfiguration struct {
+ // Enabled enables to triggered the missed schedule when eventsource restarts
+ Enabled bool `json:"enabled,omitempty" protobuf:"varint,1,opt,name=enabled"`
+ // MaxDuration holds max catchup duration
+ MaxDuration string `json:"maxDuration,omitempty" protobuf:"bytes,2,opt,name=maxDuration"`
+}
+
+type ConfigMapPersistence struct {
+ // Name of the configmap
+ Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
+ // CreateIfNotExist will create configmap if it doesn't exists
+ CreateIfNotExist bool `json:"createIfNotExist,omitempty" protobuf:"varint,2,opt,name=createIfNotExist"`
}
// FileEventSource describes an event-source for file related events.
diff --git a/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go
index 573b379584..cdf8648e61 100644
--- a/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/eventsource/v1alpha1/zz_generated.deepcopy.go
@@ -114,6 +114,11 @@ func (in *CalendarEventSource) DeepCopyInto(out *CalendarEventSource) {
(*out)[key] = val
}
}
+ if in.Persistence != nil {
+ in, out := &in.Persistence, &out.Persistence
+ *out = new(EventPersistence)
+ (*in).DeepCopyInto(*out)
+ }
return
}
@@ -127,6 +132,38 @@ func (in *CalendarEventSource) DeepCopy() *CalendarEventSource {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *CatchupConfiguration) DeepCopyInto(out *CatchupConfiguration) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CatchupConfiguration.
+func (in *CatchupConfiguration) DeepCopy() *CatchupConfiguration {
+ if in == nil {
+ return nil
+ }
+ out := new(CatchupConfiguration)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ConfigMapPersistence) DeepCopyInto(out *ConfigMapPersistence) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapPersistence.
+func (in *ConfigMapPersistence) DeepCopy() *ConfigMapPersistence {
+ if in == nil {
+ return nil
+ }
+ out := new(ConfigMapPersistence)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *EmitterEventSource) DeepCopyInto(out *EmitterEventSource) {
*out = *in
@@ -170,6 +207,32 @@ func (in *EmitterEventSource) DeepCopy() *EmitterEventSource {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *EventPersistence) DeepCopyInto(out *EventPersistence) {
+ *out = *in
+ if in.Catchup != nil {
+ in, out := &in.Catchup, &out.Catchup
+ *out = new(CatchupConfiguration)
+ **out = **in
+ }
+ if in.ConfigMap != nil {
+ in, out := &in.ConfigMap, &out.ConfigMap
+ *out = new(ConfigMapPersistence)
+ **out = **in
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EventPersistence.
+func (in *EventPersistence) DeepCopy() *EventPersistence {
+ if in == nil {
+ return nil
+ }
+ out := new(EventPersistence)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *EventSource) DeepCopyInto(out *EventSource) {
*out = *in