From 2612992d8a40c720db4d792a697d43ffe7c32faf Mon Sep 17 00:00:00 2001 From: Tianchu Zhao Date: Thu, 7 Oct 2021 10:22:17 +1100 Subject: [PATCH] feat: add autocomplete for labels for archived workflow (#6776) Signed-off-by: Tianchu Zhao Signed-off-by: kriti-sc --- api/jsonschema/schema.json | 24 + api/openapi-spec/swagger.json | 126 ++ cmd/argo/commands/archive/list_label_keys.go | 29 + .../commands/archive/list_label_values.go | 41 + cmd/argo/commands/archive/root.go | 2 + docs/cli/argo_archive.md | 2 + docs/cli/argo_archive_list-label-keys.md | 49 + docs/cli/argo_archive_list-label-values.md | 50 + persist/sqldb/archived_workflow_labels.go | 42 + persist/sqldb/mocks/WorkflowArchive.go | 46 + persist/sqldb/null_workflow_archive.go | 8 + persist/sqldb/workflow_archive.go | 2 + .../archived-workflows-service-client.go | 10 + .../workflowarchive/workflow-archive.pb.go | 460 ++++- .../workflowarchive/workflow-archive.pb.gw.go | 148 ++ .../workflowarchive/workflow-archive.proto | 11 + pkg/apis/api-rules/violation_exceptions.list | 2 + pkg/apis/workflow/v1alpha1/generated.pb.go | 1580 ++++++++++------- pkg/apis/workflow/v1alpha1/generated.proto | 10 + pkg/apis/workflow/v1alpha1/label.go | 11 + .../workflow/v1alpha1/openapi_generated.go | 56 + .../v1alpha1/zz_generated.deepcopy.go | 42 + .../archived_workflow_server.go | 38 + .../archived_workflow_server_test.go | 16 + test/e2e/argo_server_test.go | 26 + test/e2e/cli_test.go | 33 + .../archived-workflow-filters.tsx | 45 +- .../components/tags-input/tags-input.tsx | 25 +- .../services/archived-workflows-service.ts | 8 + ui/src/models/index.ts | 1 + ui/src/models/labels.ts | 3 + workflow/controller/operator_test.go | 2 + 32 files changed, 2275 insertions(+), 673 deletions(-) create mode 100644 cmd/argo/commands/archive/list_label_keys.go create mode 100644 cmd/argo/commands/archive/list_label_values.go create mode 100644 docs/cli/argo_archive_list-label-keys.md create mode 100644 docs/cli/argo_archive_list-label-values.md create mode 100644 pkg/apis/workflow/v1alpha1/label.go create mode 100644 ui/src/models/labels.ts diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json index 2057189e10f4..a4aa1d25a0ae 100644 --- a/api/jsonschema/schema.json +++ b/api/jsonschema/schema.json @@ -5429,6 +5429,30 @@ "io.argoproj.workflow.v1alpha1.Item": { "description": "Item expands a single workflow step into multiple parallel steps The value of Item can be a map, string, bool, or number" }, + "io.argoproj.workflow.v1alpha1.LabelKeys": { + "description": "LabelKeys is list of keys", + "properties": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "io.argoproj.workflow.v1alpha1.LabelValues": { + "description": "Labels is list of workflow labels", + "properties": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, "io.argoproj.workflow.v1alpha1.LifecycleHook": { "properties": { "arguments": { diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 5af423c84680..b64039b2f8d8 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -96,6 +96,108 @@ } } }, + "/api/v1/archived-workflows-label-keys": { + "get": { + "tags": [ + "ArchivedWorkflowService" + ], + "operationId": "ArchivedWorkflowService_ListArchivedWorkflowLabelKeys", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.LabelKeys" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/grpc.gateway.runtime.Error" + } + } + } + } + }, + "/api/v1/archived-workflows-label-values": { + "get": { + "tags": [ + "ArchivedWorkflowService" + ], + "operationId": "ArchivedWorkflowService_ListArchivedWorkflowLabelValues", + "parameters": [ + { + "type": "string", + "description": "A selector to restrict the list of returned objects by their labels.\nDefaults to everything.\n+optional.", + "name": "listOptions.labelSelector", + "in": "query" + }, + { + "type": "string", + "description": "A selector to restrict the list of returned objects by their fields.\nDefaults to everything.\n+optional.", + "name": "listOptions.fieldSelector", + "in": "query" + }, + { + "type": "boolean", + "description": "Watch for changes to the described resources and return them as a stream of\nadd, update, and remove notifications. Specify resourceVersion.\n+optional.", + "name": "listOptions.watch", + "in": "query" + }, + { + "type": "boolean", + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\".\nServers that do not implement bookmarks may ignore this flag and\nbookmarks are sent at the server's discretion. Clients should not\nassume bookmarks are returned at any specific interval, nor may they\nassume the server will send any BOOKMARK event during a session.\nIf this is not a watch, this field is ignored.\nIf the feature gate WatchBookmarks is not enabled in apiserver,\nthis field is ignored.\n+optional.", + "name": "listOptions.allowWatchBookmarks", + "in": "query" + }, + { + "type": "string", + "description": "resourceVersion sets a constraint on what resource versions a request may be served from.\nSee https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for\ndetails.\n\nDefaults to unset\n+optional", + "name": "listOptions.resourceVersion", + "in": "query" + }, + { + "type": "string", + "description": "resourceVersionMatch determines how resourceVersion is applied to list calls.\nIt is highly recommended that resourceVersionMatch be set for list calls where\nresourceVersion is set\nSee https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for\ndetails.\n\nDefaults to unset\n+optional", + "name": "listOptions.resourceVersionMatch", + "in": "query" + }, + { + "type": "string", + "format": "int64", + "description": "Timeout for the list/watch call.\nThis limits the duration of the call, regardless of any activity or inactivity.\n+optional.", + "name": "listOptions.timeoutSeconds", + "in": "query" + }, + { + "type": "string", + "format": "int64", + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the\nserver will set the `continue` field on the list metadata to a value that can be used with the\nsame initial query to retrieve the next set of results. Setting a limit may return fewer than\nthe requested amount of items (up to zero items) in the event all requested objects are\nfiltered out and clients should only use the presence of the continue field to determine whether\nmore results are available. Servers may choose not to support the limit argument and will return\nall of the available results. If limit is specified and the continue field is empty, clients may\nassume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing\na single list call without a limit - that is, no objects created, modified, or deleted after the\nfirst request is issued will be included in any subsequent continued requests. This is sometimes\nreferred to as a consistent snapshot, and ensures that a client that is using limit to receive\nsmaller chunks of a very large result can ensure they see all possible objects. If objects are\nupdated during a chunked list the version of the object that was present at the time the first list\nresult was calculated is returned.", + "name": "listOptions.limit", + "in": "query" + }, + { + "type": "string", + "description": "The continue option should be set when retrieving more results from the server. Since this value is\nserver defined, clients may only use the continue value from a previous query result with identical\nquery parameters (except for the value of continue) and the server may reject a continue value it\ndoes not recognize. If the specified continue value is no longer valid whether due to expiration\n(generally five to fifteen minutes) or a configuration change on the server, the server will\nrespond with a 410 ResourceExpired error together with a continue token. If the client needs a\nconsistent list, it must restart their list without the continue field. Otherwise, the client may\nsend another list request with the token received with the 410 error, the server will respond with\na list starting from the next key, but from the latest snapshot, which is inconsistent from the\nprevious list results - objects that are created, modified, or deleted after the first list request\nwill be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last\nresourceVersion value returned by the server and not miss any modifications.", + "name": "listOptions.continue", + "in": "query" + } + ], + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.LabelValues" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/grpc.gateway.runtime.Error" + } + } + } + } + }, "/api/v1/archived-workflows/{uid}": { "get": { "tags": [ @@ -9573,6 +9675,30 @@ "io.argoproj.workflow.v1alpha1.Item": { "description": "Item expands a single workflow step into multiple parallel steps The value of Item can be a map, string, bool, or number" }, + "io.argoproj.workflow.v1alpha1.LabelKeys": { + "description": "LabelKeys is list of keys", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "io.argoproj.workflow.v1alpha1.LabelValues": { + "description": "Labels is list of workflow labels", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "io.argoproj.workflow.v1alpha1.LifecycleHook": { "type": "object", "required": [ diff --git a/cmd/argo/commands/archive/list_label_keys.go b/cmd/argo/commands/archive/list_label_keys.go new file mode 100644 index 000000000000..315a8f43d622 --- /dev/null +++ b/cmd/argo/commands/archive/list_label_keys.go @@ -0,0 +1,29 @@ +package archive + +import ( + "fmt" + + "github.com/argoproj/pkg/errors" + "github.com/spf13/cobra" + + "github.com/argoproj/argo-workflows/v3/cmd/argo/commands/client" + workflowarchivepkg "github.com/argoproj/argo-workflows/v3/pkg/apiclient/workflowarchive" +) + +func NewListLabelKeyCommand() *cobra.Command { + command := &cobra.Command{ + Use: "list-label-keys", + Short: "list workflows label keys in the archive", + Run: func(cmd *cobra.Command, args []string) { + ctx, apiClient := client.NewAPIClient(cmd.Context()) + serviceClient, err := apiClient.NewArchivedWorkflowServiceClient() + errors.CheckError(err) + keys, err := serviceClient.ListArchivedWorkflowLabelKeys(ctx, &workflowarchivepkg.ListArchivedWorkflowLabelKeysRequest{}) + errors.CheckError(err) + for _, str := range keys.Items { + fmt.Printf("%s\n", str) + } + }, + } + return command +} diff --git a/cmd/argo/commands/archive/list_label_values.go b/cmd/argo/commands/archive/list_label_values.go new file mode 100644 index 000000000000..0c24ae78ccdd --- /dev/null +++ b/cmd/argo/commands/archive/list_label_values.go @@ -0,0 +1,41 @@ +package archive + +import ( + "fmt" + + "github.com/argoproj/pkg/errors" + "github.com/spf13/cobra" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/argoproj/argo-workflows/v3/cmd/argo/commands/client" + workflowarchivepkg "github.com/argoproj/argo-workflows/v3/pkg/apiclient/workflowarchive" +) + +func NewListLabelValueCommand() *cobra.Command { + var ( + selector string + ) + command := &cobra.Command{ + Use: "list-label-values", + Short: "get workflow label values in the archive", + Run: func(cmd *cobra.Command, args []string) { + listOpts := &metav1.ListOptions{ + LabelSelector: selector, + } + + ctx, apiClient := client.NewAPIClient(cmd.Context()) + serviceClient, err := apiClient.NewArchivedWorkflowServiceClient() + errors.CheckError(err) + labels, err := serviceClient.ListArchivedWorkflowLabelValues(ctx, &workflowarchivepkg.ListArchivedWorkflowLabelValuesRequest{ListOptions: listOpts}) + errors.CheckError(err) + + for _, str := range labels.Items { + fmt.Printf("%s\n", str) + } + }, + } + command.Flags().StringVarP(&selector, "selector", "l", "", "Selector (label query) to query on, allows 1 value (e.g. -l key1)") + err := command.MarkFlagRequired("selector") + errors.CheckError(err) + return command +} diff --git a/cmd/argo/commands/archive/root.go b/cmd/argo/commands/archive/root.go index 0932c9c618ce..70b54d4c7860 100644 --- a/cmd/argo/commands/archive/root.go +++ b/cmd/argo/commands/archive/root.go @@ -15,5 +15,7 @@ func NewArchiveCommand() *cobra.Command { command.AddCommand(NewListCommand()) command.AddCommand(NewGetCommand()) command.AddCommand(NewDeleteCommand()) + command.AddCommand(NewListLabelKeyCommand()) + command.AddCommand(NewListLabelValueCommand()) return command } diff --git a/docs/cli/argo_archive.md b/docs/cli/argo_archive.md index c496da46dbeb..97e97be0e78e 100644 --- a/docs/cli/argo_archive.md +++ b/docs/cli/argo_archive.md @@ -49,4 +49,6 @@ argo archive [flags] * [argo archive delete](argo_archive_delete.md) - delete a workflow in the archive * [argo archive get](argo_archive_get.md) - get a workflow in the archive * [argo archive list](argo_archive_list.md) - list workflows in the archive +* [argo archive list-label-keys](argo_archive_list-label-keys.md) - list workflows label keys in the archive +* [argo archive list-label-values](argo_archive_list-label-values.md) - get workflow label values in the archive diff --git a/docs/cli/argo_archive_list-label-keys.md b/docs/cli/argo_archive_list-label-keys.md new file mode 100644 index 000000000000..a31979a6023f --- /dev/null +++ b/docs/cli/argo_archive_list-label-keys.md @@ -0,0 +1,49 @@ +## argo archive list-label-keys + +list workflows label keys in the archive + +``` +argo archive list-label-keys [flags] +``` + +### Options + +``` + -h, --help help for list-label-keys +``` + +### Options inherited from parent commands + +``` + --argo-base-href string An path to use with HTTP client (e.g. due to BASE_HREF). Defaults to the ARGO_BASE_HREF environment variable. + --argo-http1 If true, use the HTTP client. Defaults to the ARGO_HTTP1 environment variable. + -s, --argo-server host:port API server host:port. e.g. localhost:2746. Defaults to the ARGO_SERVER environment variable. + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --gloglevel int Set the glog logging level + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + -k, --insecure-skip-verify If true, the Argo Server's certificate will not be checked for validity. This will make your HTTPS connections insecure. Defaults to the ARGO_INSECURE_SKIP_VERIFY environment variable. + --instanceid string submit with a specific controller's instance id label. Default to the ARGO_INSTANCEID environment variable. + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + -e, --secure Whether or not the server is using TLS with the Argo Server. Defaults to the ARGO_SECURE environment variable. (default true) + --server string The address and port of the Kubernetes API server + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server + -v, --verbose Enabled verbose logging, i.e. --loglevel debug +``` + +### SEE ALSO + +* [argo archive](argo_archive.md) - manage the workflow archive + diff --git a/docs/cli/argo_archive_list-label-values.md b/docs/cli/argo_archive_list-label-values.md new file mode 100644 index 000000000000..d52af052900b --- /dev/null +++ b/docs/cli/argo_archive_list-label-values.md @@ -0,0 +1,50 @@ +## argo archive list-label-values + +get workflow label values in the archive + +``` +argo archive list-label-values [flags] +``` + +### Options + +``` + -h, --help help for list-label-values + -l, --selector string Selector (label query) to query on, allows 1 value (e.g. -l key1) +``` + +### Options inherited from parent commands + +``` + --argo-base-href string An path to use with HTTP client (e.g. due to BASE_HREF). Defaults to the ARGO_BASE_HREF environment variable. + --argo-http1 If true, use the HTTP client. Defaults to the ARGO_HTTP1 environment variable. + -s, --argo-server host:port API server host:port. e.g. localhost:2746. Defaults to the ARGO_SERVER environment variable. + --as string Username to impersonate for the operation + --as-group stringArray Group to impersonate for the operation, this flag can be repeated to specify multiple groups. + --certificate-authority string Path to a cert file for the certificate authority + --client-certificate string Path to a client certificate file for TLS + --client-key string Path to a client key file for TLS + --cluster string The name of the kubeconfig cluster to use + --context string The name of the kubeconfig context to use + --gloglevel int Set the glog logging level + --insecure-skip-tls-verify If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure + -k, --insecure-skip-verify If true, the Argo Server's certificate will not be checked for validity. This will make your HTTPS connections insecure. Defaults to the ARGO_INSECURE_SKIP_VERIFY environment variable. + --instanceid string submit with a specific controller's instance id label. Default to the ARGO_INSTANCEID environment variable. + --kubeconfig string Path to a kube config. Only required if out-of-cluster + --loglevel string Set the logging level. One of: debug|info|warn|error (default "info") + -n, --namespace string If present, the namespace scope for this CLI request + --password string Password for basic authentication to the API server + --request-timeout string The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0") + -e, --secure Whether or not the server is using TLS with the Argo Server. Defaults to the ARGO_SECURE environment variable. (default true) + --server string The address and port of the Kubernetes API server + --tls-server-name string If provided, this name will be used to validate server certificate. If this is not provided, hostname used to contact the server is used. + --token string Bearer token for authentication to the API server + --user string The name of the kubeconfig user to use + --username string Username for basic authentication to the API server + -v, --verbose Enabled verbose logging, i.e. --loglevel debug +``` + +### SEE ALSO + +* [argo archive](argo_archive.md) - manage the workflow archive + diff --git a/persist/sqldb/archived_workflow_labels.go b/persist/sqldb/archived_workflow_labels.go index a45a4587be97..e20b4c288768 100644 --- a/persist/sqldb/archived_workflow_labels.go +++ b/persist/sqldb/archived_workflow_labels.go @@ -8,8 +8,50 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/selection" "upper.io/db.v3" + + wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" ) +// ListWorkflowsLabelKeys returns distinct name from argo_archived_workflows_labels table +// SELECT DISTINCT name FROM argo_archived_workflows_labels +func (r *workflowArchive) ListWorkflowsLabelKeys() (*wfv1.LabelKeys, error) { + var archivedWfLabels []archivedWorkflowLabelRecord + + err := r.session. + Select(db.Raw("DISTINCT name")). + From(archiveLabelsTableName). + All(&archivedWfLabels) + if err != nil { + return nil, err + } + labelKeys := make([]string, len(archivedWfLabels)) + for i, md := range archivedWfLabels { + labelKeys[i] = md.Key + } + + return &wfv1.LabelKeys{Items: labelKeys}, nil +} + +// ListWorkflowsLabelValues returns distinct value from argo_archived_workflows_labels table +// SELECT DISTINCT value FROM argo_archived_workflows_labels WHERE name=labelkey +func (r *workflowArchive) ListWorkflowsLabelValues(key string) (*wfv1.LabelValues, error) { + var archivedWfLabels []archivedWorkflowLabelRecord + err := r.session. + Select(db.Raw("DISTINCT value")). + From(archiveLabelsTableName). + Where(db.Cond{"name": key}). + All(&archivedWfLabels) + if err != nil { + return nil, err + } + labels := make([]string, len(archivedWfLabels)) + for i, md := range archivedWfLabels { + labels[i] = md.Value + } + + return &wfv1.LabelValues{Items: labels}, nil +} + func labelsClause(t dbType, requirements labels.Requirements) (db.Compound, error) { var conds []db.Compound for _, r := range requirements { diff --git a/persist/sqldb/mocks/WorkflowArchive.go b/persist/sqldb/mocks/WorkflowArchive.go index 271d9b751d18..5336fd4d2c5d 100644 --- a/persist/sqldb/mocks/WorkflowArchive.go +++ b/persist/sqldb/mocks/WorkflowArchive.go @@ -117,3 +117,49 @@ func (_m *WorkflowArchive) ListWorkflows(namespace string, name string, minStart return r0, r1 } + +// ListWorkflowsLabelKeys provides a mock function with given fields: +func (_m *WorkflowArchive) ListWorkflowsLabelKeys() (*v1alpha1.LabelKeys, error) { + ret := _m.Called() + + var r0 *v1alpha1.LabelKeys + if rf, ok := ret.Get(0).(func() *v1alpha1.LabelKeys); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1alpha1.LabelKeys) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ListWorkflowsLabelValues provides a mock function with given fields: key +func (_m *WorkflowArchive) ListWorkflowsLabelValues(key string) (*v1alpha1.LabelValues, error) { + ret := _m.Called(key) + + var r0 *v1alpha1.LabelValues + if rf, ok := ret.Get(0).(func(string) *v1alpha1.LabelValues); ok { + r0 = rf(key) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1alpha1.LabelValues) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(string) error); ok { + r1 = rf(key) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/persist/sqldb/null_workflow_archive.go b/persist/sqldb/null_workflow_archive.go index a4e6ff2356e5..31d78c5db45a 100644 --- a/persist/sqldb/null_workflow_archive.go +++ b/persist/sqldb/null_workflow_archive.go @@ -36,3 +36,11 @@ func (r *nullWorkflowArchive) DeleteWorkflow(string) error { func (r *nullWorkflowArchive) DeleteExpiredWorkflows(time.Duration) error { return nil } + +func (r *nullWorkflowArchive) ListWorkflowsLabelKeys() (*wfv1.LabelKeys, error) { + return &wfv1.LabelKeys{}, nil +} + +func (r *nullWorkflowArchive) ListWorkflowsLabelValues(string) (*wfv1.LabelValues, error) { + return &wfv1.LabelValues{}, nil +} diff --git a/persist/sqldb/workflow_archive.go b/persist/sqldb/workflow_archive.go index 760bf2f9995e..2e228479669d 100644 --- a/persist/sqldb/workflow_archive.go +++ b/persist/sqldb/workflow_archive.go @@ -56,6 +56,8 @@ type WorkflowArchive interface { DeleteWorkflow(uid string) error DeleteExpiredWorkflows(ttl time.Duration) error IsEnabled() bool + ListWorkflowsLabelKeys() (*wfv1.LabelKeys, error) + ListWorkflowsLabelValues(key string) (*wfv1.LabelValues, error) } type workflowArchive struct { diff --git a/pkg/apiclient/http1/archived-workflows-service-client.go b/pkg/apiclient/http1/archived-workflows-service-client.go index cea22bd53894..cf26586a548c 100644 --- a/pkg/apiclient/http1/archived-workflows-service-client.go +++ b/pkg/apiclient/http1/archived-workflows-service-client.go @@ -36,3 +36,13 @@ func (h ArchivedWorkflowsServiceClient) LintClusterWorkflowTemplate(_ context.Co out := &wfv1.ClusterWorkflowTemplate{} return out, h.Post(in, out, "/api/v1/cluster-workflow-templates/lint") } + +func (h ArchivedWorkflowsServiceClient) ListArchivedWorkflowLabelKeys(_ context.Context, in *workflowarchivepkg.ListArchivedWorkflowLabelKeysRequest, _ ...grpc.CallOption) (*wfv1.LabelKeys, error) { + out := &wfv1.LabelKeys{} + return out, h.Get(in, out, "/api/v1/archived-workflows-label-keys") +} + +func (h ArchivedWorkflowsServiceClient) ListArchivedWorkflowLabelValues(_ context.Context, in *workflowarchivepkg.ListArchivedWorkflowLabelValuesRequest, _ ...grpc.CallOption) (*wfv1.LabelValues, error) { + out := &wfv1.LabelValues{} + return out, h.Get(in, out, "/api/v1/archived-workflows-label-values") +} diff --git a/pkg/apiclient/workflowarchive/workflow-archive.pb.go b/pkg/apiclient/workflowarchive/workflow-archive.pb.go index a7d31999741a..32efb6c69e45 100644 --- a/pkg/apiclient/workflowarchive/workflow-archive.pb.go +++ b/pkg/apiclient/workflowarchive/workflow-archive.pb.go @@ -209,11 +209,101 @@ func (m *ArchivedWorkflowDeletedResponse) XXX_DiscardUnknown() { var xxx_messageInfo_ArchivedWorkflowDeletedResponse proto.InternalMessageInfo +type ListArchivedWorkflowLabelKeysRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListArchivedWorkflowLabelKeysRequest) Reset() { *m = ListArchivedWorkflowLabelKeysRequest{} } +func (m *ListArchivedWorkflowLabelKeysRequest) String() string { return proto.CompactTextString(m) } +func (*ListArchivedWorkflowLabelKeysRequest) ProtoMessage() {} +func (*ListArchivedWorkflowLabelKeysRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_95ca9a2d33e8bb19, []int{4} +} +func (m *ListArchivedWorkflowLabelKeysRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ListArchivedWorkflowLabelKeysRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ListArchivedWorkflowLabelKeysRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ListArchivedWorkflowLabelKeysRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListArchivedWorkflowLabelKeysRequest.Merge(m, src) +} +func (m *ListArchivedWorkflowLabelKeysRequest) XXX_Size() int { + return m.Size() +} +func (m *ListArchivedWorkflowLabelKeysRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListArchivedWorkflowLabelKeysRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListArchivedWorkflowLabelKeysRequest proto.InternalMessageInfo + +type ListArchivedWorkflowLabelValuesRequest struct { + ListOptions *v1.ListOptions `protobuf:"bytes,1,opt,name=listOptions,proto3" json:"listOptions,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ListArchivedWorkflowLabelValuesRequest) Reset() { + *m = ListArchivedWorkflowLabelValuesRequest{} +} +func (m *ListArchivedWorkflowLabelValuesRequest) String() string { return proto.CompactTextString(m) } +func (*ListArchivedWorkflowLabelValuesRequest) ProtoMessage() {} +func (*ListArchivedWorkflowLabelValuesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_95ca9a2d33e8bb19, []int{5} +} +func (m *ListArchivedWorkflowLabelValuesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ListArchivedWorkflowLabelValuesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ListArchivedWorkflowLabelValuesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ListArchivedWorkflowLabelValuesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ListArchivedWorkflowLabelValuesRequest.Merge(m, src) +} +func (m *ListArchivedWorkflowLabelValuesRequest) XXX_Size() int { + return m.Size() +} +func (m *ListArchivedWorkflowLabelValuesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ListArchivedWorkflowLabelValuesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ListArchivedWorkflowLabelValuesRequest proto.InternalMessageInfo + +func (m *ListArchivedWorkflowLabelValuesRequest) GetListOptions() *v1.ListOptions { + if m != nil { + return m.ListOptions + } + return nil +} + func init() { proto.RegisterType((*ListArchivedWorkflowsRequest)(nil), "workflowarchive.ListArchivedWorkflowsRequest") proto.RegisterType((*GetArchivedWorkflowRequest)(nil), "workflowarchive.GetArchivedWorkflowRequest") proto.RegisterType((*DeleteArchivedWorkflowRequest)(nil), "workflowarchive.DeleteArchivedWorkflowRequest") proto.RegisterType((*ArchivedWorkflowDeletedResponse)(nil), "workflowarchive.ArchivedWorkflowDeletedResponse") + proto.RegisterType((*ListArchivedWorkflowLabelKeysRequest)(nil), "workflowarchive.ListArchivedWorkflowLabelKeysRequest") + proto.RegisterType((*ListArchivedWorkflowLabelValuesRequest)(nil), "workflowarchive.ListArchivedWorkflowLabelValuesRequest") } func init() { @@ -221,36 +311,42 @@ func init() { } var fileDescriptor_95ca9a2d33e8bb19 = []byte{ - // 459 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xcb, 0x6a, 0x14, 0x41, - 0x14, 0x86, 0x29, 0x15, 0xc1, 0xca, 0x42, 0x29, 0xf1, 0x42, 0x33, 0x8e, 0xb1, 0x57, 0x41, 0x99, - 0x53, 0x76, 0x92, 0x85, 0x4b, 0x15, 0x41, 0x90, 0x18, 0x61, 0xb2, 0x10, 0xdc, 0x48, 0xa5, 0xfb, - 0xd8, 0x53, 0x4e, 0x4f, 0x57, 0x59, 0x55, 0xd3, 0x41, 0xc4, 0x8d, 0xaf, 0xe0, 0x2b, 0xf8, 0x10, - 0xc1, 0x27, 0x70, 0x29, 0xf8, 0x02, 0x32, 0xf8, 0x20, 0xd2, 0x97, 0x4a, 0x87, 0xee, 0xce, 0x65, - 0x91, 0x5d, 0xcd, 0x99, 0x53, 0xff, 0xff, 0x71, 0xfe, 0x53, 0x4d, 0xb7, 0xf5, 0x3c, 0xe5, 0x42, - 0xcb, 0x38, 0x93, 0x98, 0x3b, 0x7e, 0xa0, 0xcc, 0xfc, 0x43, 0xa6, 0x0e, 0x84, 0x89, 0x67, 0xb2, - 0xc0, 0xa3, 0xdf, 0x93, 0xa6, 0x00, 0xda, 0x28, 0xa7, 0xd8, 0xf5, 0x4e, 0x5f, 0x30, 0x4a, 0x95, - 0x4a, 0x33, 0x2c, 0x95, 0xb8, 0xc8, 0x73, 0xe5, 0x84, 0x93, 0x2a, 0xb7, 0x75, 0x7b, 0xb0, 0x3d, - 0x7f, 0x62, 0x41, 0xaa, 0xf2, 0xdf, 0x85, 0x88, 0x67, 0x32, 0x47, 0xf3, 0x99, 0x37, 0xc6, 0x96, - 0x2f, 0xd0, 0x09, 0x5e, 0x44, 0x3c, 0xc5, 0x1c, 0x8d, 0x70, 0x98, 0x34, 0xb7, 0x5e, 0xa7, 0xd2, - 0xcd, 0x96, 0xfb, 0x10, 0xab, 0x05, 0x17, 0x26, 0x55, 0xda, 0xa8, 0x8f, 0xd5, 0x61, 0xe2, 0xdd, - 0x6d, 0x2b, 0xe2, 0x4b, 0xbc, 0x88, 0x44, 0xa6, 0x67, 0xa2, 0x27, 0x17, 0x5a, 0x3a, 0xda, 0x91, - 0xd6, 0x3d, 0xab, 0x89, 0x93, 0xb7, 0x5e, 0x63, 0x8a, 0x9f, 0x96, 0x68, 0x1d, 0xdb, 0xa3, 0x6b, - 0x99, 0xb4, 0xee, 0x8d, 0xae, 0xc8, 0xef, 0x92, 0x75, 0xb2, 0xb1, 0xb6, 0x19, 0x41, 0x8d, 0x0e, - 0xc7, 0xd1, 0x41, 0xcf, 0xd3, 0xb2, 0x60, 0xa1, 0x44, 0x87, 0x22, 0x82, 0x9d, 0xf6, 0xe2, 0xf4, - 0xb8, 0x4a, 0x08, 0x34, 0x78, 0x89, 0x3d, 0x4f, 0x6f, 0x79, 0x83, 0x5e, 0x5e, 0xca, 0xa4, 0xb2, - 0xba, 0x36, 0x2d, 0x8f, 0x61, 0x44, 0xef, 0xbd, 0xc0, 0x0c, 0x1d, 0x9e, 0xff, 0xca, 0x03, 0x7a, - 0xbf, 0xdb, 0x5c, 0x4b, 0x24, 0x53, 0xb4, 0x5a, 0xe5, 0x16, 0x37, 0x0f, 0xaf, 0xd0, 0x3b, 0xdd, - 0x9e, 0x3d, 0x34, 0x85, 0x8c, 0x91, 0xfd, 0x24, 0xf4, 0xd6, 0xe0, 0x5c, 0xd8, 0x04, 0x3a, 0x29, - 0xc3, 0x69, 0xf3, 0x0b, 0x76, 0xa1, 0xcd, 0x0b, 0x7c, 0x5e, 0xd5, 0xe1, 0xfd, 0x51, 0x5e, 0x50, - 0x6c, 0xb5, 0xc3, 0xf3, 0x55, 0xf0, 0x91, 0x81, 0xd7, 0x2c, 0x7d, 0xc2, 0xf0, 0xdb, 0x9f, 0x7f, - 0xdf, 0x2f, 0x8d, 0x58, 0x50, 0x2d, 0x55, 0x11, 0xf1, 0x86, 0x22, 0x69, 0xe3, 0x67, 0x87, 0x84, - 0xde, 0x1c, 0x98, 0x2f, 0x7b, 0xd4, 0x43, 0x3f, 0x39, 0x85, 0xe0, 0xd5, 0xc5, 0x81, 0x87, 0x1b, - 0x15, 0x74, 0xc8, 0xd6, 0x4f, 0x86, 0xe6, 0x5f, 0x96, 0x32, 0xf9, 0xca, 0x7e, 0x10, 0x7a, 0x7b, - 0x38, 0x6a, 0x06, 0x3d, 0xfa, 0x53, 0x77, 0x22, 0x78, 0xdc, 0xeb, 0x3f, 0x63, 0x21, 0x3c, 0xe6, - 0xc3, 0x33, 0x31, 0x9f, 0xef, 0xfe, 0x5a, 0x8d, 0xc9, 0xef, 0xd5, 0x98, 0xfc, 0x5d, 0x8d, 0xc9, - 0xbb, 0xa7, 0xe7, 0x7f, 0x92, 0xc3, 0x1f, 0x94, 0xfd, 0xab, 0xd5, 0x63, 0xdc, 0xfa, 0x1f, 0x00, - 0x00, 0xff, 0xff, 0xac, 0x36, 0x09, 0xd9, 0x78, 0x04, 0x00, 0x00, + // 560 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x95, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0xb5, 0x20, 0x81, 0xd8, 0x1e, 0x40, 0x8b, 0xf8, 0x90, 0x95, 0xa6, 0x65, 0x05, 0x6d, + 0x01, 0x79, 0x17, 0xb7, 0x45, 0x70, 0x04, 0x84, 0x84, 0x44, 0xd3, 0x22, 0xa5, 0x12, 0x48, 0x5c, + 0xd0, 0x26, 0x1e, 0x9c, 0x25, 0x8e, 0xd7, 0x78, 0x37, 0xae, 0x2a, 0xd4, 0x0b, 0xaf, 0xc0, 0x2b, + 0xf0, 0x10, 0x88, 0x27, 0xe0, 0x88, 0xe0, 0xc6, 0x09, 0x45, 0x9c, 0x78, 0x0a, 0xe4, 0x4d, 0x9c, + 0x14, 0xdb, 0xf9, 0x90, 0x28, 0xb7, 0xcd, 0x64, 0xe6, 0x3f, 0xbf, 0x19, 0xff, 0xd7, 0xc6, 0xdb, + 0x71, 0x37, 0xe0, 0x22, 0x96, 0xed, 0x50, 0x42, 0x64, 0xf8, 0x81, 0x4a, 0xba, 0xaf, 0x43, 0x75, + 0x20, 0x92, 0x76, 0x47, 0xa6, 0x30, 0xfe, 0xed, 0x8e, 0x02, 0x2c, 0x4e, 0x94, 0x51, 0xe4, 0x7c, + 0x21, 0xcf, 0xa9, 0x05, 0x4a, 0x05, 0x21, 0x64, 0x4a, 0x5c, 0x44, 0x91, 0x32, 0xc2, 0x48, 0x15, + 0xe9, 0x61, 0xba, 0xb3, 0xdd, 0xbd, 0xaf, 0x99, 0x54, 0xd9, 0xbf, 0x3d, 0xd1, 0xee, 0xc8, 0x08, + 0x92, 0x43, 0x3e, 0x6a, 0xac, 0x79, 0x0f, 0x8c, 0xe0, 0xa9, 0xc7, 0x03, 0x88, 0x20, 0x11, 0x06, + 0xfc, 0x51, 0xd5, 0x6e, 0x20, 0x4d, 0xa7, 0xdf, 0x62, 0x6d, 0xd5, 0xe3, 0x22, 0x09, 0x54, 0x9c, + 0xa8, 0x37, 0xf6, 0xe0, 0xe6, 0xdd, 0xf5, 0x44, 0x24, 0x0f, 0xf1, 0xd4, 0x13, 0x61, 0xdc, 0x11, + 0x25, 0x39, 0xaa, 0x71, 0xad, 0x21, 0xb5, 0x79, 0x38, 0x24, 0xf6, 0x5f, 0xe4, 0x1a, 0x4d, 0x78, + 0xdb, 0x07, 0x6d, 0xc8, 0x3e, 0x5e, 0x0a, 0xa5, 0x36, 0xcf, 0x62, 0x4b, 0x7e, 0x15, 0xad, 0xa2, + 0x8d, 0xa5, 0x4d, 0x8f, 0x0d, 0xd1, 0xd9, 0x71, 0x74, 0x16, 0x77, 0x83, 0x2c, 0xa0, 0x59, 0x86, + 0xce, 0x52, 0x8f, 0x35, 0x26, 0x85, 0xcd, 0xe3, 0x2a, 0x94, 0x61, 0xe7, 0x09, 0x94, 0x7a, 0xe6, + 0x2d, 0x2f, 0xe0, 0xd3, 0x7d, 0xe9, 0xdb, 0x56, 0xe7, 0x9a, 0xd9, 0x91, 0x7a, 0x78, 0xf9, 0x31, + 0x84, 0x60, 0x60, 0xf1, 0x92, 0x6b, 0x78, 0xa5, 0x98, 0x3c, 0x94, 0xf0, 0x9b, 0xa0, 0x63, 0x15, + 0x69, 0xa0, 0x6b, 0xf8, 0x7a, 0xd5, 0xe8, 0x0d, 0xd1, 0x82, 0x70, 0x07, 0x0e, 0xf3, 0x15, 0xd0, + 0x23, 0xbc, 0x36, 0x35, 0xef, 0xb9, 0x08, 0xfb, 0xf0, 0x5f, 0x97, 0xb5, 0xf9, 0xfb, 0x2c, 0xbe, + 0x52, 0xec, 0xbd, 0x0f, 0x49, 0x2a, 0xdb, 0x40, 0x3e, 0x23, 0x7c, 0xa9, 0xf2, 0xf1, 0x11, 0x97, + 0x15, 0xcc, 0xc8, 0x66, 0x3d, 0x66, 0x67, 0x8f, 0x4d, 0x6c, 0xc5, 0x72, 0x5b, 0xd9, 0xc3, 0xab, + 0xb1, 0xad, 0x58, 0xba, 0x35, 0xc1, 0xce, 0xa3, 0x2c, 0x77, 0x16, 0x1b, 0xef, 0x45, 0x6a, 0x43, + 0xe9, 0xfb, 0xef, 0xbf, 0x3e, 0x9c, 0xaa, 0x11, 0xc7, 0x7a, 0x3f, 0xf5, 0xf8, 0x88, 0xc2, 0x9f, + 0xb8, 0x94, 0x7c, 0x42, 0xf8, 0x62, 0x85, 0x0d, 0xc8, 0xed, 0x12, 0xfa, 0x74, 0xb3, 0x38, 0x4f, + 0x4f, 0x0e, 0x9c, 0x6e, 0x58, 0x68, 0x4a, 0x56, 0xa7, 0x43, 0xf3, 0x77, 0x7d, 0xe9, 0x1f, 0x91, + 0x8f, 0x08, 0x5f, 0xae, 0x76, 0x24, 0x61, 0x25, 0xfa, 0x99, 0xd6, 0x75, 0xee, 0x94, 0xf2, 0xe7, + 0xf9, 0x76, 0x84, 0x79, 0x6b, 0x3e, 0xe6, 0x37, 0x84, 0x97, 0x67, 0x5a, 0x9c, 0xdc, 0x5d, 0xc8, + 0x26, 0xc5, 0x2b, 0xe1, 0xec, 0xfc, 0xfb, 0xd6, 0xc7, 0x9a, 0xd4, 0xb5, 0xf3, 0xac, 0x93, 0x1b, + 0xd3, 0xe7, 0x71, 0xc3, 0x2c, 0xdb, 0xed, 0x66, 0xc8, 0x3f, 0x10, 0x5e, 0x99, 0x73, 0x1f, 0xc9, + 0xbd, 0xc5, 0xc7, 0xfa, 0xeb, 0x06, 0x3b, 0xbb, 0x27, 0x34, 0xd8, 0x50, 0x95, 0x72, 0x3b, 0xda, + 0x4d, 0xb2, 0x3e, 0x77, 0xb4, 0xd4, 0x16, 0x3c, 0xda, 0xfb, 0x32, 0xa8, 0xa3, 0xaf, 0x83, 0x3a, + 0xfa, 0x39, 0xa8, 0xa3, 0x97, 0x0f, 0x16, 0x7f, 0xd7, 0x57, 0x7f, 0xa9, 0x5a, 0x67, 0xec, 0x5b, + 0x7e, 0xeb, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6b, 0xca, 0x08, 0x53, 0xd1, 0x06, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -268,6 +364,8 @@ type ArchivedWorkflowServiceClient interface { ListArchivedWorkflows(ctx context.Context, in *ListArchivedWorkflowsRequest, opts ...grpc.CallOption) (*v1alpha1.WorkflowList, error) GetArchivedWorkflow(ctx context.Context, in *GetArchivedWorkflowRequest, opts ...grpc.CallOption) (*v1alpha1.Workflow, error) DeleteArchivedWorkflow(ctx context.Context, in *DeleteArchivedWorkflowRequest, opts ...grpc.CallOption) (*ArchivedWorkflowDeletedResponse, error) + ListArchivedWorkflowLabelKeys(ctx context.Context, in *ListArchivedWorkflowLabelKeysRequest, opts ...grpc.CallOption) (*v1alpha1.LabelKeys, error) + ListArchivedWorkflowLabelValues(ctx context.Context, in *ListArchivedWorkflowLabelValuesRequest, opts ...grpc.CallOption) (*v1alpha1.LabelValues, error) } type archivedWorkflowServiceClient struct { @@ -305,11 +403,31 @@ func (c *archivedWorkflowServiceClient) DeleteArchivedWorkflow(ctx context.Conte return out, nil } +func (c *archivedWorkflowServiceClient) ListArchivedWorkflowLabelKeys(ctx context.Context, in *ListArchivedWorkflowLabelKeysRequest, opts ...grpc.CallOption) (*v1alpha1.LabelKeys, error) { + out := new(v1alpha1.LabelKeys) + err := c.cc.Invoke(ctx, "/workflowarchive.ArchivedWorkflowService/ListArchivedWorkflowLabelKeys", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *archivedWorkflowServiceClient) ListArchivedWorkflowLabelValues(ctx context.Context, in *ListArchivedWorkflowLabelValuesRequest, opts ...grpc.CallOption) (*v1alpha1.LabelValues, error) { + out := new(v1alpha1.LabelValues) + err := c.cc.Invoke(ctx, "/workflowarchive.ArchivedWorkflowService/ListArchivedWorkflowLabelValues", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ArchivedWorkflowServiceServer is the server API for ArchivedWorkflowService service. type ArchivedWorkflowServiceServer interface { ListArchivedWorkflows(context.Context, *ListArchivedWorkflowsRequest) (*v1alpha1.WorkflowList, error) GetArchivedWorkflow(context.Context, *GetArchivedWorkflowRequest) (*v1alpha1.Workflow, error) DeleteArchivedWorkflow(context.Context, *DeleteArchivedWorkflowRequest) (*ArchivedWorkflowDeletedResponse, error) + ListArchivedWorkflowLabelKeys(context.Context, *ListArchivedWorkflowLabelKeysRequest) (*v1alpha1.LabelKeys, error) + ListArchivedWorkflowLabelValues(context.Context, *ListArchivedWorkflowLabelValuesRequest) (*v1alpha1.LabelValues, error) } // UnimplementedArchivedWorkflowServiceServer can be embedded to have forward compatible implementations. @@ -325,6 +443,12 @@ func (*UnimplementedArchivedWorkflowServiceServer) GetArchivedWorkflow(ctx conte func (*UnimplementedArchivedWorkflowServiceServer) DeleteArchivedWorkflow(ctx context.Context, req *DeleteArchivedWorkflowRequest) (*ArchivedWorkflowDeletedResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteArchivedWorkflow not implemented") } +func (*UnimplementedArchivedWorkflowServiceServer) ListArchivedWorkflowLabelKeys(ctx context.Context, req *ListArchivedWorkflowLabelKeysRequest) (*v1alpha1.LabelKeys, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListArchivedWorkflowLabelKeys not implemented") +} +func (*UnimplementedArchivedWorkflowServiceServer) ListArchivedWorkflowLabelValues(ctx context.Context, req *ListArchivedWorkflowLabelValuesRequest) (*v1alpha1.LabelValues, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListArchivedWorkflowLabelValues not implemented") +} func RegisterArchivedWorkflowServiceServer(s *grpc.Server, srv ArchivedWorkflowServiceServer) { s.RegisterService(&_ArchivedWorkflowService_serviceDesc, srv) @@ -384,6 +508,42 @@ func _ArchivedWorkflowService_DeleteArchivedWorkflow_Handler(srv interface{}, ct return interceptor(ctx, in, info, handler) } +func _ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListArchivedWorkflowLabelKeysRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArchivedWorkflowServiceServer).ListArchivedWorkflowLabelKeys(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/workflowarchive.ArchivedWorkflowService/ListArchivedWorkflowLabelKeys", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArchivedWorkflowServiceServer).ListArchivedWorkflowLabelKeys(ctx, req.(*ListArchivedWorkflowLabelKeysRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ArchivedWorkflowService_ListArchivedWorkflowLabelValues_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListArchivedWorkflowLabelValuesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ArchivedWorkflowServiceServer).ListArchivedWorkflowLabelValues(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/workflowarchive.ArchivedWorkflowService/ListArchivedWorkflowLabelValues", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ArchivedWorkflowServiceServer).ListArchivedWorkflowLabelValues(ctx, req.(*ListArchivedWorkflowLabelValuesRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _ArchivedWorkflowService_serviceDesc = grpc.ServiceDesc{ ServiceName: "workflowarchive.ArchivedWorkflowService", HandlerType: (*ArchivedWorkflowServiceServer)(nil), @@ -400,6 +560,14 @@ var _ArchivedWorkflowService_serviceDesc = grpc.ServiceDesc{ MethodName: "DeleteArchivedWorkflow", Handler: _ArchivedWorkflowService_DeleteArchivedWorkflow_Handler, }, + { + MethodName: "ListArchivedWorkflowLabelKeys", + Handler: _ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_Handler, + }, + { + MethodName: "ListArchivedWorkflowLabelValues", + Handler: _ArchivedWorkflowService_ListArchivedWorkflowLabelValues_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "pkg/apiclient/workflowarchive/workflow-archive.proto", @@ -539,6 +707,72 @@ func (m *ArchivedWorkflowDeletedResponse) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } +func (m *ListArchivedWorkflowLabelKeysRequest) 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 *ListArchivedWorkflowLabelKeysRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ListArchivedWorkflowLabelKeysRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + return len(dAtA) - i, nil +} + +func (m *ListArchivedWorkflowLabelValuesRequest) 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 *ListArchivedWorkflowLabelValuesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ListArchivedWorkflowLabelValuesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.ListOptions != nil { + { + size, err := m.ListOptions.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintWorkflowArchive(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintWorkflowArchive(dAtA []byte, offset int, v uint64) int { offset -= sovWorkflowArchive(v) base := offset @@ -610,6 +844,34 @@ func (m *ArchivedWorkflowDeletedResponse) Size() (n int) { return n } +func (m *ListArchivedWorkflowLabelKeysRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *ListArchivedWorkflowLabelValuesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ListOptions != nil { + l = m.ListOptions.Size() + n += 1 + l + sovWorkflowArchive(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func sovWorkflowArchive(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -920,6 +1182,144 @@ func (m *ArchivedWorkflowDeletedResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *ListArchivedWorkflowLabelKeysRequest) 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 ErrIntOverflowWorkflowArchive + } + 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: ListArchivedWorkflowLabelKeysRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListArchivedWorkflowLabelKeysRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipWorkflowArchive(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthWorkflowArchive + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListArchivedWorkflowLabelValuesRequest) 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 ErrIntOverflowWorkflowArchive + } + 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: ListArchivedWorkflowLabelValuesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListArchivedWorkflowLabelValuesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowWorkflowArchive + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthWorkflowArchive + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthWorkflowArchive + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ListOptions == nil { + m.ListOptions = &v1.ListOptions{} + } + if err := m.ListOptions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipWorkflowArchive(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthWorkflowArchive + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipWorkflowArchive(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apiclient/workflowarchive/workflow-archive.pb.gw.go b/pkg/apiclient/workflowarchive/workflow-archive.pb.gw.go index 567e599b19d5..0eca7512003c 100644 --- a/pkg/apiclient/workflowarchive/workflow-archive.pb.gw.go +++ b/pkg/apiclient/workflowarchive/workflow-archive.pb.gw.go @@ -177,6 +177,60 @@ func local_request_ArchivedWorkflowService_DeleteArchivedWorkflow_0(ctx context. } +func request_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0(ctx context.Context, marshaler runtime.Marshaler, client ArchivedWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListArchivedWorkflowLabelKeysRequest + var metadata runtime.ServerMetadata + + msg, err := client.ListArchivedWorkflowLabelKeys(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0(ctx context.Context, marshaler runtime.Marshaler, server ArchivedWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListArchivedWorkflowLabelKeysRequest + var metadata runtime.ServerMetadata + + msg, err := server.ListArchivedWorkflowLabelKeys(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0(ctx context.Context, marshaler runtime.Marshaler, client ArchivedWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListArchivedWorkflowLabelValuesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListArchivedWorkflowLabelValues(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0(ctx context.Context, marshaler runtime.Marshaler, server ArchivedWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListArchivedWorkflowLabelValuesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListArchivedWorkflowLabelValues(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterArchivedWorkflowServiceHandlerServer registers the http handlers for service ArchivedWorkflowService to "mux". // UnaryRPC :call ArchivedWorkflowServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -252,6 +306,52 @@ func RegisterArchivedWorkflowServiceHandlerServer(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -353,6 +453,46 @@ func RegisterArchivedWorkflowServiceHandlerClient(ctx context.Context, mux *runt }) + mux.Handle("GET", pattern_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -362,6 +502,10 @@ var ( pattern_ArchivedWorkflowService_GetArchivedWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "archived-workflows", "uid"}, "", runtime.AssumeColonVerbOpt(true))) pattern_ArchivedWorkflowService_DeleteArchivedWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "archived-workflows", "uid"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "archived-workflows-label-keys"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "v1", "archived-workflows-label-values"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -370,4 +514,8 @@ var ( forward_ArchivedWorkflowService_GetArchivedWorkflow_0 = runtime.ForwardResponseMessage forward_ArchivedWorkflowService_DeleteArchivedWorkflow_0 = runtime.ForwardResponseMessage + + forward_ArchivedWorkflowService_ListArchivedWorkflowLabelKeys_0 = runtime.ForwardResponseMessage + + forward_ArchivedWorkflowService_ListArchivedWorkflowLabelValues_0 = runtime.ForwardResponseMessage ) diff --git a/pkg/apiclient/workflowarchive/workflow-archive.proto b/pkg/apiclient/workflowarchive/workflow-archive.proto index 6ce3c55f0fd9..76e83469055f 100644 --- a/pkg/apiclient/workflowarchive/workflow-archive.proto +++ b/pkg/apiclient/workflowarchive/workflow-archive.proto @@ -18,6 +18,11 @@ message DeleteArchivedWorkflowRequest { } message ArchivedWorkflowDeletedResponse { } +message ListArchivedWorkflowLabelKeysRequest { +} +message ListArchivedWorkflowLabelValuesRequest { + k8s.io.apimachinery.pkg.apis.meta.v1.ListOptions listOptions = 1; +} service ArchivedWorkflowService { rpc ListArchivedWorkflows (ListArchivedWorkflowsRequest) returns (github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowList) { @@ -29,4 +34,10 @@ service ArchivedWorkflowService { rpc DeleteArchivedWorkflow (DeleteArchivedWorkflowRequest) returns (ArchivedWorkflowDeletedResponse) { option (google.api.http).delete = "/api/v1/archived-workflows/{uid}"; } + rpc ListArchivedWorkflowLabelKeys (ListArchivedWorkflowLabelKeysRequest) returns (github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.LabelKeys) { + option (google.api.http).get = "/api/v1/archived-workflows-label-keys"; + } + rpc ListArchivedWorkflowLabelValues (ListArchivedWorkflowLabelValuesRequest) returns (github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.LabelValues) { + option (google.api.http).get = "/api/v1/archived-workflows-label-values"; + } } diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 32fef224f20d..573a7405f935 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -12,6 +12,8 @@ API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/ API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,HTTPArtifact,Headers API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,Histogram,Buckets API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,Inputs,Parameters +API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,LabelKeys,Items +API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,LabelValues,Items API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,Metrics,Prometheus API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,NodeStatus,Children API rule violation: list_type_missing,github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1,NodeStatus,OutboundNodes diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 93a7a800ad4f..30572f02b480 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -1408,10 +1408,66 @@ func (m *Item) XXX_DiscardUnknown() { var xxx_messageInfo_Item proto.InternalMessageInfo +func (m *LabelKeys) Reset() { *m = LabelKeys{} } +func (*LabelKeys) ProtoMessage() {} +func (*LabelKeys) Descriptor() ([]byte, []int) { + return fileDescriptor_724696e352c3df5f, []int{49} +} +func (m *LabelKeys) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LabelKeys) 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 *LabelKeys) XXX_Merge(src proto.Message) { + xxx_messageInfo_LabelKeys.Merge(m, src) +} +func (m *LabelKeys) XXX_Size() int { + return m.Size() +} +func (m *LabelKeys) XXX_DiscardUnknown() { + xxx_messageInfo_LabelKeys.DiscardUnknown(m) +} + +var xxx_messageInfo_LabelKeys proto.InternalMessageInfo + +func (m *LabelValues) Reset() { *m = LabelValues{} } +func (*LabelValues) ProtoMessage() {} +func (*LabelValues) Descriptor() ([]byte, []int) { + return fileDescriptor_724696e352c3df5f, []int{50} +} +func (m *LabelValues) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LabelValues) 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 *LabelValues) XXX_Merge(src proto.Message) { + xxx_messageInfo_LabelValues.Merge(m, src) +} +func (m *LabelValues) XXX_Size() int { + return m.Size() +} +func (m *LabelValues) XXX_DiscardUnknown() { + xxx_messageInfo_LabelValues.DiscardUnknown(m) +} + +var xxx_messageInfo_LabelValues proto.InternalMessageInfo + func (m *LifecycleHook) Reset() { *m = LifecycleHook{} } func (*LifecycleHook) ProtoMessage() {} func (*LifecycleHook) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{49} + return fileDescriptor_724696e352c3df5f, []int{51} } func (m *LifecycleHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1439,7 +1495,7 @@ var xxx_messageInfo_LifecycleHook proto.InternalMessageInfo func (m *Link) Reset() { *m = Link{} } func (*Link) ProtoMessage() {} func (*Link) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{50} + return fileDescriptor_724696e352c3df5f, []int{52} } func (m *Link) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1467,7 +1523,7 @@ var xxx_messageInfo_Link proto.InternalMessageInfo func (m *MemoizationStatus) Reset() { *m = MemoizationStatus{} } func (*MemoizationStatus) ProtoMessage() {} func (*MemoizationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{51} + return fileDescriptor_724696e352c3df5f, []int{53} } func (m *MemoizationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1495,7 +1551,7 @@ var xxx_messageInfo_MemoizationStatus proto.InternalMessageInfo func (m *Memoize) Reset() { *m = Memoize{} } func (*Memoize) ProtoMessage() {} func (*Memoize) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{52} + return fileDescriptor_724696e352c3df5f, []int{54} } func (m *Memoize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1523,7 +1579,7 @@ var xxx_messageInfo_Memoize proto.InternalMessageInfo func (m *Metadata) Reset() { *m = Metadata{} } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{53} + return fileDescriptor_724696e352c3df5f, []int{55} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1551,7 +1607,7 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo func (m *MetricLabel) Reset() { *m = MetricLabel{} } func (*MetricLabel) ProtoMessage() {} func (*MetricLabel) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{54} + return fileDescriptor_724696e352c3df5f, []int{56} } func (m *MetricLabel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1579,7 +1635,7 @@ var xxx_messageInfo_MetricLabel proto.InternalMessageInfo func (m *Metrics) Reset() { *m = Metrics{} } func (*Metrics) ProtoMessage() {} func (*Metrics) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{55} + return fileDescriptor_724696e352c3df5f, []int{57} } func (m *Metrics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1607,7 +1663,7 @@ var xxx_messageInfo_Metrics proto.InternalMessageInfo func (m *Mutex) Reset() { *m = Mutex{} } func (*Mutex) ProtoMessage() {} func (*Mutex) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{56} + return fileDescriptor_724696e352c3df5f, []int{58} } func (m *Mutex) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1635,7 +1691,7 @@ var xxx_messageInfo_Mutex proto.InternalMessageInfo func (m *MutexHolding) Reset() { *m = MutexHolding{} } func (*MutexHolding) ProtoMessage() {} func (*MutexHolding) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{57} + return fileDescriptor_724696e352c3df5f, []int{59} } func (m *MutexHolding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1663,7 +1719,7 @@ var xxx_messageInfo_MutexHolding proto.InternalMessageInfo func (m *MutexStatus) Reset() { *m = MutexStatus{} } func (*MutexStatus) ProtoMessage() {} func (*MutexStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{58} + return fileDescriptor_724696e352c3df5f, []int{60} } func (m *MutexStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1691,7 +1747,7 @@ var xxx_messageInfo_MutexStatus proto.InternalMessageInfo func (m *NodeResult) Reset() { *m = NodeResult{} } func (*NodeResult) ProtoMessage() {} func (*NodeResult) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{59} + return fileDescriptor_724696e352c3df5f, []int{61} } func (m *NodeResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1719,7 +1775,7 @@ var xxx_messageInfo_NodeResult proto.InternalMessageInfo func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} func (*NodeStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{60} + return fileDescriptor_724696e352c3df5f, []int{62} } func (m *NodeStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1747,7 +1803,7 @@ var xxx_messageInfo_NodeStatus proto.InternalMessageInfo func (m *NodeSynchronizationStatus) Reset() { *m = NodeSynchronizationStatus{} } func (*NodeSynchronizationStatus) ProtoMessage() {} func (*NodeSynchronizationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{61} + return fileDescriptor_724696e352c3df5f, []int{63} } func (m *NodeSynchronizationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1775,7 +1831,7 @@ var xxx_messageInfo_NodeSynchronizationStatus proto.InternalMessageInfo func (m *NoneStrategy) Reset() { *m = NoneStrategy{} } func (*NoneStrategy) ProtoMessage() {} func (*NoneStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{62} + return fileDescriptor_724696e352c3df5f, []int{64} } func (m *NoneStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1803,7 +1859,7 @@ var xxx_messageInfo_NoneStrategy proto.InternalMessageInfo func (m *OSSArtifact) Reset() { *m = OSSArtifact{} } func (*OSSArtifact) ProtoMessage() {} func (*OSSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{63} + return fileDescriptor_724696e352c3df5f, []int{65} } func (m *OSSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1831,7 +1887,7 @@ var xxx_messageInfo_OSSArtifact proto.InternalMessageInfo func (m *OSSArtifactRepository) Reset() { *m = OSSArtifactRepository{} } func (*OSSArtifactRepository) ProtoMessage() {} func (*OSSArtifactRepository) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{64} + return fileDescriptor_724696e352c3df5f, []int{66} } func (m *OSSArtifactRepository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1859,7 +1915,7 @@ var xxx_messageInfo_OSSArtifactRepository proto.InternalMessageInfo func (m *OSSBucket) Reset() { *m = OSSBucket{} } func (*OSSBucket) ProtoMessage() {} func (*OSSBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{65} + return fileDescriptor_724696e352c3df5f, []int{67} } func (m *OSSBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1887,7 +1943,7 @@ var xxx_messageInfo_OSSBucket proto.InternalMessageInfo func (m *OSSLifecycleRule) Reset() { *m = OSSLifecycleRule{} } func (*OSSLifecycleRule) ProtoMessage() {} func (*OSSLifecycleRule) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{66} + return fileDescriptor_724696e352c3df5f, []int{68} } func (m *OSSLifecycleRule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1915,7 +1971,7 @@ var xxx_messageInfo_OSSLifecycleRule proto.InternalMessageInfo func (m *Outputs) Reset() { *m = Outputs{} } func (*Outputs) ProtoMessage() {} func (*Outputs) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{67} + return fileDescriptor_724696e352c3df5f, []int{69} } func (m *Outputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1943,7 +1999,7 @@ var xxx_messageInfo_Outputs proto.InternalMessageInfo func (m *ParallelSteps) Reset() { *m = ParallelSteps{} } func (*ParallelSteps) ProtoMessage() {} func (*ParallelSteps) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{68} + return fileDescriptor_724696e352c3df5f, []int{70} } func (m *ParallelSteps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1971,7 +2027,7 @@ var xxx_messageInfo_ParallelSteps proto.InternalMessageInfo func (m *Parameter) Reset() { *m = Parameter{} } func (*Parameter) ProtoMessage() {} func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{69} + return fileDescriptor_724696e352c3df5f, []int{71} } func (m *Parameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1999,7 +2055,7 @@ var xxx_messageInfo_Parameter proto.InternalMessageInfo func (m *PodGC) Reset() { *m = PodGC{} } func (*PodGC) ProtoMessage() {} func (*PodGC) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{70} + return fileDescriptor_724696e352c3df5f, []int{72} } func (m *PodGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2027,7 +2083,7 @@ var xxx_messageInfo_PodGC proto.InternalMessageInfo func (m *Prometheus) Reset() { *m = Prometheus{} } func (*Prometheus) ProtoMessage() {} func (*Prometheus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{71} + return fileDescriptor_724696e352c3df5f, []int{73} } func (m *Prometheus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2055,7 +2111,7 @@ var xxx_messageInfo_Prometheus proto.InternalMessageInfo func (m *RawArtifact) Reset() { *m = RawArtifact{} } func (*RawArtifact) ProtoMessage() {} func (*RawArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{72} + return fileDescriptor_724696e352c3df5f, []int{74} } func (m *RawArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2083,7 +2139,7 @@ var xxx_messageInfo_RawArtifact proto.InternalMessageInfo func (m *ResourceTemplate) Reset() { *m = ResourceTemplate{} } func (*ResourceTemplate) ProtoMessage() {} func (*ResourceTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{73} + return fileDescriptor_724696e352c3df5f, []int{75} } func (m *ResourceTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2111,7 +2167,7 @@ var xxx_messageInfo_ResourceTemplate proto.InternalMessageInfo func (m *RetryAffinity) Reset() { *m = RetryAffinity{} } func (*RetryAffinity) ProtoMessage() {} func (*RetryAffinity) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{74} + return fileDescriptor_724696e352c3df5f, []int{76} } func (m *RetryAffinity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2139,7 +2195,7 @@ var xxx_messageInfo_RetryAffinity proto.InternalMessageInfo func (m *RetryNodeAntiAffinity) Reset() { *m = RetryNodeAntiAffinity{} } func (*RetryNodeAntiAffinity) ProtoMessage() {} func (*RetryNodeAntiAffinity) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{75} + return fileDescriptor_724696e352c3df5f, []int{77} } func (m *RetryNodeAntiAffinity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2167,7 +2223,7 @@ var xxx_messageInfo_RetryNodeAntiAffinity proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{76} + return fileDescriptor_724696e352c3df5f, []int{78} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2195,7 +2251,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *S3Artifact) Reset() { *m = S3Artifact{} } func (*S3Artifact) ProtoMessage() {} func (*S3Artifact) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{77} + return fileDescriptor_724696e352c3df5f, []int{79} } func (m *S3Artifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2223,7 +2279,7 @@ var xxx_messageInfo_S3Artifact proto.InternalMessageInfo func (m *S3ArtifactRepository) Reset() { *m = S3ArtifactRepository{} } func (*S3ArtifactRepository) ProtoMessage() {} func (*S3ArtifactRepository) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{78} + return fileDescriptor_724696e352c3df5f, []int{80} } func (m *S3ArtifactRepository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2251,7 +2307,7 @@ var xxx_messageInfo_S3ArtifactRepository proto.InternalMessageInfo func (m *S3Bucket) Reset() { *m = S3Bucket{} } func (*S3Bucket) ProtoMessage() {} func (*S3Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{79} + return fileDescriptor_724696e352c3df5f, []int{81} } func (m *S3Bucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2279,7 +2335,7 @@ var xxx_messageInfo_S3Bucket proto.InternalMessageInfo func (m *S3EncryptionOptions) Reset() { *m = S3EncryptionOptions{} } func (*S3EncryptionOptions) ProtoMessage() {} func (*S3EncryptionOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{80} + return fileDescriptor_724696e352c3df5f, []int{82} } func (m *S3EncryptionOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2307,7 +2363,7 @@ var xxx_messageInfo_S3EncryptionOptions proto.InternalMessageInfo func (m *ScriptTemplate) Reset() { *m = ScriptTemplate{} } func (*ScriptTemplate) ProtoMessage() {} func (*ScriptTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{81} + return fileDescriptor_724696e352c3df5f, []int{83} } func (m *ScriptTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2335,7 +2391,7 @@ var xxx_messageInfo_ScriptTemplate proto.InternalMessageInfo func (m *SemaphoreHolding) Reset() { *m = SemaphoreHolding{} } func (*SemaphoreHolding) ProtoMessage() {} func (*SemaphoreHolding) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{82} + return fileDescriptor_724696e352c3df5f, []int{84} } func (m *SemaphoreHolding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2363,7 +2419,7 @@ var xxx_messageInfo_SemaphoreHolding proto.InternalMessageInfo func (m *SemaphoreRef) Reset() { *m = SemaphoreRef{} } func (*SemaphoreRef) ProtoMessage() {} func (*SemaphoreRef) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{83} + return fileDescriptor_724696e352c3df5f, []int{85} } func (m *SemaphoreRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2391,7 +2447,7 @@ var xxx_messageInfo_SemaphoreRef proto.InternalMessageInfo func (m *SemaphoreStatus) Reset() { *m = SemaphoreStatus{} } func (*SemaphoreStatus) ProtoMessage() {} func (*SemaphoreStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{84} + return fileDescriptor_724696e352c3df5f, []int{86} } func (m *SemaphoreStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2419,7 +2475,7 @@ var xxx_messageInfo_SemaphoreStatus proto.InternalMessageInfo func (m *Sequence) Reset() { *m = Sequence{} } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{85} + return fileDescriptor_724696e352c3df5f, []int{87} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2447,7 +2503,7 @@ var xxx_messageInfo_Sequence proto.InternalMessageInfo func (m *Submit) Reset() { *m = Submit{} } func (*Submit) ProtoMessage() {} func (*Submit) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{86} + return fileDescriptor_724696e352c3df5f, []int{88} } func (m *Submit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2475,7 +2531,7 @@ var xxx_messageInfo_Submit proto.InternalMessageInfo func (m *SubmitOpts) Reset() { *m = SubmitOpts{} } func (*SubmitOpts) ProtoMessage() {} func (*SubmitOpts) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{87} + return fileDescriptor_724696e352c3df5f, []int{89} } func (m *SubmitOpts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2503,7 +2559,7 @@ var xxx_messageInfo_SubmitOpts proto.InternalMessageInfo func (m *SuppliedValueFrom) Reset() { *m = SuppliedValueFrom{} } func (*SuppliedValueFrom) ProtoMessage() {} func (*SuppliedValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{88} + return fileDescriptor_724696e352c3df5f, []int{90} } func (m *SuppliedValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2531,7 +2587,7 @@ var xxx_messageInfo_SuppliedValueFrom proto.InternalMessageInfo func (m *SuspendTemplate) Reset() { *m = SuspendTemplate{} } func (*SuspendTemplate) ProtoMessage() {} func (*SuspendTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{89} + return fileDescriptor_724696e352c3df5f, []int{91} } func (m *SuspendTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2559,7 +2615,7 @@ var xxx_messageInfo_SuspendTemplate proto.InternalMessageInfo func (m *Synchronization) Reset() { *m = Synchronization{} } func (*Synchronization) ProtoMessage() {} func (*Synchronization) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{90} + return fileDescriptor_724696e352c3df5f, []int{92} } func (m *Synchronization) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2587,7 +2643,7 @@ var xxx_messageInfo_Synchronization proto.InternalMessageInfo func (m *SynchronizationStatus) Reset() { *m = SynchronizationStatus{} } func (*SynchronizationStatus) ProtoMessage() {} func (*SynchronizationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{91} + return fileDescriptor_724696e352c3df5f, []int{93} } func (m *SynchronizationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2615,7 +2671,7 @@ var xxx_messageInfo_SynchronizationStatus proto.InternalMessageInfo func (m *TTLStrategy) Reset() { *m = TTLStrategy{} } func (*TTLStrategy) ProtoMessage() {} func (*TTLStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{92} + return fileDescriptor_724696e352c3df5f, []int{94} } func (m *TTLStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2643,7 +2699,7 @@ var xxx_messageInfo_TTLStrategy proto.InternalMessageInfo func (m *TarStrategy) Reset() { *m = TarStrategy{} } func (*TarStrategy) ProtoMessage() {} func (*TarStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{93} + return fileDescriptor_724696e352c3df5f, []int{95} } func (m *TarStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2671,7 +2727,7 @@ var xxx_messageInfo_TarStrategy proto.InternalMessageInfo func (m *Template) Reset() { *m = Template{} } func (*Template) ProtoMessage() {} func (*Template) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{94} + return fileDescriptor_724696e352c3df5f, []int{96} } func (m *Template) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2699,7 +2755,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo func (m *TemplateRef) Reset() { *m = TemplateRef{} } func (*TemplateRef) ProtoMessage() {} func (*TemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{95} + return fileDescriptor_724696e352c3df5f, []int{97} } func (m *TemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2727,7 +2783,7 @@ var xxx_messageInfo_TemplateRef proto.InternalMessageInfo func (m *TransformationStep) Reset() { *m = TransformationStep{} } func (*TransformationStep) ProtoMessage() {} func (*TransformationStep) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{96} + return fileDescriptor_724696e352c3df5f, []int{98} } func (m *TransformationStep) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2755,7 +2811,7 @@ var xxx_messageInfo_TransformationStep proto.InternalMessageInfo func (m *UserContainer) Reset() { *m = UserContainer{} } func (*UserContainer) ProtoMessage() {} func (*UserContainer) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{97} + return fileDescriptor_724696e352c3df5f, []int{99} } func (m *UserContainer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2783,7 +2839,7 @@ var xxx_messageInfo_UserContainer proto.InternalMessageInfo func (m *ValueFrom) Reset() { *m = ValueFrom{} } func (*ValueFrom) ProtoMessage() {} func (*ValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{98} + return fileDescriptor_724696e352c3df5f, []int{100} } func (m *ValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2811,7 +2867,7 @@ var xxx_messageInfo_ValueFrom proto.InternalMessageInfo func (m *Version) Reset() { *m = Version{} } func (*Version) ProtoMessage() {} func (*Version) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{99} + return fileDescriptor_724696e352c3df5f, []int{101} } func (m *Version) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2839,7 +2895,7 @@ var xxx_messageInfo_Version proto.InternalMessageInfo func (m *VolumeClaimGC) Reset() { *m = VolumeClaimGC{} } func (*VolumeClaimGC) ProtoMessage() {} func (*VolumeClaimGC) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{100} + return fileDescriptor_724696e352c3df5f, []int{102} } func (m *VolumeClaimGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2867,7 +2923,7 @@ var xxx_messageInfo_VolumeClaimGC proto.InternalMessageInfo func (m *Workflow) Reset() { *m = Workflow{} } func (*Workflow) ProtoMessage() {} func (*Workflow) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{101} + return fileDescriptor_724696e352c3df5f, []int{103} } func (m *Workflow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2895,7 +2951,7 @@ var xxx_messageInfo_Workflow proto.InternalMessageInfo func (m *WorkflowEventBinding) Reset() { *m = WorkflowEventBinding{} } func (*WorkflowEventBinding) ProtoMessage() {} func (*WorkflowEventBinding) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{102} + return fileDescriptor_724696e352c3df5f, []int{104} } func (m *WorkflowEventBinding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2923,7 +2979,7 @@ var xxx_messageInfo_WorkflowEventBinding proto.InternalMessageInfo func (m *WorkflowEventBindingList) Reset() { *m = WorkflowEventBindingList{} } func (*WorkflowEventBindingList) ProtoMessage() {} func (*WorkflowEventBindingList) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{103} + return fileDescriptor_724696e352c3df5f, []int{105} } func (m *WorkflowEventBindingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2951,7 +3007,7 @@ var xxx_messageInfo_WorkflowEventBindingList proto.InternalMessageInfo func (m *WorkflowEventBindingSpec) Reset() { *m = WorkflowEventBindingSpec{} } func (*WorkflowEventBindingSpec) ProtoMessage() {} func (*WorkflowEventBindingSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{104} + return fileDescriptor_724696e352c3df5f, []int{106} } func (m *WorkflowEventBindingSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2979,7 +3035,7 @@ var xxx_messageInfo_WorkflowEventBindingSpec proto.InternalMessageInfo func (m *WorkflowList) Reset() { *m = WorkflowList{} } func (*WorkflowList) ProtoMessage() {} func (*WorkflowList) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{105} + return fileDescriptor_724696e352c3df5f, []int{107} } func (m *WorkflowList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3007,7 +3063,7 @@ var xxx_messageInfo_WorkflowList proto.InternalMessageInfo func (m *WorkflowSpec) Reset() { *m = WorkflowSpec{} } func (*WorkflowSpec) ProtoMessage() {} func (*WorkflowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{106} + return fileDescriptor_724696e352c3df5f, []int{108} } func (m *WorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3035,7 +3091,7 @@ var xxx_messageInfo_WorkflowSpec proto.InternalMessageInfo func (m *WorkflowStatus) Reset() { *m = WorkflowStatus{} } func (*WorkflowStatus) ProtoMessage() {} func (*WorkflowStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{107} + return fileDescriptor_724696e352c3df5f, []int{109} } func (m *WorkflowStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3063,7 +3119,7 @@ var xxx_messageInfo_WorkflowStatus proto.InternalMessageInfo func (m *WorkflowStep) Reset() { *m = WorkflowStep{} } func (*WorkflowStep) ProtoMessage() {} func (*WorkflowStep) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{108} + return fileDescriptor_724696e352c3df5f, []int{110} } func (m *WorkflowStep) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3091,7 +3147,7 @@ var xxx_messageInfo_WorkflowStep proto.InternalMessageInfo func (m *WorkflowTaskSet) Reset() { *m = WorkflowTaskSet{} } func (*WorkflowTaskSet) ProtoMessage() {} func (*WorkflowTaskSet) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{109} + return fileDescriptor_724696e352c3df5f, []int{111} } func (m *WorkflowTaskSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3119,7 +3175,7 @@ var xxx_messageInfo_WorkflowTaskSet proto.InternalMessageInfo func (m *WorkflowTaskSetList) Reset() { *m = WorkflowTaskSetList{} } func (*WorkflowTaskSetList) ProtoMessage() {} func (*WorkflowTaskSetList) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{110} + return fileDescriptor_724696e352c3df5f, []int{112} } func (m *WorkflowTaskSetList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3147,7 +3203,7 @@ var xxx_messageInfo_WorkflowTaskSetList proto.InternalMessageInfo func (m *WorkflowTaskSetSpec) Reset() { *m = WorkflowTaskSetSpec{} } func (*WorkflowTaskSetSpec) ProtoMessage() {} func (*WorkflowTaskSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{111} + return fileDescriptor_724696e352c3df5f, []int{113} } func (m *WorkflowTaskSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3175,7 +3231,7 @@ var xxx_messageInfo_WorkflowTaskSetSpec proto.InternalMessageInfo func (m *WorkflowTaskSetStatus) Reset() { *m = WorkflowTaskSetStatus{} } func (*WorkflowTaskSetStatus) ProtoMessage() {} func (*WorkflowTaskSetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{112} + return fileDescriptor_724696e352c3df5f, []int{114} } func (m *WorkflowTaskSetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3203,7 +3259,7 @@ var xxx_messageInfo_WorkflowTaskSetStatus proto.InternalMessageInfo func (m *WorkflowTemplate) Reset() { *m = WorkflowTemplate{} } func (*WorkflowTemplate) ProtoMessage() {} func (*WorkflowTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{113} + return fileDescriptor_724696e352c3df5f, []int{115} } func (m *WorkflowTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3231,7 +3287,7 @@ var xxx_messageInfo_WorkflowTemplate proto.InternalMessageInfo func (m *WorkflowTemplateList) Reset() { *m = WorkflowTemplateList{} } func (*WorkflowTemplateList) ProtoMessage() {} func (*WorkflowTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{114} + return fileDescriptor_724696e352c3df5f, []int{116} } func (m *WorkflowTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3259,7 +3315,7 @@ var xxx_messageInfo_WorkflowTemplateList proto.InternalMessageInfo func (m *WorkflowTemplateRef) Reset() { *m = WorkflowTemplateRef{} } func (*WorkflowTemplateRef) ProtoMessage() {} func (*WorkflowTemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{115} + return fileDescriptor_724696e352c3df5f, []int{117} } func (m *WorkflowTemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3287,7 +3343,7 @@ var xxx_messageInfo_WorkflowTemplateRef proto.InternalMessageInfo func (m *WorkflowTemplateSpec) Reset() { *m = WorkflowTemplateSpec{} } func (*WorkflowTemplateSpec) ProtoMessage() {} func (*WorkflowTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{116} + return fileDescriptor_724696e352c3df5f, []int{118} } func (m *WorkflowTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3315,7 +3371,7 @@ var xxx_messageInfo_WorkflowTemplateSpec proto.InternalMessageInfo func (m *ZipStrategy) Reset() { *m = ZipStrategy{} } func (*ZipStrategy) ProtoMessage() {} func (*ZipStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_724696e352c3df5f, []int{117} + return fileDescriptor_724696e352c3df5f, []int{119} } func (m *ZipStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3391,6 +3447,8 @@ func init() { proto.RegisterType((*Histogram)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.Histogram") proto.RegisterType((*Inputs)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.Inputs") proto.RegisterType((*Item)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.Item") + proto.RegisterType((*LabelKeys)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.LabelKeys") + proto.RegisterType((*LabelValues)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.LabelValues") proto.RegisterType((*LifecycleHook)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.LifecycleHook") proto.RegisterType((*Link)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.Link") proto.RegisterType((*MemoizationStatus)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.MemoizationStatus") @@ -3478,562 +3536,564 @@ func init() { } var fileDescriptor_724696e352c3df5f = []byte{ - // 8878 bytes of a gzipped FileDescriptorProto + // 8904 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, - 0x75, 0xd8, 0xf5, 0x90, 0x43, 0x0e, 0x1f, 0xc9, 0x25, 0xb7, 0xf6, 0x6b, 0x8e, 0x77, 0xb7, 0x3c, - 0xf7, 0xf9, 0x2e, 0xb7, 0xce, 0x89, 0xf4, 0xed, 0xea, 0x92, 0x8b, 0x84, 0xc8, 0xe2, 0x90, 0xcb, - 0xe5, 0x1e, 0x97, 0x1f, 0xf7, 0x86, 0xbb, 0x9b, 0xfb, 0x88, 0xac, 0xe6, 0x4c, 0x71, 0xa6, 0x8f, - 0x33, 0xdd, 0x73, 0xdd, 0x3d, 0xe4, 0x52, 0x77, 0x27, 0x29, 0xf2, 0x87, 0xee, 0x62, 0x39, 0xce, - 0x87, 0x63, 0xcb, 0x4a, 0x0c, 0x18, 0x8e, 0x14, 0x07, 0x8e, 0x91, 0x40, 0x40, 0x7e, 0xd9, 0x7f, - 0x83, 0x40, 0x41, 0x02, 0xc4, 0x81, 0x95, 0x58, 0x40, 0x12, 0x2a, 0x62, 0x12, 0x23, 0x40, 0xe0, - 0xfc, 0x08, 0x22, 0xd9, 0xd8, 0xf8, 0x47, 0x50, 0x9f, 0x5d, 0xdd, 0xd3, 0xc3, 0x25, 0x77, 0x9b, - 0x5c, 0x21, 0xca, 0xbf, 0x99, 0x57, 0xaf, 0xde, 0xab, 0xaa, 0xae, 0x7a, 0xf5, 0xea, 0xbd, 0x57, - 0xaf, 0x60, 0xbd, 0xe1, 0x46, 0xcd, 0xee, 0xe6, 0x4c, 0xcd, 0x6f, 0xcf, 0x3a, 0x41, 0xc3, 0xef, - 0x04, 0xfe, 0x3b, 0xfc, 0xc7, 0xc7, 0x76, 0xfd, 0x60, 0x7b, 0xab, 0xe5, 0xef, 0x86, 0xb3, 0x3b, - 0xd7, 0x66, 0x3b, 0xdb, 0x8d, 0x59, 0xa7, 0xe3, 0x86, 0xb3, 0x0a, 0x3a, 0xbb, 0xf3, 0xb2, 0xd3, - 0xea, 0x34, 0x9d, 0x97, 0x67, 0x1b, 0xd4, 0xa3, 0x81, 0x13, 0xd1, 0xfa, 0x4c, 0x27, 0xf0, 0x23, - 0x9f, 0x7c, 0x3a, 0xa6, 0x38, 0xa3, 0x28, 0xf2, 0x1f, 0x3f, 0xad, 0x29, 0xce, 0xec, 0x5c, 0x9b, - 0xe9, 0x6c, 0x37, 0x66, 0x18, 0xc5, 0x19, 0x05, 0x9d, 0x51, 0x14, 0xa7, 0x3e, 0x66, 0xb4, 0xa9, - 0xe1, 0x37, 0xfc, 0x59, 0x4e, 0x78, 0xb3, 0xbb, 0xc5, 0xff, 0xf1, 0x3f, 0xfc, 0x97, 0x60, 0x38, - 0x65, 0x6f, 0xbf, 0x1a, 0xce, 0xb8, 0x3e, 0x6b, 0xdf, 0x6c, 0xcd, 0x0f, 0xe8, 0xec, 0x4e, 0x4f, - 0xa3, 0xa6, 0xae, 0x18, 0x38, 0x1d, 0xbf, 0xe5, 0xd6, 0xf6, 0x66, 0x77, 0x5e, 0xde, 0xa4, 0x51, - 0x6f, 0xfb, 0xa7, 0x3e, 0x1e, 0xa3, 0xb6, 0x9d, 0x5a, 0xd3, 0xf5, 0x68, 0xb0, 0x17, 0xf7, 0xbf, - 0x4d, 0x23, 0x27, 0x8b, 0xc1, 0x6c, 0xbf, 0x5a, 0x41, 0xd7, 0x8b, 0xdc, 0x36, 0xed, 0xa9, 0xf0, - 0x17, 0x1e, 0x54, 0x21, 0xac, 0x35, 0x69, 0xdb, 0xe9, 0xa9, 0x77, 0xad, 0x5f, 0xbd, 0x6e, 0xe4, - 0xb6, 0x66, 0x5d, 0x2f, 0x0a, 0xa3, 0x20, 0x5d, 0xc9, 0xbe, 0x0e, 0x43, 0x73, 0x6d, 0xbf, 0xeb, - 0x45, 0xe4, 0x93, 0x50, 0xdc, 0x71, 0x5a, 0x5d, 0x5a, 0xb6, 0x9e, 0xb5, 0x5e, 0x1c, 0xa9, 0x3c, - 0xff, 0xad, 0xfd, 0xe9, 0x27, 0x0e, 0xf6, 0xa7, 0x8b, 0x77, 0x18, 0xf0, 0xfe, 0xfe, 0xf4, 0x79, - 0xea, 0xd5, 0xfc, 0xba, 0xeb, 0x35, 0x66, 0xdf, 0x09, 0x7d, 0x6f, 0x66, 0xb5, 0xdb, 0xde, 0xa4, - 0x01, 0x8a, 0x3a, 0xf6, 0x1f, 0x14, 0x60, 0x62, 0x2e, 0xa8, 0x35, 0xdd, 0x1d, 0x5a, 0x8d, 0x18, - 0xfd, 0xc6, 0x1e, 0x69, 0xc2, 0x40, 0xe4, 0x04, 0x9c, 0xdc, 0xe8, 0xd5, 0x95, 0x99, 0x47, 0xfd, - 0xf8, 0x33, 0x1b, 0x4e, 0xa0, 0x68, 0x57, 0x86, 0x0f, 0xf6, 0xa7, 0x07, 0x36, 0x9c, 0x00, 0x19, - 0x0b, 0xd2, 0x82, 0x41, 0xcf, 0xf7, 0x68, 0xb9, 0xc0, 0x59, 0xad, 0x3e, 0x3a, 0xab, 0x55, 0xdf, - 0xd3, 0xfd, 0xa8, 0x94, 0x0e, 0xf6, 0xa7, 0x07, 0x19, 0x04, 0x39, 0x17, 0xd6, 0xaf, 0xcf, 0xb9, - 0x9d, 0xf2, 0x40, 0x5e, 0xfd, 0x7a, 0xd3, 0xed, 0x24, 0xfb, 0xf5, 0xa6, 0xdb, 0x41, 0xc6, 0xc2, - 0xfe, 0xa8, 0x00, 0x23, 0x73, 0x41, 0xa3, 0xdb, 0xa6, 0x5e, 0x14, 0x92, 0x2f, 0x00, 0x74, 0x9c, - 0xc0, 0x69, 0xd3, 0x88, 0x06, 0x61, 0xd9, 0x7a, 0x76, 0xe0, 0xc5, 0xd1, 0xab, 0xcb, 0x8f, 0xce, - 0x7e, 0x5d, 0xd1, 0xac, 0x10, 0xf9, 0xc9, 0x41, 0x83, 0x42, 0x34, 0x58, 0x92, 0xf7, 0x60, 0xc4, - 0x09, 0x22, 0x77, 0xcb, 0xa9, 0x45, 0x61, 0xb9, 0xc0, 0xf9, 0xbf, 0xf6, 0xe8, 0xfc, 0xe7, 0x24, - 0xc9, 0xca, 0x59, 0xc9, 0x7e, 0x44, 0x41, 0x42, 0x8c, 0xf9, 0xd9, 0xbf, 0x55, 0x84, 0x92, 0x2a, - 0x20, 0xcf, 0xc2, 0xa0, 0xe7, 0xb4, 0xd5, 0x54, 0x1d, 0x93, 0x15, 0x07, 0x57, 0x9d, 0x36, 0xfb, - 0x48, 0x4e, 0x9b, 0x32, 0x8c, 0x8e, 0x13, 0x35, 0xf9, 0x94, 0x30, 0x30, 0xd6, 0x9d, 0xa8, 0x89, - 0xbc, 0x84, 0x3c, 0x0d, 0x83, 0x6d, 0xbf, 0x4e, 0xf9, 0x77, 0x2c, 0x8a, 0x8f, 0xbc, 0xe2, 0xd7, - 0x29, 0x72, 0x28, 0xab, 0xbf, 0x15, 0xf8, 0xed, 0xf2, 0x60, 0xb2, 0xfe, 0x62, 0xe0, 0xb7, 0x91, - 0x97, 0x90, 0xaf, 0x5a, 0x30, 0xa9, 0x9a, 0x77, 0xcb, 0xaf, 0x39, 0x91, 0xeb, 0x7b, 0xe5, 0x22, - 0x9f, 0x14, 0x98, 0xdf, 0xa8, 0x28, 0xca, 0x95, 0xb2, 0x6c, 0xc2, 0x64, 0xba, 0x04, 0x7b, 0x5a, - 0x41, 0xae, 0x02, 0x34, 0x5a, 0xfe, 0xa6, 0xd3, 0x62, 0x03, 0x52, 0x1e, 0xe2, 0x5d, 0xd0, 0x1f, - 0xf7, 0x86, 0x2e, 0x41, 0x03, 0x8b, 0xdc, 0x83, 0x61, 0x47, 0x2c, 0xe0, 0xf2, 0x30, 0xef, 0xc4, - 0xeb, 0x79, 0x74, 0x22, 0x21, 0x11, 0x2a, 0xa3, 0x07, 0xfb, 0xd3, 0xc3, 0x12, 0x88, 0x8a, 0x1d, - 0x79, 0x09, 0x4a, 0x7e, 0x87, 0xb5, 0xdb, 0x69, 0x95, 0x4b, 0xcf, 0x5a, 0x2f, 0x96, 0x2a, 0x93, - 0xb2, 0xad, 0xa5, 0x35, 0x09, 0x47, 0x8d, 0x41, 0xae, 0xc0, 0x70, 0xd8, 0xdd, 0x64, 0xdf, 0xb1, - 0x3c, 0xc2, 0x3b, 0x36, 0x21, 0x91, 0x87, 0xab, 0x02, 0x8c, 0xaa, 0x9c, 0xbc, 0x02, 0xa3, 0x01, - 0xad, 0x75, 0x83, 0x90, 0xb2, 0x0f, 0x5b, 0x06, 0x4e, 0xfb, 0x9c, 0x44, 0x1f, 0xc5, 0xb8, 0x08, - 0x4d, 0x3c, 0xf2, 0x29, 0x38, 0xc3, 0x3e, 0xf0, 0xf5, 0x7b, 0x9d, 0x80, 0x86, 0x21, 0xfb, 0xaa, - 0xa3, 0x9c, 0xd1, 0x45, 0x59, 0xf3, 0xcc, 0x62, 0xa2, 0x14, 0x53, 0xd8, 0xf6, 0xef, 0x0e, 0x43, - 0xcf, 0x47, 0x22, 0x2f, 0xc3, 0xa8, 0xec, 0xef, 0x2d, 0xbf, 0x11, 0xf2, 0x89, 0x5b, 0xaa, 0x4c, - 0xb0, 0x76, 0xcc, 0xc5, 0x60, 0x34, 0x71, 0x48, 0x1d, 0x0a, 0xe1, 0x35, 0x29, 0xd3, 0x6e, 0x3d, - 0xfa, 0xc7, 0xa8, 0x5e, 0xd3, 0x2b, 0x6d, 0xe8, 0x60, 0x7f, 0xba, 0x50, 0xbd, 0x86, 0x85, 0xf0, - 0x1a, 0x93, 0x66, 0x0d, 0x37, 0xca, 0x4f, 0x9a, 0xdd, 0x70, 0x23, 0xcd, 0x87, 0x4b, 0xb3, 0x1b, - 0x6e, 0x84, 0x8c, 0x05, 0x93, 0xd2, 0xcd, 0x28, 0xea, 0xf0, 0x25, 0x95, 0x8b, 0x94, 0x5e, 0xda, - 0xd8, 0x58, 0xd7, 0xbc, 0xf8, 0x02, 0x66, 0x10, 0xe4, 0x5c, 0xc8, 0x87, 0x16, 0x1b, 0x71, 0x51, - 0xe8, 0x07, 0x7b, 0x72, 0x65, 0xde, 0xce, 0x6f, 0x65, 0xfa, 0xc1, 0x9e, 0x66, 0x2e, 0x3f, 0xa4, - 0x2e, 0x40, 0x93, 0x35, 0xef, 0x78, 0x7d, 0x2b, 0xe4, 0x0b, 0x31, 0x9f, 0x8e, 0x2f, 0x2c, 0x56, - 0x53, 0x1d, 0x5f, 0x58, 0xac, 0x22, 0xe7, 0xc2, 0x3e, 0x68, 0xe0, 0xec, 0xca, 0x45, 0x9c, 0xc3, - 0x07, 0x45, 0x67, 0x37, 0xf9, 0x41, 0xd1, 0xd9, 0x45, 0xc6, 0x82, 0x71, 0xf2, 0xc3, 0x90, 0xaf, - 0xd9, 0x5c, 0x38, 0xad, 0x55, 0xab, 0x49, 0x4e, 0x6b, 0xd5, 0x2a, 0x32, 0x16, 0x7c, 0x92, 0xd6, - 0x42, 0xbe, 0xe0, 0xf3, 0x99, 0xa4, 0xf3, 0x29, 0x4e, 0x37, 0xe6, 0xab, 0xc8, 0x58, 0xd8, 0x1f, - 0x59, 0x30, 0xae, 0x8a, 0x98, 0x10, 0x09, 0xc9, 0x3d, 0x28, 0xa9, 0x8f, 0x29, 0x75, 0x99, 0x3c, - 0x37, 0x3d, 0x2d, 0xea, 0x14, 0x04, 0x35, 0x37, 0xfb, 0x77, 0x8a, 0x40, 0x34, 0x98, 0x76, 0xfc, - 0xd0, 0xe5, 0xd3, 0xe9, 0x21, 0x44, 0x89, 0x67, 0x88, 0x92, 0x3b, 0x79, 0x8a, 0x92, 0xb8, 0x59, - 0x09, 0xa1, 0xf2, 0xb7, 0x53, 0x8b, 0x4f, 0x48, 0x97, 0x9f, 0x3e, 0x91, 0xc5, 0x67, 0x34, 0xe1, - 0xf0, 0x65, 0xb8, 0x23, 0x97, 0xa1, 0x90, 0x3f, 0x7f, 0x25, 0xdf, 0x65, 0x68, 0xb4, 0x22, 0xbd, - 0x20, 0x03, 0xb1, 0x4c, 0x84, 0x00, 0xba, 0x9b, 0xeb, 0x32, 0x31, 0xb8, 0x26, 0x17, 0x4c, 0x20, - 0x16, 0xcc, 0x50, 0x5e, 0x3c, 0x8d, 0x05, 0x93, 0xe6, 0xa9, 0x97, 0xce, 0xbb, 0x70, 0xa1, 0x17, - 0x07, 0xe9, 0x16, 0x99, 0x85, 0x91, 0x9a, 0xef, 0x6d, 0xb9, 0x8d, 0x15, 0xa7, 0x23, 0x55, 0x36, - 0xad, 0xeb, 0xcd, 0xab, 0x02, 0x8c, 0x71, 0xc8, 0x33, 0x30, 0xb0, 0x4d, 0xf7, 0xa4, 0xee, 0x36, - 0x2a, 0x51, 0x07, 0x96, 0xe9, 0x1e, 0x32, 0xf8, 0x27, 0x4a, 0x5f, 0xfd, 0x8d, 0xe9, 0x27, 0xbe, - 0xf8, 0x1f, 0x9f, 0x7d, 0xc2, 0xfe, 0xb7, 0x03, 0xf0, 0x54, 0x26, 0xcf, 0x6a, 0xe4, 0x44, 0xdd, - 0x90, 0xfc, 0x8e, 0x05, 0x17, 0x9c, 0xac, 0x72, 0xb9, 0x92, 0xef, 0xe6, 0x37, 0x23, 0x13, 0xe4, - 0x2b, 0xcf, 0xc8, 0x46, 0x67, 0x8f, 0x08, 0x66, 0x37, 0x8a, 0x0d, 0x14, 0x53, 0x5e, 0xc3, 0x8e, - 0x53, 0xa3, 0xb2, 0xf7, 0x7a, 0xa0, 0x56, 0x55, 0x01, 0xc6, 0x38, 0x4c, 0x19, 0xaa, 0xd3, 0x2d, - 0xa7, 0xdb, 0x12, 0x1b, 0x78, 0x29, 0x56, 0x86, 0x16, 0x04, 0x18, 0x55, 0x39, 0xf9, 0xfb, 0x16, - 0x90, 0x5e, 0xae, 0x72, 0x31, 0x6c, 0x9c, 0xc4, 0x38, 0x54, 0x2e, 0x1e, 0xec, 0x4f, 0x67, 0x08, - 0x30, 0xcc, 0x68, 0x87, 0xf1, 0x4d, 0xff, 0x95, 0x05, 0xe7, 0x32, 0x96, 0x39, 0x9b, 0x14, 0xdd, - 0xa0, 0x25, 0xe7, 0x8f, 0x9e, 0x14, 0xb7, 0xf1, 0x16, 0x32, 0x38, 0xf9, 0x65, 0x0b, 0x26, 0x8c, - 0xd5, 0x3e, 0xd7, 0x95, 0xca, 0x7f, 0x4e, 0x8a, 0x6c, 0x82, 0x70, 0xe5, 0x92, 0x64, 0x3f, 0x91, - 0x2a, 0xc0, 0x74, 0x13, 0xec, 0xef, 0x59, 0xf0, 0xcc, 0xa1, 0x42, 0x2b, 0xb3, 0xe1, 0xd6, 0x63, - 0x6f, 0x38, 0x9b, 0x5a, 0x01, 0xed, 0xf8, 0xb7, 0xf1, 0x96, 0x9c, 0x89, 0x7a, 0x6a, 0xa1, 0x00, - 0xa3, 0x2a, 0xb7, 0xff, 0xd0, 0x82, 0x34, 0x3d, 0xe2, 0xc0, 0x99, 0x6e, 0x48, 0x03, 0x36, 0x55, - 0xab, 0xb4, 0x16, 0x50, 0xb5, 0x77, 0x3e, 0x3f, 0x23, 0xac, 0x14, 0xac, 0xc1, 0x33, 0x35, 0x3f, - 0xa0, 0x33, 0x3b, 0x2f, 0xcf, 0x08, 0x8c, 0x65, 0xba, 0x57, 0xa5, 0x2d, 0xca, 0x68, 0x54, 0x08, - 0xd3, 0xb3, 0x6f, 0x27, 0x08, 0x60, 0x8a, 0x20, 0x63, 0xd1, 0x71, 0xc2, 0x70, 0xd7, 0x0f, 0xea, - 0x92, 0x45, 0xe1, 0xd8, 0x2c, 0xd6, 0x13, 0x04, 0x30, 0x45, 0xd0, 0xfe, 0xe7, 0x16, 0x0c, 0x57, - 0x9c, 0xda, 0xb6, 0xbf, 0xb5, 0xc5, 0x8e, 0x29, 0xf5, 0x6e, 0x20, 0x8e, 0x79, 0x62, 0x12, 0xea, - 0xbd, 0x7b, 0x41, 0xc2, 0x51, 0x63, 0x90, 0x0d, 0x18, 0x12, 0xc3, 0x21, 0x1b, 0xf5, 0x93, 0x46, - 0xa3, 0xb4, 0x75, 0x86, 0x7f, 0xb9, 0x6e, 0xe4, 0xb6, 0x66, 0x84, 0x75, 0x66, 0xe6, 0xa6, 0x17, - 0xad, 0x05, 0xd5, 0x28, 0x70, 0xbd, 0x46, 0x05, 0x0e, 0xf6, 0xa7, 0x87, 0x16, 0x39, 0x0d, 0x94, - 0xb4, 0xd8, 0x89, 0xa6, 0xed, 0xdc, 0x53, 0xec, 0xf8, 0x9a, 0x1f, 0x89, 0x4f, 0x34, 0x2b, 0x71, - 0x11, 0x9a, 0x78, 0xf6, 0x67, 0xa0, 0x38, 0xef, 0xd4, 0x9a, 0x94, 0xdc, 0x4e, 0x4b, 0xe2, 0xd1, - 0xab, 0x2f, 0x66, 0x8d, 0x96, 0x96, 0xca, 0xe6, 0x80, 0x8d, 0xf7, 0x93, 0xd7, 0xf6, 0xf7, 0x2d, - 0xb8, 0x34, 0xdf, 0xea, 0x86, 0x11, 0x0d, 0xee, 0xca, 0x29, 0xb8, 0x41, 0xdb, 0x9d, 0x96, 0x13, - 0x51, 0xf2, 0x59, 0x28, 0xb5, 0x69, 0xe4, 0xd4, 0x9d, 0xc8, 0x91, 0x1c, 0xfb, 0x0f, 0x05, 0x9f, - 0xc4, 0x0c, 0x9b, 0xb5, 0x61, 0x6d, 0xf3, 0x1d, 0x5a, 0x8b, 0x56, 0x68, 0xe4, 0xc4, 0x67, 0xd7, - 0x18, 0x86, 0x9a, 0x2a, 0xb9, 0x07, 0x83, 0x61, 0x87, 0xd6, 0xf2, 0x53, 0x6f, 0xd2, 0x7d, 0xa8, - 0x76, 0x68, 0x2d, 0x36, 0x01, 0xb0, 0x7f, 0xc8, 0x39, 0xda, 0xff, 0xc7, 0x82, 0xa7, 0xfa, 0xf4, - 0xfb, 0x96, 0x1b, 0x46, 0xe4, 0xed, 0x9e, 0xbe, 0xcf, 0x1c, 0xad, 0xef, 0xac, 0x36, 0xef, 0xb9, - 0x9e, 0x62, 0x0a, 0x62, 0xf4, 0xfb, 0xf3, 0x50, 0x74, 0x23, 0xda, 0x56, 0xa6, 0x98, 0x37, 0x1e, - 0xbd, 0xe3, 0x7d, 0xfa, 0x52, 0x19, 0x57, 0xb6, 0xc0, 0x9b, 0x8c, 0x1f, 0x0a, 0xb6, 0xf6, 0xbf, - 0xb4, 0x80, 0x4d, 0x87, 0xba, 0x2b, 0x0f, 0xb8, 0x83, 0xd1, 0x5e, 0x47, 0x99, 0x64, 0xd4, 0xfe, - 0x37, 0xb8, 0xb1, 0xd7, 0xa1, 0xf7, 0xf7, 0xa7, 0xc7, 0x35, 0x22, 0x03, 0x20, 0x47, 0x25, 0x9f, - 0x81, 0xa1, 0x90, 0xef, 0xd3, 0x52, 0xc2, 0x2c, 0xca, 0x4a, 0x43, 0x62, 0xf7, 0xbe, 0xbf, 0x3f, - 0x7d, 0x24, 0x8b, 0xeb, 0x8c, 0xa6, 0x2d, 0xea, 0xa1, 0xa4, 0xca, 0x44, 0x58, 0x9b, 0x86, 0xa1, - 0xd3, 0xa0, 0x72, 0xa5, 0x68, 0x11, 0xb6, 0x22, 0xc0, 0xa8, 0xca, 0xed, 0xbf, 0x6b, 0x01, 0x6b, - 0x62, 0xe4, 0x30, 0x16, 0xab, 0x7e, 0x9d, 0x92, 0x55, 0xbe, 0x54, 0x04, 0x40, 0x7e, 0xbc, 0x67, - 0xfa, 0x2c, 0x15, 0x81, 0x94, 0xd0, 0x69, 0x04, 0x08, 0x63, 0x12, 0xe4, 0xe3, 0x30, 0x56, 0xa7, - 0x1d, 0xea, 0xd5, 0xa9, 0x57, 0x73, 0xa9, 0xf8, 0x68, 0x23, 0x95, 0xc9, 0x83, 0xfd, 0xe9, 0xb1, - 0x05, 0x03, 0x8e, 0x09, 0x2c, 0xfb, 0x4f, 0x2c, 0x38, 0xaf, 0xc9, 0x55, 0x69, 0xa4, 0x97, 0xd5, - 0xcf, 0x58, 0x00, 0x9a, 0x38, 0xd3, 0x69, 0xd9, 0x14, 0x58, 0xcb, 0x61, 0x0a, 0x98, 0x83, 0x10, - 0x2f, 0x3c, 0x0d, 0x0e, 0xd1, 0x60, 0x4b, 0xde, 0x80, 0xb1, 0x1d, 0xbf, 0xd5, 0x6d, 0xd3, 0x15, - 0xbf, 0xeb, 0x45, 0x61, 0x79, 0x80, 0x37, 0x63, 0x3a, 0x6b, 0x9c, 0xee, 0xc4, 0x78, 0x95, 0xf3, - 0x92, 0xec, 0x98, 0x01, 0x0c, 0x31, 0x41, 0xca, 0x7e, 0x03, 0x38, 0x53, 0xd7, 0xeb, 0xd2, 0x35, - 0x8f, 0x3c, 0x07, 0x45, 0x1a, 0x04, 0x7e, 0x20, 0x4f, 0x3b, 0x7a, 0x42, 0x5e, 0x67, 0x40, 0x14, - 0x65, 0xe4, 0x05, 0x26, 0x73, 0xdd, 0x16, 0xad, 0xf3, 0xf9, 0x54, 0xaa, 0x9c, 0x51, 0xf3, 0x69, - 0x91, 0x43, 0x51, 0x96, 0xda, 0x33, 0x30, 0x3c, 0xcf, 0x98, 0xd0, 0x80, 0xd1, 0x35, 0x8d, 0xde, - 0xe3, 0x09, 0xa3, 0xb7, 0x32, 0x6e, 0x6f, 0xc0, 0x85, 0xf9, 0x80, 0x32, 0x41, 0x70, 0xad, 0xd2, - 0xad, 0x6d, 0xd3, 0x48, 0x98, 0xa5, 0x42, 0xf2, 0x49, 0x18, 0xf7, 0xb9, 0x44, 0xba, 0xe5, 0xd7, - 0xb6, 0x5d, 0xaf, 0x21, 0x95, 0xb0, 0x0b, 0x92, 0xca, 0xf8, 0x9a, 0x59, 0x88, 0x49, 0x5c, 0xfb, - 0xbf, 0x16, 0x60, 0x6c, 0x3e, 0xf0, 0x3d, 0xb5, 0xda, 0x4e, 0x41, 0x52, 0x46, 0x09, 0x49, 0x99, - 0x83, 0x95, 0xd2, 0x6c, 0x7f, 0x3f, 0x29, 0x49, 0xde, 0xd7, 0xcb, 0x7c, 0x20, 0x2f, 0x65, 0x33, - 0xc1, 0x97, 0xd3, 0x8e, 0x3f, 0x76, 0x52, 0x08, 0xd8, 0xff, 0xcd, 0x82, 0x49, 0x13, 0xfd, 0x14, - 0x04, 0x73, 0x98, 0x14, 0xcc, 0xab, 0xf9, 0xf6, 0xb7, 0x8f, 0x34, 0xfe, 0x68, 0x28, 0xd9, 0x4f, - 0xf6, 0x01, 0xc8, 0x57, 0x2d, 0x18, 0xdb, 0x35, 0x00, 0xb2, 0xb3, 0xab, 0xf9, 0xed, 0x91, 0xfc, - 0xab, 0xff, 0xb8, 0x5a, 0xcf, 0x26, 0xf4, 0x7e, 0xea, 0x3f, 0x26, 0x5a, 0xc2, 0xd4, 0xa9, 0xb0, - 0xd6, 0xa4, 0xf5, 0x6e, 0x4b, 0x1d, 0x75, 0xf4, 0x90, 0x56, 0x25, 0x1c, 0x35, 0x06, 0x79, 0x1b, - 0xce, 0xd6, 0x7c, 0xaf, 0xd6, 0x0d, 0x02, 0xea, 0xd5, 0xf6, 0xd6, 0xb9, 0x9f, 0x4e, 0x0a, 0xf5, - 0x19, 0x59, 0xed, 0xec, 0x7c, 0x1a, 0xe1, 0x7e, 0x16, 0x10, 0x7b, 0x09, 0x09, 0x9b, 0x72, 0xc8, - 0xc4, 0x2e, 0x3f, 0x0f, 0x95, 0x4c, 0x9b, 0x32, 0x07, 0xa3, 0x2a, 0x27, 0xb7, 0xe1, 0x52, 0x18, - 0x31, 0x5d, 0xd9, 0x6b, 0x2c, 0x50, 0xa7, 0xde, 0x72, 0x3d, 0xa6, 0x8e, 0xfa, 0x5e, 0x5d, 0x1c, - 0xf0, 0x07, 0x2a, 0x4f, 0x1d, 0xec, 0x4f, 0x5f, 0xaa, 0x66, 0xa3, 0x60, 0xbf, 0xba, 0xe4, 0x33, - 0x30, 0x15, 0x76, 0x6b, 0x35, 0x1a, 0x86, 0x5b, 0xdd, 0xd6, 0x6b, 0xfe, 0x66, 0xb8, 0xe4, 0x86, - 0x4c, 0x97, 0xbe, 0xe5, 0xb6, 0xdd, 0x88, 0x1f, 0xe3, 0x8b, 0x95, 0xcb, 0x07, 0xfb, 0xd3, 0x53, - 0xd5, 0xbe, 0x58, 0x78, 0x08, 0x05, 0x82, 0x70, 0x51, 0x08, 0xbf, 0x1e, 0xda, 0xc3, 0x9c, 0xf6, - 0xd4, 0xc1, 0xfe, 0xf4, 0xc5, 0xc5, 0x4c, 0x0c, 0xec, 0x53, 0x93, 0x7d, 0xc1, 0xc8, 0x6d, 0xd3, - 0xcf, 0xf9, 0x1e, 0xe5, 0x36, 0x40, 0xe3, 0x0b, 0x6e, 0x48, 0x38, 0x6a, 0x0c, 0xf2, 0x4e, 0x3c, - 0x13, 0xd9, 0x72, 0x91, 0xb6, 0xbc, 0xe3, 0x4b, 0xb8, 0xf3, 0x07, 0xfb, 0xd3, 0x93, 0x77, 0x0d, - 0x4a, 0x6c, 0xc9, 0x61, 0x82, 0xb6, 0xfd, 0x07, 0x05, 0x20, 0xbd, 0x22, 0x82, 0x2c, 0xc3, 0x90, - 0x53, 0x8b, 0xdc, 0x1d, 0x2a, 0x9d, 0x67, 0xcf, 0x65, 0xed, 0x53, 0x82, 0x15, 0xd2, 0x2d, 0xca, - 0x66, 0x08, 0x8d, 0xe5, 0xca, 0x1c, 0xaf, 0x8a, 0x92, 0x04, 0xf1, 0xe1, 0x6c, 0xcb, 0x09, 0x23, - 0x35, 0x57, 0xeb, 0xac, 0xcb, 0x52, 0xb0, 0xfe, 0xc4, 0xd1, 0x3a, 0xc5, 0x6a, 0x54, 0x2e, 0xb0, - 0x99, 0x7b, 0x2b, 0x4d, 0x08, 0x7b, 0x69, 0x93, 0x2f, 0xf0, 0x0d, 0x5f, 0x28, 0x3a, 0x6a, 0xa7, - 0x5d, 0xce, 0x65, 0xc3, 0x17, 0x34, 0x13, 0x9b, 0xbd, 0x64, 0x83, 0x06, 0x4b, 0xfb, 0x5f, 0x03, - 0x0c, 0x2f, 0xcc, 0xdd, 0xd8, 0x70, 0xc2, 0xed, 0x23, 0x38, 0xe0, 0xd8, 0xec, 0x90, 0xca, 0x4a, - 0x7a, 0x7d, 0x2b, 0x25, 0x06, 0x35, 0x06, 0xf1, 0x60, 0xc8, 0xf5, 0xd8, 0x82, 0x28, 0x9f, 0xc9, - 0xcb, 0xc4, 0xaa, 0xb5, 0x57, 0x7e, 0x90, 0xba, 0xc9, 0xa9, 0xa3, 0xe4, 0x42, 0xde, 0x87, 0x11, - 0x47, 0x39, 0x56, 0xe5, 0xb6, 0xb4, 0x9c, 0xc7, 0x69, 0x5b, 0x92, 0x34, 0x7d, 0x99, 0x12, 0x84, - 0x31, 0x43, 0xf2, 0x45, 0x0b, 0x46, 0x55, 0xd7, 0x91, 0x6e, 0x49, 0x23, 0xcc, 0x4a, 0x7e, 0x7d, - 0x46, 0xba, 0x25, 0x8c, 0xa1, 0x06, 0x00, 0x4d, 0x96, 0x3d, 0xea, 0x68, 0xf1, 0x28, 0xea, 0x28, - 0xd9, 0x85, 0x91, 0x5d, 0x37, 0x6a, 0xf2, 0x8d, 0xa7, 0x3c, 0xc4, 0xa7, 0xe0, 0xe2, 0xa3, 0xb7, - 0x9a, 0x91, 0x8b, 0x47, 0xec, 0xae, 0x62, 0x80, 0x31, 0x2f, 0x32, 0x2b, 0x18, 0x73, 0xc7, 0x34, - 0x17, 0x59, 0x23, 0xc9, 0x0a, 0xbc, 0x00, 0x63, 0x1c, 0x36, 0xc4, 0x63, 0xec, 0x5f, 0x95, 0xbe, - 0xdb, 0x65, 0xeb, 0x58, 0x7a, 0x29, 0x72, 0x98, 0x57, 0x8a, 0xa2, 0x18, 0xac, 0xbb, 0x06, 0x0f, - 0x4c, 0x70, 0x64, 0x6b, 0x64, 0xb7, 0x49, 0x3d, 0xe9, 0xa6, 0xd4, 0x6b, 0xe4, 0x6e, 0x93, 0x7a, - 0xc8, 0x4b, 0xc8, 0xfb, 0x42, 0x87, 0x17, 0x3a, 0x2e, 0xf7, 0x4f, 0xe6, 0xe2, 0xe9, 0x8b, 0xf5, - 0xe6, 0xca, 0x19, 0xa5, 0xbc, 0x8b, 0xff, 0x68, 0xf0, 0x63, 0xea, 0xb2, 0xef, 0x5d, 0xbf, 0xe7, - 0x46, 0xd2, 0xbf, 0xa9, 0x25, 0xdd, 0x1a, 0x87, 0xa2, 0x2c, 0x15, 0x46, 0x46, 0x36, 0x09, 0xc2, - 0xf2, 0x58, 0xf2, 0x18, 0x25, 0x66, 0x4a, 0x88, 0xaa, 0x9c, 0xfc, 0xba, 0x05, 0xc5, 0xa6, 0xef, - 0x6f, 0x87, 0xe5, 0x71, 0x3e, 0x39, 0x72, 0x50, 0xf5, 0xa4, 0xc4, 0x99, 0x59, 0x62, 0x64, 0xaf, - 0x7b, 0x51, 0xb0, 0x57, 0x79, 0x59, 0x29, 0x40, 0x1c, 0x76, 0x7f, 0x7f, 0xfa, 0xcc, 0x2d, 0x77, - 0x8b, 0xd6, 0xf6, 0x6a, 0x2d, 0xca, 0x21, 0x5f, 0xfa, 0xae, 0x01, 0xb9, 0xbe, 0x43, 0xbd, 0x08, - 0x45, 0xab, 0xa6, 0x3e, 0xb2, 0x00, 0x62, 0x42, 0x64, 0x52, 0xd8, 0x99, 0xb9, 0x10, 0xe3, 0xa6, - 0x65, 0x42, 0xd5, 0x79, 0x40, 0x48, 0xf2, 0x1c, 0x0e, 0x54, 0x89, 0xa6, 0xc9, 0x13, 0xc5, 0x27, - 0x0a, 0xaf, 0x5a, 0xf6, 0xbf, 0xb1, 0x60, 0x94, 0x75, 0x4e, 0x89, 0xc0, 0x17, 0x60, 0x28, 0x72, - 0x82, 0x86, 0xb4, 0x94, 0x19, 0x9f, 0x63, 0x83, 0x43, 0x51, 0x96, 0x12, 0x0f, 0x8a, 0x91, 0x13, - 0x6e, 0x2b, 0xed, 0xf2, 0x66, 0x6e, 0x43, 0x1c, 0x2b, 0x96, 0xec, 0x5f, 0x88, 0x82, 0x0d, 0x79, - 0x11, 0x4a, 0x4c, 0x01, 0x58, 0x74, 0x42, 0x65, 0x64, 0x1e, 0x63, 0x42, 0x7c, 0x51, 0xc2, 0x50, - 0x97, 0xda, 0x7f, 0xa7, 0x00, 0x83, 0x0b, 0xe2, 0x9c, 0x31, 0x14, 0xfa, 0xdd, 0xa0, 0x46, 0xa5, - 0xbe, 0x99, 0xc3, 0x9c, 0x66, 0x74, 0xab, 0x9c, 0xa6, 0xa1, 0xe9, 0xf3, 0xff, 0x28, 0x79, 0x91, - 0x5f, 0xb6, 0xe0, 0x4c, 0x14, 0x38, 0x5e, 0xb8, 0xe5, 0x07, 0x6d, 0x61, 0x20, 0x2b, 0xe4, 0x35, - 0x0b, 0x37, 0x12, 0x74, 0xab, 0x11, 0xed, 0xc4, 0xe1, 0x00, 0xc9, 0x32, 0x4c, 0xb5, 0xc1, 0xfe, - 0x55, 0x0b, 0x20, 0x6e, 0x3d, 0xf9, 0xd0, 0x82, 0x71, 0xc7, 0x74, 0x30, 0xca, 0x31, 0x5a, 0xcb, - 0xcf, 0xd8, 0xcb, 0xc9, 0x56, 0xce, 0xb2, 0x13, 0x68, 0x02, 0x84, 0x49, 0xc6, 0xf6, 0x2b, 0x50, - 0xe4, 0xab, 0x83, 0xeb, 0xe2, 0xd2, 0xca, 0x97, 0x36, 0x6d, 0x2a, 0xeb, 0x1f, 0x6a, 0x0c, 0xfb, - 0x6d, 0x38, 0x73, 0xfd, 0x1e, 0xad, 0x75, 0x23, 0x3f, 0x10, 0xd6, 0x40, 0xf2, 0x1a, 0x90, 0x90, - 0x06, 0x3b, 0x6e, 0x8d, 0xce, 0xd5, 0x6a, 0xec, 0x64, 0xbd, 0x1a, 0xeb, 0x06, 0x53, 0x92, 0x12, - 0xa9, 0xf6, 0x60, 0x60, 0x46, 0x2d, 0xfb, 0xb7, 0x2d, 0x18, 0x35, 0xbc, 0x4d, 0x6c, 0xa7, 0x6e, - 0xcc, 0x57, 0xc5, 0xb9, 0x5b, 0x0e, 0xd5, 0x72, 0x2e, 0xfe, 0x2c, 0x41, 0x32, 0xde, 0x46, 0x34, - 0x08, 0x63, 0x86, 0x0f, 0xf0, 0x44, 0xd9, 0xff, 0xc2, 0x82, 0x0b, 0x99, 0xae, 0xb1, 0xc7, 0xdc, - 0xec, 0x59, 0x18, 0xd9, 0xa6, 0x7b, 0x8b, 0x7c, 0x0e, 0xa6, 0x1d, 0x49, 0xcb, 0xaa, 0x00, 0x63, - 0x1c, 0xfb, 0x9b, 0x16, 0xc4, 0x94, 0x98, 0x28, 0xda, 0x8c, 0x5b, 0x6e, 0x88, 0x22, 0xc9, 0x49, - 0x96, 0x92, 0xf7, 0xe1, 0x52, 0xf2, 0x0b, 0x72, 0x73, 0xf1, 0xf1, 0x4d, 0xf1, 0xe2, 0xcc, 0x94, - 0x4d, 0x09, 0xfb, 0xb1, 0xb0, 0xef, 0x40, 0xf1, 0x86, 0xd3, 0x6d, 0xd0, 0x23, 0x19, 0x71, 0x98, - 0x18, 0x0b, 0xa8, 0xd3, 0x8a, 0x94, 0x9a, 0x2e, 0xc5, 0x18, 0x4a, 0x18, 0xea, 0x52, 0xfb, 0xfb, - 0x83, 0x30, 0x6a, 0x44, 0xb1, 0xb0, 0x7d, 0x3c, 0xa0, 0x1d, 0x3f, 0xad, 0xeb, 0xb2, 0x8f, 0x8d, - 0xbc, 0x84, 0xad, 0x9f, 0x80, 0xee, 0xb8, 0xa1, 0x10, 0x39, 0x89, 0xf5, 0x83, 0x12, 0x8e, 0x1a, - 0x83, 0x4c, 0x43, 0xb1, 0x4e, 0x3b, 0x51, 0x93, 0x4b, 0xd3, 0xc1, 0xca, 0x08, 0x6b, 0xea, 0x02, - 0x03, 0xa0, 0x80, 0x33, 0x84, 0x2d, 0x1a, 0xd5, 0x9a, 0xdc, 0xaa, 0x37, 0x22, 0x10, 0x16, 0x19, - 0x00, 0x05, 0x3c, 0xc3, 0xb9, 0x52, 0x3c, 0x79, 0xe7, 0xca, 0x50, 0xce, 0xce, 0x15, 0xd2, 0x81, - 0x73, 0x61, 0xd8, 0x5c, 0x0f, 0xdc, 0x1d, 0x27, 0xa2, 0xf1, 0xcc, 0x19, 0x3e, 0x0e, 0x9f, 0x4b, - 0x07, 0xfb, 0xd3, 0xe7, 0xaa, 0xd5, 0xa5, 0x34, 0x15, 0xcc, 0x22, 0x4d, 0xaa, 0x70, 0xc1, 0xf5, - 0x42, 0x5a, 0xeb, 0x06, 0xf4, 0x66, 0xc3, 0xf3, 0x03, 0xba, 0xe4, 0x87, 0x8c, 0x9c, 0x0c, 0x3b, - 0xd3, 0x4e, 0xdb, 0x9b, 0x59, 0x48, 0x98, 0x5d, 0x97, 0xdc, 0x80, 0xb3, 0x75, 0x37, 0x74, 0x36, - 0x5b, 0xb4, 0xda, 0xdd, 0x6c, 0xfb, 0xec, 0xc0, 0x26, 0x22, 0x55, 0x4a, 0x95, 0x27, 0x95, 0x69, - 0x62, 0x21, 0x8d, 0x80, 0xbd, 0x75, 0xec, 0xef, 0x58, 0x30, 0x66, 0x86, 0x14, 0x30, 0x1d, 0x16, - 0x9a, 0x0b, 0x8b, 0x55, 0x21, 0x65, 0xf3, 0xdb, 0x4b, 0x97, 0x34, 0xcd, 0xf8, 0xcc, 0x17, 0xc3, - 0xd0, 0xe0, 0x79, 0x84, 0x30, 0xca, 0xe7, 0xa0, 0xb8, 0xe5, 0xb3, 0xad, 0x7e, 0x20, 0x69, 0x99, + 0x75, 0xd8, 0xf5, 0xf0, 0x6b, 0xe6, 0x91, 0x5c, 0x72, 0x6b, 0xbf, 0xe6, 0x78, 0x77, 0xcb, 0x73, + 0x9f, 0xef, 0x72, 0xeb, 0x9c, 0x48, 0xdf, 0xae, 0x2e, 0xb9, 0x48, 0x88, 0x2c, 0x0e, 0xb9, 0x5c, + 0xee, 0x71, 0xf9, 0x71, 0x6f, 0xb8, 0xbb, 0xb9, 0x8f, 0xc8, 0x6a, 0xce, 0x14, 0x67, 0xfa, 0x38, + 0xd3, 0x3d, 0xd7, 0xdd, 0x43, 0x2e, 0x75, 0x77, 0x92, 0x22, 0x7f, 0xe8, 0x2e, 0x96, 0xe3, 0x7c, + 0x38, 0xb6, 0xac, 0xc4, 0x80, 0xe1, 0x48, 0x71, 0xe0, 0x18, 0x09, 0x04, 0xe4, 0x97, 0xfd, 0x37, + 0x08, 0x14, 0x24, 0x40, 0x1c, 0x58, 0x89, 0x05, 0x24, 0xa1, 0x22, 0x26, 0x31, 0x02, 0x04, 0xce, + 0x8f, 0x20, 0x92, 0x8d, 0x8d, 0x7f, 0x04, 0xf5, 0xd9, 0xd5, 0x3d, 0x3d, 0x5c, 0x72, 0xb7, 0xc9, + 0x15, 0xa2, 0xfc, 0x9b, 0x79, 0xf5, 0xea, 0xbd, 0xaa, 0xea, 0xaa, 0x57, 0xaf, 0xde, 0x7b, 0xf5, + 0x0a, 0xd6, 0x1b, 0x6e, 0xd4, 0xec, 0x6e, 0xce, 0xd4, 0xfc, 0xf6, 0xac, 0x13, 0x34, 0xfc, 0x4e, + 0xe0, 0xbf, 0xc3, 0x7f, 0x7c, 0x6c, 0xd7, 0x0f, 0xb6, 0xb7, 0x5a, 0xfe, 0x6e, 0x38, 0xbb, 0x73, + 0x6d, 0xb6, 0xb3, 0xdd, 0x98, 0x75, 0x3a, 0x6e, 0x38, 0xab, 0xa0, 0xb3, 0x3b, 0x2f, 0x3b, 0xad, + 0x4e, 0xd3, 0x79, 0x79, 0xb6, 0x41, 0x3d, 0x1a, 0x38, 0x11, 0xad, 0xcf, 0x74, 0x02, 0x3f, 0xf2, + 0xc9, 0xa7, 0x63, 0x8a, 0x33, 0x8a, 0x22, 0xff, 0xf1, 0xd3, 0x9a, 0xe2, 0xcc, 0xce, 0xb5, 0x99, + 0xce, 0x76, 0x63, 0x86, 0x51, 0x9c, 0x51, 0xd0, 0x19, 0x45, 0x71, 0xea, 0x63, 0x46, 0x9b, 0x1a, + 0x7e, 0xc3, 0x9f, 0xe5, 0x84, 0x37, 0xbb, 0x5b, 0xfc, 0x1f, 0xff, 0xc3, 0x7f, 0x09, 0x86, 0x53, + 0xf6, 0xf6, 0xab, 0xe1, 0x8c, 0xeb, 0xb3, 0xf6, 0xcd, 0xd6, 0xfc, 0x80, 0xce, 0xee, 0xf4, 0x34, + 0x6a, 0xea, 0x8a, 0x81, 0xd3, 0xf1, 0x5b, 0x6e, 0x6d, 0x6f, 0x76, 0xe7, 0xe5, 0x4d, 0x1a, 0xf5, + 0xb6, 0x7f, 0xea, 0xe3, 0x31, 0x6a, 0xdb, 0xa9, 0x35, 0x5d, 0x8f, 0x06, 0x7b, 0x71, 0xff, 0xdb, + 0x34, 0x72, 0xb2, 0x18, 0xcc, 0xf6, 0xab, 0x15, 0x74, 0xbd, 0xc8, 0x6d, 0xd3, 0x9e, 0x0a, 0x7f, + 0xe1, 0x41, 0x15, 0xc2, 0x5a, 0x93, 0xb6, 0x9d, 0x9e, 0x7a, 0xd7, 0xfa, 0xd5, 0xeb, 0x46, 0x6e, + 0x6b, 0xd6, 0xf5, 0xa2, 0x30, 0x0a, 0xd2, 0x95, 0xec, 0xeb, 0x30, 0x3c, 0xd7, 0xf6, 0xbb, 0x5e, + 0x44, 0x3e, 0x09, 0x43, 0x3b, 0x4e, 0xab, 0x4b, 0xcb, 0xd6, 0xb3, 0xd6, 0x8b, 0xa5, 0xca, 0xf3, + 0xdf, 0xda, 0x9f, 0x7e, 0xe2, 0x60, 0x7f, 0x7a, 0xe8, 0x0e, 0x03, 0xde, 0xdf, 0x9f, 0x3e, 0x4f, + 0xbd, 0x9a, 0x5f, 0x77, 0xbd, 0xc6, 0xec, 0x3b, 0xa1, 0xef, 0xcd, 0xac, 0x76, 0xdb, 0x9b, 0x34, + 0x40, 0x51, 0xc7, 0xfe, 0x83, 0x02, 0x4c, 0xcc, 0x05, 0xb5, 0xa6, 0xbb, 0x43, 0xab, 0x11, 0xa3, + 0xdf, 0xd8, 0x23, 0x4d, 0x18, 0x88, 0x9c, 0x80, 0x93, 0x1b, 0xbd, 0xba, 0x32, 0xf3, 0xa8, 0x1f, + 0x7f, 0x66, 0xc3, 0x09, 0x14, 0xed, 0xca, 0xc8, 0xc1, 0xfe, 0xf4, 0xc0, 0x86, 0x13, 0x20, 0x63, + 0x41, 0x5a, 0x30, 0xe8, 0xf9, 0x1e, 0x2d, 0x17, 0x38, 0xab, 0xd5, 0x47, 0x67, 0xb5, 0xea, 0x7b, + 0xba, 0x1f, 0x95, 0xe2, 0xc1, 0xfe, 0xf4, 0x20, 0x83, 0x20, 0xe7, 0xc2, 0xfa, 0xf5, 0x39, 0xb7, + 0x53, 0x1e, 0xc8, 0xab, 0x5f, 0x6f, 0xba, 0x9d, 0x64, 0xbf, 0xde, 0x74, 0x3b, 0xc8, 0x58, 0xd8, + 0x1f, 0x15, 0xa0, 0x34, 0x17, 0x34, 0xba, 0x6d, 0xea, 0x45, 0x21, 0xf9, 0x02, 0x40, 0xc7, 0x09, + 0x9c, 0x36, 0x8d, 0x68, 0x10, 0x96, 0xad, 0x67, 0x07, 0x5e, 0x1c, 0xbd, 0xba, 0xfc, 0xe8, 0xec, + 0xd7, 0x15, 0xcd, 0x0a, 0x91, 0x9f, 0x1c, 0x34, 0x28, 0x44, 0x83, 0x25, 0x79, 0x0f, 0x4a, 0x4e, + 0x10, 0xb9, 0x5b, 0x4e, 0x2d, 0x0a, 0xcb, 0x05, 0xce, 0xff, 0xb5, 0x47, 0xe7, 0x3f, 0x27, 0x49, + 0x56, 0xce, 0x4a, 0xf6, 0x25, 0x05, 0x09, 0x31, 0xe6, 0x67, 0xff, 0xd6, 0x10, 0x14, 0x55, 0x01, + 0x79, 0x16, 0x06, 0x3d, 0xa7, 0xad, 0xa6, 0xea, 0x98, 0xac, 0x38, 0xb8, 0xea, 0xb4, 0xd9, 0x47, + 0x72, 0xda, 0x94, 0x61, 0x74, 0x9c, 0xa8, 0xc9, 0xa7, 0x84, 0x81, 0xb1, 0xee, 0x44, 0x4d, 0xe4, + 0x25, 0xe4, 0x69, 0x18, 0x6c, 0xfb, 0x75, 0xca, 0xbf, 0xe3, 0x90, 0xf8, 0xc8, 0x2b, 0x7e, 0x9d, + 0x22, 0x87, 0xb2, 0xfa, 0x5b, 0x81, 0xdf, 0x2e, 0x0f, 0x26, 0xeb, 0x2f, 0x06, 0x7e, 0x1b, 0x79, + 0x09, 0xf9, 0xaa, 0x05, 0x93, 0xaa, 0x79, 0xb7, 0xfc, 0x9a, 0x13, 0xb9, 0xbe, 0x57, 0x1e, 0xe2, + 0x93, 0x02, 0xf3, 0x1b, 0x15, 0x45, 0xb9, 0x52, 0x96, 0x4d, 0x98, 0x4c, 0x97, 0x60, 0x4f, 0x2b, + 0xc8, 0x55, 0x80, 0x46, 0xcb, 0xdf, 0x74, 0x5a, 0x6c, 0x40, 0xca, 0xc3, 0xbc, 0x0b, 0xfa, 0xe3, + 0xde, 0xd0, 0x25, 0x68, 0x60, 0x91, 0x7b, 0x30, 0xe2, 0x88, 0x05, 0x5c, 0x1e, 0xe1, 0x9d, 0x78, + 0x3d, 0x8f, 0x4e, 0x24, 0x24, 0x42, 0x65, 0xf4, 0x60, 0x7f, 0x7a, 0x44, 0x02, 0x51, 0xb1, 0x23, + 0x2f, 0x41, 0xd1, 0xef, 0xb0, 0x76, 0x3b, 0xad, 0x72, 0xf1, 0x59, 0xeb, 0xc5, 0x62, 0x65, 0x52, + 0xb6, 0xb5, 0xb8, 0x26, 0xe1, 0xa8, 0x31, 0xc8, 0x15, 0x18, 0x09, 0xbb, 0x9b, 0xec, 0x3b, 0x96, + 0x4b, 0xbc, 0x63, 0x13, 0x12, 0x79, 0xa4, 0x2a, 0xc0, 0xa8, 0xca, 0xc9, 0x2b, 0x30, 0x1a, 0xd0, + 0x5a, 0x37, 0x08, 0x29, 0xfb, 0xb0, 0x65, 0xe0, 0xb4, 0xcf, 0x49, 0xf4, 0x51, 0x8c, 0x8b, 0xd0, + 0xc4, 0x23, 0x9f, 0x82, 0x33, 0xec, 0x03, 0x5f, 0xbf, 0xd7, 0x09, 0x68, 0x18, 0xb2, 0xaf, 0x3a, + 0xca, 0x19, 0x5d, 0x94, 0x35, 0xcf, 0x2c, 0x26, 0x4a, 0x31, 0x85, 0x6d, 0xff, 0xee, 0x08, 0xf4, + 0x7c, 0x24, 0xf2, 0x32, 0x8c, 0xca, 0xfe, 0xde, 0xf2, 0x1b, 0x21, 0x9f, 0xb8, 0xc5, 0xca, 0x04, + 0x6b, 0xc7, 0x5c, 0x0c, 0x46, 0x13, 0x87, 0xd4, 0xa1, 0x10, 0x5e, 0x93, 0x32, 0xed, 0xd6, 0xa3, + 0x7f, 0x8c, 0xea, 0x35, 0xbd, 0xd2, 0x86, 0x0f, 0xf6, 0xa7, 0x0b, 0xd5, 0x6b, 0x58, 0x08, 0xaf, + 0x31, 0x69, 0xd6, 0x70, 0xa3, 0xfc, 0xa4, 0xd9, 0x0d, 0x37, 0xd2, 0x7c, 0xb8, 0x34, 0xbb, 0xe1, + 0x46, 0xc8, 0x58, 0x30, 0x29, 0xdd, 0x8c, 0xa2, 0x0e, 0x5f, 0x52, 0xb9, 0x48, 0xe9, 0xa5, 0x8d, + 0x8d, 0x75, 0xcd, 0x8b, 0x2f, 0x60, 0x06, 0x41, 0xce, 0x85, 0x7c, 0x68, 0xb1, 0x11, 0x17, 0x85, + 0x7e, 0xb0, 0x27, 0x57, 0xe6, 0xed, 0xfc, 0x56, 0xa6, 0x1f, 0xec, 0x69, 0xe6, 0xf2, 0x43, 0xea, + 0x02, 0x34, 0x59, 0xf3, 0x8e, 0xd7, 0xb7, 0x42, 0xbe, 0x10, 0xf3, 0xe9, 0xf8, 0xc2, 0x62, 0x35, + 0xd5, 0xf1, 0x85, 0xc5, 0x2a, 0x72, 0x2e, 0xec, 0x83, 0x06, 0xce, 0xae, 0x5c, 0xc4, 0x39, 0x7c, + 0x50, 0x74, 0x76, 0x93, 0x1f, 0x14, 0x9d, 0x5d, 0x64, 0x2c, 0x18, 0x27, 0x3f, 0x0c, 0xf9, 0x9a, + 0xcd, 0x85, 0xd3, 0x5a, 0xb5, 0x9a, 0xe4, 0xb4, 0x56, 0xad, 0x22, 0x63, 0xc1, 0x27, 0x69, 0x2d, + 0xe4, 0x0b, 0x3e, 0x9f, 0x49, 0x3a, 0x9f, 0xe2, 0x74, 0x63, 0xbe, 0x8a, 0x8c, 0x85, 0xfd, 0x91, + 0x05, 0xe3, 0xaa, 0x88, 0x09, 0x91, 0x90, 0xdc, 0x83, 0xa2, 0xfa, 0x98, 0x52, 0x97, 0xc9, 0x73, + 0xd3, 0xd3, 0xa2, 0x4e, 0x41, 0x50, 0x73, 0xb3, 0x7f, 0x67, 0x08, 0x88, 0x06, 0xd3, 0x8e, 0x1f, + 0xba, 0x7c, 0x3a, 0x3d, 0x84, 0x28, 0xf1, 0x0c, 0x51, 0x72, 0x27, 0x4f, 0x51, 0x12, 0x37, 0x2b, + 0x21, 0x54, 0xfe, 0x76, 0x6a, 0xf1, 0x09, 0xe9, 0xf2, 0xd3, 0x27, 0xb2, 0xf8, 0x8c, 0x26, 0x1c, + 0xbe, 0x0c, 0x77, 0xe4, 0x32, 0x14, 0xf2, 0xe7, 0xaf, 0xe4, 0xbb, 0x0c, 0x8d, 0x56, 0xa4, 0x17, + 0x64, 0x20, 0x96, 0x89, 0x10, 0x40, 0x77, 0x73, 0x5d, 0x26, 0x06, 0xd7, 0xe4, 0x82, 0x09, 0xc4, + 0x82, 0x19, 0xce, 0x8b, 0xa7, 0xb1, 0x60, 0xd2, 0x3c, 0xf5, 0xd2, 0x79, 0x17, 0x2e, 0xf4, 0xe2, + 0x20, 0xdd, 0x22, 0xb3, 0x50, 0xaa, 0xf9, 0xde, 0x96, 0xdb, 0x58, 0x71, 0x3a, 0x52, 0x65, 0xd3, + 0xba, 0xde, 0xbc, 0x2a, 0xc0, 0x18, 0x87, 0x3c, 0x03, 0x03, 0xdb, 0x74, 0x4f, 0xea, 0x6e, 0xa3, + 0x12, 0x75, 0x60, 0x99, 0xee, 0x21, 0x83, 0x7f, 0xa2, 0xf8, 0xd5, 0xdf, 0x98, 0x7e, 0xe2, 0x8b, + 0xff, 0xf1, 0xd9, 0x27, 0xec, 0x7f, 0x3b, 0x00, 0x4f, 0x65, 0xf2, 0xac, 0x46, 0x4e, 0xd4, 0x0d, + 0xc9, 0xef, 0x58, 0x70, 0xc1, 0xc9, 0x2a, 0x97, 0x2b, 0xf9, 0x6e, 0x7e, 0x33, 0x32, 0x41, 0xbe, + 0xf2, 0x8c, 0x6c, 0x74, 0xf6, 0x88, 0x60, 0x76, 0xa3, 0xd8, 0x40, 0x31, 0xe5, 0x35, 0xec, 0x38, + 0x35, 0x2a, 0x7b, 0xaf, 0x07, 0x6a, 0x55, 0x15, 0x60, 0x8c, 0xc3, 0x94, 0xa1, 0x3a, 0xdd, 0x72, + 0xba, 0x2d, 0xb1, 0x81, 0x17, 0x63, 0x65, 0x68, 0x41, 0x80, 0x51, 0x95, 0x93, 0xbf, 0x6f, 0x01, + 0xe9, 0xe5, 0x2a, 0x17, 0xc3, 0xc6, 0x49, 0x8c, 0x43, 0xe5, 0xe2, 0xc1, 0xfe, 0x74, 0x86, 0x00, + 0xc3, 0x8c, 0x76, 0x18, 0xdf, 0xf4, 0x5f, 0x59, 0x70, 0x2e, 0x63, 0x99, 0xb3, 0x49, 0xd1, 0x0d, + 0x5a, 0x72, 0xfe, 0xe8, 0x49, 0x71, 0x1b, 0x6f, 0x21, 0x83, 0x93, 0x5f, 0xb6, 0x60, 0xc2, 0x58, + 0xed, 0x73, 0x5d, 0xa9, 0xfc, 0xe7, 0xa4, 0xc8, 0x26, 0x08, 0x57, 0x2e, 0x49, 0xf6, 0x13, 0xa9, + 0x02, 0x4c, 0x37, 0xc1, 0xfe, 0x9e, 0x05, 0xcf, 0x1c, 0x2a, 0xb4, 0x32, 0x1b, 0x6e, 0x3d, 0xf6, + 0x86, 0xb3, 0xa9, 0x15, 0xd0, 0x8e, 0x7f, 0x1b, 0x6f, 0xc9, 0x99, 0xa8, 0xa7, 0x16, 0x0a, 0x30, + 0xaa, 0x72, 0xfb, 0x0f, 0x2d, 0x48, 0xd3, 0x23, 0x0e, 0x9c, 0xe9, 0x86, 0x34, 0x60, 0x53, 0xb5, + 0x4a, 0x6b, 0x01, 0x55, 0x7b, 0xe7, 0xf3, 0x33, 0xc2, 0x4a, 0xc1, 0x1a, 0x3c, 0x53, 0xf3, 0x03, + 0x3a, 0xb3, 0xf3, 0xf2, 0x8c, 0xc0, 0x58, 0xa6, 0x7b, 0x55, 0xda, 0xa2, 0x8c, 0x46, 0x85, 0x30, + 0x3d, 0xfb, 0x76, 0x82, 0x00, 0xa6, 0x08, 0x32, 0x16, 0x1d, 0x27, 0x0c, 0x77, 0xfd, 0xa0, 0x2e, + 0x59, 0x14, 0x8e, 0xcd, 0x62, 0x3d, 0x41, 0x00, 0x53, 0x04, 0xed, 0x7f, 0x6e, 0xc1, 0x48, 0xc5, + 0xa9, 0x6d, 0xfb, 0x5b, 0x5b, 0xec, 0x98, 0x52, 0xef, 0x06, 0xe2, 0x98, 0x27, 0x26, 0xa1, 0xde, + 0xbb, 0x17, 0x24, 0x1c, 0x35, 0x06, 0xd9, 0x80, 0x61, 0x31, 0x1c, 0xb2, 0x51, 0x3f, 0x69, 0x34, + 0x4a, 0x5b, 0x67, 0xf8, 0x97, 0xeb, 0x46, 0x6e, 0x6b, 0x46, 0x58, 0x67, 0x66, 0x6e, 0x7a, 0xd1, + 0x5a, 0x50, 0x8d, 0x02, 0xd7, 0x6b, 0x54, 0xe0, 0x60, 0x7f, 0x7a, 0x78, 0x91, 0xd3, 0x40, 0x49, + 0x8b, 0x9d, 0x68, 0xda, 0xce, 0x3d, 0xc5, 0x8e, 0xaf, 0xf9, 0x52, 0x7c, 0xa2, 0x59, 0x89, 0x8b, + 0xd0, 0xc4, 0xb3, 0x3f, 0x03, 0x43, 0xf3, 0x4e, 0xad, 0x49, 0xc9, 0xed, 0xb4, 0x24, 0x1e, 0xbd, + 0xfa, 0x62, 0xd6, 0x68, 0x69, 0xa9, 0x6c, 0x0e, 0xd8, 0x78, 0x3f, 0x79, 0x6d, 0x7f, 0xdf, 0x82, + 0x4b, 0xf3, 0xad, 0x6e, 0x18, 0xd1, 0xe0, 0xae, 0x9c, 0x82, 0x1b, 0xb4, 0xdd, 0x69, 0x39, 0x11, + 0x25, 0x9f, 0x85, 0x62, 0x9b, 0x46, 0x4e, 0xdd, 0x89, 0x1c, 0xc9, 0xb1, 0xff, 0x50, 0xf0, 0x49, + 0xcc, 0xb0, 0x59, 0x1b, 0xd6, 0x36, 0xdf, 0xa1, 0xb5, 0x68, 0x85, 0x46, 0x4e, 0x7c, 0x76, 0x8d, + 0x61, 0xa8, 0xa9, 0x92, 0x7b, 0x30, 0x18, 0x76, 0x68, 0x2d, 0x3f, 0xf5, 0x26, 0xdd, 0x87, 0x6a, + 0x87, 0xd6, 0x62, 0x13, 0x00, 0xfb, 0x87, 0x9c, 0xa3, 0xfd, 0x7f, 0x2c, 0x78, 0xaa, 0x4f, 0xbf, + 0x6f, 0xb9, 0x61, 0x44, 0xde, 0xee, 0xe9, 0xfb, 0xcc, 0xd1, 0xfa, 0xce, 0x6a, 0xf3, 0x9e, 0xeb, + 0x29, 0xa6, 0x20, 0x46, 0xbf, 0x3f, 0x0f, 0x43, 0x6e, 0x44, 0xdb, 0xca, 0x14, 0xf3, 0xc6, 0xa3, + 0x77, 0xbc, 0x4f, 0x5f, 0x2a, 0xe3, 0xca, 0x16, 0x78, 0x93, 0xf1, 0x43, 0xc1, 0xd6, 0xfe, 0x97, + 0x16, 0xb0, 0xe9, 0x50, 0x77, 0xe5, 0x01, 0x77, 0x30, 0xda, 0xeb, 0x28, 0x93, 0x8c, 0xda, 0xff, + 0x06, 0x37, 0xf6, 0x3a, 0xf4, 0xfe, 0xfe, 0xf4, 0xb8, 0x46, 0x64, 0x00, 0xe4, 0xa8, 0xe4, 0x33, + 0x30, 0x1c, 0xf2, 0x7d, 0x5a, 0x4a, 0x98, 0x45, 0x59, 0x69, 0x58, 0xec, 0xde, 0xf7, 0xf7, 0xa7, + 0x8f, 0x64, 0x71, 0x9d, 0xd1, 0xb4, 0x45, 0x3d, 0x94, 0x54, 0x99, 0x08, 0x6b, 0xd3, 0x30, 0x74, + 0x1a, 0x54, 0xae, 0x14, 0x2d, 0xc2, 0x56, 0x04, 0x18, 0x55, 0xb9, 0xfd, 0x77, 0x2d, 0x60, 0x4d, + 0x8c, 0x1c, 0xc6, 0x62, 0xd5, 0xaf, 0x53, 0xb2, 0xca, 0x97, 0x8a, 0x00, 0xc8, 0x8f, 0xf7, 0x4c, + 0x9f, 0xa5, 0x22, 0x90, 0x12, 0x3a, 0x8d, 0x00, 0x61, 0x4c, 0x82, 0x7c, 0x1c, 0xc6, 0xea, 0xb4, + 0x43, 0xbd, 0x3a, 0xf5, 0x6a, 0x2e, 0x15, 0x1f, 0xad, 0x54, 0x99, 0x3c, 0xd8, 0x9f, 0x1e, 0x5b, + 0x30, 0xe0, 0x98, 0xc0, 0xb2, 0xff, 0xc4, 0x82, 0xf3, 0x9a, 0x5c, 0x95, 0x46, 0x7a, 0x59, 0xfd, + 0x8c, 0x05, 0xa0, 0x89, 0x33, 0x9d, 0x96, 0x4d, 0x81, 0xb5, 0x1c, 0xa6, 0x80, 0x39, 0x08, 0xf1, + 0xc2, 0xd3, 0xe0, 0x10, 0x0d, 0xb6, 0xe4, 0x0d, 0x18, 0xdb, 0xf1, 0x5b, 0xdd, 0x36, 0x5d, 0xf1, + 0xbb, 0x5e, 0x14, 0x96, 0x07, 0x78, 0x33, 0xa6, 0xb3, 0xc6, 0xe9, 0x4e, 0x8c, 0x57, 0x39, 0x2f, + 0xc9, 0x8e, 0x19, 0xc0, 0x10, 0x13, 0xa4, 0xec, 0x37, 0x80, 0x33, 0x75, 0xbd, 0x2e, 0x5d, 0xf3, + 0xc8, 0x73, 0x30, 0x44, 0x83, 0xc0, 0x0f, 0xe4, 0x69, 0x47, 0x4f, 0xc8, 0xeb, 0x0c, 0x88, 0xa2, + 0x8c, 0xbc, 0xc0, 0x64, 0xae, 0xdb, 0xa2, 0x75, 0x3e, 0x9f, 0x8a, 0x95, 0x33, 0x6a, 0x3e, 0x2d, + 0x72, 0x28, 0xca, 0x52, 0x7b, 0x06, 0x46, 0xe6, 0x19, 0x13, 0x1a, 0x30, 0xba, 0xa6, 0xd1, 0x7b, + 0x3c, 0x61, 0xf4, 0x56, 0xc6, 0xed, 0x0d, 0xb8, 0x30, 0x1f, 0x50, 0x26, 0x08, 0xae, 0x55, 0xba, + 0xb5, 0x6d, 0x1a, 0x09, 0xb3, 0x54, 0x48, 0x3e, 0x09, 0xe3, 0x3e, 0x97, 0x48, 0xb7, 0xfc, 0xda, + 0xb6, 0xeb, 0x35, 0xa4, 0x12, 0x76, 0x41, 0x52, 0x19, 0x5f, 0x33, 0x0b, 0x31, 0x89, 0x6b, 0xff, + 0xd7, 0x02, 0x8c, 0xcd, 0x07, 0xbe, 0xa7, 0x56, 0xdb, 0x29, 0x48, 0xca, 0x28, 0x21, 0x29, 0x73, + 0xb0, 0x52, 0x9a, 0xed, 0xef, 0x27, 0x25, 0xc9, 0xfb, 0x7a, 0x99, 0x0f, 0xe4, 0xa5, 0x6c, 0x26, + 0xf8, 0x72, 0xda, 0xf1, 0xc7, 0x4e, 0x0a, 0x01, 0xfb, 0xbf, 0x59, 0x30, 0x69, 0xa2, 0x9f, 0x82, + 0x60, 0x0e, 0x93, 0x82, 0x79, 0x35, 0xdf, 0xfe, 0xf6, 0x91, 0xc6, 0x1f, 0x0d, 0x27, 0xfb, 0xc9, + 0x3e, 0x00, 0xf9, 0xaa, 0x05, 0x63, 0xbb, 0x06, 0x40, 0x76, 0x76, 0x35, 0xbf, 0x3d, 0x92, 0x7f, + 0xf5, 0x1f, 0x57, 0xeb, 0xd9, 0x84, 0xde, 0x4f, 0xfd, 0xc7, 0x44, 0x4b, 0x98, 0x3a, 0x15, 0xd6, + 0x9a, 0xb4, 0xde, 0x6d, 0xa9, 0xa3, 0x8e, 0x1e, 0xd2, 0xaa, 0x84, 0xa3, 0xc6, 0x20, 0x6f, 0xc3, + 0xd9, 0x9a, 0xef, 0xd5, 0xba, 0x41, 0x40, 0xbd, 0xda, 0xde, 0x3a, 0xf7, 0xd3, 0x49, 0xa1, 0x3e, + 0x23, 0xab, 0x9d, 0x9d, 0x4f, 0x23, 0xdc, 0xcf, 0x02, 0x62, 0x2f, 0x21, 0x61, 0x53, 0x0e, 0x99, + 0xd8, 0xe5, 0xe7, 0xa1, 0xa2, 0x69, 0x53, 0xe6, 0x60, 0x54, 0xe5, 0xe4, 0x36, 0x5c, 0x0a, 0x23, + 0xa6, 0x2b, 0x7b, 0x8d, 0x05, 0xea, 0xd4, 0x5b, 0xae, 0xc7, 0xd4, 0x51, 0xdf, 0xab, 0x8b, 0x03, + 0xfe, 0x40, 0xe5, 0xa9, 0x83, 0xfd, 0xe9, 0x4b, 0xd5, 0x6c, 0x14, 0xec, 0x57, 0x97, 0x7c, 0x06, + 0xa6, 0xc2, 0x6e, 0xad, 0x46, 0xc3, 0x70, 0xab, 0xdb, 0x7a, 0xcd, 0xdf, 0x0c, 0x97, 0xdc, 0x90, + 0xe9, 0xd2, 0xb7, 0xdc, 0xb6, 0x1b, 0xf1, 0x63, 0xfc, 0x50, 0xe5, 0xf2, 0xc1, 0xfe, 0xf4, 0x54, + 0xb5, 0x2f, 0x16, 0x1e, 0x42, 0x81, 0x20, 0x5c, 0x14, 0xc2, 0xaf, 0x87, 0xf6, 0x08, 0xa7, 0x3d, + 0x75, 0xb0, 0x3f, 0x7d, 0x71, 0x31, 0x13, 0x03, 0xfb, 0xd4, 0x64, 0x5f, 0x30, 0x72, 0xdb, 0xf4, + 0x73, 0xbe, 0x47, 0xb9, 0x0d, 0xd0, 0xf8, 0x82, 0x1b, 0x12, 0x8e, 0x1a, 0x83, 0xbc, 0x13, 0xcf, + 0x44, 0xb6, 0x5c, 0xa4, 0x2d, 0xef, 0xf8, 0x12, 0xee, 0xfc, 0xc1, 0xfe, 0xf4, 0xe4, 0x5d, 0x83, + 0x12, 0x5b, 0x72, 0x98, 0xa0, 0x6d, 0xff, 0x41, 0x01, 0x48, 0xaf, 0x88, 0x20, 0xcb, 0x30, 0xec, + 0xd4, 0x22, 0x77, 0x87, 0x4a, 0xe7, 0xd9, 0x73, 0x59, 0xfb, 0x94, 0x60, 0x85, 0x74, 0x8b, 0xb2, + 0x19, 0x42, 0x63, 0xb9, 0x32, 0xc7, 0xab, 0xa2, 0x24, 0x41, 0x7c, 0x38, 0xdb, 0x72, 0xc2, 0x48, + 0xcd, 0xd5, 0x3a, 0xeb, 0xb2, 0x14, 0xac, 0x3f, 0x71, 0xb4, 0x4e, 0xb1, 0x1a, 0x95, 0x0b, 0x6c, + 0xe6, 0xde, 0x4a, 0x13, 0xc2, 0x5e, 0xda, 0xe4, 0x0b, 0x7c, 0xc3, 0x17, 0x8a, 0x8e, 0xda, 0x69, + 0x97, 0x73, 0xd9, 0xf0, 0x05, 0xcd, 0xc4, 0x66, 0x2f, 0xd9, 0xa0, 0xc1, 0xd2, 0xfe, 0xd7, 0x00, + 0x23, 0x0b, 0x73, 0x37, 0x36, 0x9c, 0x70, 0xfb, 0x08, 0x0e, 0x38, 0x36, 0x3b, 0xa4, 0xb2, 0x92, + 0x5e, 0xdf, 0x4a, 0x89, 0x41, 0x8d, 0x41, 0x3c, 0x18, 0x76, 0x3d, 0xb6, 0x20, 0xca, 0x67, 0xf2, + 0x32, 0xb1, 0x6a, 0xed, 0x95, 0x1f, 0xa4, 0x6e, 0x72, 0xea, 0x28, 0xb9, 0x90, 0xf7, 0xa1, 0xe4, + 0x28, 0xc7, 0xaa, 0xdc, 0x96, 0x96, 0xf3, 0x38, 0x6d, 0x4b, 0x92, 0xa6, 0x2f, 0x53, 0x82, 0x30, + 0x66, 0x48, 0xbe, 0x68, 0xc1, 0xa8, 0xea, 0x3a, 0xd2, 0x2d, 0x69, 0x84, 0x59, 0xc9, 0xaf, 0xcf, + 0x48, 0xb7, 0x84, 0x31, 0xd4, 0x00, 0xa0, 0xc9, 0xb2, 0x47, 0x1d, 0x1d, 0x3a, 0x8a, 0x3a, 0x4a, + 0x76, 0xa1, 0xb4, 0xeb, 0x46, 0x4d, 0xbe, 0xf1, 0x94, 0x87, 0xf9, 0x14, 0x5c, 0x7c, 0xf4, 0x56, + 0x33, 0x72, 0xf1, 0x88, 0xdd, 0x55, 0x0c, 0x30, 0xe6, 0x45, 0x66, 0x05, 0x63, 0xee, 0x98, 0xe6, + 0x22, 0xab, 0x94, 0xac, 0xc0, 0x0b, 0x30, 0xc6, 0x61, 0x43, 0x3c, 0xc6, 0xfe, 0x55, 0xe9, 0xbb, + 0x5d, 0xb6, 0x8e, 0xa5, 0x97, 0x22, 0x87, 0x79, 0xa5, 0x28, 0x8a, 0xc1, 0xba, 0x6b, 0xf0, 0xc0, + 0x04, 0x47, 0xb6, 0x46, 0x76, 0x9b, 0xd4, 0x93, 0x6e, 0x4a, 0xbd, 0x46, 0xee, 0x36, 0xa9, 0x87, + 0xbc, 0x84, 0xbc, 0x2f, 0x74, 0x78, 0xa1, 0xe3, 0x72, 0xff, 0x64, 0x2e, 0x9e, 0xbe, 0x58, 0x6f, + 0xae, 0x9c, 0x51, 0xca, 0xbb, 0xf8, 0x8f, 0x06, 0x3f, 0xa6, 0x2e, 0xfb, 0xde, 0xf5, 0x7b, 0x6e, + 0x24, 0xfd, 0x9b, 0x5a, 0xd2, 0xad, 0x71, 0x28, 0xca, 0x52, 0x61, 0x64, 0x64, 0x93, 0x20, 0x2c, + 0x8f, 0x25, 0x8f, 0x51, 0x62, 0xa6, 0x84, 0xa8, 0xca, 0xc9, 0xaf, 0x5b, 0x30, 0xd4, 0xf4, 0xfd, + 0xed, 0xb0, 0x3c, 0xce, 0x27, 0x47, 0x0e, 0xaa, 0x9e, 0x94, 0x38, 0x33, 0x4b, 0x8c, 0xec, 0x75, + 0x2f, 0x0a, 0xf6, 0x2a, 0x2f, 0x2b, 0x05, 0x88, 0xc3, 0xee, 0xef, 0x4f, 0x9f, 0xb9, 0xe5, 0x6e, + 0xd1, 0xda, 0x5e, 0xad, 0x45, 0x39, 0xe4, 0x4b, 0xdf, 0x35, 0x20, 0xd7, 0x77, 0xa8, 0x17, 0xa1, + 0x68, 0xd5, 0xd4, 0x47, 0x16, 0x40, 0x4c, 0x88, 0x4c, 0x0a, 0x3b, 0x33, 0x17, 0x62, 0xdc, 0xb4, + 0x4c, 0xa8, 0x3a, 0x0f, 0x08, 0x49, 0x9e, 0xc3, 0x81, 0x2a, 0xd1, 0x34, 0x79, 0xa2, 0xf8, 0x44, + 0xe1, 0x55, 0xcb, 0xfe, 0x37, 0x16, 0x8c, 0xb2, 0xce, 0x29, 0x11, 0xf8, 0x02, 0x0c, 0x47, 0x4e, + 0xd0, 0x90, 0x96, 0x32, 0xe3, 0x73, 0x6c, 0x70, 0x28, 0xca, 0x52, 0xe2, 0xc1, 0x50, 0xe4, 0x84, + 0xdb, 0x4a, 0xbb, 0xbc, 0x99, 0xdb, 0x10, 0xc7, 0x8a, 0x25, 0xfb, 0x17, 0xa2, 0x60, 0x43, 0x5e, + 0x84, 0x22, 0x53, 0x00, 0x16, 0x9d, 0x50, 0x19, 0x99, 0xc7, 0x98, 0x10, 0x5f, 0x94, 0x30, 0xd4, + 0xa5, 0xf6, 0xdf, 0x29, 0xc0, 0xe0, 0x82, 0x38, 0x67, 0x0c, 0x87, 0x7e, 0x37, 0xa8, 0x51, 0xa9, + 0x6f, 0xe6, 0x30, 0xa7, 0x19, 0xdd, 0x2a, 0xa7, 0x69, 0x68, 0xfa, 0xfc, 0x3f, 0x4a, 0x5e, 0xe4, + 0x97, 0x2d, 0x38, 0x13, 0x05, 0x8e, 0x17, 0x6e, 0xf9, 0x41, 0x5b, 0x18, 0xc8, 0x0a, 0x79, 0xcd, + 0xc2, 0x8d, 0x04, 0xdd, 0x6a, 0x44, 0x3b, 0x71, 0x38, 0x40, 0xb2, 0x0c, 0x53, 0x6d, 0xb0, 0x7f, + 0xd5, 0x02, 0x88, 0x5b, 0x4f, 0x3e, 0xb4, 0x60, 0xdc, 0x31, 0x1d, 0x8c, 0x72, 0x8c, 0xd6, 0xf2, + 0x33, 0xf6, 0x72, 0xb2, 0x95, 0xb3, 0xec, 0x04, 0x9a, 0x00, 0x61, 0x92, 0xb1, 0xfd, 0x0a, 0x0c, + 0xf1, 0xd5, 0xc1, 0x75, 0x71, 0x69, 0xe5, 0x4b, 0x9b, 0x36, 0x95, 0xf5, 0x0f, 0x35, 0x86, 0xfd, + 0x36, 0x9c, 0xb9, 0x7e, 0x8f, 0xd6, 0xba, 0x91, 0x1f, 0x08, 0x6b, 0x20, 0x79, 0x0d, 0x48, 0x48, + 0x83, 0x1d, 0xb7, 0x46, 0xe7, 0x6a, 0x35, 0x76, 0xb2, 0x5e, 0x8d, 0x75, 0x83, 0x29, 0x49, 0x89, + 0x54, 0x7b, 0x30, 0x30, 0xa3, 0x96, 0xfd, 0xdb, 0x16, 0x8c, 0x1a, 0xde, 0x26, 0xb6, 0x53, 0x37, + 0xe6, 0xab, 0xe2, 0xdc, 0x2d, 0x87, 0x6a, 0x39, 0x17, 0x7f, 0x96, 0x20, 0x19, 0x6f, 0x23, 0x1a, + 0x84, 0x31, 0xc3, 0x07, 0x78, 0xa2, 0xec, 0x7f, 0x61, 0xc1, 0x85, 0x4c, 0xd7, 0xd8, 0x63, 0x6e, + 0xf6, 0x2c, 0x94, 0xb6, 0xe9, 0xde, 0x22, 0x9f, 0x83, 0x69, 0x47, 0xd2, 0xb2, 0x2a, 0xc0, 0x18, + 0xc7, 0xfe, 0xa6, 0x05, 0x31, 0x25, 0x26, 0x8a, 0x36, 0xe3, 0x96, 0x1b, 0xa2, 0x48, 0x72, 0x92, + 0xa5, 0xe4, 0x7d, 0xb8, 0x94, 0xfc, 0x82, 0xdc, 0x5c, 0x7c, 0x7c, 0x53, 0xbc, 0x38, 0x33, 0x65, + 0x53, 0xc2, 0x7e, 0x2c, 0xec, 0x3b, 0x30, 0x74, 0xc3, 0xe9, 0x36, 0xe8, 0x91, 0x8c, 0x38, 0x4c, + 0x8c, 0x05, 0xd4, 0x69, 0x45, 0x4a, 0x4d, 0x97, 0x62, 0x0c, 0x25, 0x0c, 0x75, 0xa9, 0xfd, 0xfd, + 0x41, 0x18, 0x35, 0xa2, 0x58, 0xd8, 0x3e, 0x1e, 0xd0, 0x8e, 0x9f, 0xd6, 0x75, 0xd9, 0xc7, 0x46, + 0x5e, 0xc2, 0xd6, 0x4f, 0x40, 0x77, 0xdc, 0x50, 0x88, 0x9c, 0xc4, 0xfa, 0x41, 0x09, 0x47, 0x8d, + 0x41, 0xa6, 0x61, 0xa8, 0x4e, 0x3b, 0x51, 0x93, 0x4b, 0xd3, 0xc1, 0x4a, 0x89, 0x35, 0x75, 0x81, + 0x01, 0x50, 0xc0, 0x19, 0xc2, 0x16, 0x8d, 0x6a, 0x4d, 0x6e, 0xd5, 0x2b, 0x09, 0x84, 0x45, 0x06, + 0x40, 0x01, 0xcf, 0x70, 0xae, 0x0c, 0x9d, 0xbc, 0x73, 0x65, 0x38, 0x67, 0xe7, 0x0a, 0xe9, 0xc0, + 0xb9, 0x30, 0x6c, 0xae, 0x07, 0xee, 0x8e, 0x13, 0xd1, 0x78, 0xe6, 0x8c, 0x1c, 0x87, 0xcf, 0xa5, + 0x83, 0xfd, 0xe9, 0x73, 0xd5, 0xea, 0x52, 0x9a, 0x0a, 0x66, 0x91, 0x26, 0x55, 0xb8, 0xe0, 0x7a, + 0x21, 0xad, 0x75, 0x03, 0x7a, 0xb3, 0xe1, 0xf9, 0x01, 0x5d, 0xf2, 0x43, 0x46, 0x4e, 0x86, 0x9d, + 0x69, 0xa7, 0xed, 0xcd, 0x2c, 0x24, 0xcc, 0xae, 0x4b, 0x6e, 0xc0, 0xd9, 0xba, 0x1b, 0x3a, 0x9b, + 0x2d, 0x5a, 0xed, 0x6e, 0xb6, 0x7d, 0x76, 0x60, 0x13, 0x91, 0x2a, 0xc5, 0xca, 0x93, 0xca, 0x34, + 0xb1, 0x90, 0x46, 0xc0, 0xde, 0x3a, 0xf6, 0x77, 0x2c, 0x18, 0x33, 0x43, 0x0a, 0x98, 0x0e, 0x0b, + 0xcd, 0x85, 0xc5, 0xaa, 0x90, 0xb2, 0xf9, 0xed, 0xa5, 0x4b, 0x9a, 0x66, 0x7c, 0xe6, 0x8b, 0x61, + 0x68, 0xf0, 0x3c, 0x42, 0x18, 0xe5, 0x73, 0x30, 0xb4, 0xe5, 0xb3, 0xad, 0x7e, 0x20, 0x69, 0x99, 0x5d, 0x64, 0x40, 0x14, 0x65, 0xf6, 0xff, 0xb6, 0xe0, 0x62, 0x76, 0xb4, 0xc4, 0x0f, 0x43, 0x27, 0xaf, 0x02, 0xb0, 0xae, 0x24, 0xc4, 0xa5, 0x11, 0x0b, 0xab, 0x4a, 0xd0, 0xc0, 0x3a, 0x5a, 0xb7, 0x7f, 0xc0, 0xd4, 0xcd, 0x98, 0xcf, 0x57, 0x2c, 0x18, 0x67, 0x6c, 0x97, 0x83, 0xcd, 0x44, 0x6f, - 0xd7, 0xf2, 0xe9, 0xad, 0x26, 0x1b, 0x1b, 0xa0, 0x13, 0x60, 0x4c, 0x32, 0x27, 0x7f, 0x1e, 0x46, - 0x9c, 0x7a, 0x3d, 0xa0, 0x61, 0xa8, 0xdd, 0x11, 0xdc, 0xc5, 0x37, 0xa7, 0x80, 0x18, 0x97, 0x33, - 0x11, 0xd7, 0xac, 0x6f, 0x85, 0x4c, 0x6a, 0x48, 0xbb, 0x9b, 0x16, 0x71, 0x8c, 0x09, 0x83, 0xa3, - 0xc6, 0xb0, 0x7f, 0x71, 0x10, 0x92, 0xbc, 0x49, 0x1d, 0x26, 0xb6, 0x83, 0xcd, 0x79, 0xee, 0x86, - 0x7c, 0x18, 0x87, 0xf0, 0xb9, 0x83, 0xfd, 0xe9, 0x89, 0xe5, 0x24, 0x05, 0x4c, 0x93, 0x94, 0x5c, - 0x96, 0xe9, 0x5e, 0xe4, 0x6c, 0x3e, 0xcc, 0x46, 0xa4, 0xb8, 0x98, 0x14, 0x30, 0x4d, 0x92, 0xbc, - 0x02, 0xa3, 0xdb, 0xc1, 0xa6, 0x12, 0xa0, 0x69, 0x2f, 0xec, 0x72, 0x5c, 0x84, 0x26, 0x1e, 0x1b, - 0xc2, 0xed, 0x60, 0x93, 0x6d, 0x38, 0x2a, 0xac, 0x58, 0x0f, 0xe1, 0xb2, 0x84, 0xa3, 0xc6, 0x20, - 0x1d, 0x20, 0xdb, 0x6a, 0xf4, 0xb4, 0xd3, 0x55, 0xca, 0xf9, 0xa3, 0xfb, 0x6c, 0x79, 0x08, 0xc6, - 0x72, 0x0f, 0x1d, 0xcc, 0xa0, 0x4d, 0xde, 0x80, 0x4b, 0xdb, 0xc1, 0xa6, 0xdc, 0x86, 0xd7, 0x03, - 0xd7, 0xab, 0xb9, 0x9d, 0x44, 0x08, 0xf1, 0xb4, 0x6c, 0xee, 0xa5, 0xe5, 0x6c, 0x34, 0xec, 0x57, - 0xdf, 0xfe, 0x7a, 0x01, 0x78, 0x6c, 0x26, 0xd3, 0x2c, 0xda, 0x34, 0x6a, 0xfa, 0xf5, 0xb4, 0x66, - 0xb1, 0xc2, 0xa1, 0x28, 0x4b, 0x55, 0xb0, 0x47, 0xa1, 0x4f, 0xb0, 0xc7, 0x2e, 0x0c, 0x37, 0xa9, - 0x53, 0xa7, 0x81, 0x32, 0x84, 0xdd, 0xca, 0x27, 0x9a, 0x74, 0x89, 0x13, 0x8d, 0x0f, 0xb8, 0xe2, - 0x7f, 0x88, 0x8a, 0x1b, 0xf9, 0x04, 0x9c, 0x61, 0x3a, 0x82, 0xdf, 0x8d, 0x94, 0xd5, 0x77, 0x90, - 0x5b, 0x7d, 0xf9, 0x7e, 0xb7, 0x91, 0x28, 0xc1, 0x14, 0x26, 0x93, 0xa5, 0x9b, 0x7e, 0x5d, 0x44, - 0xa2, 0x1a, 0xb2, 0xb4, 0xe2, 0xd7, 0xf7, 0x90, 0x97, 0xd8, 0xbf, 0xc9, 0x76, 0x00, 0x23, 0xa8, - 0xf5, 0x41, 0x31, 0x2f, 0x61, 0x3c, 0x0c, 0xe2, 0xa4, 0xb3, 0x94, 0xc3, 0x30, 0x3c, 0x60, 0x08, - 0xec, 0x6f, 0x33, 0xa1, 0xa6, 0xc7, 0xea, 0x08, 0x96, 0xc0, 0xe7, 0xcc, 0x33, 0x75, 0x3f, 0xf5, - 0xec, 0x0b, 0x30, 0xc2, 0x7f, 0x2c, 0x06, 0x7e, 0x5b, 0x1a, 0xe4, 0x30, 0xcf, 0x6f, 0x2a, 0xcf, - 0x8e, 0x5c, 0xc0, 0xdd, 0x51, 0x8c, 0x30, 0xe6, 0x69, 0xfb, 0x30, 0x99, 0xc6, 0x26, 0x6f, 0xc1, - 0x58, 0xa8, 0x64, 0x44, 0x1c, 0x34, 0x76, 0x44, 0x59, 0xc2, 0xcd, 0x43, 0x55, 0xa3, 0x3a, 0x26, - 0x88, 0xd9, 0x6b, 0x30, 0x94, 0xeb, 0x10, 0xda, 0xdf, 0xb0, 0x60, 0x84, 0x1b, 0xe8, 0x1b, 0x81, - 0xd3, 0x8e, 0xab, 0x0c, 0x1c, 0x32, 0xea, 0x21, 0x0c, 0x0b, 0x55, 0x5e, 0x79, 0x90, 0x73, 0x98, - 0x40, 0xe2, 0x3a, 0x51, 0x3c, 0x81, 0xc4, 0x99, 0x21, 0x44, 0xc5, 0xc9, 0xfe, 0xf9, 0x02, 0x0c, - 0xdd, 0xf4, 0x3a, 0xdd, 0x1f, 0xf9, 0x2b, 0x2d, 0x2b, 0x30, 0x78, 0x33, 0xa2, 0xed, 0xe4, 0xcd, - 0xab, 0xb1, 0xca, 0xf3, 0xe6, 0xad, 0xab, 0x72, 0xf2, 0xd6, 0x15, 0x3a, 0xbb, 0x2a, 0x76, 0x41, - 0x9a, 0x92, 0xe2, 0xc0, 0xb9, 0xdf, 0xb3, 0x60, 0x3c, 0x61, 0x6d, 0x4a, 0xd8, 0xe0, 0xad, 0x07, - 0xda, 0xe0, 0x13, 0x36, 0xf1, 0xc2, 0x29, 0xdb, 0xc4, 0xed, 0x16, 0x0c, 0xde, 0x72, 0xbd, 0xed, - 0xa3, 0x2d, 0x86, 0xb0, 0xe6, 0x77, 0x7a, 0x16, 0x43, 0x95, 0x01, 0x51, 0x94, 0x29, 0xc9, 0x39, - 0x90, 0x2d, 0x39, 0xed, 0x2f, 0x59, 0x70, 0x76, 0x85, 0xb6, 0x7d, 0xf7, 0x73, 0x4e, 0x1c, 0x38, - 0xc2, 0x2a, 0x35, 0xdd, 0x48, 0xc6, 0x18, 0xe8, 0x4a, 0x4b, 0x6e, 0x84, 0x0c, 0xfe, 0x00, 0x63, - 0x00, 0x0f, 0x73, 0x65, 0xba, 0xc8, 0x6a, 0xac, 0x14, 0xc4, 0x21, 0x21, 0xaa, 0x00, 0x63, 0x1c, - 0xfb, 0x77, 0x2d, 0x18, 0x16, 0x8d, 0xa0, 0x8a, 0xb6, 0xd5, 0x87, 0x76, 0x13, 0x8a, 0xbc, 0x9e, - 0xfc, 0x2e, 0x37, 0x72, 0x30, 0x12, 0x33, 0x72, 0xe2, 0x6c, 0xc9, 0x7f, 0xa2, 0x60, 0xc0, 0x77, - 0x68, 0xe7, 0xde, 0x9c, 0x8e, 0x99, 0x89, 0x77, 0x68, 0x0e, 0x45, 0x59, 0x6a, 0x7f, 0x6d, 0x00, - 0x4a, 0xca, 0xfd, 0x26, 0xe2, 0xbd, 0x3d, 0xcf, 0x8f, 0x1c, 0xe1, 0x9d, 0x12, 0x2b, 0xf9, 0xad, - 0x47, 0x6f, 0xa5, 0xe2, 0x30, 0x33, 0x17, 0x53, 0x17, 0x46, 0x60, 0xad, 0x6f, 0x19, 0x25, 0x68, - 0x36, 0x82, 0x7c, 0x1e, 0x86, 0x5a, 0xce, 0x26, 0x6d, 0xa9, 0x85, 0x7d, 0x27, 0xc7, 0xe6, 0xdc, - 0xe2, 0x84, 0x45, 0x4b, 0xf4, 0x08, 0x09, 0x20, 0x4a, 0xae, 0x53, 0x9f, 0x82, 0xc9, 0x74, 0xab, - 0x33, 0x2c, 0xce, 0xe7, 0x13, 0xa2, 0xdd, 0x30, 0x10, 0x4f, 0xfd, 0x25, 0x18, 0x35, 0xd8, 0x1c, - 0xa7, 0xaa, 0xfd, 0x3a, 0x8c, 0xae, 0xd0, 0x28, 0x70, 0x6b, 0x9c, 0xc0, 0x83, 0x26, 0xd7, 0x91, - 0x76, 0x97, 0x2f, 0xf3, 0xc9, 0xca, 0x68, 0x86, 0xe4, 0x7d, 0x80, 0x4e, 0xe0, 0x33, 0x55, 0x8d, - 0x76, 0xd5, 0xc7, 0xce, 0x41, 0x03, 0x5b, 0xd7, 0x34, 0x85, 0xdf, 0x22, 0xfe, 0x8f, 0x06, 0x3f, - 0xfb, 0x0a, 0x14, 0x57, 0xba, 0x11, 0xbd, 0xf7, 0x60, 0x51, 0x61, 0xbf, 0x05, 0x63, 0x1c, 0x75, - 0xc9, 0x6f, 0x31, 0x19, 0xca, 0x7a, 0xda, 0x66, 0xff, 0xd3, 0x96, 0x22, 0x8e, 0x84, 0xa2, 0x8c, - 0xad, 0x80, 0xa6, 0xdf, 0xaa, 0xd3, 0x40, 0x8e, 0x87, 0xfe, 0xbe, 0x4b, 0x1c, 0x8a, 0xb2, 0xd4, - 0xfe, 0x99, 0x02, 0x8c, 0xf2, 0x8a, 0x52, 0x7a, 0xec, 0xc1, 0x70, 0x53, 0xf0, 0x91, 0x43, 0x92, - 0x43, 0x98, 0x85, 0xd9, 0x7a, 0x43, 0x27, 0x13, 0x00, 0x54, 0xfc, 0x18, 0xeb, 0x5d, 0xc7, 0x8d, - 0x18, 0xeb, 0xc2, 0xc9, 0xb2, 0xbe, 0x2b, 0xd8, 0xa0, 0xe2, 0x67, 0xff, 0x07, 0x0b, 0x60, 0xd5, - 0xaf, 0x53, 0xa4, 0x61, 0xb7, 0x15, 0x91, 0x9f, 0x84, 0x62, 0xa7, 0xe9, 0x84, 0x69, 0xeb, 0x6f, - 0x71, 0x9d, 0x01, 0xef, 0xef, 0x4f, 0x8f, 0x30, 0x5c, 0xfe, 0x07, 0x05, 0xa2, 0x19, 0xa5, 0x57, - 0x38, 0x3c, 0x4a, 0x8f, 0x74, 0x60, 0xd8, 0xef, 0x46, 0x4c, 0x73, 0x90, 0x2a, 0x62, 0x0e, 0xce, - 0x8f, 0x35, 0x41, 0x50, 0xdc, 0x4d, 0x94, 0x7f, 0x50, 0xb1, 0xb1, 0xff, 0x68, 0x42, 0xf4, 0x4e, - 0x7e, 0xe2, 0x29, 0x28, 0xb8, 0xea, 0xe8, 0x02, 0xb2, 0x99, 0x85, 0x9b, 0x0b, 0x58, 0x70, 0xeb, - 0x7a, 0x36, 0x16, 0xfa, 0x6e, 0x5c, 0xaf, 0xc0, 0x68, 0xdd, 0x0d, 0x3b, 0x2d, 0x67, 0x6f, 0x35, - 0xe3, 0xdc, 0xb8, 0x10, 0x17, 0xa1, 0x89, 0x47, 0x5e, 0x92, 0x91, 0x95, 0xe2, 0xcc, 0x58, 0x4e, - 0x45, 0x56, 0x96, 0x58, 0xf3, 0x8c, 0xa0, 0xca, 0x57, 0x61, 0x4c, 0xed, 0xe8, 0x9c, 0x8b, 0x38, - 0x6d, 0xe8, 0x88, 0xbb, 0x0d, 0xa3, 0x0c, 0x13, 0x98, 0x3d, 0x5e, 0xe9, 0xa1, 0xd3, 0xf7, 0x4a, - 0x7f, 0x12, 0xc6, 0xd5, 0x5f, 0xbe, 0x9b, 0x97, 0xcf, 0xf3, 0xd6, 0x6b, 0x7b, 0xc6, 0x86, 0x59, - 0x88, 0x49, 0xdc, 0x78, 0xea, 0x0d, 0x1f, 0x75, 0xea, 0x5d, 0x05, 0xd8, 0xf4, 0xbb, 0x5e, 0xdd, - 0x09, 0xf6, 0x6e, 0x2e, 0xc8, 0x18, 0x16, 0xad, 0x31, 0x56, 0x74, 0x09, 0x1a, 0x58, 0xe6, 0x74, - 0x1d, 0x79, 0xc0, 0x74, 0x7d, 0x0b, 0x46, 0x78, 0xbc, 0x0f, 0xad, 0xcf, 0x45, 0xd2, 0xbb, 0x7b, - 0x9c, 0xd0, 0x10, 0xad, 0x3c, 0x54, 0x15, 0x11, 0x8c, 0xe9, 0x91, 0xcf, 0x00, 0x6c, 0xb9, 0x9e, - 0x1b, 0x36, 0x39, 0xf5, 0xd1, 0x63, 0x53, 0xd7, 0xfd, 0x5c, 0xd4, 0x54, 0xd0, 0xa0, 0x48, 0xde, - 0x86, 0xb3, 0x34, 0x8c, 0xdc, 0xb6, 0x13, 0xd1, 0xba, 0x0e, 0x38, 0x2f, 0xf3, 0xc3, 0xae, 0x8e, - 0xb8, 0xba, 0x9e, 0x46, 0xb8, 0x9f, 0x05, 0xc4, 0x5e, 0x42, 0xe4, 0x55, 0x28, 0x75, 0x02, 0xbf, - 0x11, 0xd0, 0x30, 0x2c, 0x4f, 0xf1, 0x61, 0x7c, 0x5a, 0x69, 0xa6, 0xeb, 0x12, 0x7e, 0xdf, 0xf8, - 0x8d, 0x1a, 0x9b, 0xfc, 0xa9, 0x05, 0x67, 0x03, 0x2a, 0x5c, 0x7e, 0xa1, 0x6e, 0xd8, 0x05, 0x2e, - 0xf5, 0x6a, 0x79, 0xdc, 0xfc, 0x57, 0x8b, 0x7d, 0x06, 0xd3, 0x5c, 0xc4, 0x76, 0x4f, 0x55, 0xef, - 0x7b, 0xca, 0xef, 0x67, 0x01, 0xbf, 0xf4, 0xdd, 0xe9, 0xe9, 0xde, 0x34, 0x14, 0x9a, 0x38, 0x5b, - 0x79, 0x7f, 0xfd, 0xbb, 0xd3, 0x93, 0xea, 0x7f, 0x3c, 0x68, 0x3d, 0x9d, 0x64, 0xbb, 0x57, 0xc7, - 0xaf, 0xdf, 0x5c, 0x97, 0x6e, 0x78, 0xbd, 0x7b, 0xad, 0x33, 0x20, 0x8a, 0x32, 0xf2, 0x22, 0x94, - 0xea, 0x0e, 0x6d, 0xfb, 0x1e, 0xad, 0x97, 0xc7, 0x63, 0x3f, 0xc7, 0x82, 0x84, 0xa1, 0x2e, 0x25, - 0x2d, 0x18, 0x72, 0xf9, 0x31, 0x4c, 0xc6, 0xdc, 0xe4, 0x70, 0xf6, 0x13, 0xc7, 0x3a, 0x15, 0x71, - 0xc3, 0x45, 0xa9, 0xe4, 0x61, 0xca, 0xee, 0x89, 0x53, 0x91, 0xdd, 0x6c, 0x24, 0x6a, 0x4d, 0xb7, - 0x55, 0x0f, 0xa8, 0x57, 0x9e, 0xe4, 0xe6, 0x4d, 0x3e, 0x12, 0xf3, 0x12, 0x86, 0xba, 0x94, 0xfc, - 0x45, 0x18, 0xf7, 0xbb, 0x11, 0x5f, 0xe4, 0xec, 0xfb, 0x87, 0xe5, 0xb3, 0x1c, 0x9d, 0x7b, 0x50, - 0xd7, 0xcc, 0x02, 0x4c, 0xe2, 0x31, 0x61, 0xdb, 0xf4, 0xc3, 0x88, 0xfd, 0xe1, 0xc2, 0xf6, 0x62, - 0x52, 0xd8, 0x2e, 0x19, 0x65, 0x98, 0xc0, 0x24, 0x5f, 0xb5, 0xe0, 0x6c, 0x3b, 0x7d, 0x00, 0x29, - 0x5f, 0xe2, 0x23, 0x53, 0xcd, 0x43, 0x51, 0x4d, 0x91, 0x16, 0x81, 0x66, 0x3d, 0x60, 0xec, 0x6d, - 0x04, 0xbf, 0x34, 0x17, 0xee, 0x79, 0xb5, 0x66, 0xe0, 0x7b, 0xc9, 0xe6, 0x3d, 0xc9, 0x9b, 0xf7, - 0x56, 0x4e, 0xab, 0x2c, 0x8b, 0x45, 0xe5, 0xc9, 0x83, 0xfd, 0xe9, 0x0b, 0x99, 0x45, 0x98, 0xdd, - 0xa8, 0xa9, 0x05, 0xb8, 0x98, 0xbd, 0x52, 0x1f, 0xa4, 0x31, 0x0f, 0x98, 0x1a, 0xf3, 0x22, 0x3c, - 0xd9, 0xb7, 0x51, 0x4c, 0xe6, 0x2b, 0xf5, 0xca, 0x4a, 0xca, 0xfc, 0x1e, 0x75, 0xe8, 0x0c, 0x8c, - 0x99, 0xc9, 0x43, 0xb8, 0x3b, 0xdb, 0xb8, 0xb0, 0xc9, 0x0e, 0xd9, 0x7e, 0x35, 0x77, 0xbf, 0xf0, - 0x5a, 0xb5, 0xc7, 0x2f, 0xac, 0x41, 0x18, 0x33, 0x3c, 0x8a, 0x3b, 0x3b, 0xf3, 0x76, 0xe9, 0x63, - 0x6e, 0xf6, 0xb1, 0xdd, 0xd9, 0xff, 0x7e, 0x10, 0x62, 0x4a, 0xe4, 0x25, 0x28, 0x51, 0xaf, 0xde, - 0xf1, 0x5d, 0x2f, 0x4a, 0x9b, 0x41, 0xae, 0x4b, 0x38, 0x6a, 0x0c, 0xc3, 0xf9, 0x5d, 0x38, 0xd4, - 0xf9, 0x5d, 0x87, 0x09, 0x87, 0xc7, 0xdb, 0xc6, 0xae, 0xcb, 0x81, 0x63, 0xfb, 0x1a, 0xe6, 0x92, - 0x14, 0x30, 0x4d, 0x92, 0x71, 0x09, 0xe3, 0xaa, 0x9c, 0xcb, 0xe0, 0xb1, 0xb9, 0x54, 0x93, 0x14, - 0x30, 0x4d, 0x92, 0xbc, 0x0d, 0xe5, 0x1a, 0xbf, 0xe1, 0x20, 0xfa, 0x78, 0x73, 0x6b, 0xd5, 0x8f, - 0xd6, 0x03, 0x1a, 0x52, 0x4f, 0xb8, 0x96, 0x4b, 0x95, 0x67, 0xe5, 0x28, 0x94, 0xe7, 0xfb, 0xe0, - 0x61, 0x5f, 0x0a, 0x4c, 0xab, 0xe3, 0x8e, 0x53, 0x37, 0xda, 0xdb, 0xf0, 0xb7, 0xa9, 0x27, 0xdd, - 0x09, 0x5a, 0xab, 0xab, 0x9a, 0x85, 0x98, 0xc4, 0x25, 0xbf, 0x60, 0xc1, 0x78, 0x4b, 0x59, 0xb5, - 0xb0, 0xdb, 0x52, 0xe9, 0x49, 0x30, 0x97, 0xe9, 0x77, 0xcb, 0xa4, 0x2c, 0x04, 0x7e, 0x02, 0x84, - 0x49, 0xde, 0xf6, 0xb7, 0x2d, 0x98, 0x4c, 0x57, 0x23, 0xdb, 0xf0, 0x4c, 0xdb, 0x09, 0xb6, 0x6f, - 0x7a, 0x5b, 0x01, 0x8f, 0xfd, 0x8b, 0xc4, 0x57, 0x9d, 0xdb, 0x8a, 0x68, 0xb0, 0xe0, 0xec, 0x89, - 0x08, 0x9f, 0xa2, 0xce, 0xa8, 0xf4, 0xcc, 0xca, 0x61, 0xc8, 0x78, 0x38, 0x2d, 0x52, 0x85, 0x0b, - 0x0c, 0x61, 0x81, 0xb6, 0x28, 0x93, 0x50, 0x31, 0x93, 0x02, 0x67, 0xa2, 0x7d, 0xd8, 0x2b, 0x59, - 0x48, 0x98, 0x5d, 0xd7, 0xfe, 0x77, 0x05, 0x50, 0xfb, 0xe7, 0x8f, 0xb6, 0x4d, 0x96, 0xd8, 0x30, - 0x14, 0xf0, 0x93, 0xac, 0x3c, 0x9e, 0x71, 0x55, 0x46, 0x9c, 0x6d, 0x51, 0x96, 0x30, 0xc5, 0x82, - 0xde, 0x73, 0xa3, 0x79, 0xbf, 0xae, 0x0e, 0x65, 0x5c, 0xb1, 0xb8, 0x2e, 0x61, 0xa8, 0x4b, 0xed, - 0x9f, 0xb5, 0x60, 0x9c, 0xf5, 0xb2, 0xd5, 0xa2, 0xad, 0x6a, 0x44, 0x3b, 0x21, 0x09, 0xa1, 0x18, - 0xb2, 0x1f, 0xf9, 0x99, 0x08, 0xe2, 0x20, 0x77, 0xda, 0x31, 0x8c, 0xa1, 0x8c, 0x09, 0x0a, 0x5e, - 0xf6, 0x7f, 0x2f, 0xc0, 0x88, 0x1e, 0xec, 0x23, 0x58, 0x58, 0xaf, 0xc6, 0xd7, 0xca, 0x85, 0x0c, - 0x2c, 0x1b, 0x57, 0xca, 0xd9, 0x49, 0x6a, 0xce, 0xdb, 0x13, 0xb7, 0x54, 0xe3, 0xfb, 0xe5, 0x2f, - 0x25, 0xfd, 0x0d, 0x17, 0x4d, 0x23, 0xb6, 0x81, 0x2f, 0x1d, 0x0f, 0xf7, 0x4c, 0x77, 0xcf, 0x60, - 0x5e, 0xfb, 0x89, 0x76, 0xec, 0xf4, 0xf7, 0xf3, 0xa4, 0x72, 0x23, 0x15, 0x8f, 0x94, 0x1b, 0xe9, - 0x0a, 0x0c, 0x52, 0xaf, 0xdb, 0xe6, 0x11, 0xcf, 0x23, 0x5c, 0x93, 0x1a, 0xbc, 0xee, 0x75, 0xdb, - 0xc9, 0x9e, 0x71, 0x14, 0xfb, 0x9f, 0x59, 0xc0, 0xf4, 0xf1, 0x1b, 0xf3, 0xe4, 0x2f, 0x43, 0x29, - 0x94, 0x5a, 0x80, 0x1c, 0xea, 0x1f, 0xd3, 0x41, 0x75, 0x12, 0x7e, 0x7f, 0x7f, 0x7a, 0x9c, 0x23, - 0x2b, 0x00, 0xea, 0x2a, 0xa4, 0x05, 0xe3, 0xdc, 0x8e, 0xa8, 0x24, 0xb9, 0xb4, 0xfc, 0x5e, 0x3b, - 0xe2, 0x3d, 0x25, 0xb3, 0xaa, 0x94, 0x6b, 0x26, 0x08, 0x93, 0xc4, 0xed, 0xdf, 0x1b, 0x04, 0xc3, - 0xdc, 0x76, 0x84, 0x29, 0xf2, 0x6e, 0xca, 0xb8, 0xba, 0x92, 0x8b, 0x71, 0x55, 0x59, 0x2c, 0xc5, - 0xb2, 0x4b, 0xda, 0x53, 0x59, 0xa3, 0x9a, 0xb4, 0xd5, 0x91, 0x13, 0x4c, 0x37, 0x6a, 0x89, 0xb6, - 0x3a, 0xc8, 0x4b, 0x74, 0xc4, 0xf5, 0x60, 0xdf, 0x88, 0xeb, 0x26, 0x14, 0x1b, 0x4e, 0xb7, 0x41, - 0xa5, 0x23, 0x3d, 0x07, 0x3b, 0x3a, 0x0f, 0x41, 0x13, 0x76, 0x74, 0xfe, 0x13, 0x05, 0x03, 0x36, - 0xc3, 0x9b, 0xca, 0x19, 0x27, 0x4d, 0x29, 0x39, 0xcc, 0x70, 0xed, 0xdf, 0x13, 0x33, 0x5c, 0xff, - 0xc5, 0x98, 0x19, 0x3b, 0x69, 0xd5, 0xc4, 0xf5, 0x46, 0xb9, 0x55, 0xde, 0xcc, 0x23, 0xa4, 0x9c, - 0x13, 0x14, 0x27, 0x2d, 0xf9, 0x07, 0x15, 0x1b, 0x7b, 0x16, 0x46, 0x8d, 0x2c, 0x41, 0xec, 0x33, - 0xe8, 0x9b, 0x75, 0xc6, 0x67, 0x58, 0x70, 0x22, 0x07, 0x79, 0x89, 0xfd, 0xf7, 0x06, 0x40, 0x9f, - 0x78, 0xcd, 0x00, 0x68, 0xa7, 0x66, 0x5c, 0xaf, 0x4f, 0xdc, 0xbc, 0xf1, 0x3d, 0x94, 0xa5, 0x4c, - 0x9d, 0x68, 0xd3, 0xa0, 0xa1, 0x75, 0x6c, 0x29, 0xa3, 0xb4, 0x3a, 0xb1, 0x62, 0x16, 0x62, 0x12, - 0x97, 0xe9, 0x82, 0x6d, 0xc7, 0x73, 0xb7, 0x68, 0x18, 0xa5, 0xe3, 0x58, 0x56, 0x24, 0x1c, 0x35, - 0x06, 0xb9, 0x01, 0x67, 0x43, 0x1a, 0xad, 0xed, 0x7a, 0x34, 0xd0, 0x37, 0x82, 0xe4, 0x15, 0x31, - 0x1d, 0xdb, 0x55, 0x4d, 0x23, 0x60, 0x6f, 0x1d, 0xb2, 0x00, 0x93, 0xf2, 0x76, 0x96, 0xbe, 0x5c, - 0x23, 0x65, 0x8f, 0xce, 0xeb, 0x56, 0x4d, 0x95, 0x63, 0x4f, 0x0d, 0x46, 0x65, 0xcb, 0x71, 0x5b, - 0xdd, 0x80, 0xc6, 0x54, 0x86, 0x92, 0x54, 0x16, 0x53, 0xe5, 0xd8, 0x53, 0x83, 0x87, 0x17, 0xb6, - 0x9c, 0x46, 0x58, 0x1e, 0x36, 0xc2, 0x0b, 0x19, 0x00, 0x05, 0xdc, 0xfe, 0xc7, 0x16, 0x8c, 0x23, - 0x8d, 0x82, 0xbd, 0xb9, 0xad, 0x2d, 0xd7, 0x73, 0xa3, 0x3d, 0xf2, 0x6b, 0x16, 0x4c, 0x7a, 0x7e, - 0x9d, 0xce, 0x79, 0x91, 0xab, 0x80, 0xf9, 0xa5, 0x50, 0xe1, 0xbc, 0x56, 0x53, 0xe4, 0xc5, 0x45, - 0xaf, 0x34, 0x14, 0x7b, 0x9a, 0x61, 0x5f, 0x82, 0x0b, 0x99, 0x04, 0xec, 0x6f, 0x0f, 0xc8, 0x6e, - 0xe8, 0x8f, 0xff, 0x3a, 0x14, 0x5b, 0xfc, 0xd2, 0x9b, 0xf5, 0x90, 0x39, 0x19, 0xf8, 0x58, 0x89, - 0x5b, 0x71, 0x82, 0x12, 0x59, 0x80, 0xd1, 0x80, 0xf1, 0x90, 0x57, 0x12, 0xc5, 0x54, 0xb4, 0xe3, - 0x1c, 0x73, 0xba, 0xe8, 0x7e, 0xf2, 0x2f, 0x9a, 0xd5, 0xc8, 0x7b, 0x30, 0xbc, 0x29, 0xd2, 0x4c, - 0xe4, 0x67, 0xd8, 0x96, 0x79, 0x2b, 0xf8, 0x4e, 0xac, 0x92, 0x58, 0xdc, 0x8f, 0x7f, 0xa2, 0xe2, - 0x48, 0xf6, 0xa0, 0xe4, 0xa8, 0x6f, 0x3a, 0x98, 0x57, 0x40, 0x5a, 0x62, 0xfe, 0x08, 0xfd, 0x48, - 0x7f, 0x43, 0xcd, 0x8e, 0x6d, 0xc6, 0x34, 0x4e, 0xb3, 0x97, 0xda, 0x8c, 0x8d, 0x14, 0x7b, 0x06, - 0x96, 0xfd, 0x0d, 0x0b, 0x20, 0x4e, 0x40, 0x45, 0xee, 0x41, 0x29, 0xbc, 0x96, 0x38, 0x98, 0xe6, - 0x71, 0xc7, 0x47, 0x52, 0x34, 0xe2, 0xe0, 0x25, 0x04, 0x35, 0xb7, 0x07, 0x1d, 0xa6, 0xff, 0x97, - 0x05, 0xe7, 0xb3, 0x12, 0x65, 0x3d, 0xc6, 0x16, 0x1f, 0xf7, 0x1c, 0x2d, 0x2b, 0xac, 0x07, 0x74, - 0xcb, 0xbd, 0x97, 0x76, 0x69, 0x2f, 0xab, 0x02, 0x8c, 0x71, 0xec, 0x6f, 0x0e, 0x81, 0x66, 0x7c, - 0x42, 0xe7, 0xee, 0x17, 0x98, 0x86, 0xde, 0x88, 0xd3, 0x9f, 0x68, 0x3c, 0xe4, 0x50, 0x94, 0xa5, - 0x4c, 0x4b, 0x57, 0x01, 0xbb, 0x52, 0x64, 0xf3, 0x59, 0xa8, 0x62, 0x7b, 0x51, 0x97, 0x66, 0x9d, - 0xe4, 0x8b, 0xa7, 0x72, 0x92, 0x1f, 0xca, 0xff, 0x24, 0x7f, 0x05, 0x86, 0x03, 0xbf, 0x45, 0xe7, - 0x70, 0x55, 0xba, 0x41, 0xe2, 0xb4, 0x3d, 0x02, 0x8c, 0xaa, 0x9c, 0xbc, 0x02, 0xa3, 0xdd, 0x90, - 0x56, 0x17, 0x96, 0xe7, 0x03, 0x5a, 0x0f, 0x65, 0x0c, 0xb4, 0x76, 0x47, 0xdd, 0x8e, 0x8b, 0xd0, - 0xc4, 0x23, 0xdf, 0xb4, 0x0e, 0x31, 0x16, 0x8c, 0xe4, 0xb5, 0x27, 0x64, 0x26, 0x5c, 0xa8, 0x3c, - 0xfd, 0x90, 0x16, 0x88, 0xaf, 0x59, 0x70, 0x96, 0x7a, 0xb5, 0x60, 0x8f, 0xd3, 0x91, 0xd4, 0xa4, - 0x4b, 0xe6, 0x76, 0x1e, 0x8b, 0xef, 0x7a, 0x9a, 0xb8, 0xb0, 0xb7, 0xf6, 0x80, 0xb1, 0xb7, 0x19, - 0xf6, 0x1f, 0x15, 0xe0, 0x5c, 0x06, 0x05, 0x1e, 0x2f, 0xda, 0x66, 0x13, 0xe8, 0x66, 0x3d, 0xbd, - 0x7c, 0x96, 0x25, 0x1c, 0x35, 0x06, 0x59, 0x87, 0xf3, 0xdb, 0xed, 0x30, 0xa6, 0x32, 0xef, 0x7b, - 0x11, 0xbd, 0xa7, 0x16, 0x93, 0xf2, 0xae, 0x9c, 0x5f, 0xce, 0xc0, 0xc1, 0xcc, 0x9a, 0x4c, 0xdb, - 0xa0, 0x9e, 0xb3, 0xd9, 0xa2, 0x71, 0x91, 0x8c, 0x76, 0xd6, 0xda, 0xc6, 0xf5, 0x54, 0x39, 0xf6, - 0xd4, 0x20, 0x1f, 0x5a, 0xf0, 0x54, 0x48, 0x83, 0x1d, 0x1a, 0x54, 0xdd, 0x3a, 0x9d, 0xef, 0x86, - 0x91, 0xdf, 0xa6, 0xc1, 0x43, 0x5a, 0xb3, 0xa6, 0x0f, 0xf6, 0xa7, 0x9f, 0xaa, 0xf6, 0xa7, 0x86, - 0x87, 0xb1, 0xb2, 0x3f, 0xb4, 0xe0, 0x4c, 0xb5, 0x16, 0xb8, 0x9d, 0x38, 0x8d, 0x4a, 0xde, 0x59, - 0x5e, 0x5e, 0xd0, 0x37, 0xdf, 0x52, 0x42, 0x2c, 0x79, 0x57, 0xcd, 0x7e, 0x07, 0x26, 0xab, 0xb4, - 0xed, 0x74, 0x9a, 0xfc, 0x22, 0x81, 0x70, 0xe2, 0xcf, 0xc2, 0x48, 0xa8, 0x60, 0xe9, 0x34, 0x79, - 0x1a, 0x19, 0x63, 0x1c, 0xf2, 0xbc, 0x08, 0x38, 0x50, 0xe1, 0x9f, 0x23, 0x42, 0x3b, 0x17, 0x51, - 0x0a, 0x21, 0xaa, 0x32, 0x7b, 0x17, 0xc6, 0xe2, 0xea, 0x74, 0x8b, 0x34, 0x60, 0xa2, 0x66, 0xc4, - 0x0a, 0xc7, 0x81, 0x8d, 0x47, 0x0f, 0x2b, 0xe6, 0xb2, 0x68, 0x3e, 0x49, 0x04, 0xd3, 0x54, 0xed, - 0x5f, 0x2a, 0xc0, 0x84, 0xe6, 0x2c, 0x4d, 0xe9, 0x1f, 0xa4, 0x83, 0x24, 0x30, 0x8f, 0x1b, 0xb9, - 0xc9, 0x91, 0x3c, 0x24, 0x50, 0xe2, 0x83, 0x74, 0xa0, 0xc4, 0x89, 0xb2, 0xef, 0xf1, 0x0e, 0x7c, - 0xa3, 0x00, 0x25, 0x7d, 0x3f, 0xf8, 0x75, 0x28, 0xf2, 0x03, 0xd4, 0xa3, 0x69, 0xa3, 0xfc, 0x30, - 0x86, 0x82, 0x12, 0x23, 0xc9, 0x3d, 0xc4, 0x0f, 0x9d, 0x74, 0x6c, 0x44, 0xd8, 0x8e, 0x9c, 0x20, - 0x42, 0x41, 0x89, 0x2c, 0xc3, 0x00, 0xf5, 0xea, 0x52, 0x2d, 0x3d, 0x3e, 0x41, 0x9e, 0x22, 0xf2, - 0xba, 0x57, 0x47, 0x46, 0x85, 0x67, 0xe8, 0x11, 0xda, 0xc7, 0x60, 0x72, 0x79, 0x48, 0xd5, 0x43, - 0x96, 0xda, 0xbf, 0x30, 0x00, 0x43, 0xd5, 0xee, 0x26, 0x53, 0xb0, 0xbf, 0x6e, 0xc1, 0xb9, 0xdd, - 0x54, 0x42, 0xaa, 0x78, 0xca, 0xde, 0xce, 0x3f, 0xdb, 0x17, 0xd2, 0xad, 0xca, 0x53, 0xb2, 0x5d, - 0xe7, 0x32, 0x0a, 0x31, 0xab, 0x39, 0x89, 0xe4, 0x3d, 0x03, 0x27, 0x94, 0xe6, 0xec, 0x64, 0xc3, - 0x33, 0xc7, 0xfb, 0x86, 0x66, 0xfe, 0xd9, 0x20, 0x80, 0xf8, 0x1a, 0x6b, 0x9d, 0xe8, 0x28, 0xc6, - 0xa1, 0x57, 0x61, 0x4c, 0xbd, 0x33, 0xb0, 0x1a, 0x87, 0xc4, 0x68, 0xb7, 0xe8, 0x0d, 0xa3, 0x0c, - 0x13, 0x98, 0xfc, 0x40, 0xe0, 0x45, 0xc1, 0x9e, 0x50, 0x1a, 0x07, 0x53, 0x07, 0x02, 0x5d, 0x82, - 0x06, 0x16, 0x99, 0x49, 0x18, 0xac, 0x45, 0x22, 0x83, 0x33, 0x87, 0xd8, 0x97, 0x3f, 0x09, 0xe3, - 0xfa, 0xdf, 0xa2, 0xdb, 0xa2, 0x69, 0x77, 0xc4, 0xba, 0x59, 0x88, 0x49, 0x5c, 0xf2, 0x29, 0x38, - 0x93, 0xbc, 0x8f, 0x28, 0xd5, 0x2c, 0x7d, 0x1b, 0x38, 0x79, 0x8d, 0x11, 0x53, 0xd8, 0x6c, 0x05, - 0xd4, 0x83, 0x3d, 0xec, 0x7a, 0x52, 0xdf, 0xd2, 0x2b, 0x60, 0x81, 0x43, 0x51, 0x96, 0xb2, 0x21, - 0x14, 0x5b, 0x99, 0x80, 0xcb, 0x0b, 0x65, 0x7a, 0x08, 0xab, 0x46, 0x19, 0x26, 0x30, 0x19, 0x07, - 0x69, 0x99, 0x83, 0xe4, 0x1a, 0x4b, 0x99, 0xd3, 0x3a, 0x70, 0xc6, 0x4f, 0x1a, 0x36, 0x44, 0x10, - 0xc9, 0xc7, 0x8f, 0x38, 0x6f, 0x13, 0x75, 0xc5, 0x05, 0x88, 0x94, 0x1d, 0x24, 0x45, 0x9f, 0x29, - 0x9c, 0x66, 0x90, 0xe8, 0x58, 0x32, 0xfe, 0xa9, 0x5f, 0x1c, 0xa7, 0x7d, 0x0e, 0xce, 0x56, 0xbb, - 0x9d, 0x4e, 0xcb, 0xa5, 0x75, 0x6d, 0xd1, 0xb5, 0x7f, 0x0a, 0x26, 0x64, 0x6e, 0x1e, 0xbd, 0x97, - 0x1f, 0x2b, 0x41, 0xa3, 0xfd, 0xa7, 0x16, 0x4c, 0xa4, 0xbc, 0xbd, 0xe4, 0xbd, 0xf4, 0x0e, 0x9c, - 0x8b, 0x81, 0xde, 0xdc, 0x7c, 0xc5, 0x2a, 0xcb, 0xdc, 0xcd, 0x9b, 0x2a, 0x36, 0x31, 0xb7, 0x10, - 0x5f, 0x1e, 0xc1, 0x27, 0x44, 0xba, 0x19, 0xe0, 0x68, 0x7f, 0xb9, 0x00, 0xd9, 0x2e, 0x76, 0xf2, - 0xf9, 0xde, 0x01, 0x78, 0x3d, 0xc7, 0x01, 0x90, 0x3e, 0xfe, 0xfe, 0x63, 0xe0, 0x25, 0xc7, 0x60, - 0x25, 0xa7, 0x31, 0x90, 0x7c, 0x7b, 0x47, 0xe2, 0x4f, 0x2c, 0x18, 0xdd, 0xd8, 0xb8, 0xa5, 0x0d, - 0x44, 0x08, 0x17, 0x43, 0x71, 0x5b, 0x87, 0xfb, 0xc6, 0xe6, 0xfd, 0x76, 0x47, 0xb8, 0xca, 0xa4, - 0x0b, 0x8f, 0xa7, 0x49, 0xaa, 0x66, 0x62, 0x60, 0x9f, 0x9a, 0xe4, 0x26, 0x9c, 0x33, 0x4b, 0xa4, - 0x99, 0x4f, 0xba, 0xeb, 0xc4, 0xfd, 0xd5, 0xde, 0x62, 0xcc, 0xaa, 0x93, 0x26, 0x25, 0x6d, 0x7d, - 0xf2, 0x05, 0x8b, 0x1e, 0x52, 0xb2, 0x18, 0xb3, 0xea, 0xd8, 0x6b, 0x30, 0x6a, 0xbc, 0xa7, 0x42, - 0x3e, 0x0d, 0x93, 0x35, 0xbf, 0xad, 0x6c, 0x2c, 0xb7, 0xe8, 0x0e, 0x6d, 0xc9, 0x2e, 0x73, 0x33, - 0xdc, 0x7c, 0xaa, 0x0c, 0x7b, 0xb0, 0xed, 0x2f, 0x5d, 0x06, 0x7d, 0xa9, 0xe0, 0x08, 0x5b, 0x44, - 0x47, 0x07, 0x1f, 0x15, 0x73, 0x0e, 0x3e, 0xd2, 0xf2, 0x2e, 0x15, 0x80, 0x14, 0xc5, 0x01, 0x48, - 0x43, 0x79, 0x07, 0x20, 0x69, 0x8d, 0xaf, 0x27, 0x08, 0xe9, 0x57, 0x2c, 0x18, 0xf3, 0xfc, 0x3a, - 0xd5, 0x6e, 0x9c, 0x61, 0xae, 0x76, 0xbe, 0x9d, 0x5f, 0x54, 0xa5, 0x08, 0xa6, 0x91, 0xe4, 0x45, - 0x88, 0x9a, 0xde, 0x26, 0xcc, 0x22, 0x4c, 0xb4, 0x83, 0x2c, 0x1a, 0x56, 0x3f, 0x91, 0x1b, 0xe7, - 0xe9, 0x2c, 0xf5, 0xff, 0x81, 0x26, 0xbc, 0x7b, 0x86, 0xe2, 0x33, 0x92, 0x97, 0x35, 0x4b, 0xc5, - 0xd9, 0x1b, 0xc6, 0x79, 0x95, 0xe9, 0x2b, 0x56, 0x88, 0x6c, 0x18, 0x12, 0xb1, 0x6c, 0xf2, 0x65, - 0x0f, 0xee, 0x33, 0x12, 0x71, 0x6e, 0x28, 0x4b, 0x48, 0xa4, 0xdc, 0xad, 0xa3, 0x79, 0x25, 0xc8, - 0x4c, 0xb8, 0x73, 0xb3, 0xfd, 0xad, 0xe4, 0x35, 0xf3, 0x54, 0x39, 0x76, 0x94, 0x53, 0xe5, 0x78, - 0xdf, 0x13, 0xe5, 0x57, 0x2c, 0x18, 0xab, 0x19, 0x19, 0x40, 0xcb, 0x2f, 0xe6, 0x95, 0xe6, 0x36, - 0x2b, 0xaf, 0xa8, 0xb8, 0xb5, 0x66, 0x96, 0x60, 0x82, 0x3b, 0x4f, 0xed, 0xc2, 0x8f, 0xd0, 0x3c, - 0xb8, 0x70, 0xf4, 0xea, 0x7a, 0x0e, 0xdb, 0x43, 0xe2, 0x48, 0x2e, 0x3e, 0xa3, 0x80, 0xa1, 0xe4, - 0x45, 0xde, 0x87, 0x92, 0x0a, 0x87, 0x94, 0xc1, 0x8a, 0x98, 0x87, 0x89, 0x3a, 0xe9, 0x80, 0x52, - 0x09, 0x21, 0x04, 0x14, 0x35, 0x47, 0xd2, 0x84, 0x81, 0xba, 0xd3, 0x90, 0x61, 0x8b, 0x2b, 0xf9, - 0xe4, 0xdb, 0x51, 0x3c, 0xf9, 0xf9, 0x68, 0x61, 0xee, 0x06, 0x32, 0x16, 0xe4, 0x5e, 0x9c, 0x88, - 0x70, 0x32, 0xb7, 0xdd, 0x37, 0xa9, 0x26, 0x09, 0x23, 0x41, 0x4f, 0x5e, 0xc3, 0xba, 0xf4, 0xd9, - 0xfd, 0x39, 0xce, 0x76, 0x31, 0x9f, 0x84, 0x3d, 0xe2, 0x29, 0x84, 0xd8, 0xef, 0xc7, 0xb8, 0xf0, - 0x27, 0x60, 0x7e, 0x22, 0x2f, 0x2e, 0x4b, 0x1b, 0x1b, 0xeb, 0x3d, 0x4f, 0xbf, 0x5c, 0x87, 0x61, - 0x91, 0x4a, 0x56, 0x04, 0x72, 0x8e, 0x5e, 0x9d, 0xea, 0x9f, 0x90, 0x36, 0x16, 0xdd, 0xe2, 0x7f, - 0x88, 0xaa, 0x2e, 0xf9, 0x25, 0x0b, 0xce, 0x30, 0x19, 0x17, 0xe7, 0xbe, 0x2d, 0x93, 0xbc, 0xa4, - 0xc8, 0xed, 0x90, 0xe9, 0x08, 0x6a, 0xf5, 0xeb, 0xc3, 0xc3, 0xcd, 0x04, 0x3b, 0x4c, 0xb1, 0x27, - 0x1f, 0x40, 0x29, 0x74, 0xeb, 0xb4, 0xe6, 0x04, 0x61, 0xf9, 0xdc, 0xc9, 0x34, 0x25, 0x76, 0x1f, - 0x48, 0x46, 0xa8, 0x59, 0x92, 0xbf, 0xc5, 0x33, 0xd5, 0xcb, 0x57, 0x45, 0xe4, 0x83, 0x57, 0xe7, - 0x4f, 0xec, 0xc1, 0x2b, 0x61, 0x55, 0x4f, 0xb2, 0xc3, 0x34, 0x7f, 0xf2, 0xd7, 0x2c, 0xb8, 0x20, - 0x32, 0x32, 0xa6, 0xd3, 0x71, 0x5e, 0x78, 0x48, 0x8b, 0x05, 0x8f, 0x40, 0x9d, 0xcb, 0x22, 0x89, - 0xd9, 0x9c, 0x78, 0x4a, 0xa7, 0xc0, 0x74, 0x34, 0xf2, 0x38, 0xe0, 0xfc, 0xdc, 0x68, 0xfa, 0xfd, - 0x2c, 0x1e, 0xc7, 0x91, 0x00, 0x61, 0x92, 0x31, 0x79, 0x19, 0x46, 0x3b, 0x72, 0x83, 0x72, 0xc3, - 0x36, 0x8f, 0x27, 0x1e, 0x10, 0x77, 0x2e, 0xd6, 0x63, 0x30, 0x9a, 0x38, 0x89, 0xfc, 0x5e, 0x57, - 0x0e, 0xcb, 0xef, 0x45, 0x6e, 0xc3, 0x68, 0xe4, 0xb7, 0x68, 0x20, 0xcf, 0x6f, 0x65, 0x3e, 0x03, - 0x2f, 0x67, 0xad, 0xad, 0x0d, 0x8d, 0x16, 0x9f, 0xef, 0x62, 0x58, 0x88, 0x26, 0x1d, 0x1e, 0x1e, - 0x28, 0x33, 0x5d, 0x06, 0xdc, 0x5c, 0xf0, 0x64, 0x2a, 0x3c, 0xd0, 0x2c, 0xc4, 0x24, 0x2e, 0xb9, - 0x01, 0x67, 0x3b, 0x81, 0xeb, 0x07, 0x6e, 0xb4, 0x37, 0xdf, 0x72, 0xc2, 0x90, 0x13, 0x10, 0x37, - 0x0a, 0xb4, 0x87, 0x7e, 0x3d, 0x8d, 0x80, 0xbd, 0x75, 0xd8, 0x30, 0x28, 0x60, 0xf9, 0x29, 0xae, - 0xf9, 0x8e, 0x89, 0xdb, 0x08, 0x02, 0x86, 0xba, 0xb4, 0x4f, 0xb6, 0xab, 0xa7, 0x1f, 0x26, 0xdb, - 0x15, 0xa9, 0xc3, 0xd3, 0x4e, 0x37, 0xf2, 0xf9, 0x95, 0xe9, 0x64, 0x15, 0x11, 0x29, 0xf9, 0xac, - 0x08, 0xbe, 0x3c, 0xd8, 0x9f, 0x7e, 0x7a, 0xee, 0x10, 0x3c, 0x3c, 0x94, 0x0a, 0xf9, 0x1c, 0x94, - 0xa8, 0xcc, 0xd8, 0x55, 0xfe, 0xb1, 0xbc, 0xb6, 0xed, 0x64, 0x0e, 0x30, 0x15, 0x02, 0x27, 0x60, - 0xa8, 0xf9, 0x91, 0x0d, 0x18, 0x6d, 0xfa, 0x61, 0x34, 0xd7, 0x72, 0x9d, 0x90, 0x86, 0xe5, 0x67, - 0xf8, 0xa4, 0xc9, 0xd4, 0x86, 0x96, 0x14, 0x5a, 0x3c, 0x67, 0x96, 0xe2, 0x9a, 0x68, 0x92, 0x21, - 0x94, 0x3b, 0xd3, 0x78, 0x98, 0xa8, 0x72, 0x74, 0x5c, 0xe6, 0x1d, 0x7b, 0x21, 0x8b, 0xf2, 0xba, - 0x5f, 0xaf, 0x26, 0xb1, 0xb5, 0x37, 0xcd, 0x04, 0x62, 0x9a, 0x26, 0x79, 0x15, 0xc6, 0x3a, 0x7e, - 0xbd, 0xda, 0xa1, 0xb5, 0x75, 0x27, 0xaa, 0x35, 0xcb, 0xd3, 0x49, 0x43, 0xd6, 0xba, 0x51, 0x86, - 0x09, 0x4c, 0xd2, 0x81, 0xe1, 0xb6, 0xb8, 0x2d, 0x59, 0x7e, 0x2e, 0xaf, 0xd3, 0x86, 0xbc, 0x7e, - 0x29, 0x76, 0x70, 0xf9, 0x07, 0x15, 0x1b, 0xf2, 0x0f, 0x2c, 0x98, 0x48, 0x45, 0xc8, 0x97, 0x7f, - 0x3c, 0x37, 0x25, 0x22, 0x49, 0xb8, 0xf2, 0x02, 0x1f, 0xbe, 0x24, 0xf0, 0x7e, 0x2f, 0x08, 0xd3, - 0x2d, 0x12, 0xe3, 0xc2, 0xaf, 0x3c, 0x97, 0x9f, 0xcf, 0x6f, 0x5c, 0x38, 0x41, 0x35, 0x2e, 0xfc, - 0x0f, 0x2a, 0x36, 0xe4, 0x0a, 0x0c, 0xcb, 0x44, 0x1c, 0xe5, 0x17, 0x92, 0x1e, 0x51, 0x99, 0xaf, - 0x03, 0x55, 0xf9, 0xd4, 0x4f, 0xc1, 0xd9, 0x9e, 0xc3, 0xd4, 0xb1, 0xee, 0xdd, 0xfe, 0xaa, 0x05, - 0xe6, 0xe5, 0xb6, 0xdc, 0xd3, 0xe4, 0xbe, 0x0a, 0x63, 0x35, 0xf1, 0x46, 0x83, 0xb8, 0x1e, 0x37, - 0x98, 0xb4, 0x0a, 0xce, 0x1b, 0x65, 0x98, 0xc0, 0xb4, 0x97, 0x80, 0xf4, 0xe6, 0x30, 0x4c, 0xc5, - 0x5f, 0x58, 0x47, 0x8a, 0xbf, 0xf8, 0x2d, 0x0b, 0xc6, 0x13, 0x3a, 0x43, 0xee, 0x4e, 0xb4, 0x45, - 0x20, 0x6d, 0x37, 0x08, 0xfc, 0xc0, 0x7c, 0x1e, 0x40, 0x26, 0x6d, 0xe3, 0x09, 0x6d, 0x56, 0x7a, - 0x4a, 0x31, 0xa3, 0x86, 0xfd, 0x4f, 0x07, 0x21, 0x8e, 0x01, 0xd5, 0xa9, 0xac, 0xac, 0xbe, 0xa9, - 0xac, 0x5e, 0x82, 0xd2, 0x3b, 0xa1, 0xef, 0xad, 0xc7, 0x09, 0xaf, 0xf4, 0xb7, 0x78, 0xad, 0xba, - 0xb6, 0xca, 0x31, 0x35, 0x06, 0xc7, 0x7e, 0x77, 0xd1, 0x6d, 0x45, 0xbd, 0x19, 0x91, 0x5e, 0x7b, - 0x5d, 0xc0, 0x51, 0x63, 0xf0, 0x07, 0x0c, 0x76, 0xa8, 0x36, 0x17, 0xc7, 0x0f, 0x18, 0x88, 0xf4, - 0xa4, 0xbc, 0x8c, 0xcc, 0xc2, 0x88, 0xb6, 0x36, 0x4b, 0xe3, 0xb7, 0x1e, 0x29, 0x6d, 0x95, 0xc6, - 0x18, 0x87, 0x2b, 0x84, 0xd2, 0x34, 0x2a, 0x8d, 0x1a, 0xd5, 0x3c, 0x0e, 0x0c, 0x29, 0x63, 0xab, - 0x90, 0xed, 0x0a, 0x8c, 0x9a, 0x65, 0x96, 0x27, 0x71, 0xe4, 0x24, 0x3c, 0x89, 0x66, 0x40, 0x72, - 0xf1, 0xa8, 0x01, 0xc9, 0xc9, 0xb9, 0x5d, 0x3a, 0xd2, 0xdc, 0xfe, 0xb9, 0x01, 0x18, 0xbe, 0x43, - 0x03, 0x9e, 0xa6, 0xef, 0x0a, 0x0c, 0xef, 0x88, 0x9f, 0xe9, 0x4b, 0x3f, 0x12, 0x03, 0x55, 0x39, - 0xfb, 0x6e, 0x9b, 0x5d, 0xb7, 0x55, 0x5f, 0x88, 0x57, 0xb1, 0xfe, 0x6e, 0x15, 0x55, 0x80, 0x31, - 0x0e, 0xab, 0xd0, 0x60, 0x9a, 0x7d, 0xbb, 0xed, 0x46, 0xe9, 0xb8, 0x9a, 0x1b, 0xaa, 0x00, 0x63, - 0x1c, 0xf2, 0x02, 0x0c, 0x35, 0xdc, 0x68, 0xc3, 0x69, 0xa4, 0x1d, 0x67, 0x37, 0x38, 0x14, 0x65, - 0x29, 0xf7, 0xbc, 0xb8, 0xd1, 0x46, 0x40, 0xb9, 0xad, 0xb5, 0xe7, 0xf6, 0xef, 0x0d, 0xa3, 0x0c, - 0x13, 0x98, 0xbc, 0x49, 0xbe, 0xec, 0x99, 0xf4, 0x88, 0xc4, 0x4d, 0x52, 0x05, 0x18, 0xe3, 0xb0, - 0xf9, 0x5f, 0xf3, 0xdb, 0x1d, 0xb7, 0x25, 0xe3, 0x4c, 0x8d, 0xf9, 0x3f, 0x2f, 0xe1, 0xa8, 0x31, - 0x18, 0x36, 0x13, 0x61, 0x4c, 0xfc, 0xa4, 0x93, 0xc5, 0xaf, 0x4b, 0x38, 0x6a, 0x0c, 0xfb, 0x0e, - 0x8c, 0x8b, 0x95, 0x3c, 0xdf, 0x72, 0xdc, 0xf6, 0x8d, 0x79, 0x72, 0xbd, 0x27, 0x98, 0xfa, 0x4a, - 0x46, 0x30, 0xf5, 0x85, 0x44, 0xa5, 0xde, 0xa0, 0x6a, 0xfb, 0x3b, 0x05, 0x28, 0x9d, 0xe2, 0x7b, - 0x1b, 0x9d, 0xc4, 0x7b, 0x1b, 0x79, 0xbf, 0xba, 0x90, 0xf5, 0xd6, 0xc6, 0xbd, 0xd4, 0x5b, 0x1b, - 0xeb, 0x79, 0xde, 0x2f, 0x38, 0xf4, 0x9d, 0x8d, 0x1f, 0x58, 0x70, 0x5e, 0xa1, 0x72, 0xa1, 0x56, - 0x71, 0x3d, 0xee, 0x72, 0x3f, 0xf9, 0x61, 0x7e, 0x3f, 0x31, 0xcc, 0x6f, 0xe6, 0xd7, 0x65, 0xb3, - 0x1f, 0x7d, 0x1f, 0x81, 0xfa, 0xbe, 0x05, 0xe5, 0xac, 0x0a, 0xa7, 0xf0, 0xd0, 0xc8, 0x7b, 0xc9, - 0x87, 0x46, 0xee, 0x9c, 0x4c, 0xcf, 0xfb, 0x3c, 0x38, 0xf2, 0x83, 0x3e, 0xfd, 0xe6, 0xaf, 0x7b, - 0xb4, 0xd4, 0x76, 0x67, 0xe5, 0xe5, 0xcc, 0x12, 0x2c, 0xb2, 0xf7, 0xcd, 0x16, 0x0c, 0x85, 0xdc, - 0x3f, 0x2d, 0xa7, 0xc0, 0x52, 0x1e, 0x9b, 0x20, 0xa3, 0x27, 0x8d, 0x91, 0xfc, 0x37, 0x4a, 0x1e, - 0xf6, 0x7f, 0xb2, 0x60, 0xec, 0x14, 0x5f, 0x93, 0xf1, 0x93, 0x1f, 0xf9, 0xb5, 0xfc, 0x3e, 0x72, - 0x9f, 0x0f, 0xfb, 0xeb, 0x97, 0x21, 0xf1, 0x70, 0x0b, 0x79, 0x0f, 0x46, 0x94, 0x06, 0xaa, 0xee, - 0x2d, 0xe5, 0xf9, 0x3e, 0x83, 0xde, 0x66, 0x14, 0x24, 0xc4, 0x98, 0x5f, 0x2a, 0x22, 0xa0, 0x70, - 0xa4, 0x88, 0x80, 0xc7, 0xfb, 0xba, 0x43, 0xb6, 0x7d, 0x60, 0xf0, 0x44, 0xec, 0x03, 0x4f, 0xe7, - 0x6e, 0x1f, 0x78, 0xe6, 0x94, 0xed, 0x03, 0x86, 0xb1, 0xb6, 0xf8, 0x08, 0xc6, 0xda, 0xf7, 0xe0, - 0xfc, 0x4e, 0xbc, 0xf9, 0xeb, 0x99, 0x24, 0x1f, 0xa9, 0xb8, 0x92, 0x69, 0x15, 0x60, 0x8a, 0x4c, - 0x18, 0x51, 0x2f, 0x32, 0xd4, 0x86, 0x38, 0x52, 0xf2, 0x4e, 0x06, 0x39, 0xcc, 0x64, 0x92, 0xb6, - 0xba, 0x0d, 0x1f, 0xc1, 0xea, 0xf6, 0x8f, 0xfa, 0xbe, 0x4c, 0x5b, 0x3a, 0xd9, 0x97, 0x69, 0x9f, - 0x3c, 0xf6, 0xab, 0xb4, 0xcf, 0xc7, 0x4e, 0x09, 0x11, 0x85, 0x92, 0xed, 0x41, 0xf8, 0x5a, 0xda, - 0xd3, 0x09, 0x7c, 0xe8, 0x3f, 0x9b, 0xaf, 0xd6, 0x93, 0x83, 0xb7, 0x73, 0xf4, 0x11, 0xbc, 0x9d, - 0x29, 0x13, 0xe8, 0x58, 0x4e, 0x26, 0x50, 0x0f, 0x26, 0xdd, 0xb6, 0xd3, 0xa0, 0xeb, 0xdd, 0x56, - 0x4b, 0x04, 0xab, 0xaa, 0x17, 0x34, 0x32, 0x4f, 0x52, 0xb7, 0xfc, 0x9a, 0xd3, 0x4a, 0x3f, 0x54, - 0xa4, 0x83, 0x72, 0x6f, 0xa6, 0x28, 0x61, 0x0f, 0x6d, 0x36, 0x61, 0x79, 0x36, 0x0a, 0x1a, 0xb1, - 0xd1, 0xe6, 0x2e, 0x35, 0xf9, 0x84, 0xf8, 0x52, 0x0c, 0x46, 0x13, 0x87, 0x2c, 0xc3, 0x48, 0xdd, - 0x0b, 0xe5, 0x35, 0x97, 0x09, 0x2e, 0xcc, 0x3e, 0xc6, 0x44, 0xe0, 0xc2, 0x6a, 0x55, 0x5f, 0x70, - 0x79, 0x3a, 0x23, 0xd1, 0x89, 0x2e, 0xc7, 0xb8, 0x3e, 0x59, 0xe1, 0xc4, 0x64, 0x12, 0x64, 0xe1, - 0xe9, 0x7a, 0xb6, 0x8f, 0xe1, 0x6e, 0x61, 0x55, 0xa5, 0x71, 0x1e, 0x97, 0xec, 0x64, 0x36, 0xe3, - 0x98, 0x82, 0xf1, 0x92, 0xc9, 0xd9, 0x43, 0x5f, 0x32, 0xe1, 0x19, 0x8e, 0xa2, 0x96, 0x36, 0xd3, - 0x5f, 0xce, 0x2d, 0xc3, 0x51, 0x1c, 0x43, 0x22, 0x33, 0x1c, 0xc5, 0x00, 0x34, 0x59, 0x92, 0xb5, - 0x7e, 0xee, 0x8a, 0x73, 0x5c, 0x68, 0x1c, 0xdf, 0xf9, 0x60, 0xda, 0xad, 0xcf, 0x1f, 0x6a, 0xb7, - 0xee, 0xb1, 0xb3, 0x5f, 0x38, 0x86, 0x9d, 0xbd, 0xc9, 0x73, 0xcf, 0xdc, 0x98, 0x97, 0xae, 0x8d, - 0x1c, 0x14, 0x3a, 0x7e, 0xf1, 0x55, 0xc4, 0xe4, 0xf0, 0x9f, 0x28, 0x18, 0x90, 0x75, 0x38, 0xdf, - 0xf1, 0xeb, 0x3d, 0x36, 0x7b, 0xee, 0xcb, 0x30, 0x02, 0xd9, 0xd7, 0x33, 0x70, 0x30, 0xb3, 0x26, - 0x17, 0xcf, 0x31, 0x9c, 0x27, 0x31, 0x2a, 0x4a, 0xf1, 0x1c, 0x83, 0xd1, 0xc4, 0x49, 0x5b, 0xad, - 0x9f, 0x3c, 0x31, 0xab, 0xf5, 0xd4, 0x29, 0x58, 0xad, 0x9f, 0x3a, 0xb2, 0xd5, 0xfa, 0x03, 0x38, - 0xd7, 0xf1, 0xeb, 0x0b, 0x6e, 0x18, 0x74, 0x79, 0xf4, 0x7e, 0xa5, 0x5b, 0x6f, 0xd0, 0x88, 0x9b, - 0xbd, 0x47, 0xaf, 0x5e, 0x35, 0x1b, 0xd9, 0xe1, 0x0b, 0x79, 0x66, 0xe7, 0xe5, 0x4d, 0x1a, 0x89, - 0x8f, 0x99, 0xae, 0xc5, 0x0f, 0x4c, 0x3c, 0x28, 0x29, 0xa3, 0x10, 0xb3, 0xf8, 0x98, 0x46, 0xf3, - 0x67, 0x4f, 0xc7, 0x68, 0xfe, 0x69, 0x28, 0x85, 0xcd, 0x6e, 0x54, 0xf7, 0x77, 0x3d, 0xee, 0x19, - 0x19, 0xd1, 0x6f, 0x19, 0x96, 0xaa, 0x12, 0x7e, 0x7f, 0x7f, 0x7a, 0x52, 0xfd, 0x36, 0x4c, 0x0a, - 0x12, 0x42, 0x7e, 0xa3, 0x4f, 0x7c, 0xb2, 0x7d, 0x92, 0xf1, 0xc9, 0x97, 0x8e, 0x15, 0x9b, 0x9c, - 0xe5, 0x19, 0x78, 0xee, 0x87, 0xce, 0x33, 0xf0, 0x6b, 0x16, 0x8c, 0xef, 0x98, 0xf6, 0x1b, 0xe9, - 0xbd, 0xc8, 0xc1, 0x8b, 0x9a, 0x30, 0x0b, 0x55, 0x6c, 0x26, 0xec, 0x12, 0xa0, 0xfb, 0x69, 0x00, - 0x26, 0x5b, 0x92, 0xe1, 0xe1, 0x7d, 0xfe, 0x71, 0x79, 0x78, 0x3f, 0xe0, 0xc2, 0x4c, 0x85, 0x43, - 0x71, 0x97, 0x46, 0xbe, 0x21, 0x57, 0x4a, 0x30, 0xea, 0x88, 0x2b, 0x93, 0x1f, 0xf9, 0x8a, 0x05, - 0x93, 0xea, 0x70, 0x26, 0xed, 0xaf, 0xa1, 0x0c, 0x1a, 0xc9, 0xf3, 0x4c, 0xc8, 0xa3, 0x0e, 0x37, - 0x52, 0x7c, 0xb0, 0x87, 0x33, 0x13, 0xed, 0x3a, 0x22, 0xa0, 0x11, 0xf2, 0xd8, 0x28, 0xa9, 0xc8, - 0xcc, 0xc5, 0x60, 0x34, 0x71, 0x1e, 0xdd, 0xc9, 0xf3, 0x87, 0x04, 0xce, 0xa4, 0x5e, 0x96, 0xfc, - 0x78, 0x32, 0xeb, 0xe5, 0xe5, 0x74, 0xea, 0xc1, 0x71, 0x85, 0x9f, 0x48, 0x3f, 0x98, 0xc8, 0x0f, - 0x58, 0x38, 0xd1, 0xfc, 0x80, 0x03, 0xa7, 0x93, 0x1f, 0x70, 0xf2, 0x24, 0xf2, 0x03, 0x9e, 0x3d, - 0x56, 0x7e, 0x40, 0x23, 0x3f, 0xe3, 0xe0, 0x03, 0xf2, 0x33, 0xce, 0xc1, 0x84, 0x0a, 0x63, 0xa5, - 0x32, 0xf1, 0x9b, 0xb0, 0x97, 0x5f, 0x92, 0x55, 0x26, 0xe6, 0x93, 0xc5, 0x98, 0xc6, 0x27, 0x1f, - 0x59, 0x50, 0xf4, 0x78, 0xcd, 0xa1, 0xbc, 0x52, 0x1e, 0x27, 0xa7, 0x16, 0x3f, 0xef, 0xc8, 0x44, - 0xc3, 0x2a, 0x4c, 0xa8, 0xc8, 0x61, 0xf7, 0xd5, 0x0f, 0x14, 0x2d, 0x20, 0x6f, 0x43, 0xd9, 0xdf, - 0xda, 0x6a, 0xf9, 0x4e, 0x3d, 0x4e, 0x62, 0xa8, 0x0c, 0xfa, 0xe2, 0x2a, 0x80, 0x4e, 0xe2, 0xb4, - 0xd6, 0x07, 0x0f, 0xfb, 0x52, 0x60, 0x07, 0xd6, 0x89, 0x30, 0xf2, 0x03, 0x5a, 0x8f, 0x0f, 0xd7, - 0x23, 0xbc, 0xcf, 0x34, 0xf7, 0x3e, 0x57, 0x93, 0x7c, 0x44, 0xef, 0xf5, 0x47, 0x49, 0x95, 0x62, - 0xba, 0x59, 0x24, 0x80, 0x8b, 0x9d, 0xac, 0xb3, 0x7d, 0x28, 0x83, 0x6f, 0x0f, 0xb3, 0x30, 0xa8, - 0xa5, 0x7b, 0x31, 0xd3, 0x3a, 0x10, 0x62, 0x1f, 0xca, 0x66, 0x7a, 0xc3, 0xd2, 0xe9, 0xa4, 0x37, - 0x4c, 0xbe, 0x07, 0x3b, 0x7e, 0xea, 0xef, 0xc1, 0x92, 0x3f, 0xcb, 0xcc, 0xc4, 0x29, 0x8e, 0xc4, - 0x8d, 0xdc, 0xe7, 0xc4, 0x0f, 0x5d, 0x36, 0xce, 0x7f, 0x68, 0xc1, 0x94, 0x98, 0x79, 0x69, 0x45, - 0x8c, 0xbf, 0xb4, 0x7d, 0xe6, 0x44, 0x7c, 0x3e, 0xdc, 0xfd, 0x5d, 0x4d, 0x70, 0xe5, 0xae, 0x88, - 0x43, 0x5a, 0x42, 0x7e, 0x25, 0x43, 0xfd, 0x9b, 0xc8, 0xcb, 0xc8, 0x94, 0x9d, 0xc5, 0xf1, 0xdc, - 0xc1, 0x51, 0x34, 0xbe, 0x7f, 0xd2, 0xd7, 0x06, 0x46, 0x78, 0xf3, 0xfe, 0xea, 0x09, 0xd9, 0xc0, - 0xcc, 0x54, 0x93, 0xc7, 0xb1, 0x84, 0x4d, 0xfd, 0xbc, 0xcc, 0x75, 0xdd, 0x37, 0x23, 0xfb, 0x66, - 0xf2, 0xf9, 0xd0, 0x5b, 0x79, 0xe6, 0xa3, 0x35, 0x53, 0xc3, 0xff, 0x0d, 0x0b, 0xce, 0x67, 0x09, - 0xc9, 0x8c, 0x26, 0x7d, 0x36, 0xd9, 0xa4, 0x1c, 0x95, 0x34, 0xb3, 0x41, 0xf9, 0x24, 0xe1, 0xfc, - 0xfe, 0x88, 0xe1, 0x79, 0x88, 0x68, 0xe7, 0x04, 0x9f, 0x99, 0x1e, 0xff, 0xff, 0xcf, 0x4c, 0x9f, - 0x46, 0x42, 0xef, 0xc4, 0x83, 0xd1, 0xc5, 0xc7, 0xf5, 0x60, 0xf4, 0xd0, 0xc3, 0x3c, 0x18, 0x3d, - 0xfc, 0xd8, 0x1e, 0x8c, 0x2e, 0x1d, 0xf1, 0xc1, 0xe8, 0x91, 0x1f, 0xd2, 0x07, 0xa3, 0x7f, 0x53, - 0xbf, 0x02, 0x2d, 0x94, 0x81, 0x37, 0xf2, 0x4d, 0x72, 0xf8, 0xff, 0xde, 0x53, 0xd0, 0x7f, 0x5c, - 0x80, 0x09, 0xbd, 0x75, 0x3b, 0xe1, 0x76, 0x95, 0x46, 0xa7, 0x10, 0x36, 0xb1, 0x9b, 0x08, 0x9b, - 0xc8, 0xd3, 0x52, 0x25, 0xba, 0xd0, 0x37, 0x48, 0xe5, 0x0b, 0xa9, 0x20, 0x95, 0xbb, 0xf9, 0xb3, - 0x3e, 0x3c, 0x56, 0xe5, 0x7f, 0x58, 0x70, 0x2e, 0x55, 0xe3, 0x14, 0x1c, 0xf9, 0x3b, 0x49, 0x47, - 0xfe, 0xeb, 0xb9, 0xf7, 0xba, 0x8f, 0x3f, 0xff, 0xeb, 0x85, 0x9e, 0xde, 0x72, 0xbd, 0xf0, 0xe7, - 0x2c, 0xf5, 0x92, 0xb8, 0x95, 0xb7, 0xa7, 0xce, 0x60, 0x33, 0xc3, 0x1f, 0x13, 0x17, 0xab, 0x35, - 0xf3, 0x81, 0xf1, 0xa9, 0x9f, 0xb5, 0x00, 0x62, 0xa4, 0xc7, 0xa5, 0xc2, 0xd8, 0xbf, 0x5d, 0x80, - 0x0b, 0x99, 0xd3, 0x88, 0x7c, 0x59, 0x1f, 0xf2, 0xc5, 0x40, 0x6d, 0x9e, 0xd0, 0x7c, 0x35, 0xcf, - 0xfa, 0xe3, 0x89, 0xb3, 0xbe, 0x3c, 0xe2, 0x3f, 0x2e, 0x05, 0x54, 0xe6, 0xbf, 0x35, 0x06, 0xeb, - 0x7f, 0x5a, 0x30, 0x99, 0x3e, 0x6c, 0x9c, 0x82, 0xc8, 0xba, 0x97, 0x10, 0x59, 0x77, 0xf2, 0x37, - 0xae, 0xf7, 0x8d, 0xf2, 0xfa, 0x63, 0x23, 0xbc, 0x4d, 0x21, 0x9f, 0x82, 0xcc, 0xd8, 0x4d, 0xca, - 0x0c, 0xcc, 0xbf, 0xc7, 0x7d, 0x84, 0xc6, 0xbb, 0x90, 0xe5, 0x5f, 0x38, 0x5a, 0xee, 0x8f, 0x44, - 0x88, 0x7a, 0xe1, 0xc8, 0x21, 0xea, 0xbf, 0x58, 0xe8, 0x1d, 0x62, 0x2e, 0xa8, 0x3e, 0x64, 0xaa, - 0x99, 0x71, 0xda, 0xcd, 0x2f, 0x35, 0x43, 0xe2, 0x6c, 0xad, 0xdb, 0x98, 0x38, 0x59, 0x27, 0x38, - 0x93, 0x77, 0xe2, 0x96, 0xb0, 0x2f, 0xf5, 0xc0, 0x3c, 0x3b, 0xfd, 0xa6, 0x39, 0xb7, 0x6f, 0xdf, - 0x35, 0x28, 0x71, 0x4b, 0x7b, 0x82, 0xb6, 0x3d, 0x0e, 0xa3, 0x6f, 0xba, 0x1d, 0xed, 0x1a, 0x98, - 0xf9, 0xd6, 0xf7, 0x2e, 0x3f, 0xf1, 0xfb, 0xdf, 0xbb, 0xfc, 0xc4, 0x77, 0xbe, 0x77, 0xf9, 0x89, - 0x2f, 0x1e, 0x5c, 0xb6, 0xbe, 0x75, 0x70, 0xd9, 0xfa, 0xfd, 0x83, 0xcb, 0xd6, 0x77, 0x0e, 0x2e, - 0x5b, 0xff, 0xf9, 0xe0, 0xb2, 0xf5, 0x37, 0xff, 0xcb, 0xe5, 0x27, 0xde, 0x2c, 0xa9, 0xbe, 0xfd, - 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x76, 0x86, 0x0a, 0xc0, 0xa7, 0x00, 0x00, + 0xd7, 0xf2, 0xe9, 0xad, 0x26, 0x1b, 0x1b, 0xa0, 0x13, 0x60, 0x4c, 0x32, 0x27, 0x7f, 0x1e, 0x4a, + 0x4e, 0xbd, 0x1e, 0xd0, 0x30, 0xd4, 0xee, 0x08, 0xee, 0xe2, 0x9b, 0x53, 0x40, 0x8c, 0xcb, 0x99, + 0x88, 0x6b, 0xd6, 0xb7, 0x42, 0x26, 0x35, 0xa4, 0xdd, 0x4d, 0x8b, 0x38, 0xc6, 0x84, 0xc1, 0x51, + 0x63, 0xd8, 0xbf, 0x38, 0x08, 0x49, 0xde, 0xa4, 0x0e, 0x13, 0xdb, 0xc1, 0xe6, 0x3c, 0x77, 0x43, + 0x3e, 0x8c, 0x43, 0xf8, 0xdc, 0xc1, 0xfe, 0xf4, 0xc4, 0x72, 0x92, 0x02, 0xa6, 0x49, 0x4a, 0x2e, + 0xcb, 0x74, 0x2f, 0x72, 0x36, 0x1f, 0x66, 0x23, 0x52, 0x5c, 0x4c, 0x0a, 0x98, 0x26, 0x49, 0x5e, + 0x81, 0xd1, 0xed, 0x60, 0x53, 0x09, 0xd0, 0xb4, 0x17, 0x76, 0x39, 0x2e, 0x42, 0x13, 0x8f, 0x0d, + 0xe1, 0x76, 0xb0, 0xc9, 0x36, 0x1c, 0x15, 0x56, 0xac, 0x87, 0x70, 0x59, 0xc2, 0x51, 0x63, 0x90, + 0x0e, 0x90, 0x6d, 0x35, 0x7a, 0xda, 0xe9, 0x2a, 0xe5, 0xfc, 0xd1, 0x7d, 0xb6, 0x3c, 0x04, 0x63, + 0xb9, 0x87, 0x0e, 0x66, 0xd0, 0x26, 0x6f, 0xc0, 0xa5, 0xed, 0x60, 0x53, 0x6e, 0xc3, 0xeb, 0x81, + 0xeb, 0xd5, 0xdc, 0x4e, 0x22, 0x84, 0x78, 0x5a, 0x36, 0xf7, 0xd2, 0x72, 0x36, 0x1a, 0xf6, 0xab, + 0x6f, 0x7f, 0xbd, 0x00, 0x3c, 0x36, 0x93, 0x69, 0x16, 0x6d, 0x1a, 0x35, 0xfd, 0x7a, 0x5a, 0xb3, + 0x58, 0xe1, 0x50, 0x94, 0xa5, 0x2a, 0xd8, 0xa3, 0xd0, 0x27, 0xd8, 0x63, 0x17, 0x46, 0x9a, 0xd4, + 0xa9, 0xd3, 0x40, 0x19, 0xc2, 0x6e, 0xe5, 0x13, 0x4d, 0xba, 0xc4, 0x89, 0xc6, 0x07, 0x5c, 0xf1, + 0x3f, 0x44, 0xc5, 0x8d, 0x7c, 0x02, 0xce, 0x30, 0x1d, 0xc1, 0xef, 0x46, 0xca, 0xea, 0x3b, 0xc8, + 0xad, 0xbe, 0x7c, 0xbf, 0xdb, 0x48, 0x94, 0x60, 0x0a, 0x93, 0xc9, 0xd2, 0x4d, 0xbf, 0x2e, 0x22, + 0x51, 0x0d, 0x59, 0x5a, 0xf1, 0xeb, 0x7b, 0xc8, 0x4b, 0xec, 0xdf, 0x64, 0x3b, 0x80, 0x11, 0xd4, + 0xfa, 0xa0, 0x98, 0x97, 0x30, 0x1e, 0x06, 0x71, 0xd2, 0x59, 0xca, 0x61, 0x18, 0x1e, 0x30, 0x04, + 0xf6, 0xb7, 0x99, 0x50, 0xd3, 0x63, 0x75, 0x04, 0x4b, 0xe0, 0x73, 0xe6, 0x99, 0xba, 0x9f, 0x7a, + 0xf6, 0x05, 0x28, 0xf1, 0x1f, 0x8b, 0x81, 0xdf, 0x96, 0x06, 0x39, 0xcc, 0xf3, 0x9b, 0xca, 0xb3, + 0x23, 0x17, 0x70, 0x77, 0x14, 0x23, 0x8c, 0x79, 0xda, 0x3e, 0x4c, 0xa6, 0xb1, 0xc9, 0x5b, 0x30, + 0x16, 0x2a, 0x19, 0x11, 0x07, 0x8d, 0x1d, 0x51, 0x96, 0x70, 0xf3, 0x50, 0xd5, 0xa8, 0x8e, 0x09, + 0x62, 0xf6, 0x1a, 0x0c, 0xe7, 0x3a, 0x84, 0xf6, 0x37, 0x2c, 0x28, 0x71, 0x03, 0x7d, 0x23, 0x70, + 0xda, 0x71, 0x95, 0x81, 0x43, 0x46, 0x3d, 0x84, 0x11, 0xa1, 0xca, 0x2b, 0x0f, 0x72, 0x0e, 0x13, + 0x48, 0x5c, 0x27, 0x8a, 0x27, 0x90, 0x38, 0x33, 0x84, 0xa8, 0x38, 0xd9, 0x3f, 0x5f, 0x80, 0xe1, + 0x9b, 0x5e, 0xa7, 0xfb, 0x23, 0x7f, 0xa5, 0x65, 0x05, 0x06, 0x6f, 0x46, 0xb4, 0x9d, 0xbc, 0x79, + 0x35, 0x56, 0x79, 0xde, 0xbc, 0x75, 0x55, 0x4e, 0xde, 0xba, 0x42, 0x67, 0x57, 0xc5, 0x2e, 0x48, + 0x53, 0x52, 0x1c, 0x38, 0xf7, 0x12, 0x94, 0x6e, 0x39, 0x9b, 0xb4, 0xb5, 0x4c, 0xf7, 0x42, 0x76, + 0x86, 0x10, 0x3e, 0x48, 0x2b, 0x3e, 0x43, 0x24, 0xfc, 0x85, 0x33, 0x30, 0xca, 0xb1, 0x39, 0xa3, + 0x23, 0xe0, 0xff, 0x9e, 0x05, 0xe3, 0x09, 0x5b, 0x56, 0xc2, 0xc2, 0x6f, 0x3d, 0xd0, 0xc2, 0x9f, + 0xb0, 0xb8, 0x17, 0x4e, 0xd9, 0xe2, 0x6e, 0xb7, 0x60, 0xf0, 0x96, 0xeb, 0x6d, 0x1f, 0x6d, 0xa9, + 0x85, 0x35, 0xbf, 0xd3, 0xb3, 0xd4, 0xaa, 0x0c, 0x88, 0xa2, 0x4c, 0xc9, 0xe5, 0x81, 0x6c, 0xb9, + 0x6c, 0x7f, 0xc9, 0x82, 0xb3, 0x2b, 0xb4, 0xed, 0xbb, 0x9f, 0x73, 0xe2, 0xb0, 0x14, 0x56, 0xa9, + 0xe9, 0x46, 0x32, 0x82, 0x41, 0x57, 0x5a, 0x72, 0x23, 0x64, 0xf0, 0x07, 0x98, 0x1a, 0x78, 0x10, + 0x2d, 0xd3, 0x74, 0x56, 0x63, 0x95, 0x23, 0x0e, 0x38, 0x51, 0x05, 0x18, 0xe3, 0xd8, 0xbf, 0x6b, + 0xc1, 0x88, 0x68, 0x04, 0x55, 0xb4, 0xad, 0x3e, 0xb4, 0x9b, 0x30, 0xc4, 0xeb, 0xc9, 0xef, 0x72, + 0x23, 0x07, 0x13, 0x34, 0x23, 0x27, 0x66, 0x11, 0xff, 0x89, 0x82, 0x01, 0xdf, 0xff, 0x9d, 0x7b, + 0x73, 0x3a, 0x22, 0x27, 0xde, 0xff, 0x39, 0x14, 0x65, 0xa9, 0xfd, 0xb5, 0x01, 0x28, 0x2a, 0xe7, + 0x9e, 0x88, 0x26, 0xf7, 0x3c, 0x3f, 0x72, 0x84, 0xef, 0x4b, 0xc8, 0x89, 0xb7, 0x1e, 0xbd, 0x95, + 0x8a, 0xc3, 0xcc, 0x5c, 0x4c, 0x5d, 0x98, 0x98, 0xb5, 0x36, 0x67, 0x94, 0xa0, 0xd9, 0x08, 0xf2, + 0x79, 0x18, 0x6e, 0xb1, 0xf5, 0xa3, 0xc4, 0xc6, 0x9d, 0x1c, 0x9b, 0xc3, 0x17, 0xa6, 0x6c, 0x89, + 0x1e, 0x21, 0x01, 0x44, 0xc9, 0x75, 0xea, 0x53, 0x30, 0x99, 0x6e, 0x75, 0x86, 0x3d, 0xfb, 0x7c, + 0x62, 0xe3, 0x30, 0xcc, 0xcf, 0x53, 0x7f, 0x49, 0xae, 0xff, 0xe3, 0x57, 0xb5, 0x5f, 0x87, 0xd1, + 0x15, 0x1a, 0x05, 0x6e, 0x8d, 0x13, 0x78, 0xd0, 0xe4, 0x3a, 0xd2, 0xde, 0xf5, 0x65, 0x3e, 0x59, + 0x19, 0xcd, 0x90, 0xbc, 0x0f, 0xd0, 0x09, 0x7c, 0xa6, 0x08, 0xd2, 0xae, 0xfa, 0xd8, 0x39, 0xe8, + 0x77, 0xeb, 0x9a, 0xa6, 0xf0, 0x8a, 0xc4, 0xff, 0xd1, 0xe0, 0x67, 0x5f, 0x81, 0xa1, 0x95, 0x6e, + 0x44, 0xef, 0x3d, 0x58, 0x54, 0xd8, 0x6f, 0xc1, 0x18, 0x47, 0x5d, 0xf2, 0x5b, 0x4c, 0x42, 0xb3, + 0x9e, 0xb6, 0xd9, 0xff, 0xb4, 0x1d, 0x8a, 0x23, 0xa1, 0x28, 0x63, 0x2b, 0xa0, 0xe9, 0xb7, 0xea, + 0x34, 0x90, 0xe3, 0xa1, 0xbf, 0xef, 0x12, 0x87, 0xa2, 0x2c, 0xb5, 0x7f, 0xa6, 0x00, 0xa3, 0xbc, + 0xa2, 0x94, 0x1e, 0x7b, 0x30, 0xd2, 0x14, 0x7c, 0xe4, 0x90, 0xe4, 0x10, 0xc4, 0x61, 0xb6, 0xde, + 0xd0, 0xf8, 0x04, 0x00, 0x15, 0x3f, 0xc6, 0x7a, 0xd7, 0x71, 0x23, 0xc6, 0xba, 0x70, 0xb2, 0xac, + 0xef, 0x0a, 0x36, 0xa8, 0xf8, 0xd9, 0xff, 0xc1, 0x02, 0x58, 0xf5, 0xeb, 0x14, 0x69, 0xd8, 0x6d, + 0x45, 0xe4, 0x27, 0x61, 0xa8, 0xd3, 0x74, 0xc2, 0xb4, 0x6d, 0x79, 0x68, 0x9d, 0x01, 0xef, 0xef, + 0x4f, 0x97, 0x18, 0x2e, 0xff, 0x83, 0x02, 0xd1, 0x8c, 0x01, 0x2c, 0x1c, 0x1e, 0x03, 0x48, 0x3a, + 0x30, 0xe2, 0x77, 0x23, 0xa6, 0x97, 0x48, 0x05, 0x34, 0x07, 0xd7, 0xca, 0x9a, 0x20, 0x28, 0x6e, + 0x3e, 0xca, 0x3f, 0xa8, 0xd8, 0xd8, 0x7f, 0x34, 0x21, 0x7a, 0x27, 0x3f, 0xf1, 0x14, 0x14, 0x5c, + 0x75, 0x30, 0x02, 0xd9, 0xcc, 0xc2, 0xcd, 0x05, 0x2c, 0xb8, 0x75, 0x3d, 0x1b, 0x0b, 0x7d, 0x37, + 0xae, 0x57, 0x60, 0xb4, 0xee, 0x86, 0x9d, 0x96, 0xb3, 0xb7, 0x9a, 0x71, 0x2a, 0x5d, 0x88, 0x8b, + 0xd0, 0xc4, 0x23, 0x2f, 0xc9, 0xb8, 0x4d, 0x71, 0x22, 0x2d, 0xa7, 0xe2, 0x36, 0x8b, 0xac, 0x79, + 0x46, 0xc8, 0xe6, 0xab, 0x30, 0xa6, 0x76, 0x74, 0xce, 0x45, 0x9c, 0x65, 0x74, 0x3c, 0xdf, 0x86, + 0x51, 0x86, 0x09, 0xcc, 0x1e, 0x9f, 0xf7, 0xf0, 0xe9, 0xfb, 0xbc, 0x3f, 0x09, 0xe3, 0xea, 0x2f, + 0xdf, 0xcd, 0xcb, 0xe7, 0x79, 0xeb, 0xb5, 0xb5, 0x64, 0xc3, 0x2c, 0xc4, 0x24, 0x6e, 0x3c, 0xf5, + 0x46, 0x8e, 0x3a, 0xf5, 0xae, 0x02, 0x6c, 0xfa, 0x5d, 0xaf, 0xee, 0x04, 0x7b, 0x37, 0x17, 0x64, + 0x84, 0x8c, 0xd6, 0x47, 0x2b, 0xba, 0x04, 0x0d, 0x2c, 0x73, 0xba, 0x96, 0x1e, 0x30, 0x5d, 0xdf, + 0x82, 0x12, 0x8f, 0x26, 0xa2, 0xf5, 0xb9, 0x48, 0xfa, 0x8e, 0x8f, 0x13, 0x78, 0xa2, 0x95, 0x87, + 0xaa, 0x22, 0x82, 0x31, 0x3d, 0xf2, 0x19, 0x80, 0x2d, 0xd7, 0x73, 0xc3, 0x26, 0xa7, 0x3e, 0x7a, + 0x6c, 0xea, 0xba, 0x9f, 0x8b, 0x9a, 0x0a, 0x1a, 0x14, 0xc9, 0xdb, 0x70, 0x96, 0x86, 0x91, 0xdb, + 0x76, 0x22, 0x5a, 0xd7, 0xe1, 0xec, 0x65, 0x7e, 0x94, 0xd6, 0xf1, 0x5c, 0xd7, 0xd3, 0x08, 0xf7, + 0xb3, 0x80, 0xd8, 0x4b, 0x88, 0xbc, 0x0a, 0xc5, 0x4e, 0xe0, 0x37, 0x02, 0x1a, 0x86, 0xe5, 0x29, + 0x3e, 0x8c, 0x4f, 0x2b, 0xcd, 0x74, 0x5d, 0xc2, 0xef, 0x1b, 0xbf, 0x51, 0x63, 0x93, 0x3f, 0xb5, + 0xe0, 0x6c, 0x40, 0x85, 0x43, 0x31, 0xd4, 0x0d, 0xbb, 0xc0, 0xa5, 0x5e, 0x2d, 0x8f, 0xbc, 0x02, + 0x6a, 0xb1, 0xcf, 0x60, 0x9a, 0x8b, 0xd8, 0xee, 0xa9, 0xea, 0x7d, 0x4f, 0xf9, 0xfd, 0x2c, 0xe0, + 0x97, 0xbe, 0x3b, 0x3d, 0xdd, 0x9b, 0xe4, 0x42, 0x13, 0x67, 0x2b, 0xef, 0xaf, 0x7f, 0x77, 0x7a, + 0x52, 0xfd, 0x8f, 0x07, 0xad, 0xa7, 0x93, 0x6c, 0xf7, 0xea, 0xf8, 0xf5, 0x9b, 0xeb, 0xd2, 0xc9, + 0xaf, 0x77, 0xaf, 0x75, 0x06, 0x44, 0x51, 0x46, 0x5e, 0x84, 0x62, 0xdd, 0xa1, 0x6d, 0xdf, 0xa3, + 0xf5, 0xf2, 0x78, 0xec, 0x45, 0x59, 0x90, 0x30, 0xd4, 0xa5, 0xa4, 0x05, 0xc3, 0x2e, 0x3f, 0xe4, + 0xc9, 0x88, 0x9e, 0x1c, 0x4e, 0x96, 0xe2, 0xd0, 0xa8, 0xe2, 0x79, 0xb8, 0x28, 0x95, 0x3c, 0x4c, + 0xd9, 0x3d, 0x71, 0x2a, 0xb2, 0x9b, 0x8d, 0x44, 0xad, 0xe9, 0xb6, 0xea, 0x01, 0xf5, 0xca, 0x93, + 0xfc, 0xcc, 0xc4, 0x47, 0x62, 0x5e, 0xc2, 0x50, 0x97, 0x92, 0xbf, 0x08, 0xe3, 0x7e, 0x37, 0xe2, + 0x8b, 0x9c, 0x7d, 0xff, 0xb0, 0x7c, 0x96, 0xa3, 0x73, 0xff, 0xec, 0x9a, 0x59, 0x80, 0x49, 0x3c, + 0x26, 0x6c, 0x9b, 0x7e, 0x18, 0xb1, 0x3f, 0x5c, 0xd8, 0x5e, 0x4c, 0x0a, 0xdb, 0x25, 0xa3, 0x0c, + 0x13, 0x98, 0xe4, 0xab, 0x16, 0x9c, 0x6d, 0xa7, 0x0f, 0x20, 0xe5, 0x4b, 0x7c, 0x64, 0xaa, 0x79, + 0x28, 0xaa, 0x29, 0xd2, 0x22, 0x8c, 0xad, 0x07, 0x8c, 0xbd, 0x8d, 0xe0, 0x57, 0xf2, 0xc2, 0x3d, + 0xaf, 0xd6, 0x0c, 0x7c, 0x2f, 0xd9, 0xbc, 0x27, 0x79, 0xf3, 0xde, 0xca, 0x69, 0x95, 0x65, 0xb1, + 0xa8, 0x3c, 0x79, 0xb0, 0x3f, 0x7d, 0x21, 0xb3, 0x08, 0xb3, 0x1b, 0x35, 0xb5, 0x00, 0x17, 0xb3, + 0x57, 0xea, 0x83, 0x34, 0xe6, 0x01, 0x53, 0x63, 0x5e, 0x84, 0x27, 0xfb, 0x36, 0x8a, 0xc9, 0x7c, + 0xa5, 0x5e, 0x59, 0x49, 0x99, 0xdf, 0xa3, 0x0e, 0x9d, 0x81, 0x31, 0x33, 0x35, 0x09, 0x77, 0x96, + 0x1b, 0xd7, 0x41, 0xd9, 0x21, 0xdb, 0xaf, 0xe6, 0xee, 0x75, 0x5e, 0xab, 0xf6, 0x78, 0x9d, 0x35, + 0x08, 0x63, 0x86, 0x47, 0x71, 0x96, 0x67, 0xde, 0x5d, 0x7d, 0xcc, 0xcd, 0x3e, 0xb6, 0xb3, 0xfc, + 0xdf, 0x0f, 0x42, 0x4c, 0x89, 0xbc, 0x04, 0x45, 0xea, 0xd5, 0x3b, 0xbe, 0xeb, 0x45, 0x69, 0x33, + 0xc8, 0x75, 0x09, 0x47, 0x8d, 0x61, 0xb8, 0xd6, 0x0b, 0x87, 0xba, 0xd6, 0xeb, 0x30, 0xe1, 0xf0, + 0x68, 0xde, 0xd8, 0x31, 0x3a, 0x70, 0x6c, 0x4f, 0xc6, 0x5c, 0x92, 0x02, 0xa6, 0x49, 0x32, 0x2e, + 0x61, 0x5c, 0x95, 0x73, 0x19, 0x3c, 0x36, 0x97, 0x6a, 0x92, 0x02, 0xa6, 0x49, 0x92, 0xb7, 0xa1, + 0x5c, 0xe3, 0xf7, 0x27, 0x44, 0x1f, 0x6f, 0x6e, 0xad, 0xfa, 0xd1, 0x7a, 0x40, 0x43, 0xea, 0x09, + 0xc7, 0x75, 0xb1, 0xf2, 0xac, 0x1c, 0x85, 0xf2, 0x7c, 0x1f, 0x3c, 0xec, 0x4b, 0x81, 0x69, 0x75, + 0xdc, 0x2d, 0xeb, 0x46, 0x7b, 0x1b, 0xfe, 0x36, 0xf5, 0xa4, 0xb3, 0x42, 0x6b, 0x75, 0x55, 0xb3, + 0x10, 0x93, 0xb8, 0xe4, 0x17, 0x2c, 0x18, 0x6f, 0x29, 0xab, 0x16, 0x76, 0x5b, 0x2a, 0xf9, 0x09, + 0xe6, 0x32, 0xfd, 0x6e, 0x99, 0x94, 0x85, 0xc0, 0x4f, 0x80, 0x30, 0xc9, 0xdb, 0xfe, 0xb6, 0x05, + 0x93, 0xe9, 0x6a, 0x64, 0x1b, 0x9e, 0x69, 0x3b, 0xc1, 0xf6, 0x4d, 0x6f, 0x2b, 0xe0, 0x91, 0x85, + 0x91, 0xf8, 0xaa, 0x73, 0x5b, 0x11, 0x0d, 0x16, 0x9c, 0x3d, 0x11, 0x3f, 0x34, 0xa4, 0xf3, 0x35, + 0x3d, 0xb3, 0x72, 0x18, 0x32, 0x1e, 0x4e, 0x8b, 0x54, 0xe1, 0x02, 0x43, 0x58, 0xa0, 0x2d, 0xca, + 0x24, 0x54, 0xcc, 0xa4, 0xc0, 0x99, 0x68, 0x0f, 0xf9, 0x4a, 0x16, 0x12, 0x66, 0xd7, 0xb5, 0xff, + 0x5d, 0x01, 0xd4, 0xfe, 0xf9, 0xa3, 0x6d, 0xf1, 0x25, 0x36, 0x0c, 0x07, 0xfc, 0x24, 0x2b, 0x8f, + 0x67, 0x5c, 0x95, 0x11, 0x67, 0x5b, 0x94, 0x25, 0x4c, 0xb1, 0xa0, 0xf7, 0xdc, 0x68, 0xde, 0xaf, + 0xab, 0x43, 0x19, 0x57, 0x2c, 0xae, 0x4b, 0x18, 0xea, 0x52, 0xfb, 0x67, 0x2d, 0x18, 0x67, 0xbd, + 0x6c, 0xb5, 0x68, 0xab, 0x1a, 0xd1, 0x4e, 0x48, 0x42, 0x18, 0x0a, 0xd9, 0x8f, 0xfc, 0x4c, 0x04, + 0x71, 0x08, 0x3d, 0xed, 0x18, 0xc6, 0x50, 0xc6, 0x04, 0x05, 0x2f, 0xfb, 0xbf, 0x17, 0xa0, 0xa4, + 0x07, 0xfb, 0x08, 0x16, 0xd6, 0xab, 0xf1, 0xa5, 0x75, 0x21, 0x03, 0xcb, 0xc6, 0x85, 0x75, 0x76, + 0x92, 0x9a, 0xf3, 0xf6, 0xc4, 0x1d, 0xd8, 0xf8, 0xf6, 0xfa, 0x4b, 0x49, 0x6f, 0xc6, 0x45, 0xd3, + 0x44, 0x6e, 0xe0, 0x4b, 0xb7, 0xc6, 0x3d, 0xd3, 0x99, 0x34, 0x98, 0xd7, 0x7e, 0xa2, 0xdd, 0x46, + 0xfd, 0xbd, 0x48, 0xa9, 0xcc, 0x4b, 0x43, 0x47, 0xca, 0xbc, 0x74, 0x05, 0x06, 0xa9, 0xd7, 0x6d, + 0xf3, 0x78, 0xea, 0x12, 0xd7, 0xa4, 0x06, 0xaf, 0x7b, 0xdd, 0x76, 0xb2, 0x67, 0x1c, 0xc5, 0xfe, + 0x67, 0x16, 0x30, 0x7d, 0xfc, 0xc6, 0x3c, 0xf9, 0xcb, 0x50, 0x0c, 0xa5, 0x16, 0x20, 0x87, 0xfa, + 0xc7, 0x74, 0xc8, 0x9e, 0x84, 0xdf, 0xdf, 0x9f, 0x1e, 0xe7, 0xc8, 0x0a, 0x80, 0xba, 0x0a, 0x69, + 0xc1, 0x38, 0xb7, 0x23, 0x2a, 0x49, 0x2e, 0x2d, 0xbf, 0xd7, 0x8e, 0x78, 0x0b, 0xca, 0xac, 0x2a, + 0xe5, 0x9a, 0x09, 0xc2, 0x24, 0x71, 0xfb, 0xf7, 0x06, 0xc1, 0x30, 0xb7, 0x1d, 0x61, 0x8a, 0xbc, + 0x9b, 0x32, 0xae, 0xae, 0xe4, 0x62, 0x5c, 0x55, 0x16, 0x4b, 0xb1, 0xec, 0x92, 0xf6, 0x54, 0xd6, + 0xa8, 0x26, 0x6d, 0x75, 0xe4, 0x04, 0xd3, 0x8d, 0x5a, 0xa2, 0xad, 0x0e, 0xf2, 0x12, 0x1d, 0xcf, + 0x3d, 0xd8, 0x37, 0x9e, 0xbb, 0x09, 0x43, 0x0d, 0xa7, 0xdb, 0xa0, 0xd2, 0x4d, 0x9f, 0x83, 0x1d, + 0x9d, 0x07, 0xb8, 0x09, 0x3b, 0x3a, 0xff, 0x89, 0x82, 0x01, 0x9b, 0xe1, 0x4d, 0xe5, 0xea, 0x93, + 0xa6, 0x94, 0x1c, 0x66, 0xb8, 0xf6, 0x1e, 0x8a, 0x19, 0xae, 0xff, 0x62, 0xcc, 0x8c, 0x9d, 0xb4, + 0x6a, 0xe2, 0xf2, 0xa4, 0xdc, 0x2a, 0x6f, 0xe6, 0x11, 0xb0, 0xce, 0x09, 0x8a, 0x93, 0x96, 0xfc, + 0x83, 0x8a, 0x8d, 0x3d, 0x0b, 0xa3, 0x46, 0x0e, 0x22, 0xf6, 0x19, 0xf4, 0xbd, 0x3d, 0xe3, 0x33, + 0x2c, 0x38, 0x91, 0x83, 0xbc, 0xc4, 0xfe, 0x7b, 0x03, 0xa0, 0x4f, 0xbc, 0x66, 0x78, 0xb5, 0x53, + 0x33, 0x2e, 0xef, 0x27, 0xee, 0xf5, 0xf8, 0x1e, 0xca, 0x52, 0xa6, 0x4e, 0xb4, 0x69, 0xd0, 0xd0, + 0x3a, 0xb6, 0x94, 0x51, 0x5a, 0x9d, 0x58, 0x31, 0x0b, 0x31, 0x89, 0xcb, 0x74, 0xc1, 0xb6, 0xe3, + 0xb9, 0x5b, 0x34, 0x8c, 0xd2, 0x51, 0x32, 0x2b, 0x12, 0x8e, 0x1a, 0x83, 0xdc, 0x80, 0xb3, 0x21, + 0x8d, 0xd6, 0x76, 0x3d, 0x1a, 0xe8, 0xfb, 0x46, 0xf2, 0x02, 0x9a, 0x8e, 0x1c, 0xab, 0xa6, 0x11, + 0xb0, 0xb7, 0x0e, 0x59, 0x80, 0x49, 0x79, 0xf7, 0x4b, 0x5f, 0xdd, 0x91, 0xb2, 0x47, 0x67, 0x8d, + 0xab, 0xa6, 0xca, 0xb1, 0xa7, 0x06, 0xa3, 0xb2, 0xe5, 0xb8, 0xad, 0x6e, 0x40, 0x63, 0x2a, 0xc3, + 0x49, 0x2a, 0x8b, 0xa9, 0x72, 0xec, 0xa9, 0xc1, 0x83, 0x17, 0x5b, 0x4e, 0x23, 0x2c, 0x8f, 0x18, + 0xc1, 0x8b, 0x0c, 0x80, 0x02, 0x6e, 0xff, 0x63, 0x0b, 0xc6, 0x91, 0x46, 0xc1, 0xde, 0xdc, 0xd6, + 0x96, 0xeb, 0xb9, 0xd1, 0x1e, 0xf9, 0x35, 0x0b, 0x26, 0x3d, 0xbf, 0x4e, 0xe7, 0xbc, 0xc8, 0x55, + 0xc0, 0xfc, 0x12, 0xb4, 0x70, 0x5e, 0xab, 0x29, 0xf2, 0xe2, 0x1a, 0x59, 0x1a, 0x8a, 0x3d, 0xcd, + 0xb0, 0x2f, 0xc1, 0x85, 0x4c, 0x02, 0xf6, 0xb7, 0x07, 0x64, 0x37, 0xf4, 0xc7, 0x7f, 0x1d, 0x86, + 0x5a, 0xfc, 0x4a, 0x9d, 0xf5, 0x90, 0x19, 0x1f, 0xf8, 0x58, 0x89, 0x3b, 0x77, 0x82, 0x12, 0x59, + 0x80, 0xd1, 0x80, 0xf1, 0x90, 0x17, 0x1e, 0xc5, 0x54, 0xb4, 0xe3, 0x0c, 0x76, 0xba, 0xe8, 0x7e, + 0xf2, 0x2f, 0x9a, 0xd5, 0xc8, 0x7b, 0x30, 0xb2, 0x29, 0x92, 0x58, 0xe4, 0x67, 0xd8, 0x96, 0x59, + 0x31, 0xf8, 0x4e, 0xac, 0x52, 0x64, 0xdc, 0x8f, 0x7f, 0xa2, 0xe2, 0x48, 0xf6, 0xa0, 0xe8, 0xa8, + 0x6f, 0x3a, 0x98, 0x57, 0xb8, 0x5b, 0x62, 0xfe, 0x08, 0xfd, 0x48, 0x7f, 0x43, 0xcd, 0x8e, 0x6d, + 0xc6, 0x34, 0x4e, 0xe2, 0x97, 0xda, 0x8c, 0x8d, 0x04, 0x7e, 0x06, 0x96, 0xfd, 0x0d, 0x0b, 0x20, + 0x4e, 0x6f, 0x45, 0xee, 0x41, 0x31, 0xbc, 0x96, 0x38, 0x98, 0xe6, 0x71, 0x83, 0x48, 0x52, 0x34, + 0xa2, 0xec, 0x25, 0x04, 0x35, 0xb7, 0x07, 0x1d, 0xa6, 0xff, 0x97, 0x05, 0xe7, 0xb3, 0xd2, 0x70, + 0x3d, 0xc6, 0x16, 0x1f, 0xf7, 0x1c, 0x2d, 0x2b, 0xac, 0x07, 0x74, 0xcb, 0xbd, 0x97, 0x76, 0x69, + 0x2f, 0xab, 0x02, 0x8c, 0x71, 0xec, 0x6f, 0x0e, 0x83, 0x66, 0x7c, 0x42, 0xe7, 0xee, 0x17, 0x98, + 0x86, 0xde, 0x88, 0x93, 0xab, 0x68, 0x3c, 0xe4, 0x50, 0x94, 0xa5, 0x4c, 0x4b, 0x57, 0xe1, 0xc0, + 0x52, 0x64, 0xf3, 0x59, 0xa8, 0x22, 0x87, 0x51, 0x97, 0x66, 0x9d, 0xe4, 0x87, 0x4e, 0xe5, 0x24, + 0x3f, 0x9c, 0xff, 0x49, 0xfe, 0x0a, 0x8c, 0x04, 0x7e, 0x8b, 0xce, 0xe1, 0xaa, 0x74, 0x83, 0xc4, + 0x49, 0x81, 0x04, 0x18, 0x55, 0x39, 0x79, 0x05, 0x46, 0xbb, 0x21, 0xad, 0x2e, 0x2c, 0xcf, 0x07, + 0xb4, 0x1e, 0xca, 0x08, 0x6b, 0xed, 0x8e, 0xba, 0x1d, 0x17, 0xa1, 0x89, 0x47, 0xbe, 0x69, 0x1d, + 0x62, 0x2c, 0x28, 0xe5, 0xb5, 0x27, 0x64, 0xa6, 0x73, 0xa8, 0x3c, 0xfd, 0x90, 0x16, 0x88, 0xaf, + 0x59, 0x70, 0x96, 0x7a, 0xb5, 0x60, 0x8f, 0xd3, 0x91, 0xd4, 0xa4, 0x4b, 0xe6, 0x76, 0x1e, 0x8b, + 0xef, 0x7a, 0x9a, 0xb8, 0xb0, 0xb7, 0xf6, 0x80, 0xb1, 0xb7, 0x19, 0xf6, 0x1f, 0x15, 0xe0, 0x5c, + 0x06, 0x05, 0x1e, 0x8d, 0xda, 0x66, 0x13, 0xe8, 0x66, 0x3d, 0xbd, 0x7c, 0x96, 0x25, 0x1c, 0x35, + 0x06, 0x59, 0x87, 0xf3, 0xdb, 0xed, 0x30, 0xa6, 0x32, 0xef, 0x7b, 0x11, 0xbd, 0xa7, 0x16, 0x93, + 0xf2, 0xae, 0x9c, 0x5f, 0xce, 0xc0, 0xc1, 0xcc, 0x9a, 0x4c, 0xdb, 0xa0, 0x9e, 0xb3, 0xd9, 0xa2, + 0x71, 0x91, 0x8c, 0xa5, 0xd6, 0xda, 0xc6, 0xf5, 0x54, 0x39, 0xf6, 0xd4, 0x20, 0x1f, 0x5a, 0xf0, + 0x54, 0x48, 0x83, 0x1d, 0x1a, 0x54, 0xdd, 0x3a, 0x9d, 0xef, 0x86, 0x91, 0xdf, 0xa6, 0xc1, 0x43, + 0x5a, 0xb3, 0xa6, 0x0f, 0xf6, 0xa7, 0x9f, 0xaa, 0xf6, 0xa7, 0x86, 0x87, 0xb1, 0xb2, 0x3f, 0xb4, + 0xe0, 0x4c, 0xb5, 0x16, 0xb8, 0x9d, 0x38, 0x49, 0x4b, 0xde, 0x39, 0x64, 0x5e, 0xd0, 0xf7, 0xea, + 0x52, 0x42, 0x2c, 0x79, 0x13, 0xce, 0x7e, 0x07, 0x26, 0xab, 0xb4, 0xed, 0x74, 0x9a, 0xfc, 0x9a, + 0x82, 0x70, 0xe2, 0xcf, 0x42, 0x29, 0x54, 0xb0, 0x74, 0x12, 0x3e, 0x8d, 0x8c, 0x31, 0x0e, 0x79, + 0x5e, 0x04, 0x1c, 0xa8, 0xe0, 0xd2, 0x92, 0xd0, 0xce, 0x45, 0x94, 0x42, 0x88, 0xaa, 0xcc, 0xde, + 0x85, 0xb1, 0xb8, 0x3a, 0xdd, 0x22, 0x0d, 0x98, 0xa8, 0x19, 0x91, 0xc8, 0x71, 0xd8, 0xe4, 0xd1, + 0x83, 0x96, 0xb9, 0x2c, 0x9a, 0x4f, 0x12, 0xc1, 0x34, 0x55, 0xfb, 0x97, 0x0a, 0x30, 0xa1, 0x39, + 0x4b, 0x53, 0xfa, 0x07, 0xe9, 0x20, 0x09, 0xcc, 0xe3, 0xbe, 0x6f, 0x72, 0x24, 0x0f, 0x09, 0x94, + 0xf8, 0x20, 0x1d, 0x28, 0x71, 0xa2, 0xec, 0x7b, 0xbc, 0x03, 0xdf, 0x28, 0x40, 0x51, 0xdf, 0x3e, + 0x7e, 0x1d, 0x86, 0xf8, 0x01, 0xea, 0xd1, 0xb4, 0x51, 0x7e, 0x18, 0x43, 0x41, 0x89, 0x91, 0xe4, + 0x1e, 0xe2, 0x87, 0x4e, 0x69, 0x56, 0x12, 0xb6, 0x23, 0x27, 0x88, 0x50, 0x50, 0x22, 0xcb, 0x30, + 0x40, 0xbd, 0xba, 0x54, 0x4b, 0x8f, 0x4f, 0x90, 0x27, 0xa0, 0xbc, 0xee, 0xd5, 0x91, 0x51, 0xe1, + 0xf9, 0x7f, 0x84, 0xf6, 0x31, 0x98, 0x5c, 0x1e, 0x52, 0xf5, 0x90, 0xa5, 0xf6, 0x2f, 0x0c, 0xc0, + 0x70, 0xb5, 0xbb, 0xc9, 0x14, 0xec, 0xaf, 0x5b, 0x70, 0x6e, 0x37, 0x95, 0xee, 0x2a, 0x9e, 0xb2, + 0xb7, 0xf3, 0xcf, 0x25, 0x86, 0x74, 0xab, 0xf2, 0x94, 0x6c, 0xd7, 0xb9, 0x8c, 0x42, 0xcc, 0x6a, + 0x4e, 0x22, 0x35, 0xd0, 0xc0, 0x09, 0x25, 0x51, 0x3b, 0xd9, 0xf0, 0xcc, 0xf1, 0xbe, 0xa1, 0x99, + 0x7f, 0x36, 0x08, 0x20, 0xbe, 0xc6, 0x5a, 0x27, 0x3a, 0x8a, 0x71, 0xe8, 0x55, 0x18, 0x53, 0xaf, + 0x18, 0xac, 0xc6, 0x21, 0x31, 0xda, 0x2d, 0x7a, 0xc3, 0x28, 0xc3, 0x04, 0x26, 0x3f, 0x10, 0x78, + 0x51, 0xb0, 0x27, 0x94, 0xc6, 0xc1, 0xd4, 0x81, 0x40, 0x97, 0xa0, 0x81, 0x45, 0x66, 0x12, 0x06, + 0x6b, 0x91, 0x26, 0xe1, 0xcc, 0x21, 0xf6, 0xe5, 0x4f, 0xc2, 0xb8, 0xfe, 0xb7, 0xe8, 0xb6, 0x68, + 0xda, 0x1d, 0xb1, 0x6e, 0x16, 0x62, 0x12, 0x97, 0x7c, 0x0a, 0xce, 0x24, 0x6f, 0x3b, 0x4a, 0x35, + 0x4b, 0xdf, 0x35, 0x4e, 0x5e, 0x92, 0xc4, 0x14, 0x36, 0x5b, 0x01, 0xf5, 0x60, 0x0f, 0xbb, 0x9e, + 0xd4, 0xb7, 0xf4, 0x0a, 0x58, 0xe0, 0x50, 0x94, 0xa5, 0x6c, 0x08, 0xc5, 0x56, 0x26, 0xe0, 0xf2, + 0xba, 0x9a, 0x1e, 0xc2, 0xaa, 0x51, 0x86, 0x09, 0x4c, 0xc6, 0x41, 0x5a, 0xe6, 0x20, 0xb9, 0xc6, + 0x52, 0xe6, 0xb4, 0x0e, 0x9c, 0xf1, 0x93, 0x86, 0x0d, 0x11, 0x44, 0xf2, 0xf1, 0x23, 0xce, 0xdb, + 0x44, 0x5d, 0x71, 0xbd, 0x22, 0x65, 0x07, 0x49, 0xd1, 0x67, 0x0a, 0xa7, 0x19, 0x24, 0x3a, 0x96, + 0x8c, 0x7f, 0xea, 0x17, 0xc7, 0x69, 0x9f, 0x83, 0xb3, 0xd5, 0x6e, 0xa7, 0xd3, 0x72, 0x69, 0x5d, + 0x5b, 0x74, 0xed, 0x9f, 0x82, 0x09, 0x99, 0xf9, 0x47, 0xef, 0xe5, 0xc7, 0x4a, 0xff, 0x68, 0xff, + 0xa9, 0x05, 0x13, 0x29, 0x6f, 0x2f, 0x79, 0x2f, 0xbd, 0x03, 0xe7, 0x62, 0xa0, 0x37, 0x37, 0x5f, + 0xb1, 0xca, 0x32, 0x77, 0xf3, 0xa6, 0x8a, 0x4d, 0xcc, 0x2d, 0xc4, 0x97, 0x47, 0xf0, 0x09, 0x91, + 0x6e, 0x06, 0x38, 0xda, 0x5f, 0x2e, 0x40, 0xb6, 0x8b, 0x9d, 0x7c, 0xbe, 0x77, 0x00, 0x5e, 0xcf, + 0x71, 0x00, 0xa4, 0x8f, 0xbf, 0xff, 0x18, 0x78, 0xc9, 0x31, 0x58, 0xc9, 0x69, 0x0c, 0x24, 0xdf, + 0xde, 0x91, 0xf8, 0x13, 0x0b, 0x46, 0x37, 0x36, 0x6e, 0x69, 0x03, 0x11, 0xc2, 0xc5, 0x50, 0xdc, + 0x05, 0xe2, 0xbe, 0xb1, 0x79, 0xbf, 0xdd, 0x11, 0xae, 0x32, 0xe9, 0xc2, 0xe3, 0x49, 0x98, 0xaa, + 0x99, 0x18, 0xd8, 0xa7, 0x26, 0xb9, 0x09, 0xe7, 0xcc, 0x12, 0x69, 0xe6, 0x93, 0xee, 0x3a, 0x71, + 0x3b, 0xb6, 0xb7, 0x18, 0xb3, 0xea, 0xa4, 0x49, 0x49, 0x5b, 0x9f, 0x7c, 0x1f, 0xa3, 0x87, 0x94, + 0x2c, 0xc6, 0xac, 0x3a, 0xf6, 0x1a, 0x8c, 0x1a, 0xaf, 0xb5, 0x90, 0x4f, 0xc3, 0x64, 0xcd, 0x6f, + 0x2b, 0x1b, 0xcb, 0x2d, 0xba, 0x43, 0x5b, 0xb2, 0xcb, 0xdc, 0x0c, 0x37, 0x9f, 0x2a, 0xc3, 0x1e, + 0x6c, 0xfb, 0x4b, 0x97, 0x41, 0x5f, 0x2a, 0x38, 0xc2, 0x16, 0xd1, 0xd1, 0xc1, 0x47, 0x43, 0x39, + 0x07, 0x1f, 0x69, 0x79, 0x97, 0x0a, 0x40, 0x8a, 0xe2, 0x00, 0xa4, 0xe1, 0xbc, 0x03, 0x90, 0xb4, + 0xc6, 0xd7, 0x13, 0x84, 0xf4, 0x2b, 0x16, 0x8c, 0x79, 0x7e, 0x9d, 0x6a, 0x37, 0xce, 0x08, 0x57, + 0x3b, 0xdf, 0xce, 0x2f, 0xaa, 0x52, 0x04, 0xd3, 0x48, 0xf2, 0x22, 0x44, 0x4d, 0x6f, 0x13, 0x66, + 0x11, 0x26, 0xda, 0x41, 0x16, 0x0d, 0xab, 0x9f, 0xc8, 0xbc, 0xf3, 0x74, 0x96, 0xfa, 0xff, 0x40, + 0x13, 0xde, 0x3d, 0x43, 0xf1, 0x29, 0xe5, 0x65, 0xcd, 0x52, 0x71, 0xf6, 0x86, 0x71, 0x5e, 0xe5, + 0x11, 0x8b, 0x15, 0x22, 0x1b, 0x86, 0x45, 0x2c, 0x9b, 0x7c, 0x37, 0x84, 0xfb, 0x8c, 0x44, 0x9c, + 0x1b, 0xca, 0x12, 0x12, 0x29, 0x77, 0xeb, 0x68, 0x5e, 0xe9, 0x37, 0x13, 0xee, 0xdc, 0x6c, 0x7f, + 0x2b, 0x79, 0xcd, 0x3c, 0x55, 0x8e, 0x1d, 0xe5, 0x54, 0x39, 0xde, 0xf7, 0x44, 0xf9, 0x15, 0x0b, + 0xc6, 0x6a, 0x46, 0x7e, 0xd1, 0xf2, 0x8b, 0x79, 0x25, 0xd1, 0xcd, 0xca, 0x5a, 0x2a, 0xee, 0xc4, + 0x99, 0x25, 0x98, 0xe0, 0xce, 0x13, 0xc7, 0xf0, 0x23, 0x34, 0x0f, 0x2e, 0x1c, 0xbd, 0xba, 0x9e, + 0xc3, 0xf6, 0x90, 0x38, 0x92, 0x8b, 0xcf, 0x28, 0x60, 0x28, 0x79, 0x91, 0xf7, 0xa1, 0xa8, 0xc2, + 0x21, 0x65, 0xb0, 0x22, 0xe6, 0x61, 0xa2, 0x4e, 0x3a, 0xa0, 0x54, 0xba, 0x09, 0x01, 0x45, 0xcd, + 0x91, 0x34, 0x61, 0xa0, 0xee, 0x34, 0x64, 0xd8, 0xe2, 0x4a, 0x3e, 0xd9, 0x7c, 0x14, 0x4f, 0x7e, + 0x3e, 0x5a, 0x98, 0xbb, 0x81, 0x8c, 0x05, 0xb9, 0x17, 0xa7, 0x39, 0x9c, 0xcc, 0x6d, 0xf7, 0x4d, + 0xaa, 0x49, 0xc2, 0x48, 0xd0, 0x93, 0x35, 0xb1, 0x2e, 0x7d, 0x76, 0x7f, 0x8e, 0xb3, 0x5d, 0xcc, + 0x27, 0x1d, 0x90, 0x78, 0x68, 0x21, 0xf6, 0xfb, 0x31, 0x2e, 0xfc, 0x81, 0x99, 0x9f, 0xc8, 0x8b, + 0xcb, 0xd2, 0xc6, 0xc6, 0x7a, 0xcf, 0xc3, 0x32, 0xd7, 0x61, 0x44, 0x24, 0xaa, 0x15, 0x81, 0x9c, + 0xa3, 0x57, 0xa7, 0xfa, 0xa7, 0xbb, 0x8d, 0x45, 0xb7, 0xf8, 0x1f, 0xa2, 0xaa, 0x4b, 0x7e, 0xc9, + 0x82, 0x33, 0x4c, 0xc6, 0xc5, 0x99, 0x75, 0xcb, 0x24, 0x2f, 0x29, 0x72, 0x3b, 0x64, 0x3a, 0x82, + 0x5a, 0xfd, 0xfa, 0xf0, 0x70, 0x33, 0xc1, 0x0e, 0x53, 0xec, 0xc9, 0x07, 0x50, 0x0c, 0xdd, 0x3a, + 0xad, 0x39, 0x41, 0x58, 0x3e, 0x77, 0x32, 0x4d, 0x89, 0xdd, 0x07, 0x92, 0x11, 0x6a, 0x96, 0xe4, + 0x6f, 0xf1, 0x3c, 0xf8, 0xf2, 0xcd, 0x12, 0xf9, 0x9c, 0xd6, 0xf9, 0x13, 0x7b, 0x4e, 0x4b, 0x58, + 0xd5, 0x93, 0xec, 0x30, 0xcd, 0x9f, 0xfc, 0x35, 0x0b, 0x2e, 0x88, 0x7c, 0x8f, 0xe9, 0x64, 0x9f, + 0x17, 0x1e, 0xd2, 0x62, 0xc1, 0x23, 0x50, 0xe7, 0xb2, 0x48, 0x62, 0x36, 0x27, 0x9e, 0x30, 0x2a, + 0x30, 0x1d, 0x8d, 0x3c, 0x0e, 0x38, 0x3f, 0x37, 0x9a, 0x7e, 0x9d, 0x8b, 0xc7, 0x71, 0x24, 0x40, + 0x98, 0x64, 0x4c, 0x5e, 0x86, 0xd1, 0x8e, 0xdc, 0xa0, 0xdc, 0xb0, 0xcd, 0xe3, 0x89, 0x07, 0xc4, + 0x9d, 0x8b, 0xf5, 0x18, 0x8c, 0x26, 0x4e, 0x22, 0x7b, 0xd8, 0x95, 0xc3, 0xb2, 0x87, 0x91, 0xdb, + 0x30, 0x1a, 0xf9, 0x2d, 0x1a, 0xc8, 0xf3, 0x5b, 0x99, 0xcf, 0xc0, 0xcb, 0x59, 0x6b, 0x6b, 0x43, + 0xa3, 0xc5, 0xe7, 0xbb, 0x18, 0x16, 0xa2, 0x49, 0x87, 0x87, 0x07, 0xca, 0x3c, 0x9a, 0x01, 0x37, + 0x17, 0x3c, 0x99, 0x0a, 0x0f, 0x34, 0x0b, 0x31, 0x89, 0x4b, 0x6e, 0xc0, 0xd9, 0x4e, 0xe0, 0xfa, + 0x81, 0x1b, 0xed, 0xcd, 0xb7, 0x9c, 0x30, 0xe4, 0x04, 0xc4, 0x8d, 0x02, 0xed, 0xa1, 0x5f, 0x4f, + 0x23, 0x60, 0x6f, 0x1d, 0x36, 0x0c, 0x0a, 0x58, 0x7e, 0x8a, 0x6b, 0xbe, 0x63, 0xe2, 0x36, 0x82, + 0x80, 0xa1, 0x2e, 0xed, 0x93, 0x4b, 0xeb, 0xe9, 0x87, 0xc9, 0xa5, 0x45, 0xea, 0xf0, 0xb4, 0xd3, + 0x8d, 0x7c, 0x7e, 0x21, 0x3b, 0x59, 0x45, 0x44, 0x4a, 0x3e, 0x2b, 0x82, 0x2f, 0x0f, 0xf6, 0xa7, + 0x9f, 0x9e, 0x3b, 0x04, 0x0f, 0x0f, 0xa5, 0x42, 0x3e, 0x07, 0x45, 0x2a, 0xf3, 0x81, 0x95, 0x7f, + 0x2c, 0xaf, 0x6d, 0x3b, 0x99, 0x61, 0x4c, 0x85, 0xc0, 0x09, 0x18, 0x6a, 0x7e, 0x64, 0x03, 0x46, + 0x9b, 0x7e, 0x18, 0xcd, 0xb5, 0x5c, 0x27, 0xa4, 0x61, 0xf9, 0x19, 0x3e, 0x69, 0x32, 0xb5, 0xa1, + 0x25, 0x85, 0x16, 0xcf, 0x99, 0xa5, 0xb8, 0x26, 0x9a, 0x64, 0x08, 0xe5, 0xce, 0x34, 0x1e, 0x26, + 0xaa, 0x1c, 0x1d, 0x97, 0x79, 0xc7, 0x5e, 0xc8, 0xa2, 0xbc, 0xee, 0xd7, 0xab, 0x49, 0x6c, 0xed, + 0x4d, 0x33, 0x81, 0x98, 0xa6, 0x49, 0x5e, 0x85, 0xb1, 0x8e, 0x5f, 0xaf, 0x76, 0x68, 0x6d, 0xdd, + 0x89, 0x6a, 0xcd, 0xf2, 0x74, 0xd2, 0x90, 0xb5, 0x6e, 0x94, 0x61, 0x02, 0x93, 0x74, 0x60, 0xa4, + 0x2d, 0x6e, 0x4b, 0x96, 0x9f, 0xcb, 0xeb, 0xb4, 0x21, 0xaf, 0x5f, 0x8a, 0x1d, 0x5c, 0xfe, 0x41, + 0xc5, 0x86, 0xfc, 0x03, 0x0b, 0x26, 0x52, 0x11, 0xf2, 0xe5, 0x1f, 0xcf, 0x4d, 0x89, 0x48, 0x12, + 0xae, 0xbc, 0xc0, 0x87, 0x2f, 0x09, 0xbc, 0xdf, 0x0b, 0xc2, 0x74, 0x8b, 0xc4, 0xb8, 0xf0, 0x2b, + 0xcf, 0xe5, 0xe7, 0xf3, 0x1b, 0x17, 0x4e, 0x50, 0x8d, 0x0b, 0xff, 0x83, 0x8a, 0x0d, 0xb9, 0x02, + 0x23, 0x32, 0xcd, 0x47, 0xf9, 0x85, 0xa4, 0x47, 0x54, 0x66, 0x03, 0x41, 0x55, 0x3e, 0xf5, 0x53, + 0x70, 0xb6, 0xe7, 0x30, 0x75, 0xac, 0x7b, 0xb7, 0xbf, 0x6a, 0x81, 0x79, 0xb9, 0x2d, 0xf7, 0x24, + 0xbc, 0xaf, 0xc2, 0x58, 0x4d, 0xbc, 0x00, 0x21, 0xae, 0xc7, 0x0d, 0x26, 0xad, 0x82, 0xf3, 0x46, + 0x19, 0x26, 0x30, 0xed, 0x25, 0x20, 0xbd, 0x19, 0x12, 0x53, 0xf1, 0x17, 0xd6, 0x91, 0xe2, 0x2f, + 0x7e, 0xcb, 0x82, 0xf1, 0x84, 0xce, 0x90, 0xbb, 0x13, 0x6d, 0x11, 0x48, 0xdb, 0x0d, 0x02, 0x3f, + 0x30, 0x1f, 0x1f, 0x90, 0x29, 0xe1, 0x78, 0xba, 0x9c, 0x95, 0x9e, 0x52, 0xcc, 0xa8, 0x61, 0xff, + 0xd3, 0x41, 0x88, 0x63, 0x40, 0x75, 0xa2, 0x2c, 0xab, 0x6f, 0xa2, 0xac, 0x97, 0xa0, 0xf8, 0x4e, + 0xe8, 0x7b, 0xeb, 0x71, 0x3a, 0x2d, 0xfd, 0x2d, 0x5e, 0xab, 0xae, 0xad, 0x72, 0x4c, 0x8d, 0xc1, + 0xb1, 0xdf, 0x5d, 0x74, 0x5b, 0x51, 0x6f, 0xbe, 0xa5, 0xd7, 0x5e, 0x17, 0x70, 0xd4, 0x18, 0xfc, + 0x79, 0x84, 0x1d, 0xaa, 0xcd, 0xc5, 0xf1, 0xf3, 0x08, 0x22, 0xf9, 0x29, 0x2f, 0x23, 0xb3, 0x50, + 0xd2, 0xd6, 0x66, 0x69, 0xfc, 0xd6, 0x23, 0xa5, 0xad, 0xd2, 0x18, 0xe3, 0x70, 0x85, 0x50, 0x9a, + 0x46, 0xa5, 0x51, 0xa3, 0x9a, 0xc7, 0x81, 0x21, 0x65, 0x6c, 0x15, 0xb2, 0x5d, 0x81, 0x51, 0xb3, + 0xcc, 0xf2, 0x24, 0x96, 0x4e, 0xc2, 0x93, 0x68, 0x06, 0x24, 0x0f, 0x1d, 0x35, 0x20, 0x39, 0x39, + 0xb7, 0x8b, 0x47, 0x9a, 0xdb, 0x3f, 0x37, 0x00, 0x23, 0x77, 0x68, 0xc0, 0x93, 0x00, 0x5e, 0x81, + 0x91, 0x1d, 0xf1, 0x33, 0x7d, 0xe9, 0x47, 0x62, 0xa0, 0x2a, 0x67, 0xdf, 0x6d, 0xb3, 0xeb, 0xb6, + 0xea, 0x0b, 0xf1, 0x2a, 0xd6, 0xdf, 0xad, 0xa2, 0x0a, 0x30, 0xc6, 0x61, 0x15, 0x1a, 0x4c, 0xb3, + 0x6f, 0xb7, 0xdd, 0x28, 0x1d, 0x57, 0x73, 0x43, 0x15, 0x60, 0x8c, 0x43, 0x5e, 0x80, 0xe1, 0x86, + 0x1b, 0x6d, 0x38, 0x8d, 0xb4, 0xe3, 0xec, 0x06, 0x87, 0xa2, 0x2c, 0xe5, 0x9e, 0x17, 0x37, 0xda, + 0x08, 0x28, 0xb7, 0xb5, 0xf6, 0xdc, 0xfe, 0xbd, 0x61, 0x94, 0x61, 0x02, 0x93, 0x37, 0xc9, 0x97, + 0x3d, 0x93, 0x1e, 0x91, 0xb8, 0x49, 0xaa, 0x00, 0x63, 0x1c, 0x36, 0xff, 0x6b, 0x7e, 0xbb, 0xe3, + 0xb6, 0x64, 0x9c, 0xa9, 0x31, 0xff, 0xe7, 0x25, 0x1c, 0x35, 0x06, 0xc3, 0x66, 0x22, 0x8c, 0x89, + 0x9f, 0x74, 0x2a, 0xfa, 0x75, 0x09, 0x47, 0x8d, 0x61, 0xdf, 0x81, 0x71, 0xb1, 0x92, 0xe7, 0x5b, + 0x8e, 0xdb, 0xbe, 0x31, 0x4f, 0xae, 0xf7, 0x04, 0x53, 0x5f, 0xc9, 0x08, 0xa6, 0xbe, 0x90, 0xa8, + 0xd4, 0x1b, 0x54, 0x6d, 0x7f, 0xa7, 0x00, 0xc5, 0x53, 0x7c, 0xcd, 0xa3, 0x93, 0x78, 0xcd, 0x23, + 0xef, 0x37, 0x1d, 0xb2, 0x5e, 0xf2, 0xb8, 0x97, 0x7a, 0xc9, 0x63, 0x3d, 0xcf, 0xfb, 0x05, 0x87, + 0xbe, 0xe2, 0xf1, 0x03, 0x0b, 0xce, 0x2b, 0x54, 0x2e, 0xd4, 0x2a, 0xae, 0xc7, 0x5d, 0xee, 0x27, + 0x3f, 0xcc, 0xef, 0x27, 0x86, 0xf9, 0xcd, 0xfc, 0xba, 0x6c, 0xf6, 0xa3, 0xef, 0x13, 0x53, 0xdf, + 0xb7, 0xa0, 0x9c, 0x55, 0xe1, 0x14, 0x9e, 0x31, 0x79, 0x2f, 0xf9, 0x8c, 0xc9, 0x9d, 0x93, 0xe9, + 0x79, 0x9f, 0xe7, 0x4c, 0x7e, 0xd0, 0xa7, 0xdf, 0xfc, 0xed, 0x90, 0x96, 0xda, 0xee, 0xac, 0xbc, + 0x9c, 0x59, 0x82, 0x45, 0xf6, 0xbe, 0xd9, 0x82, 0xe1, 0x90, 0xfb, 0xa7, 0xe5, 0x14, 0x58, 0xca, + 0x63, 0x13, 0x64, 0xf4, 0xa4, 0x31, 0x92, 0xff, 0x46, 0xc9, 0xc3, 0xfe, 0x4f, 0x16, 0x8c, 0x9d, + 0xe2, 0x5b, 0x35, 0x7e, 0xf2, 0x23, 0xbf, 0x96, 0xdf, 0x47, 0xee, 0xf3, 0x61, 0x7f, 0xfd, 0x32, + 0x24, 0x9e, 0x85, 0x21, 0xef, 0x41, 0x49, 0x69, 0xa0, 0xea, 0xde, 0x52, 0x9e, 0xaf, 0x3f, 0xe8, + 0x6d, 0x46, 0x41, 0x42, 0x8c, 0xf9, 0xa5, 0x22, 0x02, 0x0a, 0x47, 0x8a, 0x08, 0x78, 0xbc, 0x6f, + 0x47, 0x64, 0xdb, 0x07, 0x06, 0x4f, 0xc4, 0x3e, 0xf0, 0x74, 0xee, 0xf6, 0x81, 0x67, 0x4e, 0xd9, + 0x3e, 0x60, 0x18, 0x6b, 0x87, 0x1e, 0xc1, 0x58, 0xfb, 0x1e, 0x9c, 0xdf, 0x89, 0x37, 0x7f, 0x3d, + 0x93, 0xe4, 0x13, 0x18, 0x57, 0x32, 0xad, 0x02, 0x4c, 0x91, 0x09, 0x23, 0xea, 0x45, 0x86, 0xda, + 0x10, 0x47, 0x4a, 0xde, 0xc9, 0x20, 0x87, 0x99, 0x4c, 0xd2, 0x56, 0xb7, 0x91, 0x23, 0x58, 0xdd, + 0xfe, 0x51, 0xdf, 0x77, 0x6f, 0x8b, 0x27, 0xfb, 0xee, 0xed, 0x93, 0xc7, 0x7e, 0xf3, 0xf6, 0xf9, + 0xd8, 0x29, 0x21, 0xa2, 0x50, 0xb2, 0x3d, 0x08, 0x5f, 0x4b, 0x7b, 0x3a, 0x81, 0x0f, 0xfd, 0x67, + 0xf3, 0xd5, 0x7a, 0x72, 0xf0, 0x76, 0x8e, 0x3e, 0x82, 0xb7, 0x33, 0x65, 0x02, 0x1d, 0xcb, 0xc9, + 0x04, 0xea, 0xc1, 0xa4, 0xdb, 0x76, 0x1a, 0x74, 0xbd, 0xdb, 0x6a, 0x89, 0x60, 0x55, 0xf5, 0x3e, + 0x47, 0xe6, 0x49, 0xea, 0x96, 0x5f, 0x73, 0x5a, 0xe9, 0x67, 0x90, 0x74, 0x50, 0xee, 0xcd, 0x14, + 0x25, 0xec, 0xa1, 0xcd, 0x26, 0x2c, 0xcf, 0x46, 0x41, 0x23, 0x36, 0xda, 0xdc, 0xa5, 0x26, 0x1f, + 0x28, 0x5f, 0x8a, 0xc1, 0x68, 0xe2, 0x90, 0x65, 0x28, 0xd5, 0xbd, 0x50, 0x5e, 0x73, 0x99, 0xe0, + 0xc2, 0xec, 0x63, 0x4c, 0x04, 0x2e, 0xac, 0x56, 0xf5, 0x05, 0x97, 0xa7, 0x33, 0x12, 0x9d, 0xe8, + 0x72, 0x8c, 0xeb, 0x93, 0x15, 0x4e, 0x4c, 0xa6, 0x58, 0x16, 0x9e, 0xae, 0x67, 0xfb, 0x18, 0xee, + 0x16, 0x56, 0x55, 0x92, 0xe8, 0x71, 0xc9, 0x4e, 0xe6, 0x4a, 0x8e, 0x29, 0x18, 0xef, 0xa4, 0x9c, + 0x3d, 0xf4, 0x9d, 0x14, 0x9e, 0xe1, 0x28, 0x6a, 0x69, 0x33, 0xfd, 0xe5, 0xdc, 0x32, 0x1c, 0xc5, + 0x31, 0x24, 0x32, 0xc3, 0x51, 0x0c, 0x40, 0x93, 0x25, 0x59, 0xeb, 0xe7, 0xae, 0x38, 0xc7, 0x85, + 0xc6, 0xf1, 0x9d, 0x0f, 0xa6, 0xdd, 0xfa, 0xfc, 0xa1, 0x76, 0xeb, 0x1e, 0x3b, 0xfb, 0x85, 0x63, + 0xd8, 0xd9, 0x9b, 0x3c, 0xf7, 0xcc, 0x8d, 0x79, 0xe9, 0xda, 0xc8, 0x41, 0xa1, 0xe3, 0x17, 0x5f, + 0x45, 0x4c, 0x0e, 0xff, 0x89, 0x82, 0x01, 0x59, 0x87, 0xf3, 0x1d, 0xbf, 0xde, 0x63, 0xb3, 0xe7, + 0xbe, 0x0c, 0x23, 0x90, 0x7d, 0x3d, 0x03, 0x07, 0x33, 0x6b, 0x72, 0xf1, 0x1c, 0xc3, 0x79, 0x12, + 0xa3, 0x21, 0x29, 0x9e, 0x63, 0x30, 0x9a, 0x38, 0x69, 0xab, 0xf5, 0x93, 0x27, 0x66, 0xb5, 0x9e, + 0x3a, 0x05, 0xab, 0xf5, 0x53, 0x47, 0xb6, 0x5a, 0x7f, 0x00, 0xe7, 0x3a, 0x7e, 0x7d, 0xc1, 0x0d, + 0x83, 0x2e, 0x8f, 0xde, 0xaf, 0x74, 0xeb, 0x0d, 0x1a, 0x71, 0xb3, 0xf7, 0xe8, 0xd5, 0xab, 0x66, + 0x23, 0x3b, 0x7c, 0x21, 0xcf, 0xec, 0xbc, 0xbc, 0x49, 0x23, 0xf1, 0x31, 0xd3, 0xb5, 0xf8, 0x81, + 0x89, 0x07, 0x25, 0x65, 0x14, 0x62, 0x16, 0x1f, 0xd3, 0x68, 0xfe, 0xec, 0xe9, 0x18, 0xcd, 0x3f, + 0x0d, 0xc5, 0xb0, 0xd9, 0x8d, 0xea, 0xfe, 0xae, 0xc7, 0x3d, 0x23, 0x25, 0xfd, 0x52, 0x62, 0xb1, + 0x2a, 0xe1, 0xf7, 0xf7, 0xa7, 0x27, 0xd5, 0x6f, 0xc3, 0xa4, 0x20, 0x21, 0xe4, 0x37, 0xfa, 0xc4, + 0x27, 0xdb, 0x27, 0x19, 0x9f, 0x7c, 0xe9, 0x58, 0xb1, 0xc9, 0x59, 0x9e, 0x81, 0xe7, 0x7e, 0xe8, + 0x3c, 0x03, 0xbf, 0x66, 0xc1, 0xf8, 0x8e, 0x69, 0xbf, 0x91, 0xde, 0x8b, 0x1c, 0xbc, 0xa8, 0x09, + 0xb3, 0x50, 0xc5, 0x66, 0xc2, 0x2e, 0x01, 0xba, 0x9f, 0x06, 0x60, 0xb2, 0x25, 0x19, 0x1e, 0xde, + 0xe7, 0x1f, 0x97, 0x87, 0xf7, 0x03, 0x2e, 0xcc, 0x54, 0x38, 0x14, 0x77, 0x69, 0xe4, 0x1b, 0x72, + 0xa5, 0x04, 0xa3, 0x8e, 0xb8, 0x32, 0xf9, 0x91, 0xaf, 0x58, 0x30, 0xa9, 0x0e, 0x67, 0xd2, 0xfe, + 0x1a, 0xca, 0xa0, 0x91, 0x3c, 0xcf, 0x84, 0x3c, 0xea, 0x70, 0x23, 0xc5, 0x07, 0x7b, 0x38, 0x33, + 0xd1, 0xae, 0x23, 0x02, 0x1a, 0x21, 0x8f, 0x8d, 0x92, 0x8a, 0xcc, 0x5c, 0x0c, 0x46, 0x13, 0xe7, + 0xd1, 0x9d, 0x3c, 0x7f, 0x48, 0xe0, 0x4c, 0xea, 0xdd, 0xca, 0x8f, 0x27, 0xb3, 0x5e, 0x5e, 0x4e, + 0xa7, 0x1e, 0x1c, 0x57, 0xf8, 0x89, 0xf4, 0x83, 0x89, 0xfc, 0x80, 0x85, 0x13, 0xcd, 0x0f, 0x38, + 0x70, 0x3a, 0xf9, 0x01, 0x27, 0x4f, 0x22, 0x3f, 0xe0, 0xd9, 0x63, 0xe5, 0x07, 0x34, 0xf2, 0x33, + 0x0e, 0x3e, 0x20, 0x3f, 0xe3, 0x1c, 0x4c, 0xa8, 0x30, 0x56, 0x2a, 0x13, 0xbf, 0x09, 0x7b, 0xf9, + 0x25, 0x59, 0x65, 0x62, 0x3e, 0x59, 0x8c, 0x69, 0x7c, 0xf2, 0x91, 0x05, 0x43, 0x1e, 0xaf, 0x39, + 0x9c, 0x57, 0xca, 0xe3, 0xe4, 0xd4, 0xe2, 0xe7, 0x1d, 0x99, 0x68, 0x58, 0x85, 0x09, 0x0d, 0x71, + 0xd8, 0x7d, 0xf5, 0x03, 0x45, 0x0b, 0xc8, 0xdb, 0x50, 0xf6, 0xb7, 0xb6, 0x5a, 0xbe, 0x53, 0x8f, + 0x93, 0x18, 0x2a, 0x83, 0xbe, 0xb8, 0x0a, 0xa0, 0x93, 0x38, 0xad, 0xf5, 0xc1, 0xc3, 0xbe, 0x14, + 0xd8, 0x81, 0x75, 0x22, 0x8c, 0xfc, 0x80, 0xd6, 0xe3, 0xc3, 0x75, 0x89, 0xf7, 0x99, 0xe6, 0xde, + 0xe7, 0x6a, 0x92, 0x8f, 0xe8, 0xbd, 0xfe, 0x28, 0xa9, 0x52, 0x4c, 0x37, 0x8b, 0x04, 0x70, 0xb1, + 0x93, 0x75, 0xb6, 0x0f, 0x65, 0xf0, 0xed, 0x61, 0x16, 0x06, 0xb5, 0x74, 0x2f, 0x66, 0x5a, 0x07, + 0x42, 0xec, 0x43, 0xd9, 0x4c, 0x6f, 0x58, 0x3c, 0x9d, 0xf4, 0x86, 0xc9, 0xd7, 0x66, 0xc7, 0x4f, + 0xfd, 0xb5, 0x59, 0xf2, 0x67, 0x99, 0x99, 0x38, 0xc5, 0x91, 0xb8, 0x91, 0xfb, 0x9c, 0xf8, 0xa1, + 0xcb, 0xc6, 0xf9, 0x0f, 0x2d, 0x98, 0x12, 0x33, 0x2f, 0xad, 0x88, 0xf1, 0x77, 0xbc, 0xcf, 0x9c, + 0x88, 0xcf, 0x87, 0xbb, 0xbf, 0xab, 0x09, 0xae, 0xdc, 0x15, 0x71, 0x48, 0x4b, 0xc8, 0xaf, 0x64, + 0xa8, 0x7f, 0x13, 0x79, 0x19, 0x99, 0xb2, 0xb3, 0x38, 0x9e, 0x3b, 0x38, 0x8a, 0xc6, 0xf7, 0x4f, + 0xfa, 0xda, 0xc0, 0x08, 0x6f, 0xde, 0x5f, 0x3d, 0x21, 0x1b, 0x98, 0x99, 0x6a, 0xf2, 0x38, 0x96, + 0xb0, 0xa9, 0x9f, 0x97, 0xb9, 0xae, 0xfb, 0x66, 0x64, 0xdf, 0x4c, 0x3e, 0x4e, 0x7a, 0x2b, 0xcf, + 0x7c, 0xb4, 0x66, 0x6a, 0xf8, 0xbf, 0x61, 0xc1, 0xf9, 0x2c, 0x21, 0x99, 0xd1, 0xa4, 0xcf, 0x26, + 0x9b, 0x94, 0xa3, 0x92, 0x66, 0x36, 0x28, 0x9f, 0x24, 0x9c, 0xdf, 0x2f, 0x19, 0x9e, 0x87, 0x88, + 0x76, 0x4e, 0xf0, 0x11, 0xeb, 0xf1, 0xff, 0xff, 0x88, 0xf5, 0x69, 0x24, 0xf4, 0x4e, 0x3c, 0x47, + 0x3d, 0xf4, 0xb8, 0x9e, 0xa3, 0x1e, 0x7e, 0x98, 0xe7, 0xa8, 0x47, 0x1e, 0xdb, 0x73, 0xd4, 0xc5, + 0x23, 0x3e, 0x47, 0x5d, 0xfa, 0x21, 0x7d, 0x8e, 0xfa, 0x37, 0xf5, 0x1b, 0xd3, 0x42, 0x19, 0x78, + 0x23, 0xdf, 0x24, 0x87, 0xff, 0xef, 0x3d, 0x34, 0xfd, 0xc7, 0x05, 0x98, 0xd0, 0x5b, 0xb7, 0x13, + 0x6e, 0x57, 0x69, 0x74, 0x0a, 0x61, 0x13, 0xbb, 0x89, 0xb0, 0x89, 0x3c, 0x2d, 0x55, 0xa2, 0x0b, + 0x7d, 0x83, 0x54, 0xbe, 0x90, 0x0a, 0x52, 0xb9, 0x9b, 0x3f, 0xeb, 0xc3, 0x63, 0x55, 0xfe, 0x87, + 0x05, 0xe7, 0x52, 0x35, 0x4e, 0xc1, 0x91, 0xbf, 0x93, 0x74, 0xe4, 0xbf, 0x9e, 0x7b, 0xaf, 0xfb, + 0xf8, 0xf3, 0xbf, 0x5e, 0xe8, 0xe9, 0x2d, 0xd7, 0x0b, 0x7f, 0xce, 0x52, 0xef, 0x94, 0x5b, 0x79, + 0x7b, 0xea, 0x0c, 0x36, 0x33, 0xfc, 0xa9, 0x72, 0xb1, 0x5a, 0x33, 0x9f, 0x2f, 0x9f, 0xfa, 0x59, + 0x0b, 0x20, 0x46, 0x7a, 0x5c, 0x2a, 0x8c, 0xfd, 0xdb, 0x05, 0xb8, 0x90, 0x39, 0x8d, 0xc8, 0x97, + 0xf5, 0x21, 0x5f, 0x0c, 0xd4, 0xe6, 0x09, 0xcd, 0x57, 0xf3, 0xac, 0x3f, 0x9e, 0x38, 0xeb, 0xcb, + 0x23, 0xfe, 0xe3, 0x52, 0x40, 0x65, 0xfe, 0x5b, 0x63, 0xb0, 0xfe, 0xa7, 0x05, 0x93, 0xe9, 0xc3, + 0xc6, 0x29, 0x88, 0xac, 0x7b, 0x09, 0x91, 0x75, 0x27, 0x7f, 0xe3, 0x7a, 0xdf, 0x28, 0xaf, 0x3f, + 0x36, 0xc2, 0xdb, 0x14, 0xf2, 0x29, 0xc8, 0x8c, 0xdd, 0xa4, 0xcc, 0xc0, 0xfc, 0x7b, 0xdc, 0x47, + 0x68, 0xbc, 0x0b, 0x59, 0xfe, 0x85, 0xa3, 0xe5, 0xfe, 0x48, 0x84, 0xa8, 0x17, 0x8e, 0x1c, 0xa2, + 0xfe, 0x8b, 0x85, 0xde, 0x21, 0xe6, 0x82, 0xea, 0x43, 0xa6, 0x9a, 0x19, 0xa7, 0xdd, 0xfc, 0x52, + 0x33, 0x24, 0xce, 0xd6, 0xba, 0x8d, 0x89, 0x93, 0x75, 0x82, 0x33, 0x79, 0x27, 0x6e, 0x09, 0xfb, + 0x52, 0x0f, 0xcc, 0xb3, 0xd3, 0x6f, 0x9a, 0x73, 0xfb, 0xf6, 0x5d, 0x83, 0x12, 0xb7, 0xb4, 0x27, + 0x68, 0xdb, 0xe3, 0x30, 0xfa, 0xa6, 0xdb, 0xd1, 0xae, 0x81, 0x99, 0x6f, 0x7d, 0xef, 0xf2, 0x13, + 0xbf, 0xff, 0xbd, 0xcb, 0x4f, 0x7c, 0xe7, 0x7b, 0x97, 0x9f, 0xf8, 0xe2, 0xc1, 0x65, 0xeb, 0x5b, + 0x07, 0x97, 0xad, 0xdf, 0x3f, 0xb8, 0x6c, 0x7d, 0xe7, 0xe0, 0xb2, 0xf5, 0x9f, 0x0f, 0x2e, 0x5b, + 0x7f, 0xf3, 0xbf, 0x5c, 0x7e, 0xe2, 0xcd, 0xa2, 0xea, 0xdb, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, + 0x47, 0x4f, 0x11, 0xd8, 0x1e, 0xa8, 0x00, 0x00, } func (m *Amount) Marshal() (dAtA []byte, err error) { @@ -6538,6 +6598,70 @@ func (m *Item) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *LabelKeys) 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 *LabelKeys) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LabelKeys) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Items[iNdEx]) + copy(dAtA[i:], m.Items[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Items[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *LabelValues) 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 *LabelValues) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LabelValues) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Items[iNdEx]) + copy(dAtA[i:], m.Items[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Items[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *LifecycleHook) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -11999,6 +12123,36 @@ func (m *Item) Size() (n int) { return n } +func (m *LabelKeys) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Items) > 0 { + for _, s := range m.Items { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LabelValues) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Items) > 0 { + for _, s := range m.Items { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *LifecycleHook) Size() (n int) { if m == nil { return 0 @@ -14268,6 +14422,26 @@ func (this *Inputs) String() string { }, "") return s } +func (this *LabelKeys) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LabelKeys{`, + `Items:` + fmt.Sprintf("%v", this.Items) + `,`, + `}`, + }, "") + return s +} +func (this *LabelValues) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LabelValues{`, + `Items:` + fmt.Sprintf("%v", this.Items) + `,`, + `}`, + }, "") + return s +} func (this *LifecycleHook) String() string { if this == nil { return "nil" @@ -22854,6 +23028,170 @@ func (m *Item) Unmarshal(dAtA []byte) error { } return nil } +func (m *LabelKeys) 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: LabelKeys: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LabelKeys: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", 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.Items = append(m.Items, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LabelValues) 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: LabelValues: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LabelValues: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", 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.Items = append(m.Items, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *LifecycleHook) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 45428fffc3e9..a0cb9ab52628 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -636,6 +636,16 @@ message Item { optional bytes value = 1; } +// LabelKeys is list of keys +message LabelKeys { + repeated string items = 1; +} + +// Labels is list of workflow labels +message LabelValues { + repeated string items = 1; +} + message LifecycleHook { optional string template = 1; diff --git a/pkg/apis/workflow/v1alpha1/label.go b/pkg/apis/workflow/v1alpha1/label.go new file mode 100644 index 000000000000..6c38754ba368 --- /dev/null +++ b/pkg/apis/workflow/v1alpha1/label.go @@ -0,0 +1,11 @@ +package v1alpha1 + +// Labels is list of workflow labels +type LabelValues struct { + Items []string `json:"items,omitempty" protobuf:"bytes,1,opt,name=items"` +} + +// LabelKeys is list of keys +type LabelKeys struct { + Items []string `json:"items,omitempty" protobuf:"bytes,1,opt,name=items"` +} diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 88469c2c2dba..81029806c7b5 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -62,6 +62,8 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Histogram": schema_pkg_apis_workflow_v1alpha1_Histogram(ref), "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Inputs": schema_pkg_apis_workflow_v1alpha1_Inputs(ref), "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Item": schema_pkg_apis_workflow_v1alpha1_Item(ref), + "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.LabelKeys": schema_pkg_apis_workflow_v1alpha1_LabelKeys(ref), + "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.LabelValues": schema_pkg_apis_workflow_v1alpha1_LabelValues(ref), "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.LifecycleHook": schema_pkg_apis_workflow_v1alpha1_LifecycleHook(ref), "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Link": schema_pkg_apis_workflow_v1alpha1_Link(ref), "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.MemoizationStatus": schema_pkg_apis_workflow_v1alpha1_MemoizationStatus(ref), @@ -2672,6 +2674,60 @@ func schema_pkg_apis_workflow_v1alpha1_Item(ref common.ReferenceCallback) common } } +func schema_pkg_apis_workflow_v1alpha1_LabelKeys(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "LabelKeys is list of keys", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_workflow_v1alpha1_LabelValues(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Labels is list of workflow labels", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "items": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + func schema_pkg_apis_workflow_v1alpha1_LifecycleHook(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 23dadd4ed449..eae2763f79b6 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -1279,6 +1279,48 @@ func (in *Item) DeepCopy() *Item { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LabelKeys) DeepCopyInto(out *LabelKeys) { + *out = *in + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LabelKeys. +func (in *LabelKeys) DeepCopy() *LabelKeys { + if in == nil { + return nil + } + out := new(LabelKeys) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LabelValues) DeepCopyInto(out *LabelValues) { + *out = *in + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LabelValues. +func (in *LabelValues) DeepCopy() *LabelValues { + if in == nil { + return nil + } + out := new(LabelValues) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LifecycleHook) DeepCopyInto(out *LifecycleHook) { *out = *in diff --git a/server/workflowarchive/archived_workflow_server.go b/server/workflowarchive/archived_workflow_server.go index f9dfe9ab1fcf..3c2dfbbcc71a 100644 --- a/server/workflowarchive/archived_workflow_server.go +++ b/server/workflowarchive/archived_workflow_server.go @@ -12,6 +12,7 @@ import ( "google.golang.org/grpc/status" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" "github.com/argoproj/argo-workflows/v3/persist/sqldb" workflowarchivepkg "github.com/argoproj/argo-workflows/v3/pkg/apiclient/workflowarchive" @@ -149,3 +150,40 @@ func (w *archivedWorkflowServer) DeleteArchivedWorkflow(ctx context.Context, req } return &workflowarchivepkg.ArchivedWorkflowDeletedResponse{}, nil } + +func (w *archivedWorkflowServer) ListArchivedWorkflowLabelKeys(ctx context.Context, req *workflowarchivepkg.ListArchivedWorkflowLabelKeysRequest) (*wfv1.LabelKeys, error) { + labelkeys, err := w.wfArchive.ListWorkflowsLabelKeys() + if err != nil { + return nil, err + } + return labelkeys, nil +} + +func (w *archivedWorkflowServer) ListArchivedWorkflowLabelValues(ctx context.Context, req *workflowarchivepkg.ListArchivedWorkflowLabelValuesRequest) (*wfv1.LabelValues, error) { + options := req.ListOptions + + requirements, err := labels.ParseToRequirements(options.LabelSelector) + if err != nil { + return nil, err + } + if len(requirements) != 1 { + return nil, fmt.Errorf("only allow 1 labelRequirement, found %v", len(requirements)) + } + + key := "" + requirement := requirements[0] + if requirement.Operator() == selection.Exists { + key = requirement.Key() + } else { + return nil, fmt.Errorf("operation %v is not supported", requirement.Operator()) + } + + labels, err := w.wfArchive.ListWorkflowsLabelValues(key) + if err != nil { + return nil, err + } + if labels == nil { + return nil, status.Error(codes.NotFound, "not found") + } + return labels, err +} diff --git a/server/workflowarchive/archived_workflow_server_test.go b/server/workflowarchive/archived_workflow_server_test.go index 6b00f73d2dfc..9fc42c4582e5 100644 --- a/server/workflowarchive/archived_workflow_server_test.go +++ b/server/workflowarchive/archived_workflow_server_test.go @@ -68,6 +68,12 @@ func Test_archivedWorkflowServer(t *testing.T) { }, nil }) repo.On("DeleteWorkflow", "my-uid").Return(nil) + repo.On("ListWorkflowsLabelKeys").Return(&wfv1.LabelKeys{ + Items: []string{"foo", "bar"}, + }, nil) + repo.On("ListWorkflowsLabelValues", "my-key").Return(&wfv1.LabelValues{ + Items: []string{"my-key=foo", "my-key=bar"}, + }, nil) ctx := context.WithValue(context.WithValue(context.TODO(), auth.WfKey, wfClient), auth.KubeKey, kubeClient) t.Run("ListArchivedWorkflows", func(t *testing.T) { @@ -115,4 +121,14 @@ func Test_archivedWorkflowServer(t *testing.T) { _, err = w.DeleteArchivedWorkflow(ctx, &workflowarchivepkg.DeleteArchivedWorkflowRequest{Uid: "my-uid"}) assert.NoError(t, err) }) + t.Run("ListArchivedWorkflowLabelKeys", func(t *testing.T) { + resp, err := w.ListArchivedWorkflowLabelKeys(ctx, &workflowarchivepkg.ListArchivedWorkflowLabelKeysRequest{}) + assert.NoError(t, err) + assert.Len(t, resp.Items, 2) + }) + t.Run("ListArchivedWorkflowLabelValues", func(t *testing.T) { + resp, err := w.ListArchivedWorkflowLabelValues(ctx, &workflowarchivepkg.ListArchivedWorkflowLabelValuesRequest{ListOptions: &metav1.ListOptions{LabelSelector: "my-key"}}) + assert.NoError(t, err) + assert.Len(t, resp.Items, 2) + }) } diff --git a/test/e2e/argo_server_test.go b/test/e2e/argo_server_test.go index f5df855b40de..5bd8c887568c 100644 --- a/test/e2e/argo_server_test.go +++ b/test/e2e/argo_server_test.go @@ -1296,6 +1296,32 @@ spec: Expect(). Status(404) }) + + s.Run("ListLabelKeys", func() { + j := s.e().GET("/api/v1/archived-workflows-label-keys"). + Expect(). + Status(200). + JSON() + j. + Path("$.items"). + Array(). + Length(). + Gt(0) + }) + + s.Run("ListLabelValues", func() { + j := s.e().GET("/api/v1/archived-workflows-label-values"). + WithQuery("listOptions.labelSelector", "workflows.argoproj.io/test"). + Expect(). + Status(200). + JSON() + j. + Path("$.items"). + Array(). + Length(). + Equal(1) + }) + } func (s *ArgoServerSuite) TestWorkflowTemplateService() { diff --git a/test/e2e/cli_test.go b/test/e2e/cli_test.go index dacd10dfccde..68434cec072f 100644 --- a/test/e2e/cli_test.go +++ b/test/e2e/cli_test.go @@ -1412,6 +1412,39 @@ func (s *CLISuite) TestArchive() { }) } +func (s *CLISuite) TestArchiveLabel() { + s.Given(). + WorkflowTemplate("@smoke/workflow-template-whalesay-template.yaml"). + When(). + CreateWorkflowTemplates(). + RunCli([]string{"submit", "--from", "workflowtemplate/workflow-template-whalesay-template", "-l", "workflows.argoproj.io/test=true"}, func(t *testing.T, output string, err error) { + assert.NoError(t, err) + }). + WaitForWorkflow(). + Then(). + ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { + assert.Equal(t, status.Phase, wfv1.WorkflowSucceeded) + }) + s.Run("ListKeys", func() { + s.Given(). + RunCli([]string{"archive", "list-label-keys"}, func(t *testing.T, output string, err error) { + if assert.NoError(t, err) { + lines := strings.Split(output, "\n") + assert.Contains(t, lines, "workflows.argoproj.io/test") + } + }) + }) + s.Run("ListValues", func() { + s.Given(). + RunCli([]string{"archive", "list-label-values", "-l", "workflows.argoproj.io/test"}, func(t *testing.T, output string, err error) { + if assert.NoError(t, err) { + lines := strings.Split(output, "\n") + assert.Contains(t, lines[0], "true") + } + }) + }) +} + func (s *CLISuite) TestArgoSetOutputs() { s.Given(). Workflow(` diff --git a/ui/src/app/archived-workflows/components/archived-workflow-filters/archived-workflow-filters.tsx b/ui/src/app/archived-workflows/components/archived-workflow-filters/archived-workflow-filters.tsx index 0700daebacbb..adfd1bc0caa5 100644 --- a/ui/src/app/archived-workflows/components/archived-workflow-filters/archived-workflow-filters.tsx +++ b/ui/src/app/archived-workflows/components/archived-workflow-filters/archived-workflow-filters.tsx @@ -5,6 +5,7 @@ import {CheckboxFilter} from '../../../shared/components/checkbox-filter/checkbo import {InputFilter} from '../../../shared/components/input-filter'; import {NamespaceFilter} from '../../../shared/components/namespace-filter'; import {TagsInput} from '../../../shared/components/tags-input/tags-input'; +import {services} from '../../../shared/services'; import 'react-datepicker/dist/react-datepicker.css'; @@ -22,7 +23,22 @@ interface ArchivedWorkflowFilterProps { onChange: (namespace: string, name: string, selectedPhases: string[], labels: string[], minStartedAt: Date, maxStartedAt: Date) => void; } -export class ArchivedWorkflowFilters extends React.Component { +interface State { + labels: string[]; +} + +export class ArchivedWorkflowFilters extends React.Component { + constructor(props: ArchivedWorkflowFilterProps) { + super(props); + this.state = { + labels: [] + }; + } + + public componentDidMount(): void { + this.fetchArchivedWorkflowsLabelKeys(); + } + public render() { return (
@@ -57,7 +73,8 @@ export class ArchivedWorkflowFilters extends React.ComponentLabels

{ this.props.onChange(this.props.namespace, this.props.name, this.props.selectedPhases, tags, this.props.minStartedAt, this.props.maxStartedAt); @@ -114,19 +131,17 @@ export class ArchivedWorkflowFilters extends React.Component(); - workflows - .filter(wf => wf.metadata.labels) - .forEach(wf => { - Object.keys(wf.metadata.labels).forEach(label => { - const value = wf.metadata.labels[label]; - const suggestedLabel = `${label}=${value}`; - if (!suggestions.some(v => v === suggestedLabel)) { - suggestions.push(`${label}=${value}`); - } - }); + private fetchArchivedWorkflowsLabelKeys(): void { + services.archivedWorkflows.listLabelKeys().then(list => { + this.setState({ + labels: list.items || [] }); - return suggestions.sort((a, b) => a.localeCompare(b)); + }); + } + + private fetchArchivedWorkflowsLabels(key: string): Promise { + return services.archivedWorkflows.listLabelValues(key).then(list => { + return list.items.map(i => key + '=' + i); + }); } } diff --git a/ui/src/app/shared/components/tags-input/tags-input.tsx b/ui/src/app/shared/components/tags-input/tags-input.tsx index 2cb741e03026..3e5aa7aa8d4b 100644 --- a/ui/src/app/shared/components/tags-input/tags-input.tsx +++ b/ui/src/app/shared/components/tags-input/tags-input.tsx @@ -6,19 +6,20 @@ import {Autocomplete, AutocompleteApi, AutocompleteOption} from 'argo-ui'; interface TagsInputProps { tags: string[]; autocomplete?: (AutocompleteOption | string)[]; + sublistQuery?: (key: string) => Promise; onChange?: (tags: string[]) => void; placeholder?: string; } require('./tags-input.scss'); -export class TagsInput extends React.Component { +export class TagsInput extends React.Component { private inputElement: HTMLInputElement; private autocompleteApi: AutocompleteApi; constructor(props: TagsInputProps) { super(props); - this.state = {tags: props.tags || [], input: '', focused: false}; + this.state = {tags: props.tags || [], input: '', focused: false, subTags: [], subTagsActive: false}; } public render() { @@ -48,13 +49,23 @@ export class TagsInput extends React.Component (this.autocompleteApi = api)} value={this.state.input} - items={this.props.autocomplete} + items={this.state.subTagsActive ? this.state.subTags : this.props.autocomplete} onChange={e => this.setState({input: e.target.value})} onSelect={value => { - if (this.state.tags.indexOf(value) === -1) { - const newTags = this.state.tags.concat(value); - this.setState({input: '', tags: newTags}); - this.onTagsChange(newTags); + if (this.props.sublistQuery != null && !this.state.subTagsActive) { + this.setState({subTagsActive: true}); + this.props.sublistQuery(value).then(list => { + this.setState({ + subTags: list || [] + }); + }); + } else { + if (this.state.tags.indexOf(value) === -1) { + const newTags = this.state.tags.concat(value); + this.setState({input: '', tags: newTags, subTags: []}); + this.onTagsChange(newTags); + } + this.setState({subTagsActive: false}); } }} renderInput={props => ( diff --git a/ui/src/app/shared/services/archived-workflows-service.ts b/ui/src/app/shared/services/archived-workflows-service.ts index 9e75444098b4..27ef7819da3a 100644 --- a/ui/src/app/shared/services/archived-workflows-service.ts +++ b/ui/src/app/shared/services/archived-workflows-service.ts @@ -17,6 +17,14 @@ export class ArchivedWorkflowsService { return requests.delete(`api/v1/archived-workflows/${uid}`); } + public listLabelKeys() { + return requests.get(`api/v1/archived-workflows-label-keys`).then(res => res.body as models.Labels); + } + + public listLabelValues(key: string) { + return requests.get(`api/v1/archived-workflows-label-values?listOptions.labelSelector=${key}`).then(res => res.body as models.Labels); + } + private queryParams(filter: { namespace?: string; name?: string; diff --git a/ui/src/models/index.ts b/ui/src/models/index.ts index b028092b7802..ac16d9625c31 100644 --- a/ui/src/models/index.ts +++ b/ui/src/models/index.ts @@ -1,5 +1,6 @@ export * from './events'; export * from './info'; +export * from './labels'; export * from './workflows'; export * from './workflow-templates'; export * from './cron-workflows'; diff --git a/ui/src/models/labels.ts b/ui/src/models/labels.ts new file mode 100644 index 000000000000..84c0625d8b47 --- /dev/null +++ b/ui/src/models/labels.ts @@ -0,0 +1,3 @@ +export interface Labels { + items: string[]; +} diff --git a/workflow/controller/operator_test.go b/workflow/controller/operator_test.go index 6448d5e1d8b5..860677125089 100644 --- a/workflow/controller/operator_test.go +++ b/workflow/controller/operator_test.go @@ -5898,6 +5898,7 @@ spec: return node.Phase == wfv1.NodePending })) + time.Sleep(time.Second) deletePods(ctx, woc) woc = newWorkflowOperationCtx(woc.wf, controller) @@ -5908,6 +5909,7 @@ spec: return node.Phase == wfv1.NodePending })) + time.Sleep(time.Second) makePodsPhase(ctx, woc, apiv1.PodSucceeded) woc = newWorkflowOperationCtx(woc.wf, controller)