diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json index 90d68900e861..fc040bf9f746 100644 --- a/api/jsonschema/schema.json +++ b/api/jsonschema/schema.json @@ -212,9 +212,32 @@ "io.argoproj.workflow.v1alpha1.ArtifactRepositoryRef": { "properties": { "configMap": { + "description": "The name of the config map. Defaults to \"artifact-repositories\".", "type": "string" }, "key": { + "description": "The config map key. Defaults to the value of the \"workflows.argoproj.io/default-artifact-repository\" annotation.", + "type": "string" + } + }, + "type": "object" + }, + "io.argoproj.workflow.v1alpha1.ArtifactRepositoryRefStatus": { + "properties": { + "configMap": { + "description": "The name of the config map. Defaults to \"artifact-repositories\".", + "type": "string" + }, + "default": { + "description": "If this ref represents the default artifact repository, rather than a config map.", + "type": "boolean" + }, + "key": { + "description": "The config map key. Defaults to the value of the \"workflows.argoproj.io/default-artifact-repository\" annotation.", + "type": "string" + }, + "namespace": { + "description": "The namespace of the config map. Defaults to the workflow's namespace, or the controller's namespace (if found).", "type": "string" } }, @@ -2739,6 +2762,10 @@ "io.argoproj.workflow.v1alpha1.WorkflowStatus": { "description": "WorkflowStatus contains overall status information about a workflow", "properties": { + "artifactRepositoryRef": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ArtifactRepositoryRefStatus", + "description": "ArtifactRepositoryRef is used to cache the repository to use so we do not need to determine it everytime we reconcile." + }, "compressedNodes": { "description": "Compressed and base64 decoded Nodes map", "type": "string" diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 78618d3553f7..9f7f8249f858 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -2269,9 +2269,32 @@ "type": "object", "properties": { "configMap": { + "description": "The name of the config map. Defaults to \"artifact-repositories\".", "type": "string" }, "key": { + "description": "The config map key. Defaults to the value of the \"workflows.argoproj.io/default-artifact-repository\" annotation.", + "type": "string" + } + } + }, + "io.argoproj.workflow.v1alpha1.ArtifactRepositoryRefStatus": { + "type": "object", + "properties": { + "configMap": { + "description": "The name of the config map. Defaults to \"artifact-repositories\".", + "type": "string" + }, + "default": { + "description": "If this ref represents the default artifact repository, rather than a config map.", + "type": "boolean" + }, + "key": { + "description": "The config map key. Defaults to the value of the \"workflows.argoproj.io/default-artifact-repository\" annotation.", + "type": "string" + }, + "namespace": { + "description": "The namespace of the config map. Defaults to the workflow's namespace, or the controller's namespace (if found).", "type": "string" } } @@ -4788,6 +4811,10 @@ "description": "WorkflowStatus contains overall status information about a workflow", "type": "object", "properties": { + "artifactRepositoryRef": { + "description": "ArtifactRepositoryRef is used to cache the repository to use so we do not need to determine it everytime we reconcile.", + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ArtifactRepositoryRefStatus" + }, "compressedNodes": { "description": "Compressed and base64 decoded Nodes map", "type": "string" diff --git a/docs/artifact-repository-ref.md b/docs/artifact-repository-ref.md index 801940d5f48f..c5104d847ac3 100644 --- a/docs/artifact-repository-ref.md +++ b/docs/artifact-repository-ref.md @@ -6,15 +6,19 @@ You can reduce duplication in your templates by configuring repositories that can be accessed by any workflow. This can also remove sensitive information from your templates. -Create a suitable config map in either (a) your workflows namespace or (b) in the Argo's namespace, the default name is `artifact-repositories`: +Create a suitable config map in either (a) your workflows namespace or (b) in the managed namespace: -``` +```yaml apiVersion: v1 kind: ConfigMap metadata: + # if you want to use this config map by default - name it "artifact-repositories" name: artifact-repositories + annotations: + # if you want to use a specific key, put that's key into this annotation + workflows.argoproj.io/default-artifact-repository: default-v1 data: - minio: | + default-v1: | s3: bucket: my-bucket endpoint: minio:9000 @@ -29,10 +33,11 @@ data: You can override the repository for a workflow as follows: -``` +```yaml spec: artifactRepositoryRef: - key: minio + configMap: my-cm # default is "artifact-repositories" + key: my-key # default can be set by the annotation ``` Reference: [fields.md#artifactrepositoryref](fields.md#artifactrepositoryref). \ No newline at end of file diff --git a/docs/configure-artifact-repository.md b/docs/configure-artifact-repository.md index c0905dec6e3b..f096d1bc5d0d 100644 --- a/docs/configure-artifact-repository.md +++ b/docs/configure-artifact-repository.md @@ -16,6 +16,12 @@ Subsequent sections will show how to use it. | Raw | Yes | No | 5% | | S3 | Yes | Yes | 86% | +The actual repository used by a workflow is choose by the following rules: + +1. Anything explicitly configured using [Artifact Repository Ref](artifact-repository-ref.md). This is the most flexible, safe, and secure option. +2. From a config map named `artifact-repositories` if it has the `workflows.argoproj.io/default-artifact-repository` annotation in the workflow's namespace. +3. From a workflow controller configmap. + ## Configuring Minio ``` diff --git a/docs/fields.md b/docs/fields.md index 8f1a32b82c6b..05bae738768d 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -662,6 +662,7 @@ WorkflowStatus contains overall status information about a workflow ### Fields | Field Name | Field Type | Description | |:----------:|:----------:|---------------| +|`artifactRepositoryRef`|[`ArtifactRepositoryRefStatus`](#artifactrepositoryrefstatus)|ArtifactRepositoryRef is used to cache the repository to use so we do not need to determine it everytime we reconcile.| |`compressedNodes`|`string`|Compressed and base64 decoded Nodes map| |`conditions`|`Array<`[`Condition`](#condition)`>`|Conditions is a list of conditions the Workflow may have| |`estimatedDuration`|`int32`|EstimatedDuration in seconds.| @@ -1492,8 +1493,8 @@ _No description available_ ### Fields | Field Name | Field Type | Description | |:----------:|:----------:|---------------| -|`configMap`|`string`|_No description available_| -|`key`|`string`|_No description available_| +|`configMap`|`string`|The name of the config map. Defaults to "artifact-repositories".| +|`key`|`string`|The config map key. Defaults to the value of the "workflows.argoproj.io/default-artifact-repository" annotation.| ## ExecutorConfig @@ -1963,6 +1964,25 @@ WorkflowTemplateRef is a reference to a WorkflowTemplate resource. |`clusterScope`|`boolean`|ClusterScope indicates the referred template is cluster scoped (i.e. a ClusterWorkflowTemplate).| |`name`|`string`|Name is the resource name of the workflow template.| +## ArtifactRepositoryRefStatus + +_No description available_ + +
+Examples with this field (click to open) +
+ +- [`artifact-repository-ref.yaml`](https://github.com/argoproj/argo/blob/master/examples/artifact-repository-ref.yaml) +
+ +### Fields +| Field Name | Field Type | Description | +|:----------:|:----------:|---------------| +|`configMap`|`string`|The name of the config map. Defaults to "artifact-repositories".| +|`default`|`boolean`|If this ref represents the default artifact repository, rather than a config map.| +|`key`|`string`|The config map key. Defaults to the value of the "workflows.argoproj.io/default-artifact-repository" annotation.| +|`namespace`|`string`|The namespace of the config map. Defaults to the workflow's namespace, or the controller's namespace (if found).| + ## Condition _No description available_ diff --git a/examples/artifact-repository-ref.yaml b/examples/artifact-repository-ref.yaml index 7596747fa66f..a12aae6a53df 100644 --- a/examples/artifact-repository-ref.yaml +++ b/examples/artifact-repository-ref.yaml @@ -5,13 +5,13 @@ metadata: spec: entrypoint: main artifactRepositoryRef: - key: minio + key: my-key templates: - name: main container: image: docker/whalesay:latest - command: [sh, -c] - args: ["cowsay hello world | tee /tmp/hello_world.txt"] + command: [ sh, -c ] + args: [ "cowsay hello world | tee /tmp/hello_world.txt" ] outputs: artifacts: - name: hello_world diff --git a/manifests/base/crds/full/argoproj.io_workflows.yaml b/manifests/base/crds/full/argoproj.io_workflows.yaml index e64254d6643d..fc4694de638c 100644 --- a/manifests/base/crds/full/argoproj.io_workflows.yaml +++ b/manifests/base/crds/full/argoproj.io_workflows.yaml @@ -6702,6 +6702,17 @@ spec: type: object status: properties: + artifactRepositoryRef: + properties: + configMap: + type: string + default: + type: boolean + key: + type: string + namespace: + type: string + type: object compressedNodes: type: string conditions: diff --git a/manifests/quick-start-minimal.yaml b/manifests/quick-start-minimal.yaml index 5468fc25df56..586196324db3 100644 --- a/manifests/quick-start-minimal.yaml +++ b/manifests/quick-start-minimal.yaml @@ -449,7 +449,20 @@ subjects: --- apiVersion: v1 data: - minio: | + default-v1: | + archiveLogs: true + s3: + bucket: my-bucket + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + my-key: | + archiveLogs: true s3: bucket: my-bucket endpoint: minio:9000 @@ -462,6 +475,8 @@ data: key: secretkey kind: ConfigMap metadata: + annotations: + workflows.argoproj.io/default-artifact-repository: default-v1 name: artifact-repositories --- apiVersion: v1 diff --git a/manifests/quick-start-mysql.yaml b/manifests/quick-start-mysql.yaml index 4021bb39726d..f7946d009f59 100644 --- a/manifests/quick-start-mysql.yaml +++ b/manifests/quick-start-mysql.yaml @@ -449,7 +449,20 @@ subjects: --- apiVersion: v1 data: - minio: | + default-v1: | + archiveLogs: true + s3: + bucket: my-bucket + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + my-key: | + archiveLogs: true s3: bucket: my-bucket endpoint: minio:9000 @@ -462,6 +475,8 @@ data: key: secretkey kind: ConfigMap metadata: + annotations: + workflows.argoproj.io/default-artifact-repository: default-v1 name: artifact-repositories --- apiVersion: v1 diff --git a/manifests/quick-start-postgres.yaml b/manifests/quick-start-postgres.yaml index 12688edc07bf..4cb29dc3a006 100644 --- a/manifests/quick-start-postgres.yaml +++ b/manifests/quick-start-postgres.yaml @@ -449,7 +449,20 @@ subjects: --- apiVersion: v1 data: - minio: | + default-v1: | + archiveLogs: true + s3: + bucket: my-bucket + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey + my-key: | + archiveLogs: true s3: bucket: my-bucket endpoint: minio:9000 @@ -462,6 +475,8 @@ data: key: secretkey kind: ConfigMap metadata: + annotations: + workflows.argoproj.io/default-artifact-repository: default-v1 name: artifact-repositories --- apiVersion: v1 diff --git a/manifests/quick-start/base/artifact-repositories-configmap.yaml b/manifests/quick-start/base/artifact-repositories-configmap.yaml index 82df052806d5..4286f34f86f1 100644 --- a/manifests/quick-start/base/artifact-repositories-configmap.yaml +++ b/manifests/quick-start/base/artifact-repositories-configmap.yaml @@ -1,6 +1,14 @@ apiVersion: v1 +kind: ConfigMap +metadata: + name: artifact-repositories + annotations: + # you'll want to change the default over time, e.g. when you move to new storage solution, + # so we recommend you version them from the outset by suffixing the version + workflows.argoproj.io/default-artifact-repository: default-v1 data: - minio: | + default-v1: | + archiveLogs: true s3: bucket: my-bucket endpoint: minio:9000 @@ -11,6 +19,15 @@ data: secretKeySecret: name: my-minio-cred key: secretkey -kind: ConfigMap -metadata: - name: artifact-repositories + my-key: | + archiveLogs: true + s3: + bucket: my-bucket + endpoint: minio:9000 + insecure: true + accessKeySecret: + name: my-minio-cred + key: accesskey + secretKeySecret: + name: my-minio-cred + key: secretkey \ No newline at end of file diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index d52d6cc015e0..e25e957cb024 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -204,10 +204,38 @@ func (m *ArtifactRepositoryRef) XXX_DiscardUnknown() { var xxx_messageInfo_ArtifactRepositoryRef proto.InternalMessageInfo +func (m *ArtifactRepositoryRefStatus) Reset() { *m = ArtifactRepositoryRefStatus{} } +func (*ArtifactRepositoryRefStatus) ProtoMessage() {} +func (*ArtifactRepositoryRefStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{6} +} +func (m *ArtifactRepositoryRefStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ArtifactRepositoryRefStatus) 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 *ArtifactRepositoryRefStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ArtifactRepositoryRefStatus.Merge(m, src) +} +func (m *ArtifactRepositoryRefStatus) XXX_Size() int { + return m.Size() +} +func (m *ArtifactRepositoryRefStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ArtifactRepositoryRefStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ArtifactRepositoryRefStatus proto.InternalMessageInfo + func (m *ArtifactoryArtifact) Reset() { *m = ArtifactoryArtifact{} } func (*ArtifactoryArtifact) ProtoMessage() {} func (*ArtifactoryArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{6} + return fileDescriptor_c23edafa7e7ea072, []int{7} } func (m *ArtifactoryArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -235,7 +263,7 @@ var xxx_messageInfo_ArtifactoryArtifact proto.InternalMessageInfo func (m *ArtifactoryAuth) Reset() { *m = ArtifactoryAuth{} } func (*ArtifactoryAuth) ProtoMessage() {} func (*ArtifactoryAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{7} + return fileDescriptor_c23edafa7e7ea072, []int{8} } func (m *ArtifactoryAuth) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -263,7 +291,7 @@ var xxx_messageInfo_ArtifactoryAuth proto.InternalMessageInfo func (m *Backoff) Reset() { *m = Backoff{} } func (*Backoff) ProtoMessage() {} func (*Backoff) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{8} + return fileDescriptor_c23edafa7e7ea072, []int{9} } func (m *Backoff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -291,7 +319,7 @@ var xxx_messageInfo_Backoff proto.InternalMessageInfo func (m *Cache) Reset() { *m = Cache{} } func (*Cache) ProtoMessage() {} func (*Cache) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{9} + return fileDescriptor_c23edafa7e7ea072, []int{10} } func (m *Cache) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -319,7 +347,7 @@ var xxx_messageInfo_Cache proto.InternalMessageInfo func (m *ClusterWorkflowTemplate) Reset() { *m = ClusterWorkflowTemplate{} } func (*ClusterWorkflowTemplate) ProtoMessage() {} func (*ClusterWorkflowTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{10} + return fileDescriptor_c23edafa7e7ea072, []int{11} } func (m *ClusterWorkflowTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -347,7 +375,7 @@ var xxx_messageInfo_ClusterWorkflowTemplate proto.InternalMessageInfo func (m *ClusterWorkflowTemplateList) Reset() { *m = ClusterWorkflowTemplateList{} } func (*ClusterWorkflowTemplateList) ProtoMessage() {} func (*ClusterWorkflowTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{11} + return fileDescriptor_c23edafa7e7ea072, []int{12} } func (m *ClusterWorkflowTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -375,7 +403,7 @@ var xxx_messageInfo_ClusterWorkflowTemplateList proto.InternalMessageInfo func (m *Condition) Reset() { *m = Condition{} } func (*Condition) ProtoMessage() {} func (*Condition) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{12} + return fileDescriptor_c23edafa7e7ea072, []int{13} } func (m *Condition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -403,7 +431,7 @@ var xxx_messageInfo_Condition proto.InternalMessageInfo func (m *ContinueOn) Reset() { *m = ContinueOn{} } func (*ContinueOn) ProtoMessage() {} func (*ContinueOn) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{13} + return fileDescriptor_c23edafa7e7ea072, []int{14} } func (m *ContinueOn) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -431,7 +459,7 @@ var xxx_messageInfo_ContinueOn proto.InternalMessageInfo func (m *Counter) Reset() { *m = Counter{} } func (*Counter) ProtoMessage() {} func (*Counter) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{14} + return fileDescriptor_c23edafa7e7ea072, []int{15} } func (m *Counter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -459,7 +487,7 @@ var xxx_messageInfo_Counter proto.InternalMessageInfo func (m *CronWorkflow) Reset() { *m = CronWorkflow{} } func (*CronWorkflow) ProtoMessage() {} func (*CronWorkflow) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{15} + return fileDescriptor_c23edafa7e7ea072, []int{16} } func (m *CronWorkflow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -487,7 +515,7 @@ var xxx_messageInfo_CronWorkflow proto.InternalMessageInfo func (m *CronWorkflowList) Reset() { *m = CronWorkflowList{} } func (*CronWorkflowList) ProtoMessage() {} func (*CronWorkflowList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{16} + return fileDescriptor_c23edafa7e7ea072, []int{17} } func (m *CronWorkflowList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -515,7 +543,7 @@ var xxx_messageInfo_CronWorkflowList proto.InternalMessageInfo func (m *CronWorkflowSpec) Reset() { *m = CronWorkflowSpec{} } func (*CronWorkflowSpec) ProtoMessage() {} func (*CronWorkflowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{17} + return fileDescriptor_c23edafa7e7ea072, []int{18} } func (m *CronWorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -543,7 +571,7 @@ var xxx_messageInfo_CronWorkflowSpec proto.InternalMessageInfo func (m *CronWorkflowStatus) Reset() { *m = CronWorkflowStatus{} } func (*CronWorkflowStatus) ProtoMessage() {} func (*CronWorkflowStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{18} + return fileDescriptor_c23edafa7e7ea072, []int{19} } func (m *CronWorkflowStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -571,7 +599,7 @@ var xxx_messageInfo_CronWorkflowStatus proto.InternalMessageInfo func (m *DAGTask) Reset() { *m = DAGTask{} } func (*DAGTask) ProtoMessage() {} func (*DAGTask) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{19} + return fileDescriptor_c23edafa7e7ea072, []int{20} } func (m *DAGTask) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -599,7 +627,7 @@ var xxx_messageInfo_DAGTask proto.InternalMessageInfo func (m *DAGTemplate) Reset() { *m = DAGTemplate{} } func (*DAGTemplate) ProtoMessage() {} func (*DAGTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{20} + return fileDescriptor_c23edafa7e7ea072, []int{21} } func (m *DAGTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -627,7 +655,7 @@ var xxx_messageInfo_DAGTemplate proto.InternalMessageInfo func (m *Event) Reset() { *m = Event{} } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{21} + return fileDescriptor_c23edafa7e7ea072, []int{22} } func (m *Event) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -655,7 +683,7 @@ var xxx_messageInfo_Event proto.InternalMessageInfo func (m *ExecutorConfig) Reset() { *m = ExecutorConfig{} } func (*ExecutorConfig) ProtoMessage() {} func (*ExecutorConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{22} + return fileDescriptor_c23edafa7e7ea072, []int{23} } func (m *ExecutorConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -683,7 +711,7 @@ var xxx_messageInfo_ExecutorConfig proto.InternalMessageInfo func (m *GCSArtifact) Reset() { *m = GCSArtifact{} } func (*GCSArtifact) ProtoMessage() {} func (*GCSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{23} + return fileDescriptor_c23edafa7e7ea072, []int{24} } func (m *GCSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -711,7 +739,7 @@ var xxx_messageInfo_GCSArtifact proto.InternalMessageInfo func (m *GCSBucket) Reset() { *m = GCSBucket{} } func (*GCSBucket) ProtoMessage() {} func (*GCSBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{24} + return fileDescriptor_c23edafa7e7ea072, []int{25} } func (m *GCSBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -739,7 +767,7 @@ var xxx_messageInfo_GCSBucket proto.InternalMessageInfo func (m *Gauge) Reset() { *m = Gauge{} } func (*Gauge) ProtoMessage() {} func (*Gauge) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{25} + return fileDescriptor_c23edafa7e7ea072, []int{26} } func (m *Gauge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -767,7 +795,7 @@ var xxx_messageInfo_Gauge proto.InternalMessageInfo func (m *GitArtifact) Reset() { *m = GitArtifact{} } func (*GitArtifact) ProtoMessage() {} func (*GitArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{26} + return fileDescriptor_c23edafa7e7ea072, []int{27} } func (m *GitArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -795,7 +823,7 @@ var xxx_messageInfo_GitArtifact proto.InternalMessageInfo func (m *HDFSArtifact) Reset() { *m = HDFSArtifact{} } func (*HDFSArtifact) ProtoMessage() {} func (*HDFSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{27} + return fileDescriptor_c23edafa7e7ea072, []int{28} } func (m *HDFSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -823,7 +851,7 @@ var xxx_messageInfo_HDFSArtifact proto.InternalMessageInfo func (m *HDFSConfig) Reset() { *m = HDFSConfig{} } func (*HDFSConfig) ProtoMessage() {} func (*HDFSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{28} + return fileDescriptor_c23edafa7e7ea072, []int{29} } func (m *HDFSConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -851,7 +879,7 @@ var xxx_messageInfo_HDFSConfig proto.InternalMessageInfo func (m *HDFSKrbConfig) Reset() { *m = HDFSKrbConfig{} } func (*HDFSKrbConfig) ProtoMessage() {} func (*HDFSKrbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{29} + return fileDescriptor_c23edafa7e7ea072, []int{30} } func (m *HDFSKrbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -879,7 +907,7 @@ var xxx_messageInfo_HDFSKrbConfig proto.InternalMessageInfo func (m *HTTPArtifact) Reset() { *m = HTTPArtifact{} } func (*HTTPArtifact) ProtoMessage() {} func (*HTTPArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{30} + return fileDescriptor_c23edafa7e7ea072, []int{31} } func (m *HTTPArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -907,7 +935,7 @@ var xxx_messageInfo_HTTPArtifact proto.InternalMessageInfo func (m *Header) Reset() { *m = Header{} } func (*Header) ProtoMessage() {} func (*Header) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{31} + return fileDescriptor_c23edafa7e7ea072, []int{32} } func (m *Header) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -935,7 +963,7 @@ var xxx_messageInfo_Header proto.InternalMessageInfo func (m *Histogram) Reset() { *m = Histogram{} } func (*Histogram) ProtoMessage() {} func (*Histogram) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{32} + return fileDescriptor_c23edafa7e7ea072, []int{33} } func (m *Histogram) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -963,7 +991,7 @@ var xxx_messageInfo_Histogram proto.InternalMessageInfo func (m *Inputs) Reset() { *m = Inputs{} } func (*Inputs) ProtoMessage() {} func (*Inputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{33} + return fileDescriptor_c23edafa7e7ea072, []int{34} } func (m *Inputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -991,7 +1019,7 @@ var xxx_messageInfo_Inputs proto.InternalMessageInfo func (m *Item) Reset() { *m = Item{} } func (*Item) ProtoMessage() {} func (*Item) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{34} + return fileDescriptor_c23edafa7e7ea072, []int{35} } func (m *Item) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1019,7 +1047,7 @@ var xxx_messageInfo_Item proto.InternalMessageInfo func (m *Link) Reset() { *m = Link{} } func (*Link) ProtoMessage() {} func (*Link) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{35} + return fileDescriptor_c23edafa7e7ea072, []int{36} } func (m *Link) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1047,7 +1075,7 @@ var xxx_messageInfo_Link proto.InternalMessageInfo func (m *MemoizationStatus) Reset() { *m = MemoizationStatus{} } func (*MemoizationStatus) ProtoMessage() {} func (*MemoizationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{36} + return fileDescriptor_c23edafa7e7ea072, []int{37} } func (m *MemoizationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1075,7 +1103,7 @@ var xxx_messageInfo_MemoizationStatus proto.InternalMessageInfo func (m *Memoize) Reset() { *m = Memoize{} } func (*Memoize) ProtoMessage() {} func (*Memoize) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{37} + return fileDescriptor_c23edafa7e7ea072, []int{38} } func (m *Memoize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1103,7 +1131,7 @@ var xxx_messageInfo_Memoize proto.InternalMessageInfo func (m *Metadata) Reset() { *m = Metadata{} } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{38} + return fileDescriptor_c23edafa7e7ea072, []int{39} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1131,7 +1159,7 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo func (m *MetricLabel) Reset() { *m = MetricLabel{} } func (*MetricLabel) ProtoMessage() {} func (*MetricLabel) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{39} + return fileDescriptor_c23edafa7e7ea072, []int{40} } func (m *MetricLabel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1159,7 +1187,7 @@ var xxx_messageInfo_MetricLabel proto.InternalMessageInfo func (m *Metrics) Reset() { *m = Metrics{} } func (*Metrics) ProtoMessage() {} func (*Metrics) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{40} + return fileDescriptor_c23edafa7e7ea072, []int{41} } func (m *Metrics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1187,7 +1215,7 @@ var xxx_messageInfo_Metrics proto.InternalMessageInfo func (m *Mutex) Reset() { *m = Mutex{} } func (*Mutex) ProtoMessage() {} func (*Mutex) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{41} + return fileDescriptor_c23edafa7e7ea072, []int{42} } func (m *Mutex) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1215,7 +1243,7 @@ var xxx_messageInfo_Mutex proto.InternalMessageInfo func (m *MutexHolding) Reset() { *m = MutexHolding{} } func (*MutexHolding) ProtoMessage() {} func (*MutexHolding) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{42} + return fileDescriptor_c23edafa7e7ea072, []int{43} } func (m *MutexHolding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1243,7 +1271,7 @@ var xxx_messageInfo_MutexHolding proto.InternalMessageInfo func (m *MutexStatus) Reset() { *m = MutexStatus{} } func (*MutexStatus) ProtoMessage() {} func (*MutexStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{43} + return fileDescriptor_c23edafa7e7ea072, []int{44} } func (m *MutexStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1271,7 +1299,7 @@ var xxx_messageInfo_MutexStatus proto.InternalMessageInfo func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} func (*NodeStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{44} + return fileDescriptor_c23edafa7e7ea072, []int{45} } func (m *NodeStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1299,7 +1327,7 @@ var xxx_messageInfo_NodeStatus proto.InternalMessageInfo func (m *NodeSynchronizationStatus) Reset() { *m = NodeSynchronizationStatus{} } func (*NodeSynchronizationStatus) ProtoMessage() {} func (*NodeSynchronizationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{45} + return fileDescriptor_c23edafa7e7ea072, []int{46} } func (m *NodeSynchronizationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1327,7 +1355,7 @@ var xxx_messageInfo_NodeSynchronizationStatus proto.InternalMessageInfo func (m *NoneStrategy) Reset() { *m = NoneStrategy{} } func (*NoneStrategy) ProtoMessage() {} func (*NoneStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{46} + return fileDescriptor_c23edafa7e7ea072, []int{47} } func (m *NoneStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1355,7 +1383,7 @@ var xxx_messageInfo_NoneStrategy proto.InternalMessageInfo func (m *OSSArtifact) Reset() { *m = OSSArtifact{} } func (*OSSArtifact) ProtoMessage() {} func (*OSSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{47} + return fileDescriptor_c23edafa7e7ea072, []int{48} } func (m *OSSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1383,7 +1411,7 @@ var xxx_messageInfo_OSSArtifact proto.InternalMessageInfo func (m *OSSBucket) Reset() { *m = OSSBucket{} } func (*OSSBucket) ProtoMessage() {} func (*OSSBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{48} + return fileDescriptor_c23edafa7e7ea072, []int{49} } func (m *OSSBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1411,7 +1439,7 @@ var xxx_messageInfo_OSSBucket proto.InternalMessageInfo func (m *Outputs) Reset() { *m = Outputs{} } func (*Outputs) ProtoMessage() {} func (*Outputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{49} + return fileDescriptor_c23edafa7e7ea072, []int{50} } func (m *Outputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1439,7 +1467,7 @@ var xxx_messageInfo_Outputs proto.InternalMessageInfo func (m *ParallelSteps) Reset() { *m = ParallelSteps{} } func (*ParallelSteps) ProtoMessage() {} func (*ParallelSteps) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{50} + return fileDescriptor_c23edafa7e7ea072, []int{51} } func (m *ParallelSteps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1467,7 +1495,7 @@ var xxx_messageInfo_ParallelSteps proto.InternalMessageInfo func (m *Parameter) Reset() { *m = Parameter{} } func (*Parameter) ProtoMessage() {} func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{51} + return fileDescriptor_c23edafa7e7ea072, []int{52} } func (m *Parameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1495,7 +1523,7 @@ var xxx_messageInfo_Parameter proto.InternalMessageInfo func (m *PodGC) Reset() { *m = PodGC{} } func (*PodGC) ProtoMessage() {} func (*PodGC) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{52} + return fileDescriptor_c23edafa7e7ea072, []int{53} } func (m *PodGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1523,7 +1551,7 @@ var xxx_messageInfo_PodGC proto.InternalMessageInfo func (m *Prometheus) Reset() { *m = Prometheus{} } func (*Prometheus) ProtoMessage() {} func (*Prometheus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{53} + return fileDescriptor_c23edafa7e7ea072, []int{54} } func (m *Prometheus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1551,7 +1579,7 @@ var xxx_messageInfo_Prometheus proto.InternalMessageInfo func (m *RawArtifact) Reset() { *m = RawArtifact{} } func (*RawArtifact) ProtoMessage() {} func (*RawArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{54} + return fileDescriptor_c23edafa7e7ea072, []int{55} } func (m *RawArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1579,7 +1607,7 @@ var xxx_messageInfo_RawArtifact proto.InternalMessageInfo func (m *ResourceTemplate) Reset() { *m = ResourceTemplate{} } func (*ResourceTemplate) ProtoMessage() {} func (*ResourceTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{55} + return fileDescriptor_c23edafa7e7ea072, []int{56} } func (m *ResourceTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1607,7 +1635,7 @@ var xxx_messageInfo_ResourceTemplate proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{56} + return fileDescriptor_c23edafa7e7ea072, []int{57} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1635,7 +1663,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *S3Artifact) Reset() { *m = S3Artifact{} } func (*S3Artifact) ProtoMessage() {} func (*S3Artifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{57} + return fileDescriptor_c23edafa7e7ea072, []int{58} } func (m *S3Artifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1663,7 +1691,7 @@ var xxx_messageInfo_S3Artifact proto.InternalMessageInfo func (m *S3Bucket) Reset() { *m = S3Bucket{} } func (*S3Bucket) ProtoMessage() {} func (*S3Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{58} + return fileDescriptor_c23edafa7e7ea072, []int{59} } func (m *S3Bucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1691,7 +1719,7 @@ var xxx_messageInfo_S3Bucket proto.InternalMessageInfo func (m *ScriptTemplate) Reset() { *m = ScriptTemplate{} } func (*ScriptTemplate) ProtoMessage() {} func (*ScriptTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{59} + return fileDescriptor_c23edafa7e7ea072, []int{60} } func (m *ScriptTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1719,7 +1747,7 @@ var xxx_messageInfo_ScriptTemplate proto.InternalMessageInfo func (m *SemaphoreHolding) Reset() { *m = SemaphoreHolding{} } func (*SemaphoreHolding) ProtoMessage() {} func (*SemaphoreHolding) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{60} + return fileDescriptor_c23edafa7e7ea072, []int{61} } func (m *SemaphoreHolding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1747,7 +1775,7 @@ var xxx_messageInfo_SemaphoreHolding proto.InternalMessageInfo func (m *SemaphoreRef) Reset() { *m = SemaphoreRef{} } func (*SemaphoreRef) ProtoMessage() {} func (*SemaphoreRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{61} + return fileDescriptor_c23edafa7e7ea072, []int{62} } func (m *SemaphoreRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1775,7 +1803,7 @@ var xxx_messageInfo_SemaphoreRef proto.InternalMessageInfo func (m *SemaphoreStatus) Reset() { *m = SemaphoreStatus{} } func (*SemaphoreStatus) ProtoMessage() {} func (*SemaphoreStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{62} + return fileDescriptor_c23edafa7e7ea072, []int{63} } func (m *SemaphoreStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1803,7 +1831,7 @@ var xxx_messageInfo_SemaphoreStatus proto.InternalMessageInfo func (m *Sequence) Reset() { *m = Sequence{} } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{63} + return fileDescriptor_c23edafa7e7ea072, []int{64} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1831,7 +1859,7 @@ var xxx_messageInfo_Sequence proto.InternalMessageInfo func (m *Submit) Reset() { *m = Submit{} } func (*Submit) ProtoMessage() {} func (*Submit) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{64} + return fileDescriptor_c23edafa7e7ea072, []int{65} } func (m *Submit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1859,7 +1887,7 @@ var xxx_messageInfo_Submit proto.InternalMessageInfo func (m *SubmitOpts) Reset() { *m = SubmitOpts{} } func (*SubmitOpts) ProtoMessage() {} func (*SubmitOpts) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{65} + return fileDescriptor_c23edafa7e7ea072, []int{66} } func (m *SubmitOpts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1887,7 +1915,7 @@ var xxx_messageInfo_SubmitOpts proto.InternalMessageInfo func (m *SuppliedValueFrom) Reset() { *m = SuppliedValueFrom{} } func (*SuppliedValueFrom) ProtoMessage() {} func (*SuppliedValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{66} + return fileDescriptor_c23edafa7e7ea072, []int{67} } func (m *SuppliedValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1915,7 +1943,7 @@ var xxx_messageInfo_SuppliedValueFrom proto.InternalMessageInfo func (m *SuspendTemplate) Reset() { *m = SuspendTemplate{} } func (*SuspendTemplate) ProtoMessage() {} func (*SuspendTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{67} + return fileDescriptor_c23edafa7e7ea072, []int{68} } func (m *SuspendTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1943,7 +1971,7 @@ var xxx_messageInfo_SuspendTemplate proto.InternalMessageInfo func (m *Synchronization) Reset() { *m = Synchronization{} } func (*Synchronization) ProtoMessage() {} func (*Synchronization) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{68} + return fileDescriptor_c23edafa7e7ea072, []int{69} } func (m *Synchronization) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1971,7 +1999,7 @@ var xxx_messageInfo_Synchronization proto.InternalMessageInfo func (m *SynchronizationStatus) Reset() { *m = SynchronizationStatus{} } func (*SynchronizationStatus) ProtoMessage() {} func (*SynchronizationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{69} + return fileDescriptor_c23edafa7e7ea072, []int{70} } func (m *SynchronizationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1999,7 +2027,7 @@ var xxx_messageInfo_SynchronizationStatus proto.InternalMessageInfo func (m *TTLStrategy) Reset() { *m = TTLStrategy{} } func (*TTLStrategy) ProtoMessage() {} func (*TTLStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{70} + return fileDescriptor_c23edafa7e7ea072, []int{71} } func (m *TTLStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2027,7 +2055,7 @@ var xxx_messageInfo_TTLStrategy proto.InternalMessageInfo func (m *TarStrategy) Reset() { *m = TarStrategy{} } func (*TarStrategy) ProtoMessage() {} func (*TarStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{71} + return fileDescriptor_c23edafa7e7ea072, []int{72} } func (m *TarStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2055,7 +2083,7 @@ var xxx_messageInfo_TarStrategy proto.InternalMessageInfo func (m *Template) Reset() { *m = Template{} } func (*Template) ProtoMessage() {} func (*Template) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{72} + return fileDescriptor_c23edafa7e7ea072, []int{73} } func (m *Template) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2083,7 +2111,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo func (m *TemplateRef) Reset() { *m = TemplateRef{} } func (*TemplateRef) ProtoMessage() {} func (*TemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{73} + return fileDescriptor_c23edafa7e7ea072, []int{74} } func (m *TemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2111,7 +2139,7 @@ var xxx_messageInfo_TemplateRef proto.InternalMessageInfo func (m *UserContainer) Reset() { *m = UserContainer{} } func (*UserContainer) ProtoMessage() {} func (*UserContainer) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{74} + return fileDescriptor_c23edafa7e7ea072, []int{75} } func (m *UserContainer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2139,7 +2167,7 @@ var xxx_messageInfo_UserContainer proto.InternalMessageInfo func (m *ValueFrom) Reset() { *m = ValueFrom{} } func (*ValueFrom) ProtoMessage() {} func (*ValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{75} + return fileDescriptor_c23edafa7e7ea072, []int{76} } func (m *ValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2167,7 +2195,7 @@ var xxx_messageInfo_ValueFrom proto.InternalMessageInfo func (m *Version) Reset() { *m = Version{} } func (*Version) ProtoMessage() {} func (*Version) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{76} + return fileDescriptor_c23edafa7e7ea072, []int{77} } func (m *Version) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2195,7 +2223,7 @@ var xxx_messageInfo_Version proto.InternalMessageInfo func (m *VolumeClaimGC) Reset() { *m = VolumeClaimGC{} } func (*VolumeClaimGC) ProtoMessage() {} func (*VolumeClaimGC) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{77} + return fileDescriptor_c23edafa7e7ea072, []int{78} } func (m *VolumeClaimGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2223,7 +2251,7 @@ var xxx_messageInfo_VolumeClaimGC proto.InternalMessageInfo func (m *Workflow) Reset() { *m = Workflow{} } func (*Workflow) ProtoMessage() {} func (*Workflow) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{78} + return fileDescriptor_c23edafa7e7ea072, []int{79} } func (m *Workflow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2251,7 +2279,7 @@ var xxx_messageInfo_Workflow proto.InternalMessageInfo func (m *WorkflowEventBinding) Reset() { *m = WorkflowEventBinding{} } func (*WorkflowEventBinding) ProtoMessage() {} func (*WorkflowEventBinding) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{79} + return fileDescriptor_c23edafa7e7ea072, []int{80} } func (m *WorkflowEventBinding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2279,7 +2307,7 @@ var xxx_messageInfo_WorkflowEventBinding proto.InternalMessageInfo func (m *WorkflowEventBindingList) Reset() { *m = WorkflowEventBindingList{} } func (*WorkflowEventBindingList) ProtoMessage() {} func (*WorkflowEventBindingList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{80} + return fileDescriptor_c23edafa7e7ea072, []int{81} } func (m *WorkflowEventBindingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2307,7 +2335,7 @@ var xxx_messageInfo_WorkflowEventBindingList proto.InternalMessageInfo func (m *WorkflowEventBindingSpec) Reset() { *m = WorkflowEventBindingSpec{} } func (*WorkflowEventBindingSpec) ProtoMessage() {} func (*WorkflowEventBindingSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{81} + return fileDescriptor_c23edafa7e7ea072, []int{82} } func (m *WorkflowEventBindingSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2335,7 +2363,7 @@ var xxx_messageInfo_WorkflowEventBindingSpec proto.InternalMessageInfo func (m *WorkflowList) Reset() { *m = WorkflowList{} } func (*WorkflowList) ProtoMessage() {} func (*WorkflowList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{82} + return fileDescriptor_c23edafa7e7ea072, []int{83} } func (m *WorkflowList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2363,7 +2391,7 @@ var xxx_messageInfo_WorkflowList proto.InternalMessageInfo func (m *WorkflowSpec) Reset() { *m = WorkflowSpec{} } func (*WorkflowSpec) ProtoMessage() {} func (*WorkflowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{83} + return fileDescriptor_c23edafa7e7ea072, []int{84} } func (m *WorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2391,7 +2419,7 @@ var xxx_messageInfo_WorkflowSpec proto.InternalMessageInfo func (m *WorkflowStatus) Reset() { *m = WorkflowStatus{} } func (*WorkflowStatus) ProtoMessage() {} func (*WorkflowStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{84} + return fileDescriptor_c23edafa7e7ea072, []int{85} } func (m *WorkflowStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2419,7 +2447,7 @@ var xxx_messageInfo_WorkflowStatus proto.InternalMessageInfo func (m *WorkflowStep) Reset() { *m = WorkflowStep{} } func (*WorkflowStep) ProtoMessage() {} func (*WorkflowStep) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{85} + return fileDescriptor_c23edafa7e7ea072, []int{86} } func (m *WorkflowStep) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2447,7 +2475,7 @@ var xxx_messageInfo_WorkflowStep proto.InternalMessageInfo func (m *WorkflowTemplate) Reset() { *m = WorkflowTemplate{} } func (*WorkflowTemplate) ProtoMessage() {} func (*WorkflowTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{86} + return fileDescriptor_c23edafa7e7ea072, []int{87} } func (m *WorkflowTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2475,7 +2503,7 @@ var xxx_messageInfo_WorkflowTemplate proto.InternalMessageInfo func (m *WorkflowTemplateList) Reset() { *m = WorkflowTemplateList{} } func (*WorkflowTemplateList) ProtoMessage() {} func (*WorkflowTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{87} + return fileDescriptor_c23edafa7e7ea072, []int{88} } func (m *WorkflowTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2503,7 +2531,7 @@ var xxx_messageInfo_WorkflowTemplateList proto.InternalMessageInfo func (m *WorkflowTemplateRef) Reset() { *m = WorkflowTemplateRef{} } func (*WorkflowTemplateRef) ProtoMessage() {} func (*WorkflowTemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{88} + return fileDescriptor_c23edafa7e7ea072, []int{89} } func (m *WorkflowTemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2531,7 +2559,7 @@ var xxx_messageInfo_WorkflowTemplateRef proto.InternalMessageInfo func (m *WorkflowTemplateSpec) Reset() { *m = WorkflowTemplateSpec{} } func (*WorkflowTemplateSpec) ProtoMessage() {} func (*WorkflowTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{89} + return fileDescriptor_c23edafa7e7ea072, []int{90} } func (m *WorkflowTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2559,7 +2587,7 @@ var xxx_messageInfo_WorkflowTemplateSpec proto.InternalMessageInfo func (m *ZipStrategy) Reset() { *m = ZipStrategy{} } func (*ZipStrategy) ProtoMessage() {} func (*ZipStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{90} + return fileDescriptor_c23edafa7e7ea072, []int{91} } func (m *ZipStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2591,6 +2619,7 @@ func init() { proto.RegisterType((*Artifact)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Artifact") proto.RegisterType((*ArtifactLocation)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactLocation") proto.RegisterType((*ArtifactRepositoryRef)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactRepositoryRef") + proto.RegisterType((*ArtifactRepositoryRefStatus)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactRepositoryRefStatus") proto.RegisterType((*ArtifactoryArtifact)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactoryArtifact") proto.RegisterType((*ArtifactoryAuth)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ArtifactoryAuth") proto.RegisterType((*Backoff)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Backoff") @@ -2691,466 +2720,471 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 7343 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xd7, - 0x75, 0xa0, 0x9a, 0x64, 0x93, 0xdd, 0xa7, 0xc9, 0x21, 0x79, 0xe7, 0xd5, 0xa2, 0x46, 0xc3, 0x71, - 0xc9, 0x12, 0x34, 0xbb, 0x32, 0x69, 0x8d, 0xac, 0x5d, 0xd9, 0xb2, 0x1e, 0x6c, 0xbe, 0x66, 0x34, - 0xc3, 0x21, 0x75, 0x9a, 0x33, 0xb3, 0xd6, 0x08, 0xd2, 0x16, 0xbb, 0x6f, 0x77, 0xd7, 0xb0, 0xbb, - 0xaa, 0x54, 0x55, 0x4d, 0x8a, 0xd2, 0x2e, 0x56, 0x36, 0xd6, 0x70, 0x1c, 0xc7, 0x48, 0x82, 0xc0, - 0x89, 0x02, 0x23, 0x48, 0x7e, 0x82, 0x7c, 0xc4, 0x41, 0x3e, 0x82, 0xe4, 0x27, 0x80, 0x3f, 0x82, - 0x24, 0x70, 0x0c, 0x04, 0x70, 0xbe, 0x62, 0x20, 0x06, 0x6d, 0x31, 0x3f, 0x32, 0x12, 0xc7, 0x5f, - 0x41, 0x80, 0x41, 0x80, 0x04, 0xf7, 0x59, 0x8f, 0xae, 0x9e, 0x21, 0xab, 0x39, 0x03, 0x23, 0xf6, - 0x5f, 0xd7, 0x39, 0xe7, 0x9e, 0x73, 0xdf, 0xf7, 0xbc, 0xee, 0x6d, 0x58, 0x6c, 0x5a, 0x41, 0xab, - 0xbb, 0x35, 0x57, 0x73, 0x3a, 0xf3, 0xa6, 0xd7, 0x74, 0x5c, 0xcf, 0xb9, 0xc3, 0x7f, 0xcc, 0xbb, - 0xdb, 0xcd, 0x79, 0xd3, 0xb5, 0xfc, 0xf9, 0x5d, 0xc7, 0xdb, 0x6e, 0xb4, 0x9d, 0xdd, 0xf9, 0x9d, - 0x67, 0xcd, 0xb6, 0xdb, 0x32, 0x9f, 0x9d, 0x6f, 0x52, 0x9b, 0x7a, 0x66, 0x40, 0xeb, 0x73, 0xae, - 0xe7, 0x04, 0x0e, 0x79, 0x2e, 0x64, 0x32, 0xa7, 0x98, 0xf0, 0x1f, 0x73, 0xee, 0x76, 0x73, 0x8e, - 0x31, 0x99, 0x53, 0x4c, 0xe6, 0x14, 0x93, 0x99, 0x4f, 0x45, 0x24, 0x37, 0x1d, 0x26, 0x90, 0xf1, - 0xda, 0xea, 0x36, 0xf8, 0x17, 0xff, 0xe0, 0xbf, 0x84, 0x8c, 0x19, 0x63, 0xfb, 0x05, 0x7f, 0xce, - 0x72, 0x58, 0x95, 0xe6, 0x6b, 0x8e, 0x47, 0xe7, 0x77, 0x7a, 0xea, 0x31, 0x73, 0x31, 0x42, 0xe3, - 0x3a, 0x6d, 0xab, 0xb6, 0x37, 0xbf, 0xf3, 0xec, 0x16, 0x0d, 0x7a, 0xab, 0x3c, 0xf3, 0x99, 0x90, - 0xb4, 0x63, 0xd6, 0x5a, 0x96, 0x4d, 0xbd, 0xbd, 0xb0, 0xc9, 0x1d, 0x1a, 0x98, 0x69, 0x02, 0xe6, - 0xfb, 0x95, 0xf2, 0xba, 0x76, 0x60, 0x75, 0x68, 0x4f, 0x81, 0xff, 0x71, 0xbf, 0x02, 0x7e, 0xad, - 0x45, 0x3b, 0x66, 0x4f, 0xb9, 0xe7, 0xfa, 0x95, 0xeb, 0x06, 0x56, 0x7b, 0xde, 0xb2, 0x03, 0x3f, - 0xf0, 0x92, 0x85, 0x8c, 0x65, 0x18, 0x5d, 0xe8, 0x38, 0x5d, 0x3b, 0x20, 0x2f, 0x42, 0x7e, 0xc7, - 0x6c, 0x77, 0x69, 0x39, 0x77, 0x21, 0xf7, 0x74, 0xb1, 0xf2, 0xe4, 0x77, 0xf6, 0x67, 0x1f, 0x39, - 0xd8, 0x9f, 0xcd, 0xdf, 0x64, 0xc0, 0xbb, 0xfb, 0xb3, 0xa7, 0xa8, 0x5d, 0x73, 0xea, 0x96, 0xdd, - 0x9c, 0xbf, 0xe3, 0x3b, 0xf6, 0xdc, 0xf5, 0x6e, 0x67, 0x8b, 0x7a, 0x28, 0xca, 0x18, 0xdf, 0x1a, - 0x82, 0xc9, 0x05, 0xaf, 0xd6, 0xb2, 0x76, 0x68, 0x35, 0x60, 0xfc, 0x9b, 0x7b, 0xe4, 0x36, 0x0c, - 0x07, 0xa6, 0xc7, 0xd9, 0x95, 0x2e, 0xbd, 0x3a, 0x97, 0x61, 0xbc, 0xe7, 0x36, 0x4d, 0x4f, 0xb1, - 0xab, 0x8c, 0x1d, 0xec, 0xcf, 0x0e, 0x6f, 0x9a, 0x1e, 0x32, 0xae, 0xe4, 0x6d, 0x18, 0xb1, 0x1d, - 0x9b, 0x96, 0x87, 0x38, 0xf7, 0x85, 0x4c, 0xdc, 0xaf, 0x3b, 0xb6, 0xae, 0x6d, 0xa5, 0x70, 0xb0, - 0x3f, 0x3b, 0xc2, 0x20, 0xc8, 0x19, 0xb3, 0xda, 0xbf, 0x67, 0xb9, 0xe5, 0xe1, 0x01, 0x6a, 0xff, - 0x86, 0xe5, 0xc6, 0x6b, 0xff, 0x86, 0xe5, 0x22, 0xe3, 0x6a, 0xfc, 0x34, 0x07, 0xc5, 0x05, 0xaf, - 0xd9, 0xed, 0x50, 0x3b, 0xf0, 0x89, 0x07, 0xe0, 0x9a, 0x9e, 0xd9, 0xa1, 0x01, 0xf5, 0xfc, 0x72, - 0xee, 0xc2, 0xf0, 0xd3, 0xa5, 0x4b, 0x2f, 0x67, 0x92, 0xb8, 0xa1, 0xd8, 0x54, 0x88, 0x1c, 0x3e, - 0xd0, 0x20, 0x1f, 0x23, 0x52, 0x88, 0x0d, 0x45, 0xd3, 0x0b, 0xac, 0x86, 0x59, 0x0b, 0xfc, 0xf2, - 0x10, 0x17, 0xf9, 0x52, 0x26, 0x91, 0x0b, 0x92, 0x4b, 0x65, 0x5a, 0x4a, 0x2c, 0x2a, 0x88, 0x8f, - 0xa1, 0x08, 0xe3, 0x6f, 0x47, 0xa0, 0xa0, 0x10, 0xe4, 0x02, 0x8c, 0xd8, 0x66, 0x47, 0xcd, 0xb4, - 0x71, 0x59, 0x70, 0xe4, 0xba, 0xd9, 0x61, 0xbd, 0x6f, 0x76, 0x28, 0xa3, 0x70, 0xcd, 0xa0, 0xc5, - 0x87, 0x37, 0x42, 0xb1, 0x61, 0x06, 0x2d, 0xe4, 0x18, 0x72, 0x0e, 0x46, 0x3a, 0x4e, 0x9d, 0xf2, - 0x01, 0xca, 0x8b, 0xd1, 0x5b, 0x73, 0xea, 0x14, 0x39, 0x94, 0x95, 0x6f, 0x78, 0x4e, 0xa7, 0x3c, - 0x12, 0x2f, 0xbf, 0xe2, 0x39, 0x1d, 0xe4, 0x18, 0xf2, 0xb5, 0x1c, 0x4c, 0xa9, 0xea, 0x5d, 0x73, - 0x6a, 0x66, 0x60, 0x39, 0x76, 0x39, 0xcf, 0x47, 0x7b, 0x79, 0xa0, 0x8e, 0x50, 0xcc, 0x2a, 0x65, - 0x29, 0x75, 0x2a, 0x89, 0xc1, 0x1e, 0xc1, 0xe4, 0x12, 0x40, 0xb3, 0xed, 0x6c, 0x99, 0x6d, 0xd6, - 0x07, 0xe5, 0x51, 0x5e, 0x6b, 0x3d, 0x84, 0xab, 0x1a, 0x83, 0x11, 0x2a, 0xb2, 0x0d, 0x63, 0xa6, - 0x58, 0x72, 0xe5, 0x31, 0x5e, 0xef, 0xa5, 0x8c, 0xf5, 0x8e, 0x2d, 0xdb, 0x4a, 0xe9, 0x60, 0x7f, - 0x76, 0x4c, 0x02, 0x51, 0x49, 0x20, 0xcf, 0x40, 0xc1, 0x71, 0x59, 0x55, 0xcd, 0x76, 0xb9, 0x70, - 0x21, 0xf7, 0x74, 0xa1, 0x32, 0x25, 0xab, 0x57, 0x58, 0x97, 0x70, 0xd4, 0x14, 0xe4, 0x22, 0x8c, - 0xf9, 0xdd, 0x2d, 0x36, 0x5a, 0xe5, 0x22, 0x6f, 0xcb, 0xa4, 0x24, 0x1e, 0xab, 0x0a, 0x30, 0x2a, - 0x3c, 0x79, 0x1e, 0x4a, 0x1e, 0xad, 0x75, 0x3d, 0x9f, 0xb2, 0xe1, 0x2b, 0x03, 0xe7, 0x7d, 0x52, - 0x92, 0x97, 0x30, 0x44, 0x61, 0x94, 0xce, 0xf8, 0xbb, 0x51, 0xe8, 0xe9, 0x57, 0xf2, 0x2c, 0x94, - 0x64, 0x7d, 0xaf, 0x39, 0x4d, 0x9f, 0x4f, 0xaf, 0x42, 0x65, 0x92, 0xf1, 0x59, 0x08, 0xc1, 0x18, - 0xa5, 0x21, 0xb7, 0x60, 0xc8, 0x7f, 0x4e, 0xee, 0x22, 0xaf, 0x64, 0xea, 0xbf, 0xea, 0x73, 0x7a, - 0x09, 0x8c, 0x1e, 0xec, 0xcf, 0x0e, 0x55, 0x9f, 0xc3, 0x21, 0xff, 0x39, 0xb6, 0x7f, 0x34, 0xad, - 0x60, 0xa0, 0xfd, 0x63, 0xd5, 0x0a, 0x34, 0x6b, 0xbe, 0x7f, 0xac, 0x5a, 0x01, 0x32, 0xae, 0x6c, - 0xf7, 0x6b, 0x05, 0x81, 0xcb, 0xa7, 0x77, 0xd6, 0xdd, 0xef, 0xf2, 0xe6, 0xe6, 0x86, 0x66, 0xcf, - 0xd7, 0x0f, 0x83, 0x20, 0x67, 0x4c, 0xde, 0x67, 0x3d, 0x29, 0x70, 0x8e, 0xb7, 0x27, 0xd7, 0xc5, - 0xe5, 0x81, 0xd6, 0x85, 0xe3, 0xed, 0x69, 0x71, 0x72, 0x4c, 0x34, 0x02, 0xa3, 0xd2, 0x78, 0xeb, - 0xea, 0x0d, 0x9f, 0x2f, 0x83, 0xcc, 0xad, 0x5b, 0x5a, 0xa9, 0x26, 0x5a, 0xb7, 0xb4, 0x52, 0x45, - 0xce, 0x98, 0x8d, 0x8d, 0x67, 0xee, 0xca, 0x55, 0x93, 0x6d, 0x6c, 0xd0, 0xdc, 0x8d, 0x8f, 0x0d, - 0x9a, 0xbb, 0xc8, 0xb8, 0x32, 0xe6, 0x8e, 0xef, 0xf3, 0x45, 0x92, 0x95, 0xf9, 0x7a, 0xb5, 0x1a, - 0x67, 0xbe, 0x5e, 0xad, 0x22, 0xe3, 0xca, 0x67, 0x55, 0xcd, 0xe7, 0x8b, 0x2a, 0xf3, 0xac, 0x5a, - 0x4c, 0x30, 0x5f, 0x5d, 0xac, 0x22, 0xe3, 0x6a, 0x34, 0xe1, 0xb4, 0xc2, 0x20, 0x75, 0x1d, 0xdf, - 0xe2, 0x43, 0x43, 0x1b, 0x64, 0x1e, 0x8a, 0x35, 0xc7, 0x6e, 0x58, 0xcd, 0x35, 0xd3, 0x95, 0x9b, - 0xb6, 0xde, 0xed, 0x17, 0x15, 0x02, 0x43, 0x1a, 0xf2, 0x38, 0x0c, 0x6f, 0xd3, 0x3d, 0xb9, 0x7b, - 0x97, 0x24, 0xe9, 0xf0, 0x55, 0xba, 0x87, 0x0c, 0x6e, 0x7c, 0x3b, 0x07, 0x27, 0x53, 0xa6, 0x05, - 0x2b, 0xd6, 0xf5, 0xda, 0x52, 0x82, 0x2e, 0x76, 0x03, 0xaf, 0x21, 0x83, 0x93, 0xaf, 0xe4, 0x60, - 0x32, 0x32, 0x4f, 0x16, 0xba, 0xf2, 0x80, 0xc8, 0xbe, 0xf3, 0xc5, 0x78, 0x55, 0xce, 0x4a, 0x89, - 0x93, 0x09, 0x04, 0x26, 0xa5, 0x1a, 0x7f, 0x9f, 0x83, 0x24, 0x11, 0x31, 0xe1, 0x44, 0xd7, 0xa7, - 0x1e, 0x3b, 0xbe, 0xaa, 0xb4, 0xe6, 0xd1, 0x40, 0x6a, 0x3e, 0x4f, 0xce, 0x09, 0xbd, 0x8c, 0xd5, - 0x62, 0x8e, 0x69, 0xa1, 0x73, 0x3b, 0xcf, 0xce, 0x09, 0x8a, 0xab, 0x74, 0xaf, 0x4a, 0xdb, 0x94, - 0xf1, 0xa8, 0x90, 0x83, 0xfd, 0xd9, 0x13, 0x37, 0x62, 0x0c, 0x30, 0xc1, 0x90, 0x89, 0x70, 0x4d, - 0xdf, 0xdf, 0x75, 0xbc, 0xba, 0x14, 0x31, 0x74, 0x64, 0x11, 0x1b, 0x31, 0x06, 0x98, 0x60, 0x68, - 0xfc, 0x65, 0x0e, 0xc6, 0x2a, 0x66, 0x6d, 0xdb, 0x69, 0x34, 0xd8, 0x9e, 0x5f, 0xef, 0x7a, 0xe2, - 0x64, 0x14, 0x63, 0xa2, 0xf7, 0xfc, 0x25, 0x09, 0x47, 0x4d, 0x41, 0x36, 0x61, 0x54, 0x74, 0x87, - 0xac, 0xd4, 0xa7, 0x23, 0x95, 0xd2, 0xfa, 0x28, 0x1f, 0x0e, 0xa6, 0x8f, 0xce, 0x09, 0x7d, 0x74, - 0xee, 0x8a, 0x1d, 0xac, 0x33, 0x1d, 0xcf, 0xb2, 0x9b, 0x15, 0x38, 0xd8, 0x9f, 0x1d, 0x5d, 0xe1, - 0x3c, 0x50, 0xf2, 0x62, 0xc7, 0x43, 0xc7, 0x7c, 0x57, 0x89, 0xe3, 0xdb, 0x69, 0x31, 0x3c, 0x1e, - 0xd6, 0x42, 0x14, 0x46, 0xe9, 0x8c, 0xb7, 0x20, 0xbf, 0x68, 0xd6, 0x5a, 0x94, 0xdc, 0x48, 0x4e, - 0xdd, 0xd2, 0xa5, 0xa7, 0xd3, 0x7a, 0x4b, 0x4f, 0xe3, 0x68, 0x87, 0x4d, 0xf4, 0x9b, 0xe0, 0xc6, - 0xc7, 0x39, 0x38, 0xbb, 0xd8, 0xee, 0xfa, 0x01, 0xf5, 0x6e, 0xc9, 0x79, 0xb5, 0x49, 0x3b, 0x6e, - 0xdb, 0x0c, 0x28, 0xf9, 0xdf, 0x50, 0x60, 0xb6, 0x40, 0xdd, 0x0c, 0x4c, 0x29, 0xb1, 0x7f, 0x57, - 0xf0, 0x99, 0xc9, 0xa8, 0x59, 0x1d, 0xd6, 0xb7, 0xee, 0xd0, 0x5a, 0xb0, 0x46, 0x03, 0x33, 0x3c, - 0xfb, 0x43, 0x18, 0x6a, 0xae, 0x64, 0x1b, 0x46, 0x7c, 0x97, 0xd6, 0x64, 0x47, 0x5f, 0xc9, 0x34, - 0xf9, 0x93, 0xd5, 0xae, 0xba, 0xb4, 0x16, 0x2a, 0x4a, 0xec, 0x0b, 0xb9, 0x10, 0xe3, 0x5f, 0x72, - 0xf0, 0x58, 0x9f, 0xa6, 0x5e, 0xb3, 0xfc, 0x80, 0xbc, 0xd9, 0xd3, 0xdc, 0xb9, 0xc3, 0x35, 0x97, - 0x95, 0xe6, 0x8d, 0xd5, 0xb3, 0x4a, 0x41, 0x22, 0x4d, 0x7d, 0x07, 0xf2, 0x56, 0x40, 0x3b, 0x4a, - 0x47, 0xbd, 0x96, 0xa9, 0xad, 0x7d, 0xaa, 0x5f, 0x99, 0x50, 0x36, 0xce, 0x15, 0x26, 0x02, 0x85, - 0x24, 0xe3, 0x6f, 0x72, 0xc0, 0x06, 0xbd, 0x6e, 0x49, 0x9d, 0x62, 0x24, 0xd8, 0x73, 0x95, 0xae, - 0xfa, 0xb8, 0xea, 0xa0, 0xcd, 0x3d, 0x97, 0x19, 0x45, 0x13, 0x9a, 0x90, 0x01, 0x90, 0x93, 0x92, - 0xb7, 0x60, 0xd4, 0x0f, 0xcc, 0xa0, 0xeb, 0xcb, 0x0d, 0x70, 0x45, 0x16, 0x1a, 0xad, 0x72, 0xe8, - 0xdd, 0xfd, 0xd9, 0x43, 0x59, 0x92, 0x73, 0x9a, 0xb7, 0x28, 0x87, 0x92, 0x2b, 0xd3, 0xae, 0x3a, - 0xd4, 0xf7, 0xcd, 0x26, 0x95, 0xeb, 0x41, 0x6b, 0x57, 0x6b, 0x02, 0x8c, 0x0a, 0x6f, 0x7c, 0x01, - 0x60, 0xd1, 0xb1, 0x03, 0xcb, 0xee, 0xd2, 0x75, 0x9b, 0x3c, 0x01, 0x79, 0xea, 0x79, 0x8e, 0x27, - 0x35, 0x23, 0xdd, 0xfc, 0x65, 0x06, 0x44, 0x81, 0x23, 0x4f, 0xb1, 0x75, 0x6c, 0xb5, 0x69, 0x9d, - 0xd7, 0xbe, 0x50, 0x39, 0xa1, 0x6a, 0xbf, 0xc2, 0xa1, 0x28, 0xb1, 0xc6, 0x1c, 0x8c, 0x2d, 0x32, - 0xc3, 0x91, 0x7a, 0x8c, 0x6f, 0xd4, 0x74, 0x9c, 0x88, 0x99, 0x8e, 0xca, 0x44, 0xfc, 0xee, 0x10, - 0x8c, 0x2f, 0x7a, 0x8e, 0xad, 0x46, 0xe1, 0x21, 0xac, 0x93, 0x66, 0x6c, 0x9d, 0x64, 0x53, 0xeb, - 0xa3, 0x55, 0xee, 0xb7, 0x46, 0x88, 0xa3, 0x47, 0x5c, 0xe8, 0x7b, 0xab, 0x83, 0x8b, 0xe2, 0xec, - 0xc2, 0xce, 0x8f, 0x4f, 0x01, 0xe3, 0xfb, 0x39, 0x98, 0x8a, 0x92, 0x3f, 0x84, 0x95, 0xd8, 0x88, - 0xaf, 0xc4, 0x85, 0x81, 0x9b, 0xd8, 0x67, 0xf9, 0xfd, 0x7b, 0x3e, 0xde, 0x34, 0xd6, 0xcd, 0xcc, - 0x5a, 0x1b, 0xdf, 0x8d, 0x00, 0x64, 0xfb, 0x16, 0x06, 0xda, 0xfa, 0xf8, 0x70, 0x7e, 0x52, 0x56, - 0x62, 0x3c, 0x0a, 0xbd, 0x9b, 0xf8, 0xc6, 0x98, 0x70, 0x76, 0x30, 0xfa, 0xb5, 0x16, 0xad, 0x77, - 0xdb, 0x54, 0x2e, 0x71, 0xdd, 0x71, 0x55, 0x09, 0x47, 0x4d, 0x41, 0xde, 0x84, 0xe9, 0x9a, 0x63, - 0xd7, 0xba, 0x9e, 0x47, 0xed, 0xda, 0xde, 0x06, 0xf7, 0x31, 0xc9, 0x85, 0x3b, 0x27, 0x8b, 0x4d, - 0x2f, 0x26, 0x09, 0xee, 0xa6, 0x01, 0xb1, 0x97, 0x91, 0x30, 0xb5, 0x7c, 0x97, 0xda, 0x75, 0x6e, - 0x0d, 0x14, 0xa2, 0xa6, 0x16, 0x07, 0xa3, 0xc2, 0x93, 0x1b, 0x70, 0xd6, 0x0f, 0x98, 0x2a, 0x63, - 0x37, 0x97, 0xa8, 0x59, 0x6f, 0x5b, 0x36, 0x53, 0x2c, 0x1c, 0xbb, 0xee, 0x73, 0x05, 0x7f, 0xb8, - 0xf2, 0xd8, 0xc1, 0xfe, 0xec, 0xd9, 0x6a, 0x3a, 0x09, 0xf6, 0x2b, 0x4b, 0xde, 0x82, 0x19, 0xbf, - 0x5b, 0xab, 0x51, 0xdf, 0x6f, 0x74, 0xdb, 0xaf, 0x39, 0x5b, 0xfe, 0x65, 0xcb, 0x67, 0x5a, 0xd1, - 0x35, 0xab, 0x63, 0x05, 0x5c, 0x89, 0xcf, 0x57, 0xce, 0x1f, 0xec, 0xcf, 0xce, 0x54, 0xfb, 0x52, - 0xe1, 0x3d, 0x38, 0x10, 0x84, 0x33, 0x62, 0xcb, 0xe9, 0xe1, 0x3d, 0xc6, 0x79, 0xcf, 0x1c, 0xec, - 0xcf, 0x9e, 0x59, 0x49, 0xa5, 0xc0, 0x3e, 0x25, 0xd9, 0x08, 0x06, 0x56, 0x87, 0xbe, 0xe7, 0xd8, - 0x94, 0x6b, 0xea, 0x91, 0x11, 0xdc, 0x94, 0x70, 0xd4, 0x14, 0xe4, 0x4e, 0x38, 0xf9, 0xd8, 0xa2, - 0x90, 0xea, 0xf7, 0xd1, 0x77, 0xab, 0x53, 0x07, 0xfb, 0xb3, 0x53, 0xb7, 0x22, 0x9c, 0xd8, 0xc2, - 0xc2, 0x18, 0x6f, 0xe3, 0xaf, 0x87, 0x80, 0xf4, 0x6e, 0x04, 0xe4, 0x2a, 0x8c, 0x9a, 0xb5, 0x80, - 0xd9, 0xfa, 0xc2, 0x3f, 0xf4, 0x44, 0x9a, 0x12, 0x23, 0x44, 0x21, 0x6d, 0x50, 0x36, 0x43, 0x68, - 0xb8, 0x7b, 0x2c, 0xf0, 0xa2, 0x28, 0x59, 0x10, 0x07, 0xa6, 0xdb, 0xa6, 0x1f, 0xa8, 0xb9, 0x5a, - 0x67, 0x4d, 0x96, 0x9b, 0xe4, 0x7f, 0x3b, 0x5c, 0xa3, 0x58, 0x89, 0xca, 0x69, 0x36, 0x73, 0xaf, - 0x25, 0x19, 0x61, 0x2f, 0x6f, 0xe2, 0x01, 0xd4, 0xd4, 0x61, 0xc6, 0xf6, 0xc8, 0xec, 0x1e, 0x2e, - 0x7d, 0x26, 0x86, 0x5b, 0xbf, 0x06, 0xf9, 0x18, 0x91, 0x62, 0xfc, 0x64, 0x14, 0xc6, 0x96, 0x16, - 0x56, 0x37, 0x4d, 0x7f, 0xfb, 0x10, 0x0e, 0x27, 0x36, 0x21, 0xa4, 0x5a, 0x90, 0x5c, 0xd2, 0x4a, - 0x5d, 0x40, 0x4d, 0x41, 0x1c, 0x28, 0x9a, 0xca, 0x7d, 0x27, 0xb7, 0xfc, 0x97, 0x33, 0x9a, 0x20, - 0x92, 0x4b, 0xd4, 0x7d, 0x26, 0x41, 0x18, 0xca, 0x20, 0x3e, 0x94, 0x94, 0x70, 0xa4, 0x0d, 0x69, - 0xf7, 0x67, 0xf4, 0xa9, 0x86, 0x7c, 0x84, 0x1d, 0x1e, 0x01, 0x60, 0x54, 0x0a, 0xf9, 0x0c, 0x8c, - 0xd7, 0x29, 0xdb, 0x39, 0xa8, 0x5d, 0xb3, 0x28, 0xdb, 0x24, 0x86, 0x59, 0xbf, 0xb0, 0xcd, 0x72, - 0x29, 0x02, 0xc7, 0x18, 0x15, 0xb9, 0x03, 0xc5, 0x5d, 0x2b, 0x68, 0xf1, 0x3d, 0xbd, 0x3c, 0xca, - 0x87, 0xfa, 0xb3, 0x99, 0x2a, 0xca, 0x38, 0x84, 0xdd, 0x72, 0x4b, 0xf1, 0xc4, 0x90, 0x3d, 0x33, - 0x4c, 0xd9, 0x07, 0xf7, 0x71, 0xf2, 0xdd, 0xa0, 0x18, 0x2f, 0xc0, 0x11, 0x18, 0xd2, 0x10, 0x1f, - 0xc6, 0xd9, 0x47, 0x95, 0xbe, 0xd3, 0x65, 0x2b, 0x44, 0x5a, 0xe9, 0xd9, 0x3c, 0x9f, 0x8a, 0x89, - 0xe8, 0x91, 0x5b, 0x11, 0xb6, 0x18, 0x13, 0xc2, 0x66, 0xdf, 0x6e, 0x8b, 0xda, 0xd2, 0x15, 0xa6, - 0x67, 0xdf, 0xad, 0x16, 0xb5, 0x91, 0x63, 0x88, 0xc3, 0xd7, 0x87, 0x54, 0xd3, 0xb8, 0x0f, 0x2c, - 0xab, 0x37, 0x2a, 0xd4, 0xf6, 0x2a, 0x27, 0xe4, 0xe2, 0x90, 0xdf, 0x18, 0x11, 0xc1, 0x94, 0x3c, - 0xc7, 0x5e, 0x7e, 0xd7, 0x0a, 0xca, 0x25, 0x5e, 0x29, 0xbd, 0x53, 0xac, 0x73, 0x28, 0x4a, 0x2c, - 0x3b, 0x5d, 0xc4, 0xe0, 0xfa, 0xe5, 0xf1, 0xb8, 0xaa, 0x29, 0x66, 0x80, 0x8f, 0x0a, 0x6f, 0xfc, - 0x45, 0x0e, 0x4a, 0x6c, 0xbd, 0xa9, 0x35, 0xf2, 0x14, 0x8c, 0x06, 0xa6, 0xd7, 0x94, 0x76, 0x70, - 0x44, 0xc4, 0x26, 0x87, 0xa2, 0xc4, 0x12, 0x13, 0xf2, 0x81, 0xe9, 0x6f, 0x2b, 0xbd, 0xe2, 0xf3, - 0x99, 0x9a, 0x2d, 0x17, 0x7a, 0xa8, 0x52, 0xb0, 0x2f, 0x1f, 0x05, 0x67, 0xf2, 0x34, 0x14, 0xd8, - 0x39, 0xb0, 0x62, 0xfa, 0xc2, 0x21, 0x57, 0xa8, 0x8c, 0xb3, 0x85, 0xbd, 0x22, 0x61, 0xa8, 0xb1, - 0xc6, 0xf3, 0x90, 0x5f, 0xde, 0xa1, 0x36, 0x3f, 0x20, 0x7c, 0x69, 0x06, 0x26, 0x6d, 0x5f, 0x65, - 0x1e, 0xa2, 0xa6, 0x30, 0xde, 0x84, 0x13, 0xcb, 0xef, 0xd2, 0x5a, 0x37, 0x70, 0x3c, 0x61, 0x2e, - 0x92, 0xd7, 0x80, 0xf8, 0xd4, 0xdb, 0xb1, 0x6a, 0x74, 0xa1, 0x56, 0x63, 0x6a, 0xf2, 0xf5, 0x70, - 0xff, 0x99, 0x91, 0x9c, 0x48, 0xb5, 0x87, 0x02, 0x53, 0x4a, 0x19, 0xbf, 0x93, 0x83, 0x52, 0xc4, - 0x6b, 0xc3, 0x76, 0x9f, 0xe6, 0x62, 0xb5, 0xd2, 0xad, 0x6d, 0x6b, 0x27, 0xc3, 0xcb, 0x59, 0x5d, - 0x41, 0x82, 0x4b, 0xb8, 0x6a, 0x34, 0x08, 0x43, 0x19, 0xf7, 0x73, 0xe7, 0xfc, 0x59, 0x0e, 0xc2, - 0x72, 0x6c, 0xdc, 0xb7, 0xc2, 0xaa, 0x45, 0xc6, 0x5d, 0xf2, 0x95, 0x58, 0xf2, 0x41, 0x0e, 0xce, - 0xc6, 0x1b, 0xcb, 0x4d, 0xef, 0xa3, 0xbb, 0x35, 0x66, 0xa5, 0x80, 0xb3, 0xd5, 0x74, 0x6e, 0xd8, - 0x4f, 0x8c, 0x71, 0x13, 0xf2, 0xab, 0x66, 0xb7, 0x49, 0x0f, 0x65, 0xc0, 0xb0, 0x59, 0xe4, 0x51, - 0xb3, 0x1d, 0xa8, 0xc3, 0x52, 0xce, 0x22, 0x94, 0x30, 0xd4, 0x58, 0xe3, 0x5b, 0x23, 0x50, 0x8a, - 0x38, 0x6f, 0xd9, 0x06, 0xe0, 0x51, 0xd7, 0x49, 0x1e, 0x3f, 0x48, 0x5d, 0x07, 0x39, 0x86, 0x4d, - 0x37, 0x8f, 0xee, 0x58, 0xbe, 0xe5, 0xd8, 0xc9, 0xe3, 0x07, 0x25, 0x1c, 0x35, 0x05, 0x99, 0x85, - 0x7c, 0x9d, 0xba, 0x41, 0x8b, 0x4f, 0xe6, 0x91, 0x4a, 0x91, 0x55, 0x75, 0x89, 0x01, 0x50, 0xc0, - 0x19, 0x41, 0x83, 0x06, 0xb5, 0x56, 0x79, 0x84, 0x6f, 0xd9, 0x9c, 0x60, 0x85, 0x01, 0x50, 0xc0, - 0x53, 0x9c, 0x55, 0xf9, 0x07, 0xef, 0xac, 0x1a, 0x3d, 0x66, 0x67, 0x15, 0x71, 0xe1, 0xa4, 0xef, - 0xb7, 0x36, 0x3c, 0x6b, 0xc7, 0x0c, 0x68, 0x38, 0x7b, 0xc6, 0x8e, 0x22, 0xe7, 0xec, 0xc1, 0xfe, - 0xec, 0xc9, 0x6a, 0xf5, 0x72, 0x92, 0x0b, 0xa6, 0xb1, 0x26, 0x55, 0x38, 0x6d, 0xd9, 0x3e, 0xad, - 0x75, 0x3d, 0x7a, 0xa5, 0x69, 0x3b, 0x1e, 0xbd, 0xec, 0xf8, 0x8c, 0x9d, 0x8c, 0x89, 0x28, 0xf7, - 0xc0, 0xe9, 0x2b, 0x69, 0x44, 0x98, 0x5e, 0xd6, 0xf8, 0x6e, 0x0e, 0xc6, 0xa3, 0xfe, 0x6a, 0xe2, - 0x03, 0xb4, 0x96, 0x56, 0xaa, 0x62, 0x2b, 0x91, 0x2b, 0xfc, 0x95, 0xcc, 0x6e, 0x70, 0xc1, 0x26, - 0xd4, 0x97, 0x42, 0x18, 0x46, 0xc4, 0x1c, 0x22, 0xe4, 0xf6, 0x04, 0xe4, 0x1b, 0x8e, 0x57, 0xa3, - 0x72, 0x0f, 0xd5, 0xab, 0x64, 0x85, 0x01, 0x51, 0xe0, 0x8c, 0x8f, 0x73, 0x10, 0x91, 0x40, 0xfe, - 0x1f, 0x4c, 0x30, 0x19, 0x57, 0xbd, 0xad, 0x58, 0x6b, 0x2a, 0x99, 0x5b, 0xa3, 0x39, 0x55, 0x4e, - 0x4b, 0xf9, 0x13, 0x31, 0x30, 0xc6, 0xe5, 0x91, 0xff, 0x0e, 0x45, 0xb3, 0x5e, 0xf7, 0xa8, 0xef, - 0x53, 0x71, 0xc4, 0x14, 0x85, 0x5b, 0x6f, 0x41, 0x01, 0x31, 0xc4, 0xb3, 0x65, 0xd8, 0xaa, 0x37, - 0x7c, 0x36, 0xb3, 0xa5, 0x85, 0xa6, 0x97, 0x21, 0x13, 0xc2, 0xe0, 0xa8, 0x29, 0x8c, 0xaf, 0x8f, - 0x40, 0x5c, 0x36, 0xa9, 0xc3, 0xe4, 0xb6, 0xb7, 0xb5, 0xc8, 0x5d, 0x8f, 0x59, 0x9c, 0xc0, 0x27, - 0x0f, 0xf6, 0x67, 0x27, 0xaf, 0xc6, 0x39, 0x60, 0x92, 0xa5, 0x94, 0x72, 0x95, 0xee, 0x05, 0xe6, - 0x56, 0x96, 0x0d, 0x53, 0x49, 0x89, 0x72, 0xc0, 0x24, 0x4b, 0xf2, 0x3c, 0x94, 0xb6, 0xbd, 0x2d, - 0xb5, 0xc8, 0x93, 0x9e, 0xd7, 0xab, 0x21, 0x0a, 0xa3, 0x74, 0xac, 0x0b, 0xb7, 0xbd, 0x2d, 0xb6, - 0x29, 0xaa, 0xe8, 0xab, 0xee, 0xc2, 0xab, 0x12, 0x8e, 0x9a, 0x82, 0xb8, 0x40, 0xb6, 0x55, 0xef, - 0x69, 0x47, 0xab, 0xdc, 0x8b, 0x0e, 0xef, 0xa7, 0x3d, 0xc3, 0x0e, 0xd3, 0xab, 0x3d, 0x7c, 0x30, - 0x85, 0x37, 0xf9, 0x02, 0x9c, 0xdd, 0xf6, 0xb6, 0xe4, 0x51, 0xb1, 0xe1, 0x59, 0x76, 0xcd, 0x72, - 0x63, 0x61, 0x57, 0x7d, 0x9c, 0x5c, 0x4d, 0x27, 0xc3, 0x7e, 0xe5, 0x8d, 0x6f, 0xb0, 0x75, 0x1c, - 0x89, 0xaa, 0xdd, 0x2f, 0x9e, 0xd1, 0x80, 0xb1, 0x16, 0x35, 0xeb, 0xd4, 0x53, 0xba, 0xcf, 0x8b, - 0xd9, 0x56, 0x05, 0xe7, 0x11, 0x6a, 0x66, 0xe2, 0xdb, 0x47, 0xc5, 0xdc, 0x58, 0x87, 0x51, 0x01, - 0x3b, 0x84, 0x1d, 0xa4, 0x4f, 0xc2, 0xa1, 0x7b, 0xb8, 0xf2, 0x3e, 0xcc, 0x41, 0x91, 0x9b, 0xd3, - 0x4d, 0xa6, 0x53, 0xeb, 0x22, 0xc3, 0xf7, 0x38, 0x3c, 0x1b, 0x30, 0x26, 0xce, 0x7d, 0x9f, 0x9f, - 0x49, 0x59, 0xdb, 0x2a, 0x72, 0x55, 0xc2, 0xb6, 0x0a, 0x9d, 0xc2, 0x47, 0xc5, 0xdc, 0xf8, 0xe7, - 0x1c, 0x8c, 0x5e, 0xb1, 0xdd, 0xee, 0xcf, 0x49, 0x5a, 0xc5, 0x1a, 0x8c, 0x30, 0x4b, 0x28, 0x9e, - 0xbc, 0x33, 0x5e, 0x79, 0x32, 0x9a, 0xb8, 0x53, 0x8e, 0x27, 0xee, 0xa0, 0xb9, 0xab, 0xdc, 0xc4, - 0xa2, 0xcc, 0xe7, 0x0a, 0x1f, 0xfe, 0xde, 0xec, 0x23, 0x1f, 0xfc, 0xe0, 0xc2, 0x23, 0x46, 0x1b, - 0x46, 0xae, 0x59, 0xf6, 0xf6, 0xe1, 0xe6, 0x89, 0x5f, 0x73, 0xdc, 0x9e, 0x79, 0x52, 0x65, 0x40, - 0x14, 0x38, 0x35, 0xff, 0x87, 0xd3, 0xe7, 0xbf, 0xf1, 0xa5, 0x1c, 0x4c, 0xaf, 0xd1, 0x8e, 0x63, - 0xbd, 0x67, 0x86, 0x5e, 0x6e, 0x56, 0xa8, 0x65, 0x05, 0xd2, 0x45, 0xad, 0x0b, 0x5d, 0xb6, 0x02, - 0x64, 0xf0, 0xfb, 0xe8, 0xa2, 0x3c, 0x54, 0xc9, 0xb6, 0xca, 0xeb, 0xe1, 0x9e, 0x15, 0x86, 0x2a, - 0x15, 0x02, 0x43, 0x1a, 0xe3, 0x8f, 0x72, 0x30, 0x26, 0x2a, 0x41, 0x15, 0xef, 0x5c, 0x1f, 0xde, - 0xb7, 0x21, 0xcf, 0xcb, 0xc9, 0xdd, 0xf6, 0x73, 0xd9, 0x0c, 0x34, 0xc6, 0x41, 0x68, 0x64, 0xfc, - 0x27, 0x0a, 0x9e, 0x4c, 0x6d, 0xee, 0x98, 0xef, 0x2e, 0x68, 0x9f, 0xbe, 0x56, 0x9b, 0xd7, 0x38, - 0x14, 0x25, 0xd6, 0xf8, 0x60, 0x18, 0x0a, 0xca, 0x75, 0x44, 0xbe, 0x9c, 0x83, 0x92, 0x69, 0xdb, - 0x4e, 0x60, 0x0a, 0xcf, 0x8a, 0x98, 0xe4, 0xd7, 0x33, 0x55, 0x4c, 0x31, 0x9d, 0x5b, 0x08, 0x19, - 0x2e, 0xdb, 0x81, 0xb7, 0x17, 0x6e, 0xfa, 0x11, 0x0c, 0x46, 0xe5, 0x92, 0x77, 0x60, 0xb4, 0x6d, - 0x6e, 0xd1, 0xb6, 0x9a, 0xf3, 0x57, 0x06, 0xab, 0xc1, 0x35, 0xce, 0x4b, 0x08, 0xd7, 0xfd, 0x20, - 0x80, 0x28, 0x05, 0xcd, 0xbc, 0x0c, 0x53, 0xc9, 0x8a, 0x92, 0xa9, 0xc8, 0xf8, 0x89, 0x21, 0x3b, - 0x15, 0xdb, 0xce, 0xd4, 0x84, 0x1f, 0x7a, 0x21, 0x37, 0xf3, 0x59, 0x28, 0x45, 0xc4, 0x1c, 0xa5, - 0xa8, 0xf1, 0x3a, 0x94, 0xd6, 0x68, 0xe0, 0x59, 0x35, 0xce, 0xe0, 0x7e, 0xb3, 0xe6, 0x50, 0x3b, - 0xea, 0x7b, 0x6c, 0x12, 0x32, 0x96, 0x3e, 0x71, 0x00, 0x5c, 0xcf, 0xe9, 0xd0, 0xa0, 0x45, 0xbb, - 0x6a, 0x44, 0xb3, 0x29, 0x7f, 0x1b, 0x9a, 0x8d, 0xf0, 0x05, 0x84, 0xdf, 0x18, 0x11, 0x61, 0x5c, - 0x84, 0xfc, 0x5a, 0x37, 0xa0, 0xef, 0xde, 0x7f, 0xd5, 0x1b, 0xb7, 0x61, 0x9c, 0x93, 0x5e, 0x76, - 0xda, 0x6c, 0x43, 0x61, 0x6d, 0xeb, 0xb0, 0xef, 0xa4, 0xdd, 0xc4, 0x89, 0x50, 0xe0, 0xd8, 0xcc, - 0x6e, 0x39, 0xed, 0x3a, 0xf5, 0x64, 0x0f, 0xe8, 0x11, 0xbd, 0xcc, 0xa1, 0x28, 0xb1, 0xc6, 0x8f, - 0x73, 0x50, 0xe2, 0x05, 0xe5, 0x46, 0xd0, 0x86, 0xb1, 0x96, 0x90, 0x23, 0x7b, 0x21, 0x9b, 0xb7, - 0x3f, 0x5a, 0xe1, 0xc8, 0x21, 0x29, 0x00, 0xa8, 0x44, 0x30, 0x69, 0xbb, 0xa6, 0x15, 0x30, 0x69, - 0x43, 0xc7, 0x2e, 0xed, 0x96, 0xe0, 0x8c, 0x4a, 0x84, 0xf1, 0xc7, 0x53, 0x00, 0xd7, 0x9d, 0x3a, - 0x95, 0x4d, 0x9d, 0x81, 0x21, 0xab, 0x2e, 0x3b, 0x11, 0x64, 0xa1, 0xa1, 0x2b, 0x4b, 0x38, 0x64, - 0xd5, 0xf5, 0xa8, 0x0c, 0xf5, 0xdd, 0x8b, 0x9f, 0x87, 0x52, 0xdd, 0xf2, 0xdd, 0xb6, 0xb9, 0x77, - 0x3d, 0x45, 0x53, 0x5b, 0x0a, 0x51, 0x18, 0xa5, 0x23, 0xcf, 0xc8, 0xc8, 0xa6, 0xd0, 0xd2, 0xca, - 0x89, 0xc8, 0x66, 0x81, 0x55, 0x2f, 0x12, 0xd4, 0x7c, 0x01, 0xc6, 0x95, 0x6f, 0x90, 0x4b, 0xc9, - 0xf3, 0x52, 0xa7, 0x54, 0xf4, 0x64, 0x33, 0x82, 0xc3, 0x18, 0x65, 0xd2, 0x77, 0x39, 0xfa, 0x50, - 0x7c, 0x97, 0x4b, 0x30, 0xe5, 0x07, 0x8e, 0x47, 0xeb, 0x8a, 0xe2, 0xca, 0x52, 0x99, 0xc4, 0x1a, - 0x3a, 0x55, 0x4d, 0xe0, 0xb1, 0xa7, 0x04, 0xd9, 0x80, 0x53, 0xbb, 0x89, 0xa0, 0x31, 0x6f, 0xfc, - 0x49, 0xce, 0xe9, 0x9c, 0xe4, 0x74, 0xea, 0x56, 0x0a, 0x0d, 0xa6, 0x96, 0x24, 0x2f, 0xc2, 0x84, - 0xaa, 0x26, 0x3f, 0x2a, 0xcb, 0xa7, 0x38, 0x2b, 0x6d, 0xcb, 0x6c, 0x46, 0x91, 0x18, 0xa7, 0x25, - 0x9f, 0x86, 0xbc, 0xdb, 0x32, 0x7d, 0x2a, 0x5d, 0x9d, 0xca, 0x8f, 0x94, 0xdf, 0x60, 0xc0, 0xbb, - 0xfb, 0xb3, 0x45, 0x36, 0x66, 0xfc, 0x03, 0x05, 0x21, 0xb9, 0x04, 0xb0, 0xe5, 0x74, 0xed, 0xba, - 0xe9, 0xed, 0x5d, 0x59, 0x92, 0x91, 0x0e, 0xad, 0xc3, 0x54, 0x34, 0x06, 0x23, 0x54, 0xd1, 0xf0, - 0x72, 0xf1, 0xde, 0xe1, 0x65, 0x72, 0x1b, 0x8a, 0x3c, 0x2a, 0x44, 0xeb, 0x0b, 0x81, 0x74, 0x5b, - 0x1e, 0x25, 0x80, 0xa0, 0x4f, 0xe6, 0xaa, 0x62, 0x82, 0x21, 0x3f, 0xf2, 0x16, 0x40, 0xc3, 0xb2, - 0x2d, 0xbf, 0xc5, 0xb9, 0x97, 0x8e, 0xcc, 0x5d, 0xb7, 0x73, 0x45, 0x73, 0xc1, 0x08, 0x47, 0xf2, - 0x26, 0x4c, 0x53, 0x3f, 0xb0, 0x3a, 0x66, 0x40, 0xeb, 0x3a, 0xc1, 0xa4, 0xcc, 0x03, 0x61, 0x3a, - 0x2e, 0xb7, 0x9c, 0x24, 0xb8, 0x9b, 0x06, 0xc4, 0x5e, 0x46, 0xe4, 0x05, 0x28, 0xb8, 0x9e, 0xd3, - 0x64, 0x86, 0x65, 0x79, 0x26, 0x36, 0x5d, 0x0a, 0x1b, 0x12, 0x7e, 0x37, 0xf2, 0x1b, 0x35, 0x35, - 0xf9, 0xa7, 0x1c, 0x4c, 0x7b, 0xd4, 0x77, 0xba, 0x5e, 0x8d, 0xfa, 0xba, 0x62, 0xa7, 0xf9, 0xa6, - 0x74, 0x33, 0x63, 0xa2, 0xb3, 0xda, 0x69, 0xe6, 0x30, 0xc9, 0x58, 0x9c, 0xb2, 0x54, 0x35, 0xb8, - 0x07, 0x7f, 0x37, 0x0d, 0xf8, 0xa5, 0x1f, 0xce, 0xce, 0xf6, 0xe6, 0xd6, 0x6b, 0xe6, 0x6c, 0xa6, - 0xff, 0xf2, 0x0f, 0x67, 0xa7, 0xd4, 0x77, 0xd8, 0x4f, 0x3d, 0xed, 0x62, 0x47, 0x88, 0xeb, 0xd4, - 0xaf, 0x6c, 0x48, 0xff, 0xb2, 0x3e, 0x42, 0x36, 0x18, 0x10, 0x05, 0x8e, 0x3c, 0x0d, 0x85, 0xba, - 0x49, 0x3b, 0x8e, 0x4d, 0xeb, 0xe5, 0x89, 0xd0, 0xf5, 0xb6, 0x24, 0x61, 0xa8, 0xb1, 0xe4, 0x6d, - 0x18, 0xb5, 0xb8, 0xfa, 0x5f, 0x3e, 0xc1, 0x27, 0x4c, 0x36, 0x33, 0x43, 0x58, 0x10, 0x22, 0x21, - 0x49, 0xfc, 0x46, 0xc9, 0x96, 0xd4, 0x60, 0xcc, 0xe9, 0x06, 0x5c, 0xc2, 0x24, 0x97, 0x90, 0xcd, - 0x61, 0xbd, 0x2e, 0x78, 0x88, 0x6c, 0x5b, 0xf9, 0x81, 0x8a, 0x33, 0x6b, 0x6f, 0xad, 0x65, 0xb5, - 0xeb, 0x1e, 0xb5, 0xcb, 0x53, 0xdc, 0x67, 0xc1, 0xdb, 0xbb, 0x28, 0x61, 0xa8, 0xb1, 0xe4, 0x7f, - 0xc2, 0x84, 0xd3, 0x0d, 0xf8, 0xea, 0x65, 0xa3, 0xec, 0x97, 0xa7, 0x39, 0xf9, 0x34, 0xdb, 0x4b, - 0xd6, 0xa3, 0x08, 0x8c, 0xd3, 0xb1, 0xfd, 0xbc, 0xe5, 0xf8, 0x01, 0xfb, 0xe0, 0x5b, 0xda, 0x99, - 0xf8, 0x7e, 0x7e, 0x39, 0x82, 0xc3, 0x18, 0x25, 0xf9, 0x5a, 0x0e, 0xa6, 0x3b, 0x49, 0xb5, 0xbd, - 0x7c, 0x96, 0x77, 0xc6, 0x4a, 0x46, 0xc5, 0x2f, 0xc1, 0x4d, 0x84, 0x16, 0x7b, 0xc0, 0xd8, 0x2b, - 0x97, 0xfc, 0x6e, 0x0e, 0x4e, 0xfb, 0x7b, 0x76, 0xad, 0xe5, 0x39, 0x76, 0xbc, 0x46, 0x8f, 0xf2, - 0x1a, 0x5d, 0xcf, 0xbe, 0x62, 0xd2, 0xb8, 0x56, 0x1e, 0x3d, 0xd8, 0x9f, 0x3d, 0x9d, 0x8a, 0xc2, - 0xf4, 0x7a, 0xcc, 0x2c, 0xc1, 0x99, 0xf4, 0x55, 0x77, 0x3f, 0xa5, 0x73, 0x38, 0xaa, 0x74, 0xae, - 0xc0, 0xa3, 0x7d, 0x2b, 0xc5, 0xb6, 0x6c, 0xa5, 0xbc, 0xe4, 0xe2, 0x5b, 0x76, 0x8f, 0xe6, 0x71, - 0x02, 0xc6, 0xa3, 0xf7, 0x1e, 0x78, 0x70, 0x21, 0x92, 0x6f, 0x4a, 0x1c, 0x28, 0x3a, 0xd5, 0xe3, - 0x08, 0x2e, 0xac, 0x57, 0x7b, 0x82, 0x0b, 0x1a, 0x84, 0xa1, 0x8c, 0xfb, 0x05, 0x17, 0xfe, 0x74, - 0x08, 0xc2, 0x72, 0xe4, 0x19, 0x28, 0x50, 0xbb, 0xee, 0x3a, 0x96, 0x1d, 0x24, 0xc3, 0x32, 0xcb, - 0x12, 0x8e, 0x9a, 0x22, 0x12, 0x8a, 0x18, 0xba, 0x67, 0x28, 0xa2, 0x05, 0x93, 0x26, 0x4f, 0x3f, - 0x08, 0x7d, 0xc8, 0xc3, 0x47, 0xf2, 0x21, 0xeb, 0xc4, 0xd1, 0x38, 0x17, 0x4c, 0xb2, 0x65, 0x92, - 0xfc, 0xb0, 0x38, 0x97, 0x34, 0x92, 0x49, 0x52, 0x35, 0xce, 0x05, 0x93, 0x6c, 0x8d, 0x3f, 0x1f, - 0x02, 0xb5, 0xaf, 0xfc, 0x3c, 0x78, 0x42, 0x88, 0x01, 0xa3, 0x1e, 0xf5, 0xbb, 0xed, 0x40, 0xea, - 0xbf, 0x7c, 0xef, 0x46, 0x0e, 0x41, 0x89, 0x61, 0xdb, 0x2a, 0x7d, 0xd7, 0x0a, 0x16, 0x9d, 0xba, - 0xd2, 0x7a, 0xf9, 0xb6, 0xba, 0x2c, 0x61, 0xa8, 0xb1, 0xc6, 0x2e, 0x4c, 0xb0, 0x76, 0xb5, 0xdb, - 0xb4, 0x5d, 0x0d, 0xa8, 0xeb, 0x93, 0x06, 0xe4, 0x7d, 0xf6, 0x63, 0x20, 0x53, 0x24, 0xcc, 0xe9, - 0xa0, 0x6e, 0xc4, 0x65, 0xc2, 0xf8, 0xa2, 0x60, 0x6f, 0xfc, 0xc3, 0x10, 0x14, 0x75, 0x8f, 0x1e, - 0xc2, 0x0f, 0x73, 0x09, 0xc6, 0xea, 0xb4, 0x61, 0xb2, 0x76, 0x8b, 0x39, 0x5e, 0x16, 0xc1, 0x59, - 0x0e, 0x62, 0x2a, 0xe1, 0x82, 0xbd, 0x27, 0xd2, 0x6b, 0x51, 0x11, 0x92, 0x67, 0xe2, 0x0e, 0xbb, - 0x33, 0x51, 0x67, 0x51, 0x84, 0x5e, 0x7a, 0xee, 0xb6, 0xa1, 0xc8, 0x7f, 0xac, 0xa8, 0xfb, 0x34, - 0x59, 0xe7, 0xce, 0x4d, 0xc5, 0x45, 0x38, 0xe0, 0xf5, 0x27, 0x86, 0xfc, 0x13, 0xf7, 0x60, 0xf2, - 0x87, 0xba, 0x07, 0x73, 0x11, 0x46, 0xa8, 0xdd, 0xed, 0xf0, 0x5c, 0x83, 0x22, 0x3f, 0x39, 0x46, - 0x96, 0xed, 0x6e, 0x27, 0xde, 0x18, 0x4e, 0x62, 0xac, 0x00, 0xd3, 0x2b, 0x56, 0x17, 0xc9, 0x4b, - 0x50, 0xf0, 0xe5, 0x0e, 0x28, 0x3b, 0xf7, 0x13, 0x3a, 0xbc, 0x2b, 0xe1, 0x77, 0xf7, 0x67, 0x27, - 0x38, 0xb1, 0x02, 0xa0, 0x2e, 0x62, 0x7c, 0x65, 0x04, 0x22, 0xd6, 0xf4, 0x21, 0x86, 0xa9, 0x9e, - 0x70, 0x90, 0xbc, 0x9a, 0xd5, 0x41, 0xa2, 0xbc, 0x0e, 0x62, 0x7e, 0xc7, 0x7d, 0x22, 0xac, 0x1e, - 0x2d, 0xda, 0x76, 0xe5, 0xb8, 0xea, 0x7a, 0x5c, 0xa6, 0x6d, 0x17, 0x39, 0x46, 0xa7, 0x22, 0x8c, - 0xf4, 0x4d, 0x45, 0xb8, 0x0d, 0xf9, 0xa6, 0xd9, 0x6d, 0x52, 0xe9, 0x84, 0xcf, 0xe6, 0xe4, 0xe2, - 0x51, 0x55, 0xe1, 0xe4, 0xe2, 0x3f, 0x51, 0xf0, 0x64, 0x73, 0xa9, 0xa5, 0xfc, 0xc6, 0xd2, 0x10, - 0xcc, 0x36, 0x97, 0xb4, 0xf7, 0x59, 0xcc, 0x25, 0xfd, 0x89, 0x21, 0x7f, 0xa6, 0xa9, 0xd5, 0x44, - 0x82, 0xaa, 0x8c, 0x08, 0x7e, 0x3e, 0x63, 0x46, 0x05, 0xe7, 0x21, 0x34, 0x35, 0xf9, 0x81, 0x8a, - 0xb3, 0x31, 0x0f, 0xa5, 0xc8, 0x55, 0x10, 0xd6, 0xbf, 0x3a, 0xfd, 0x32, 0xd2, 0xbf, 0x4b, 0x66, - 0x60, 0x22, 0xc7, 0x18, 0xdf, 0x1c, 0x06, 0xad, 0x17, 0x47, 0x73, 0x25, 0xcc, 0x5a, 0x24, 0xcf, - 0x3e, 0x96, 0xb8, 0xe5, 0xd8, 0x28, 0xb1, 0xcc, 0x7a, 0xec, 0x50, 0xaf, 0xa9, 0x4f, 0x6f, 0xb9, - 0xe6, 0xb5, 0xf5, 0xb8, 0x16, 0x45, 0x62, 0x9c, 0x96, 0x9d, 0x9d, 0x1d, 0xd3, 0xb6, 0x1a, 0xd4, - 0x0f, 0x92, 0xc1, 0xad, 0x35, 0x09, 0x47, 0x4d, 0x41, 0x56, 0x61, 0xda, 0xa7, 0xc1, 0xfa, 0xae, - 0x4d, 0x3d, 0x9d, 0x50, 0x26, 0x33, 0x0c, 0x1f, 0x55, 0xc6, 0x42, 0x35, 0x49, 0x80, 0xbd, 0x65, - 0xb8, 0x25, 0x2e, 0x92, 0xfb, 0x74, 0xa2, 0x96, 0x5c, 0xd8, 0xa1, 0x25, 0x9e, 0xc0, 0x63, 0x4f, - 0x09, 0xc6, 0xa5, 0x61, 0x5a, 0xed, 0xae, 0x47, 0x43, 0x2e, 0xa3, 0x71, 0x2e, 0x2b, 0x09, 0x3c, - 0xf6, 0x94, 0xe0, 0x71, 0xf1, 0xb6, 0xd9, 0xf4, 0xcb, 0x63, 0x91, 0xb8, 0x38, 0x03, 0xa0, 0x80, - 0x1b, 0x1f, 0x0e, 0xc1, 0x04, 0xd2, 0xc0, 0xdb, 0xd3, 0xbd, 0xf6, 0x3a, 0xe4, 0xdb, 0x3c, 0xd9, - 0x30, 0x97, 0xf1, 0x56, 0x03, 0x17, 0x22, 0xb2, 0x11, 0x05, 0x27, 0xb2, 0x04, 0x25, 0x8f, 0xc9, - 0x90, 0xa9, 0xa0, 0x62, 0x0c, 0x8d, 0xf0, 0xca, 0x9b, 0x46, 0xdd, 0x8d, 0x7f, 0x62, 0xb4, 0x18, - 0xb1, 0x61, 0x6c, 0x4b, 0x5c, 0xd4, 0x90, 0xca, 0x4a, 0xb6, 0xe9, 0x2d, 0x2f, 0x7b, 0xf0, 0x53, - 0x40, 0xdd, 0xfc, 0xb8, 0x1b, 0xfe, 0x44, 0x25, 0xc4, 0xf8, 0x30, 0x07, 0x10, 0xde, 0x75, 0x23, - 0xdb, 0x50, 0xf0, 0x9f, 0x8b, 0xa9, 0x89, 0x19, 0xb3, 0xa8, 0x24, 0x93, 0x48, 0x7e, 0x8d, 0x84, - 0xa0, 0x16, 0x70, 0x3f, 0x1d, 0xf1, 0xe3, 0x61, 0xd0, 0xa5, 0x1e, 0x90, 0x8a, 0xf8, 0x14, 0x53, - 0x2f, 0x9a, 0xe1, 0x15, 0x14, 0x4d, 0x87, 0x1c, 0x8a, 0x12, 0xcb, 0x54, 0x0c, 0x15, 0xe4, 0x97, - 0xab, 0x85, 0xab, 0x18, 0x2a, 0x1f, 0x00, 0x35, 0x36, 0x4d, 0xe9, 0xcc, 0x3f, 0x34, 0xa5, 0x73, - 0xf4, 0x81, 0x28, 0x9d, 0xcc, 0x0e, 0xf1, 0x9c, 0x36, 0x5d, 0xc0, 0xeb, 0xd2, 0x45, 0xa5, 0xed, - 0x10, 0x14, 0x60, 0x54, 0x78, 0xf2, 0x3c, 0x94, 0xba, 0x3e, 0xad, 0x2e, 0x5d, 0x5d, 0xf4, 0x68, - 0xdd, 0x97, 0xf9, 0x13, 0xda, 0x69, 0x79, 0x23, 0x44, 0x61, 0x94, 0xce, 0xf8, 0xa5, 0x1c, 0x9c, - 0xa8, 0xd6, 0x3c, 0xcb, 0x0d, 0xf4, 0xe6, 0x79, 0x9d, 0x5f, 0xf1, 0x09, 0x4c, 0xb6, 0x14, 0xe5, - 0x54, 0x7c, 0xbc, 0x4f, 0xe8, 0x58, 0x10, 0xc5, 0x2e, 0xaf, 0x09, 0x10, 0x86, 0x2c, 0xd8, 0x50, - 0x8b, 0xed, 0x39, 0x39, 0x25, 0xaa, 0x1c, 0x8a, 0x12, 0x6b, 0xdc, 0x81, 0xa9, 0x2a, 0xed, 0x98, - 0x6e, 0x8b, 0xa7, 0x72, 0x08, 0x2f, 0xf2, 0x3c, 0x14, 0x7d, 0x05, 0x4b, 0xde, 0x94, 0xd3, 0xc4, - 0x18, 0xd2, 0x90, 0x27, 0x85, 0x93, 0x5b, 0xc5, 0x80, 0x8b, 0xe2, 0x98, 0x11, 0x9e, 0x71, 0x1f, - 0x15, 0xce, 0xd8, 0x85, 0xf1, 0xb0, 0x38, 0x6d, 0x90, 0x26, 0x4c, 0xd6, 0x22, 0x91, 0x70, 0xa4, - 0x8d, 0x23, 0x5f, 0x6e, 0xe2, 0x59, 0x00, 0x8b, 0x71, 0x26, 0x98, 0xe4, 0x6a, 0xfc, 0x6b, 0x0e, - 0x26, 0xb5, 0x64, 0x69, 0x6d, 0xba, 0x49, 0xc7, 0xfc, 0x72, 0xc6, 0xfc, 0xc9, 0x78, 0xe7, 0xdd, - 0xc3, 0x39, 0xef, 0x26, 0x9d, 0xf3, 0xc7, 0x2d, 0xb1, 0xc7, 0x4c, 0xfe, 0xfd, 0x21, 0x28, 0xe8, - 0x04, 0xce, 0xd7, 0x21, 0xcf, 0xcf, 0xfb, 0xc1, 0xce, 0x00, 0xae, 0x3b, 0xa0, 0xe0, 0xc4, 0x58, - 0x72, 0x4f, 0x67, 0xe6, 0xcb, 0x72, 0x45, 0x61, 0x3a, 0x98, 0x5e, 0x80, 0x82, 0x13, 0xb9, 0x0a, - 0xc3, 0xd4, 0xae, 0xcb, 0xc3, 0xe0, 0xe8, 0x0c, 0xf9, 0x5d, 0xd0, 0x65, 0xbb, 0x8e, 0x8c, 0x0b, - 0xbf, 0x05, 0xe4, 0x78, 0x1d, 0x33, 0x90, 0xaa, 0x62, 0x78, 0x0b, 0x88, 0x43, 0x51, 0x62, 0x8d, - 0x5f, 0x1d, 0x82, 0xd1, 0x6a, 0x77, 0x8b, 0x1d, 0x6b, 0xbf, 0x95, 0x83, 0x93, 0x49, 0x9f, 0x77, - 0x38, 0x31, 0x2f, 0x1f, 0xcb, 0x2d, 0x35, 0xa4, 0x8d, 0xca, 0x63, 0xb2, 0x2a, 0x27, 0x53, 0x90, - 0x98, 0x56, 0x03, 0xa6, 0x76, 0x86, 0xe9, 0xda, 0x43, 0xc7, 0x92, 0xae, 0x3d, 0xd1, 0x2f, 0x55, - 0xdb, 0xf8, 0xab, 0x11, 0x00, 0xd1, 0x23, 0xeb, 0x6e, 0x70, 0x18, 0xdb, 0xe0, 0x05, 0x18, 0x57, - 0xaf, 0x72, 0x5c, 0x0f, 0x03, 0x3d, 0xda, 0x13, 0xb7, 0x1a, 0xc1, 0x61, 0x8c, 0x92, 0x59, 0x4b, - 0xd4, 0x0e, 0xbc, 0x3d, 0x71, 0xd8, 0x8d, 0xc4, 0xad, 0xa5, 0x65, 0x8d, 0xc1, 0x08, 0x15, 0x99, - 0x8b, 0xf9, 0x02, 0x44, 0x4a, 0xf7, 0x89, 0x7b, 0xd8, 0xf1, 0x2f, 0xc2, 0x84, 0xfe, 0x5a, 0xb1, - 0xda, 0x2a, 0x4b, 0x46, 0xab, 0x9c, 0x1b, 0x51, 0x24, 0xc6, 0x69, 0xc9, 0xcb, 0x70, 0x22, 0x9e, - 0x7b, 0x29, 0x8f, 0x85, 0x33, 0xb2, 0xf4, 0x89, 0x78, 0xca, 0x26, 0x26, 0xa8, 0xd9, 0x2c, 0xac, - 0x7b, 0x7b, 0xd8, 0xb5, 0xe5, 0xf9, 0xa0, 0x67, 0xe1, 0x12, 0x87, 0xa2, 0xc4, 0xb2, 0x2e, 0x64, - 0x25, 0xa9, 0x27, 0xe0, 0x3c, 0x6e, 0x51, 0x08, 0xbb, 0xb0, 0x1a, 0xc1, 0x61, 0x8c, 0x92, 0x49, - 0x90, 0x86, 0x19, 0xc4, 0xe7, 0x79, 0xc2, 0xb4, 0x72, 0xe1, 0x84, 0x13, 0xd7, 0x85, 0x45, 0x40, - 0xe2, 0x33, 0x87, 0xbc, 0x04, 0x12, 0x2b, 0x2b, 0x92, 0x1b, 0x13, 0xaa, 0x73, 0x82, 0xbf, 0x71, - 0x12, 0xa6, 0xab, 0x5d, 0xd7, 0x6d, 0x5b, 0xb4, 0xae, 0x4d, 0x65, 0xe3, 0x15, 0x98, 0x94, 0xd7, - 0x7a, 0xf4, 0xf1, 0x77, 0xa4, 0x5b, 0xba, 0xc6, 0x3e, 0xdb, 0xcf, 0xe3, 0x3e, 0x44, 0x62, 0x27, - 0x0f, 0xad, 0xac, 0xfe, 0x8d, 0xe8, 0x11, 0x25, 0x56, 0x48, 0xea, 0x99, 0x77, 0x5b, 0x45, 0x8d, - 0x07, 0xc9, 0xa3, 0xe0, 0x81, 0x56, 0xb1, 0x0b, 0x46, 0xa3, 0xcd, 0xc6, 0x4f, 0x72, 0x90, 0xee, - 0x9e, 0x25, 0xef, 0xf4, 0x36, 0x73, 0x69, 0xb0, 0x66, 0x4a, 0x97, 0x70, 0xff, 0x96, 0x9a, 0xf1, - 0x96, 0xbe, 0x9a, 0xbd, 0xa5, 0x52, 0x54, 0x6f, 0x7b, 0xff, 0x2d, 0x07, 0xa5, 0xcd, 0xcd, 0x6b, - 0xda, 0x5e, 0x41, 0x38, 0xe3, 0x8b, 0x8b, 0x59, 0x0b, 0x8d, 0x80, 0x7a, 0x8b, 0x4e, 0xc7, 0x6d, - 0x53, 0x3d, 0x39, 0xe4, 0x6d, 0xa9, 0x6a, 0x2a, 0x05, 0xf6, 0x29, 0x49, 0xae, 0xc0, 0xc9, 0x28, - 0x46, 0x9a, 0x6b, 0xbc, 0x51, 0x79, 0x99, 0x40, 0xdb, 0x8b, 0xc6, 0xb4, 0x32, 0x49, 0x56, 0xd2, - 0x66, 0x93, 0xaf, 0xb8, 0xf4, 0xb0, 0x92, 0x68, 0x4c, 0x2b, 0x63, 0xac, 0x43, 0x29, 0xf2, 0x3e, - 0x10, 0x79, 0x15, 0xa6, 0x6a, 0x4e, 0xc7, 0xf5, 0xa8, 0xef, 0x5b, 0x8e, 0x7d, 0x8d, 0xee, 0xd0, - 0xb6, 0x6c, 0x32, 0xbf, 0x76, 0xb5, 0x98, 0xc0, 0x61, 0x0f, 0xb5, 0xf1, 0x27, 0x8f, 0x81, 0xbe, - 0xec, 0xf3, 0x8b, 0x2b, 0x43, 0x99, 0xc2, 0xee, 0x35, 0x1d, 0x7e, 0xcb, 0x0f, 0x1e, 0x7e, 0xd3, - 0x7b, 0x71, 0x22, 0x04, 0xd7, 0x0c, 0x43, 0x70, 0xa3, 0xc7, 0x10, 0x82, 0xd3, 0x4a, 0x60, 0x4f, - 0x18, 0xee, 0xab, 0x39, 0x18, 0xb7, 0x9d, 0x3a, 0x55, 0x3a, 0x33, 0x77, 0x1b, 0x94, 0x2e, 0xad, - 0x0f, 0xd4, 0x89, 0x22, 0xb6, 0x24, 0x39, 0x8a, 0xe8, 0xab, 0x3e, 0xa8, 0xa2, 0x28, 0x8c, 0x89, - 0x26, 0x2b, 0x50, 0x30, 0x1b, 0x0d, 0xcb, 0xb6, 0x82, 0x3d, 0x79, 0x6b, 0xe9, 0x5c, 0x9a, 0xaa, - 0xbf, 0x20, 0x69, 0x84, 0xd9, 0xa9, 0xbe, 0x50, 0x97, 0x65, 0x76, 0xbb, 0xbe, 0x24, 0x5c, 0x1c, - 0xc0, 0x6e, 0x57, 0xc9, 0x5a, 0x11, 0x27, 0x92, 0xba, 0xd0, 0x18, 0xde, 0x19, 0x36, 0x60, 0x54, - 0x44, 0x66, 0xe5, 0xbb, 0x3e, 0xdc, 0x69, 0x29, 0xa2, 0xb6, 0x28, 0x31, 0xa4, 0xa9, 0x3c, 0xeb, - 0x25, 0xde, 0xb9, 0x95, 0xcc, 0x71, 0x09, 0xed, 0xac, 0x4f, 0x77, 0xad, 0x93, 0xd7, 0xa2, 0x76, - 0xe2, 0xf8, 0x61, 0xec, 0xc4, 0x89, 0xbe, 0x36, 0x62, 0x13, 0x46, 0x7d, 0x6e, 0x85, 0xf2, 0x70, - 0x74, 0xe9, 0xd2, 0x62, 0xb6, 0x83, 0x24, 0x66, 0xc8, 0x8a, 0xde, 0x11, 0x30, 0x94, 0xec, 0x89, - 0x03, 0x05, 0x15, 0x33, 0x97, 0x11, 0xed, 0x6c, 0xa6, 0x4f, 0xd2, 0xe5, 0xa8, 0xee, 0xae, 0x08, - 0x28, 0x6a, 0x21, 0xe4, 0x36, 0x0c, 0xd7, 0xcd, 0xa6, 0x8c, 0x6d, 0xbf, 0x9a, 0xf9, 0x32, 0x96, - 0x12, 0xc3, 0xad, 0x8a, 0xa5, 0x85, 0x55, 0x64, 0x5c, 0xc9, 0x76, 0x78, 0x59, 0x79, 0x6a, 0x90, - 0x03, 0x38, 0xae, 0x02, 0x09, 0x9b, 0xb9, 0xe7, 0xba, 0xf3, 0x32, 0x8c, 0xed, 0x38, 0xed, 0x6e, - 0x47, 0x06, 0xc5, 0x4b, 0x97, 0x66, 0xd2, 0x46, 0xfb, 0x26, 0x27, 0x09, 0x37, 0x01, 0xf1, 0xed, - 0xa3, 0x2a, 0x4b, 0xbe, 0x94, 0x83, 0x13, 0x6c, 0xe9, 0xe8, 0x79, 0xe0, 0x97, 0xc9, 0x00, 0x33, - 0xf5, 0x86, 0xcf, 0x8e, 0x56, 0x35, 0xc3, 0xb4, 0x22, 0x7c, 0x25, 0x26, 0x01, 0x13, 0x12, 0x89, - 0x0b, 0x05, 0xdf, 0xaa, 0xd3, 0x9a, 0xe9, 0xf9, 0xe5, 0x93, 0xc7, 0x26, 0x3d, 0x74, 0xb9, 0x49, - 0xde, 0xa8, 0xa5, 0x90, 0xff, 0xcf, 0x1f, 0xdb, 0x91, 0x0f, 0x65, 0xc9, 0xe7, 0xd1, 0x4e, 0x1d, - 0xe7, 0xf3, 0x68, 0x27, 0xc5, 0x4b, 0x3b, 0x31, 0x09, 0x98, 0x14, 0x49, 0xbe, 0x98, 0x83, 0xd3, - 0xe2, 0xd6, 0x72, 0xf2, 0xca, 0xfa, 0xe9, 0x8c, 0x76, 0x2e, 0x0f, 0xe0, 0x2f, 0xa4, 0xb1, 0xc4, - 0x74, 0x49, 0xe4, 0x7d, 0x98, 0xf0, 0xa2, 0x3e, 0x61, 0x9e, 0x2b, 0x91, 0x75, 0x04, 0x62, 0xde, - 0x65, 0x91, 0xa7, 0x11, 0x03, 0x61, 0x5c, 0x16, 0x79, 0x16, 0x4a, 0xae, 0xdc, 0xdc, 0x2c, 0xbf, - 0xc3, 0xd3, 0x2c, 0x86, 0xc5, 0x21, 0xbc, 0x11, 0x82, 0x31, 0x4a, 0x43, 0x6e, 0x40, 0x29, 0x70, - 0xda, 0xd4, 0x93, 0x49, 0xc1, 0x65, 0x3e, 0x5f, 0xce, 0xa7, 0x4d, 0xfe, 0x4d, 0x4d, 0x16, 0xba, + // 7414 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x5c, 0xd7, + 0x75, 0xa8, 0x87, 0xe4, 0x90, 0x33, 0x6b, 0x48, 0x91, 0xdc, 0x7a, 0x8d, 0x29, 0x59, 0x54, 0x8e, + 0x63, 0xc3, 0xba, 0xd7, 0x21, 0x63, 0x39, 0xbe, 0xd7, 0x89, 0xe3, 0x07, 0x87, 0x2f, 0xc9, 0x12, + 0x1f, 0x5e, 0x43, 0x49, 0x37, 0x96, 0x61, 0xdf, 0xc3, 0x99, 0xcd, 0x99, 0x23, 0xce, 0x9c, 0x73, + 0x7c, 0xce, 0x19, 0xd2, 0xb4, 0x5b, 0xd4, 0x09, 0x1a, 0xa4, 0x69, 0x1a, 0xb4, 0x45, 0x91, 0xd6, + 0x45, 0x50, 0xb4, 0xfd, 0x08, 0xfa, 0x93, 0xa2, 0x1f, 0x45, 0xfb, 0x53, 0x20, 0x1f, 0x45, 0x5b, + 0xa4, 0x01, 0x8a, 0xa6, 0x5f, 0x0d, 0xd0, 0x80, 0x89, 0xd9, 0x1f, 0x07, 0x6d, 0x9a, 0xaf, 0xa2, + 0x80, 0x50, 0xa0, 0xc5, 0x7e, 0x9e, 0xc7, 0x9c, 0x91, 0xc8, 0x33, 0x94, 0x10, 0x34, 0xf9, 0x9b, + 0xb3, 0xd6, 0xda, 0x6b, 0xed, 0xf7, 0x5e, 0xaf, 0xbd, 0x07, 0xe6, 0x1b, 0x56, 0xd0, 0xec, 0x6c, + 0xce, 0xd4, 0x9c, 0xf6, 0xac, 0xe9, 0x35, 0x1c, 0xd7, 0x73, 0xee, 0xf0, 0x1f, 0xb3, 0xee, 0x76, + 0x63, 0xd6, 0x74, 0x2d, 0x7f, 0x76, 0xd7, 0xf1, 0xb6, 0xb7, 0x5a, 0xce, 0xee, 0xec, 0xce, 0x33, + 0x66, 0xcb, 0x6d, 0x9a, 0xcf, 0xcc, 0x36, 0xa8, 0x4d, 0x3d, 0x33, 0xa0, 0xf5, 0x19, 0xd7, 0x73, + 0x02, 0x87, 0x3c, 0x1b, 0x32, 0x99, 0x51, 0x4c, 0xf8, 0x8f, 0x19, 0x77, 0xbb, 0x31, 0xc3, 0x98, + 0xcc, 0x28, 0x26, 0x33, 0x8a, 0xc9, 0xd4, 0x27, 0x22, 0x92, 0x1b, 0x0e, 0x13, 0xc8, 0x78, 0x6d, + 0x76, 0xb6, 0xf8, 0x17, 0xff, 0xe0, 0xbf, 0x84, 0x8c, 0x29, 0x63, 0xfb, 0x79, 0x7f, 0xc6, 0x72, + 0x58, 0x95, 0x66, 0x6b, 0x8e, 0x47, 0x67, 0x77, 0xba, 0xea, 0x31, 0x75, 0x29, 0x42, 0xe3, 0x3a, + 0x2d, 0xab, 0xb6, 0x37, 0xbb, 0xf3, 0xcc, 0x26, 0x0d, 0xba, 0xab, 0x3c, 0xf5, 0xa9, 0x90, 0xb4, + 0x6d, 0xd6, 0x9a, 0x96, 0x4d, 0xbd, 0xbd, 0xb0, 0xc9, 0x6d, 0x1a, 0x98, 0x69, 0x02, 0x66, 0x7b, + 0x95, 0xf2, 0x3a, 0x76, 0x60, 0xb5, 0x69, 0x57, 0x81, 0xff, 0x73, 0xbf, 0x02, 0x7e, 0xad, 0x49, + 0xdb, 0x66, 0x57, 0xb9, 0x67, 0x7b, 0x95, 0xeb, 0x04, 0x56, 0x6b, 0xd6, 0xb2, 0x03, 0x3f, 0xf0, + 0x92, 0x85, 0x8c, 0x45, 0x18, 0x9e, 0x6b, 0x3b, 0x1d, 0x3b, 0x20, 0x2f, 0x40, 0x7e, 0xc7, 0x6c, + 0x75, 0x68, 0x39, 0x77, 0x31, 0xf7, 0x54, 0xb1, 0xf2, 0xc4, 0xb7, 0xf7, 0xa7, 0x1f, 0x39, 0xd8, + 0x9f, 0xce, 0xdf, 0x64, 0xc0, 0xbb, 0xfb, 0xd3, 0xa7, 0xa8, 0x5d, 0x73, 0xea, 0x96, 0xdd, 0x98, + 0xbd, 0xe3, 0x3b, 0xf6, 0xcc, 0x6a, 0xa7, 0xbd, 0x49, 0x3d, 0x14, 0x65, 0x8c, 0x6f, 0x0e, 0xc0, + 0xf8, 0x9c, 0x57, 0x6b, 0x5a, 0x3b, 0xb4, 0x1a, 0x30, 0xfe, 0x8d, 0x3d, 0x72, 0x1b, 0x06, 0x03, + 0xd3, 0xe3, 0xec, 0x4a, 0x97, 0x5f, 0x99, 0xc9, 0x30, 0xde, 0x33, 0x1b, 0xa6, 0xa7, 0xd8, 0x55, + 0x46, 0x0e, 0xf6, 0xa7, 0x07, 0x37, 0x4c, 0x0f, 0x19, 0x57, 0xf2, 0x16, 0x0c, 0xd9, 0x8e, 0x4d, + 0xcb, 0x03, 0x9c, 0xfb, 0x5c, 0x26, 0xee, 0xab, 0x8e, 0xad, 0x6b, 0x5b, 0x29, 0x1c, 0xec, 0x4f, + 0x0f, 0x31, 0x08, 0x72, 0xc6, 0xac, 0xf6, 0xef, 0x5a, 0x6e, 0x79, 0xb0, 0x8f, 0xda, 0xbf, 0x6e, + 0xb9, 0xf1, 0xda, 0xbf, 0x6e, 0xb9, 0xc8, 0xb8, 0x1a, 0x3f, 0xc9, 0x41, 0x71, 0xce, 0x6b, 0x74, + 0xda, 0xd4, 0x0e, 0x7c, 0xe2, 0x01, 0xb8, 0xa6, 0x67, 0xb6, 0x69, 0x40, 0x3d, 0xbf, 0x9c, 0xbb, + 0x38, 0xf8, 0x54, 0xe9, 0xf2, 0x4b, 0x99, 0x24, 0xae, 0x2b, 0x36, 0x15, 0x22, 0x87, 0x0f, 0x34, + 0xc8, 0xc7, 0x88, 0x14, 0x62, 0x43, 0xd1, 0xf4, 0x02, 0x6b, 0xcb, 0xac, 0x05, 0x7e, 0x79, 0x80, + 0x8b, 0x7c, 0x31, 0x93, 0xc8, 0x39, 0xc9, 0xa5, 0x32, 0x29, 0x25, 0x16, 0x15, 0xc4, 0xc7, 0x50, + 0x84, 0xf1, 0x77, 0x43, 0x50, 0x50, 0x08, 0x72, 0x11, 0x86, 0x6c, 0xb3, 0xad, 0x66, 0xda, 0xa8, + 0x2c, 0x38, 0xb4, 0x6a, 0xb6, 0x59, 0xef, 0x9b, 0x6d, 0xca, 0x28, 0x5c, 0x33, 0x68, 0xf2, 0xe1, + 0x8d, 0x50, 0xac, 0x9b, 0x41, 0x13, 0x39, 0x86, 0x9c, 0x87, 0xa1, 0xb6, 0x53, 0xa7, 0x7c, 0x80, + 0xf2, 0x62, 0xf4, 0x56, 0x9c, 0x3a, 0x45, 0x0e, 0x65, 0xe5, 0xb7, 0x3c, 0xa7, 0x5d, 0x1e, 0x8a, + 0x97, 0x5f, 0xf2, 0x9c, 0x36, 0x72, 0x0c, 0xf9, 0x4a, 0x0e, 0x26, 0x54, 0xf5, 0xae, 0x3b, 0x35, + 0x33, 0xb0, 0x1c, 0xbb, 0x9c, 0xe7, 0xa3, 0xbd, 0xd8, 0x57, 0x47, 0x28, 0x66, 0x95, 0xb2, 0x94, + 0x3a, 0x91, 0xc4, 0x60, 0x97, 0x60, 0x72, 0x19, 0xa0, 0xd1, 0x72, 0x36, 0xcd, 0x16, 0xeb, 0x83, + 0xf2, 0x30, 0xaf, 0xb5, 0x1e, 0xc2, 0x65, 0x8d, 0xc1, 0x08, 0x15, 0xd9, 0x86, 0x11, 0x53, 0x2c, + 0xb9, 0xf2, 0x08, 0xaf, 0xf7, 0x42, 0xc6, 0x7a, 0xc7, 0x96, 0x6d, 0xa5, 0x74, 0xb0, 0x3f, 0x3d, + 0x22, 0x81, 0xa8, 0x24, 0x90, 0xa7, 0xa1, 0xe0, 0xb8, 0xac, 0xaa, 0x66, 0xab, 0x5c, 0xb8, 0x98, + 0x7b, 0xaa, 0x50, 0x99, 0x90, 0xd5, 0x2b, 0xac, 0x49, 0x38, 0x6a, 0x0a, 0x72, 0x09, 0x46, 0xfc, + 0xce, 0x26, 0x1b, 0xad, 0x72, 0x91, 0xb7, 0x65, 0x5c, 0x12, 0x8f, 0x54, 0x05, 0x18, 0x15, 0x9e, + 0x3c, 0x07, 0x25, 0x8f, 0xd6, 0x3a, 0x9e, 0x4f, 0xd9, 0xf0, 0x95, 0x81, 0xf3, 0x3e, 0x29, 0xc9, + 0x4b, 0x18, 0xa2, 0x30, 0x4a, 0x67, 0xfc, 0xc3, 0x30, 0x74, 0xf5, 0x2b, 0x79, 0x06, 0x4a, 0xb2, + 0xbe, 0xd7, 0x9d, 0x86, 0xcf, 0xa7, 0x57, 0xa1, 0x32, 0xce, 0xf8, 0xcc, 0x85, 0x60, 0x8c, 0xd2, + 0x90, 0x5b, 0x30, 0xe0, 0x3f, 0x2b, 0x77, 0x91, 0x97, 0x33, 0xf5, 0x5f, 0xf5, 0x59, 0xbd, 0x04, + 0x86, 0x0f, 0xf6, 0xa7, 0x07, 0xaa, 0xcf, 0xe2, 0x80, 0xff, 0x2c, 0xdb, 0x3f, 0x1a, 0x56, 0xd0, + 0xd7, 0xfe, 0xb1, 0x6c, 0x05, 0x9a, 0x35, 0xdf, 0x3f, 0x96, 0xad, 0x00, 0x19, 0x57, 0xb6, 0xfb, + 0x35, 0x83, 0xc0, 0xe5, 0xd3, 0x3b, 0xeb, 0xee, 0x77, 0x65, 0x63, 0x63, 0x5d, 0xb3, 0xe7, 0xeb, + 0x87, 0x41, 0x90, 0x33, 0x26, 0xef, 0xb1, 0x9e, 0x14, 0x38, 0xc7, 0xdb, 0x93, 0xeb, 0xe2, 0x4a, + 0x5f, 0xeb, 0xc2, 0xf1, 0xf6, 0xb4, 0x38, 0x39, 0x26, 0x1a, 0x81, 0x51, 0x69, 0xbc, 0x75, 0xf5, + 0x2d, 0x9f, 0x2f, 0x83, 0xcc, 0xad, 0x5b, 0x58, 0xaa, 0x26, 0x5a, 0xb7, 0xb0, 0x54, 0x45, 0xce, + 0x98, 0x8d, 0x8d, 0x67, 0xee, 0xca, 0x55, 0x93, 0x6d, 0x6c, 0xd0, 0xdc, 0x8d, 0x8f, 0x0d, 0x9a, + 0xbb, 0xc8, 0xb8, 0x32, 0xe6, 0x8e, 0xef, 0xf3, 0x45, 0x92, 0x95, 0xf9, 0x5a, 0xb5, 0x1a, 0x67, + 0xbe, 0x56, 0xad, 0x22, 0xe3, 0xca, 0x67, 0x55, 0xcd, 0xe7, 0x8b, 0x2a, 0xf3, 0xac, 0x9a, 0x4f, + 0x30, 0x5f, 0x9e, 0xaf, 0x22, 0xe3, 0x6a, 0xbc, 0x0d, 0xa7, 0x15, 0x06, 0xa9, 0xeb, 0xf8, 0x16, + 0x1f, 0x1a, 0xba, 0x45, 0x66, 0xa1, 0x58, 0x73, 0xec, 0x2d, 0xab, 0xb1, 0x62, 0xba, 0x72, 0xd3, + 0xd6, 0xbb, 0xfd, 0xbc, 0x42, 0x60, 0x48, 0x43, 0x1e, 0x83, 0xc1, 0x6d, 0xba, 0x27, 0x77, 0xef, + 0x92, 0x24, 0x1d, 0xbc, 0x46, 0xf7, 0x90, 0xc1, 0x3f, 0x53, 0xf8, 0xe0, 0x0f, 0xa6, 0x1f, 0x79, + 0xff, 0xfb, 0x17, 0x1f, 0x31, 0xbe, 0x31, 0x00, 0xe7, 0x52, 0x65, 0x56, 0x03, 0x33, 0xe8, 0xf8, + 0xe4, 0xf7, 0x73, 0x70, 0xda, 0x4c, 0xc3, 0x4b, 0xb5, 0xe2, 0xd5, 0xbe, 0xa6, 0x64, 0x8c, 0x63, + 0xe5, 0x31, 0x59, 0xcf, 0xf4, 0x4e, 0xc0, 0xf4, 0x7a, 0xb0, 0xbe, 0x61, 0x27, 0x96, 0xef, 0x9a, + 0x35, 0x2a, 0x1b, 0xac, 0xfb, 0x66, 0x55, 0x21, 0x30, 0xa4, 0x61, 0x7b, 0x63, 0x9d, 0x6e, 0x99, + 0x9d, 0x96, 0xd8, 0x1c, 0x0a, 0xe1, 0xde, 0xb8, 0x20, 0xc0, 0xa8, 0xf0, 0x91, 0x7e, 0xfa, 0x56, + 0x0e, 0x4e, 0xa6, 0x2c, 0x24, 0xd6, 0xd1, 0x1d, 0xaf, 0x25, 0xc7, 0x44, 0x77, 0xf4, 0x0d, 0xbc, + 0x8e, 0x0c, 0x4e, 0xbe, 0x94, 0x83, 0xf1, 0xc8, 0xca, 0x9a, 0xeb, 0xc8, 0x23, 0x35, 0xfb, 0x59, + 0x11, 0xe3, 0x55, 0x39, 0x2b, 0x25, 0x8e, 0x27, 0x10, 0x98, 0x94, 0x6a, 0xfc, 0x63, 0x0e, 0x92, + 0x44, 0xc4, 0x84, 0x13, 0x1d, 0x9f, 0x7a, 0xac, 0x6b, 0xaa, 0xb4, 0xe6, 0xd1, 0x40, 0x0e, 0xea, + 0x13, 0x33, 0x42, 0x93, 0x65, 0xb5, 0x98, 0x61, 0x7a, 0xfb, 0xcc, 0xce, 0x33, 0x33, 0x82, 0xe2, + 0x1a, 0xdd, 0xab, 0xd2, 0x16, 0x65, 0x3c, 0x2a, 0xe4, 0x60, 0x7f, 0xfa, 0xc4, 0x8d, 0x18, 0x03, + 0x4c, 0x30, 0x64, 0x22, 0x5c, 0xd3, 0xf7, 0x77, 0x1d, 0xaf, 0x2e, 0x45, 0x0c, 0x1c, 0x59, 0xc4, + 0x7a, 0x8c, 0x01, 0x26, 0x18, 0x1a, 0x7f, 0x95, 0x83, 0x91, 0x8a, 0x59, 0xdb, 0x76, 0xb6, 0xb6, + 0xd8, 0x29, 0x59, 0xef, 0x78, 0x42, 0x97, 0x10, 0x63, 0xa2, 0x4f, 0xc9, 0x05, 0x09, 0x47, 0x4d, + 0x41, 0x36, 0x60, 0x58, 0x74, 0x87, 0xac, 0xd4, 0x27, 0x23, 0x95, 0xd2, 0x1a, 0x3c, 0x1f, 0x0e, + 0xa6, 0xc1, 0xcf, 0x08, 0x0d, 0x7e, 0xe6, 0xaa, 0x1d, 0xac, 0x31, 0xad, 0xd8, 0xb2, 0x1b, 0x15, + 0x38, 0xd8, 0x9f, 0x1e, 0x5e, 0xe2, 0x3c, 0x50, 0xf2, 0x62, 0x07, 0x6a, 0xdb, 0x7c, 0x47, 0x89, + 0xe3, 0x73, 0xac, 0x18, 0x1e, 0xa8, 0x2b, 0x21, 0x0a, 0xa3, 0x74, 0xc6, 0x9b, 0x90, 0x9f, 0x37, + 0x6b, 0x4d, 0x4a, 0x6e, 0x24, 0x17, 0x7b, 0xe9, 0xf2, 0x53, 0x69, 0xbd, 0xa5, 0x17, 0x7e, 0xb4, + 0xc3, 0xc6, 0x7a, 0x6d, 0x09, 0xc6, 0x47, 0x39, 0x38, 0x3b, 0xdf, 0xea, 0xf8, 0x01, 0xf5, 0x6e, + 0xc9, 0x79, 0xb5, 0x41, 0xdb, 0x6e, 0xcb, 0x0c, 0x28, 0xf9, 0xff, 0x50, 0x60, 0xd6, 0x53, 0xdd, + 0x0c, 0x4c, 0x29, 0xb1, 0x77, 0x57, 0xf0, 0x99, 0xc9, 0xa8, 0x59, 0x1d, 0xd6, 0x36, 0xef, 0xd0, + 0x5a, 0xb0, 0x42, 0x03, 0x33, 0xd4, 0x96, 0x42, 0x18, 0x6a, 0xae, 0x64, 0x1b, 0x86, 0x7c, 0x97, + 0xd6, 0x64, 0x47, 0x5f, 0xcd, 0x34, 0xf9, 0x93, 0xd5, 0xae, 0xba, 0xb4, 0x16, 0xaa, 0x96, 0xec, + 0x0b, 0xb9, 0x10, 0xe3, 0xdf, 0x72, 0x70, 0xae, 0x47, 0x53, 0xaf, 0x5b, 0x7e, 0x40, 0xde, 0xe8, + 0x6a, 0xee, 0xcc, 0xe1, 0x9a, 0xcb, 0x4a, 0xf3, 0xc6, 0xea, 0x59, 0xa5, 0x20, 0x91, 0xa6, 0xbe, + 0x0d, 0x79, 0x2b, 0xa0, 0x6d, 0xa5, 0xd5, 0x5f, 0xcf, 0xd4, 0xd6, 0x1e, 0xd5, 0xaf, 0x8c, 0x29, + 0xab, 0xf0, 0x2a, 0x13, 0x81, 0x42, 0x92, 0xf1, 0xb7, 0x39, 0x60, 0x83, 0x5e, 0xb7, 0xa4, 0x16, + 0x36, 0x14, 0xec, 0xb9, 0x4a, 0xbb, 0x57, 0xbb, 0xea, 0xd0, 0xc6, 0x9e, 0xcb, 0xcc, 0xc8, 0x31, + 0x4d, 0xc8, 0x00, 0xc8, 0x49, 0xc9, 0x9b, 0x30, 0xec, 0xf3, 0x0d, 0x5f, 0xee, 0xa0, 0x4b, 0xb2, + 0xd0, 0xb0, 0x38, 0x06, 0xee, 0xee, 0x4f, 0x1f, 0xca, 0xf6, 0x9e, 0xd1, 0xbc, 0x45, 0x39, 0x94, + 0x5c, 0xd9, 0x9e, 0xdb, 0xa6, 0xbe, 0x6f, 0x36, 0xa8, 0x5c, 0x0f, 0x7a, 0xcf, 0x5d, 0x11, 0x60, + 0x54, 0x78, 0xe3, 0x73, 0x00, 0xf3, 0x8e, 0x1d, 0x58, 0x76, 0x87, 0xae, 0xd9, 0xe4, 0x71, 0xc8, + 0x53, 0xcf, 0x73, 0x3c, 0xa9, 0x4b, 0xea, 0xe6, 0x2f, 0x32, 0x20, 0x0a, 0x1c, 0x79, 0x92, 0xad, + 0x63, 0xab, 0x45, 0xeb, 0xbc, 0xf6, 0x85, 0xca, 0x09, 0x55, 0xfb, 0x25, 0x0e, 0x45, 0x89, 0x35, + 0x66, 0x60, 0x64, 0x9e, 0x99, 0xda, 0xd4, 0x63, 0x7c, 0xa3, 0xc6, 0xf6, 0x58, 0xcc, 0xd8, 0x56, + 0x46, 0xf5, 0x77, 0x06, 0x60, 0x74, 0xde, 0x73, 0x6c, 0x35, 0x0a, 0x0f, 0x61, 0x9d, 0x34, 0x62, + 0xeb, 0x24, 0x9b, 0x21, 0x14, 0xad, 0x72, 0xaf, 0x35, 0x42, 0x1c, 0x3d, 0xe2, 0x42, 0x43, 0x5e, + 0xee, 0x5f, 0x14, 0x67, 0x17, 0x76, 0x7e, 0x7c, 0x0a, 0x18, 0xdf, 0xcb, 0xc1, 0x44, 0x94, 0xfc, + 0x21, 0xac, 0xc4, 0xad, 0xf8, 0x4a, 0x9c, 0xeb, 0xbb, 0x89, 0x3d, 0x96, 0xdf, 0x7f, 0xe6, 0xe3, + 0x4d, 0x63, 0xdd, 0xcc, 0xec, 0xdb, 0xd1, 0xdd, 0x08, 0x40, 0xb6, 0x6f, 0xae, 0xaf, 0xad, 0x8f, + 0x0f, 0xe7, 0xc7, 0x65, 0x25, 0x46, 0xa3, 0xd0, 0xbb, 0x89, 0x6f, 0x8c, 0x09, 0x67, 0x07, 0xa3, + 0x5f, 0x6b, 0xd2, 0x7a, 0xa7, 0xa5, 0x94, 0x24, 0xdd, 0x71, 0x55, 0x09, 0x47, 0x4d, 0x41, 0xde, + 0x80, 0xc9, 0x9a, 0x63, 0xd7, 0x3a, 0x9e, 0x47, 0xed, 0xda, 0xde, 0x3a, 0xf7, 0xca, 0xc9, 0x85, + 0x3b, 0x23, 0x8b, 0x4d, 0xce, 0x27, 0x09, 0xee, 0xa6, 0x01, 0xb1, 0x9b, 0x91, 0x30, 0x4e, 0x7d, + 0x97, 0xda, 0x75, 0x6e, 0x3f, 0x15, 0xa2, 0xc6, 0x29, 0x07, 0xa3, 0xc2, 0x93, 0x1b, 0x70, 0xd6, + 0x0f, 0x98, 0x2a, 0x63, 0x37, 0x16, 0xa8, 0x59, 0x6f, 0x59, 0x36, 0x53, 0x2c, 0x1c, 0xbb, 0xee, + 0x73, 0x93, 0x68, 0xb0, 0x72, 0xee, 0x60, 0x7f, 0xfa, 0x6c, 0x35, 0x9d, 0x04, 0x7b, 0x95, 0x25, + 0x6f, 0xc2, 0x94, 0xdf, 0xa9, 0xd5, 0xa8, 0xef, 0x6f, 0x75, 0x5a, 0xaf, 0x3a, 0x9b, 0xfe, 0x15, + 0xcb, 0x67, 0x5a, 0xd1, 0x75, 0xab, 0x6d, 0x05, 0xdc, 0xec, 0xc9, 0x57, 0x2e, 0x1c, 0xec, 0x4f, + 0x4f, 0x55, 0x7b, 0x52, 0xe1, 0x3d, 0x38, 0x10, 0x84, 0x33, 0x62, 0xcb, 0xe9, 0xe2, 0x3d, 0xc2, + 0x79, 0x4f, 0x1d, 0xec, 0x4f, 0x9f, 0x59, 0x4a, 0xa5, 0xc0, 0x1e, 0x25, 0xd9, 0x08, 0x06, 0x56, + 0x9b, 0xbe, 0xeb, 0xd8, 0x94, 0xdb, 0x36, 0x91, 0x11, 0xdc, 0x90, 0x70, 0xd4, 0x14, 0xe4, 0x4e, + 0x38, 0xf9, 0xd8, 0xa2, 0x90, 0x06, 0xcb, 0xd1, 0x77, 0xab, 0x53, 0x07, 0xfb, 0xd3, 0x13, 0xb7, + 0x22, 0x9c, 0xd8, 0xc2, 0xc2, 0x18, 0x6f, 0xe3, 0x6f, 0x06, 0x80, 0x74, 0x6f, 0x04, 0xe4, 0x1a, + 0x0c, 0x9b, 0xb5, 0xc0, 0xda, 0xa1, 0xd2, 0xa3, 0xf6, 0x78, 0x9a, 0x12, 0x23, 0x44, 0x21, 0xdd, + 0xa2, 0x6c, 0x86, 0xd0, 0x70, 0xf7, 0x98, 0xe3, 0x45, 0x51, 0xb2, 0x20, 0x0e, 0x4c, 0xb6, 0x4c, + 0x3f, 0x50, 0x73, 0xb5, 0xce, 0x9a, 0x2c, 0x37, 0xc9, 0xff, 0x75, 0xb8, 0x46, 0xb1, 0x12, 0x95, + 0xd3, 0x6c, 0xe6, 0x5e, 0x4f, 0x32, 0xc2, 0x6e, 0xde, 0xc4, 0x03, 0xa8, 0xa9, 0xc3, 0x8c, 0xed, + 0x91, 0xd9, 0x7d, 0x82, 0xfa, 0x4c, 0x0c, 0xb7, 0x7e, 0x0d, 0xf2, 0x31, 0x22, 0xc5, 0xf8, 0xf1, + 0x30, 0x8c, 0x2c, 0xcc, 0x2d, 0x6f, 0x98, 0xfe, 0xf6, 0x21, 0x5c, 0x74, 0x6c, 0x42, 0x48, 0xb5, + 0x20, 0xb9, 0xa4, 0x95, 0xba, 0x80, 0x9a, 0x82, 0x38, 0x50, 0x34, 0x95, 0xc3, 0x53, 0x6e, 0xf9, + 0x2f, 0x65, 0x34, 0x41, 0x24, 0x97, 0xa8, 0xc3, 0x51, 0x82, 0x30, 0x94, 0x41, 0x7c, 0x28, 0x29, + 0xe1, 0xcc, 0x5c, 0x1c, 0xea, 0xc7, 0x0b, 0x1d, 0xf2, 0x11, 0x9e, 0x8b, 0x08, 0x00, 0xa3, 0x52, + 0xc8, 0xa7, 0x60, 0xb4, 0x4e, 0xd9, 0xce, 0x41, 0xed, 0x9a, 0x45, 0xd9, 0x26, 0x31, 0xc8, 0xfa, + 0x85, 0x6d, 0x96, 0x0b, 0x11, 0x38, 0xc6, 0xa8, 0xc8, 0x1d, 0x28, 0xee, 0x5a, 0x41, 0x93, 0xef, + 0xe9, 0xe5, 0x61, 0x3e, 0xd4, 0x9f, 0xce, 0x54, 0x51, 0xc6, 0x21, 0xec, 0x96, 0x5b, 0x8a, 0x27, + 0x86, 0xec, 0x99, 0xb9, 0xca, 0x3e, 0xb8, 0x57, 0x98, 0xef, 0x06, 0xc5, 0x78, 0x01, 0x8e, 0xc0, + 0x90, 0x86, 0xf8, 0x30, 0xca, 0x3e, 0xaa, 0xf4, 0xed, 0x0e, 0x5b, 0x21, 0xd2, 0xaf, 0x91, 0xcd, + 0x57, 0xac, 0x98, 0x88, 0x1e, 0xb9, 0x15, 0x61, 0x8b, 0x31, 0x21, 0x6c, 0xf6, 0xed, 0x36, 0xa9, + 0x2d, 0x9d, 0x87, 0x7a, 0xf6, 0xdd, 0x6a, 0x52, 0x1b, 0x39, 0x86, 0x38, 0x7c, 0x7d, 0x48, 0x35, + 0x8d, 0x7b, 0x0d, 0xb3, 0xfa, 0xef, 0x42, 0x6d, 0xaf, 0x72, 0x42, 0x2e, 0x0e, 0xf9, 0x8d, 0x11, + 0x11, 0x4c, 0xc9, 0x73, 0xec, 0xc5, 0x77, 0xac, 0xa0, 0x5c, 0xe2, 0x95, 0xd2, 0x3b, 0xc5, 0x1a, + 0x87, 0xa2, 0xc4, 0x0a, 0xf3, 0x9e, 0x0d, 0xae, 0x5f, 0x1e, 0x8d, 0xab, 0x9a, 0x62, 0x06, 0xf8, + 0xa8, 0xf0, 0xc6, 0x5f, 0xe6, 0xa0, 0xc4, 0xd6, 0x9b, 0x5a, 0x23, 0x4f, 0xc2, 0x70, 0x60, 0x7a, + 0x0d, 0x69, 0x07, 0x47, 0x44, 0x6c, 0x70, 0x28, 0x4a, 0x2c, 0x31, 0x21, 0x1f, 0x98, 0xfe, 0xb6, + 0xd2, 0x2b, 0x3e, 0x9b, 0xa9, 0xd9, 0x72, 0xa1, 0x87, 0x2a, 0x05, 0xfb, 0xf2, 0x51, 0x70, 0x26, + 0x4f, 0x41, 0x81, 0x9d, 0x03, 0x4b, 0xa6, 0xaf, 0xbc, 0x14, 0xa3, 0x6c, 0x61, 0x2f, 0x49, 0x18, + 0x6a, 0xac, 0xf1, 0x1c, 0xe4, 0x17, 0x77, 0xa8, 0xcd, 0x0f, 0x08, 0x5f, 0x9a, 0x81, 0x49, 0xdb, + 0x57, 0x99, 0x87, 0xa8, 0x29, 0x8c, 0x37, 0xe0, 0xc4, 0xe2, 0x3b, 0xb4, 0xd6, 0x09, 0x1c, 0x4f, + 0x98, 0x8b, 0xe4, 0x55, 0x20, 0x3e, 0xf5, 0x76, 0xac, 0x1a, 0x9d, 0xab, 0xd5, 0x98, 0x9a, 0xbc, + 0x1a, 0xee, 0x3f, 0x53, 0x92, 0x13, 0xa9, 0x76, 0x51, 0x60, 0x4a, 0x29, 0xe3, 0xf7, 0x72, 0x50, + 0x8a, 0xf8, 0xb9, 0xd8, 0xee, 0xd3, 0x98, 0xaf, 0x56, 0x3a, 0xb5, 0x6d, 0xed, 0x64, 0x78, 0x29, + 0xab, 0xf3, 0x4c, 0x70, 0x09, 0x57, 0x8d, 0x06, 0x61, 0x28, 0xe3, 0x3e, 0x0e, 0x30, 0xe3, 0xcf, + 0x73, 0x10, 0x96, 0x63, 0xe3, 0xbe, 0x19, 0x56, 0x2d, 0x32, 0xee, 0x92, 0xaf, 0xc4, 0x92, 0xf7, + 0x73, 0x70, 0x36, 0xde, 0x58, 0x6e, 0x7a, 0x1f, 0xdd, 0xad, 0x31, 0x2d, 0x05, 0x9c, 0xad, 0xa6, + 0x73, 0xc3, 0x5e, 0x62, 0x8c, 0x9b, 0x90, 0x5f, 0x36, 0x3b, 0x0d, 0x7a, 0x28, 0x03, 0x86, 0xcd, + 0x22, 0x8f, 0x9a, 0xad, 0x40, 0x1d, 0x96, 0x72, 0x16, 0xa1, 0x84, 0xa1, 0xc6, 0x1a, 0xdf, 0x1c, + 0x82, 0x52, 0xc4, 0xdd, 0xcd, 0x36, 0x00, 0x8f, 0xba, 0x4e, 0xf2, 0xf8, 0x41, 0xea, 0x3a, 0xc8, + 0x31, 0x6c, 0xba, 0x79, 0x74, 0xc7, 0xf2, 0x2d, 0xc7, 0x4e, 0x1e, 0x3f, 0x28, 0xe1, 0xa8, 0x29, + 0xc8, 0x34, 0xe4, 0xeb, 0xd4, 0x0d, 0x9a, 0x7c, 0x32, 0x0f, 0x55, 0x8a, 0xac, 0xaa, 0x0b, 0x0c, + 0x80, 0x02, 0xce, 0x08, 0xb6, 0x68, 0x50, 0x6b, 0x96, 0x87, 0xf8, 0x96, 0xcd, 0x09, 0x96, 0x18, + 0x00, 0x05, 0x3c, 0xc5, 0x59, 0x95, 0x7f, 0xf0, 0xce, 0xaa, 0xe1, 0x63, 0x76, 0x56, 0x11, 0x17, + 0x4e, 0xfa, 0x7e, 0x73, 0xdd, 0xb3, 0x76, 0xcc, 0x80, 0x86, 0xb3, 0x67, 0xe4, 0x28, 0x72, 0xce, + 0x1e, 0xec, 0x4f, 0x9f, 0xac, 0x56, 0xaf, 0x24, 0xb9, 0x60, 0x1a, 0x6b, 0x52, 0x85, 0xd3, 0x96, + 0xed, 0xd3, 0x5a, 0xc7, 0xa3, 0x57, 0x1b, 0xb6, 0xe3, 0xd1, 0x2b, 0x8e, 0xcf, 0xd8, 0xc9, 0x28, + 0x92, 0x76, 0xba, 0x5e, 0x4d, 0x23, 0xc2, 0xf4, 0xb2, 0xc6, 0x77, 0x72, 0x30, 0x1a, 0xf5, 0xf0, + 0x13, 0x1f, 0xa0, 0xb9, 0xb0, 0x54, 0x15, 0x5b, 0x89, 0x5c, 0xe1, 0x2f, 0x67, 0x0e, 0x1c, 0x08, + 0x36, 0xa1, 0xbe, 0x14, 0xc2, 0x30, 0x22, 0xe6, 0x10, 0x41, 0xca, 0xc7, 0x21, 0xbf, 0xe5, 0x78, + 0x35, 0x2a, 0xf7, 0x50, 0xbd, 0x4a, 0x96, 0x18, 0x10, 0x05, 0xce, 0xf8, 0x28, 0x07, 0x11, 0x09, + 0xe4, 0x97, 0x60, 0x8c, 0xc9, 0xb8, 0xe6, 0x6d, 0xc6, 0x5a, 0x53, 0xc9, 0xdc, 0x1a, 0xcd, 0xa9, + 0x72, 0x5a, 0xca, 0x1f, 0x8b, 0x81, 0x31, 0x2e, 0x8f, 0xfc, 0x6f, 0x28, 0x9a, 0xf5, 0xba, 0x47, + 0x7d, 0x9f, 0x8a, 0x23, 0xa6, 0x28, 0xdc, 0x7a, 0x73, 0x0a, 0x88, 0x21, 0x9e, 0x2d, 0xc3, 0x66, + 0x7d, 0xcb, 0x67, 0x33, 0x5b, 0x5a, 0x68, 0x7a, 0x19, 0x32, 0x21, 0x0c, 0x8e, 0x9a, 0xc2, 0xf8, + 0xea, 0x10, 0xc4, 0x65, 0x93, 0x3a, 0x8c, 0x6f, 0x7b, 0x9b, 0xf3, 0xdc, 0xf5, 0x98, 0xc5, 0x09, + 0x7c, 0xf2, 0x60, 0x7f, 0x7a, 0xfc, 0x5a, 0x9c, 0x03, 0x26, 0x59, 0x4a, 0x29, 0xd7, 0xe8, 0x5e, + 0x60, 0x6e, 0x66, 0xd9, 0x30, 0x95, 0x94, 0x28, 0x07, 0x4c, 0xb2, 0x24, 0xcf, 0x41, 0x69, 0xdb, + 0xdb, 0x54, 0x8b, 0x3c, 0xe9, 0x79, 0xbd, 0x16, 0xa2, 0x30, 0x4a, 0xc7, 0xba, 0x70, 0xdb, 0xdb, + 0x64, 0x9b, 0xa2, 0x8a, 0x57, 0xeb, 0x2e, 0xbc, 0x26, 0xe1, 0xa8, 0x29, 0x88, 0x0b, 0x64, 0x5b, + 0xf5, 0x9e, 0x76, 0xb4, 0xca, 0xbd, 0xe8, 0xf0, 0x7e, 0xda, 0x33, 0xec, 0x30, 0xbd, 0xd6, 0xc5, + 0x07, 0x53, 0x78, 0x93, 0xcf, 0xc1, 0xd9, 0x6d, 0x6f, 0x53, 0x1e, 0x15, 0xeb, 0x9e, 0x65, 0xd7, + 0x2c, 0x37, 0x16, 0xa8, 0xd6, 0xc7, 0xc9, 0xb5, 0x74, 0x32, 0xec, 0x55, 0xde, 0xf8, 0x1a, 0x5b, + 0xc7, 0x91, 0x38, 0xe4, 0xfd, 0xe2, 0x19, 0x5b, 0x30, 0xd2, 0xa4, 0x66, 0x9d, 0x7a, 0x4a, 0xf7, + 0x79, 0x21, 0xdb, 0xaa, 0xe0, 0x3c, 0x42, 0xcd, 0x4c, 0x7c, 0xfb, 0xa8, 0x98, 0x1b, 0x6b, 0x30, + 0x2c, 0x60, 0x87, 0xb0, 0x83, 0xf4, 0x49, 0x38, 0x70, 0x0f, 0x57, 0xde, 0x07, 0x39, 0x28, 0x72, + 0x73, 0xba, 0xc1, 0x74, 0x6a, 0x5d, 0x64, 0xf0, 0x1e, 0x87, 0xe7, 0x16, 0x8c, 0x88, 0x73, 0xdf, + 0xe7, 0x67, 0x52, 0xd6, 0xb6, 0x8a, 0xec, 0x9e, 0xb0, 0xad, 0x42, 0xa7, 0xf0, 0x51, 0x31, 0x37, + 0xfe, 0x35, 0x07, 0xc3, 0x57, 0x6d, 0xb7, 0xf3, 0x33, 0x92, 0x88, 0xb2, 0x02, 0x43, 0xcc, 0x12, + 0x8a, 0xa7, 0x3b, 0x8d, 0x56, 0x9e, 0x88, 0xa6, 0x3a, 0x95, 0xe3, 0xa9, 0x4e, 0x68, 0xee, 0x2a, + 0x37, 0xb1, 0x28, 0x13, 0x09, 0xcc, 0xb5, 0x60, 0xe8, 0xba, 0x65, 0x6f, 0x1f, 0x6e, 0x9e, 0xf8, + 0x35, 0xc7, 0xed, 0x9a, 0x27, 0x55, 0x06, 0x44, 0x81, 0x53, 0xf3, 0x7f, 0x30, 0x7d, 0xfe, 0x1b, + 0x5f, 0xc8, 0xc1, 0xe4, 0x0a, 0x6d, 0x3b, 0xd6, 0xbb, 0x66, 0xe8, 0xe5, 0x66, 0x85, 0x9a, 0x56, + 0x20, 0x5d, 0xd4, 0xba, 0xd0, 0x15, 0x2b, 0x40, 0x06, 0xbf, 0x8f, 0x2e, 0xca, 0x83, 0xbb, 0x6c, + 0xab, 0x5c, 0x0d, 0xf7, 0xac, 0x30, 0xb8, 0xab, 0x10, 0x18, 0xd2, 0x18, 0x7f, 0x9c, 0x83, 0x11, + 0x51, 0x09, 0xaa, 0x78, 0xe7, 0x7a, 0xf0, 0xbe, 0x0d, 0x79, 0x5e, 0x4e, 0xee, 0xb6, 0x9f, 0xc9, + 0x66, 0xa0, 0x31, 0x0e, 0x42, 0x23, 0xe3, 0x3f, 0x51, 0xf0, 0x64, 0x6a, 0x73, 0xdb, 0x7c, 0x67, + 0x4e, 0xfb, 0xf4, 0xb5, 0xda, 0xbc, 0xc2, 0xa1, 0x28, 0xb1, 0xc6, 0xfb, 0x83, 0x50, 0x50, 0xae, + 0x23, 0xf2, 0xc5, 0x1c, 0x94, 0x4c, 0xdb, 0x76, 0x02, 0x53, 0x78, 0x56, 0xc4, 0x24, 0x5f, 0xcd, + 0x54, 0x31, 0xc5, 0x74, 0x66, 0x2e, 0x64, 0xb8, 0x68, 0x07, 0xde, 0x5e, 0xb8, 0xe9, 0x47, 0x30, + 0x18, 0x95, 0x4b, 0xde, 0x86, 0xe1, 0x96, 0xb9, 0x49, 0x5b, 0x6a, 0xce, 0x5f, 0xed, 0xaf, 0x06, + 0xd7, 0x39, 0x2f, 0x21, 0x5c, 0xf7, 0x83, 0x00, 0xa2, 0x14, 0x34, 0xf5, 0x12, 0x4c, 0x24, 0x2b, + 0x4a, 0x26, 0x22, 0xe3, 0x27, 0x86, 0xec, 0x54, 0x6c, 0x3b, 0x53, 0x13, 0x7e, 0xe0, 0xf9, 0xdc, + 0xd4, 0xa7, 0xa1, 0x14, 0x11, 0x73, 0x94, 0xa2, 0xc6, 0x6b, 0x50, 0x5a, 0xa1, 0x81, 0x67, 0xd5, + 0x38, 0x83, 0xfb, 0xcd, 0x9a, 0x43, 0xed, 0xa8, 0xef, 0xb2, 0x49, 0xc8, 0x58, 0xfa, 0xc4, 0x01, + 0x70, 0x3d, 0xa7, 0x4d, 0x83, 0x26, 0xed, 0xa8, 0x11, 0xcd, 0xa6, 0xfc, 0xad, 0x6b, 0x36, 0xc2, + 0x17, 0x10, 0x7e, 0x63, 0x44, 0x84, 0x71, 0x09, 0xf2, 0x2b, 0x9d, 0x80, 0xbe, 0x73, 0xff, 0x55, + 0x6f, 0xdc, 0x86, 0x51, 0x4e, 0x7a, 0xc5, 0x69, 0xb1, 0x0d, 0x85, 0xb5, 0xad, 0xcd, 0xbe, 0x93, + 0x76, 0x13, 0x27, 0x42, 0x81, 0x63, 0x33, 0xbb, 0xe9, 0xb4, 0xea, 0xd4, 0x93, 0x3d, 0xa0, 0x47, + 0xf4, 0x0a, 0x87, 0xa2, 0xc4, 0x1a, 0x3f, 0xca, 0x41, 0x89, 0x17, 0x94, 0x1b, 0x41, 0x0b, 0x46, + 0x9a, 0x42, 0x8e, 0xec, 0x85, 0x6c, 0xde, 0xfe, 0x68, 0x85, 0x23, 0x87, 0xa4, 0x00, 0xa0, 0x12, + 0xc1, 0xa4, 0xed, 0x9a, 0x56, 0xc0, 0xa4, 0x0d, 0x1c, 0xbb, 0xb4, 0x5b, 0x82, 0x33, 0x2a, 0x11, + 0xc6, 0x9f, 0x4c, 0x00, 0xac, 0x3a, 0x75, 0x2a, 0x9b, 0x3a, 0x05, 0x03, 0x56, 0x5d, 0x76, 0x22, + 0xc8, 0x42, 0x03, 0x57, 0x17, 0x70, 0xc0, 0xaa, 0xeb, 0x51, 0x19, 0xe8, 0xb9, 0x17, 0x3f, 0x07, + 0xa5, 0xba, 0xe5, 0xbb, 0x2d, 0x73, 0x6f, 0x35, 0x45, 0x53, 0x5b, 0x08, 0x51, 0x18, 0xa5, 0x23, + 0x4f, 0xcb, 0xc8, 0xa6, 0xd0, 0xd2, 0xca, 0x89, 0xc8, 0x66, 0x81, 0x55, 0x2f, 0x12, 0xd4, 0x7c, + 0x1e, 0x46, 0x95, 0x6f, 0x90, 0x4b, 0xc9, 0xf3, 0x52, 0xa7, 0x54, 0xf4, 0x64, 0x23, 0x82, 0xc3, + 0x18, 0x65, 0xd2, 0x77, 0x39, 0xfc, 0x50, 0x7c, 0x97, 0x0b, 0x30, 0xe1, 0x07, 0x8e, 0x47, 0xeb, + 0x8a, 0xe2, 0xea, 0x42, 0x99, 0xc4, 0x1a, 0x3a, 0x51, 0x4d, 0xe0, 0xb1, 0xab, 0x04, 0x59, 0x87, + 0x53, 0xbb, 0x89, 0xa0, 0x31, 0x6f, 0xfc, 0x49, 0xce, 0xe9, 0xbc, 0xe4, 0x74, 0xea, 0x56, 0x0a, + 0x0d, 0xa6, 0x96, 0x24, 0x2f, 0xc0, 0x98, 0xaa, 0x26, 0x3f, 0x2a, 0xcb, 0xa7, 0x38, 0x2b, 0x6d, + 0xcb, 0x6c, 0x44, 0x91, 0x18, 0xa7, 0x25, 0x9f, 0x84, 0xbc, 0xdb, 0x34, 0x7d, 0x2a, 0x5d, 0x9d, + 0xca, 0x8f, 0x94, 0x5f, 0x67, 0xc0, 0xbb, 0xfb, 0xd3, 0x45, 0x36, 0x66, 0xfc, 0x03, 0x05, 0x21, + 0xb9, 0x0c, 0xb0, 0xe9, 0x74, 0xec, 0xba, 0xe9, 0xed, 0x5d, 0x5d, 0x90, 0x91, 0x0e, 0xad, 0xc3, + 0x54, 0x34, 0x06, 0x23, 0x54, 0xd1, 0xf0, 0x72, 0xf1, 0xde, 0xe1, 0x65, 0x72, 0x1b, 0x8a, 0x3c, + 0x2a, 0x44, 0xeb, 0x73, 0x81, 0x74, 0x5b, 0x1e, 0x25, 0x80, 0xa0, 0x4f, 0xe6, 0xaa, 0x62, 0x82, + 0x21, 0x3f, 0xf2, 0x26, 0xc0, 0x96, 0x65, 0x5b, 0x7e, 0x93, 0x73, 0x2f, 0x1d, 0x99, 0xbb, 0x6e, + 0xe7, 0x92, 0xe6, 0x82, 0x11, 0x8e, 0xe4, 0x0d, 0x98, 0xa4, 0x7e, 0x60, 0xb5, 0xcd, 0x80, 0xd6, + 0x75, 0x82, 0x49, 0x99, 0x07, 0xc2, 0x74, 0x5c, 0x6e, 0x31, 0x49, 0x70, 0x37, 0x0d, 0x88, 0xdd, + 0x8c, 0xc8, 0xf3, 0x50, 0x70, 0x3d, 0xa7, 0xc1, 0x0c, 0xcb, 0xf2, 0x54, 0x6c, 0xba, 0x14, 0xd6, + 0x25, 0xfc, 0x6e, 0xe4, 0x37, 0x6a, 0x6a, 0xf2, 0x2f, 0x39, 0x98, 0xf4, 0xa8, 0xef, 0x74, 0xbc, + 0x1a, 0xf5, 0x75, 0xc5, 0x4e, 0xf3, 0x4d, 0xe9, 0x66, 0xc6, 0xd4, 0x70, 0xb5, 0xd3, 0xcc, 0x60, + 0x92, 0xb1, 0x38, 0x65, 0xa9, 0x6a, 0x70, 0x17, 0xfe, 0x6e, 0x1a, 0xf0, 0x0b, 0x3f, 0x98, 0x9e, + 0xee, 0xbe, 0x8d, 0xa0, 0x99, 0xb3, 0x99, 0xfe, 0xab, 0x3f, 0x98, 0x9e, 0x50, 0xdf, 0x61, 0x3f, + 0x75, 0xb5, 0x8b, 0x1d, 0x21, 0xae, 0x53, 0xbf, 0xba, 0x2e, 0xfd, 0xcb, 0xfa, 0x08, 0x59, 0x67, + 0x40, 0x14, 0x38, 0xf2, 0x14, 0x14, 0xea, 0x26, 0x6d, 0x3b, 0x36, 0xad, 0x97, 0xc7, 0x42, 0xd7, + 0xdb, 0x82, 0x84, 0xa1, 0xc6, 0x92, 0xb7, 0x60, 0xd8, 0xe2, 0xea, 0x7f, 0xf9, 0x04, 0x9f, 0x30, + 0xd9, 0xcc, 0x0c, 0x61, 0x41, 0x88, 0x84, 0x24, 0xf1, 0x1b, 0x25, 0x5b, 0x52, 0x83, 0x11, 0xa7, + 0x13, 0x70, 0x09, 0xe3, 0x5c, 0x42, 0x36, 0x87, 0xf5, 0x9a, 0xe0, 0x21, 0xf2, 0x93, 0xe5, 0x07, + 0x2a, 0xce, 0xac, 0xbd, 0xb5, 0xa6, 0xd5, 0xaa, 0x7b, 0xd4, 0x2e, 0x4f, 0x70, 0x9f, 0x05, 0x6f, + 0xef, 0xbc, 0x84, 0xa1, 0xc6, 0x92, 0xff, 0x0b, 0x63, 0x4e, 0x27, 0xe0, 0xab, 0x97, 0x8d, 0xb2, + 0x5f, 0x9e, 0xe4, 0xe4, 0x93, 0x6c, 0x2f, 0x59, 0x8b, 0x22, 0x30, 0x4e, 0xc7, 0xf6, 0xf3, 0xa6, + 0xe3, 0x07, 0xec, 0x83, 0x6f, 0x69, 0x67, 0xe2, 0xfb, 0xf9, 0x95, 0x08, 0x0e, 0x63, 0x94, 0xe4, + 0x2b, 0x39, 0x98, 0x6c, 0x27, 0xd5, 0xf6, 0xf2, 0x59, 0xde, 0x19, 0x4b, 0x19, 0x15, 0xbf, 0x04, + 0x37, 0x11, 0x5a, 0xec, 0x02, 0x63, 0xb7, 0x5c, 0x9e, 0x53, 0xe9, 0xef, 0xd9, 0xb5, 0xa6, 0xe7, + 0xd8, 0xf1, 0x1a, 0x3d, 0xca, 0x6b, 0xb4, 0x9a, 0x7d, 0xc5, 0xa4, 0x71, 0xad, 0x3c, 0x7a, 0xb0, + 0x3f, 0x7d, 0x3a, 0x15, 0x85, 0xe9, 0xf5, 0x98, 0x5a, 0x80, 0x33, 0xe9, 0xab, 0xee, 0x7e, 0x4a, + 0xe7, 0x60, 0x54, 0xe9, 0x5c, 0x82, 0x47, 0x7b, 0x56, 0x8a, 0x6d, 0xd9, 0x4a, 0x79, 0xc9, 0xc5, + 0xb7, 0xec, 0x2e, 0xcd, 0xe3, 0x04, 0x8c, 0x46, 0x6f, 0x8a, 0xf0, 0xe0, 0x42, 0x24, 0x43, 0x97, + 0x38, 0x50, 0x74, 0xaa, 0xc7, 0x11, 0x5c, 0x58, 0xab, 0x76, 0x05, 0x17, 0x34, 0x08, 0x43, 0x19, + 0xf7, 0x0b, 0x2e, 0xfc, 0xd9, 0x00, 0x84, 0xe5, 0xc8, 0xd3, 0x50, 0xa0, 0x76, 0xdd, 0x75, 0x2c, + 0x3b, 0x48, 0x86, 0x65, 0x16, 0x25, 0x1c, 0x35, 0x45, 0x24, 0x14, 0x31, 0x70, 0xcf, 0x50, 0x44, + 0x13, 0xc6, 0x4d, 0x9e, 0x7e, 0x10, 0xfa, 0x90, 0x07, 0x8f, 0xe4, 0x43, 0xd6, 0x89, 0xa3, 0x71, + 0x2e, 0x98, 0x64, 0xcb, 0x24, 0xf9, 0x61, 0x71, 0x2e, 0x69, 0x28, 0x93, 0xa4, 0x6a, 0x9c, 0x0b, + 0x26, 0xd9, 0x1a, 0x7f, 0x31, 0x00, 0x6a, 0x5f, 0xf9, 0x59, 0xf0, 0x84, 0x10, 0x03, 0x86, 0x3d, + 0xea, 0xab, 0x3c, 0xe4, 0xa2, 0xd8, 0xbb, 0x91, 0x43, 0x50, 0x62, 0xd8, 0xb6, 0x4a, 0xdf, 0xb1, + 0x82, 0x79, 0xa7, 0xae, 0xb4, 0x5e, 0xbe, 0xad, 0x2e, 0x4a, 0x18, 0x6a, 0xac, 0xb1, 0x0b, 0x63, + 0xac, 0x5d, 0xad, 0x16, 0x6d, 0x55, 0x03, 0xea, 0xfa, 0x64, 0x0b, 0xf2, 0x3e, 0xfb, 0xd1, 0x97, + 0x29, 0x12, 0xe6, 0x74, 0x50, 0x37, 0xe2, 0x32, 0x61, 0x7c, 0x51, 0xb0, 0x37, 0xfe, 0x69, 0x00, + 0x8a, 0xba, 0x47, 0x0f, 0xe1, 0x87, 0xb9, 0x1c, 0xe6, 0x5f, 0x8b, 0x39, 0x5e, 0x8e, 0xe4, 0x5e, + 0x33, 0x95, 0x70, 0xce, 0xde, 0x13, 0xe9, 0xb5, 0x3a, 0x11, 0x9b, 0x3c, 0x1d, 0x77, 0xd8, 0x9d, + 0x89, 0x3a, 0x8b, 0x22, 0xf4, 0xd2, 0x73, 0xb7, 0x0d, 0x45, 0xfe, 0x63, 0x49, 0xdd, 0x40, 0xca, + 0x3a, 0x77, 0x6e, 0x2a, 0x2e, 0xc2, 0x01, 0xaf, 0x3f, 0x31, 0xe4, 0x9f, 0xb8, 0x39, 0x94, 0x3f, + 0xd4, 0xcd, 0xa1, 0x4b, 0x30, 0x44, 0xed, 0x4e, 0x9b, 0xe7, 0x1a, 0x14, 0xf9, 0xc9, 0x31, 0xb4, + 0x68, 0x77, 0xda, 0xf1, 0xc6, 0x70, 0x12, 0x63, 0x09, 0x98, 0x5e, 0xb1, 0x3c, 0x4f, 0x5e, 0x84, + 0x82, 0x2f, 0x77, 0x40, 0xd9, 0xb9, 0x1f, 0xd3, 0xe1, 0x5d, 0x09, 0xbf, 0xbb, 0x3f, 0x3d, 0xc6, + 0x89, 0x15, 0x00, 0x75, 0x11, 0xe3, 0x4b, 0x43, 0x10, 0xb1, 0xa6, 0x0f, 0x31, 0x4c, 0xf5, 0x84, + 0x83, 0xe4, 0x95, 0xac, 0x0e, 0x12, 0xe5, 0x75, 0x10, 0xf3, 0x3b, 0xee, 0x13, 0x61, 0xf5, 0x68, + 0xd2, 0x96, 0x2b, 0xc7, 0x55, 0xd7, 0xe3, 0x0a, 0x6d, 0xb9, 0xc8, 0x31, 0x3a, 0x15, 0x61, 0xa8, + 0x67, 0x2a, 0xc2, 0x6d, 0xc8, 0x37, 0xcc, 0x4e, 0x83, 0x4a, 0x27, 0x7c, 0x36, 0x27, 0x17, 0x8f, + 0xaa, 0x0a, 0x27, 0x17, 0xff, 0x89, 0x82, 0x27, 0x9b, 0x4b, 0x4d, 0xe5, 0x37, 0x96, 0x86, 0x60, + 0xb6, 0xb9, 0xa4, 0xbd, 0xcf, 0x62, 0x2e, 0xe9, 0x4f, 0x0c, 0xf9, 0x33, 0x4d, 0xad, 0x26, 0x12, + 0x54, 0x65, 0x44, 0xf0, 0xb3, 0x19, 0x33, 0x2a, 0x38, 0x0f, 0xa1, 0xa9, 0xc9, 0x0f, 0x54, 0x9c, + 0x8d, 0x59, 0x28, 0x45, 0x2e, 0xcf, 0xb0, 0xfe, 0xd5, 0xe9, 0x97, 0x91, 0xfe, 0x5d, 0x30, 0x03, + 0x13, 0x39, 0xc6, 0xf8, 0xfa, 0x20, 0x68, 0xbd, 0x38, 0x9a, 0x2b, 0x61, 0xd6, 0x22, 0x79, 0xf6, + 0xb1, 0xc4, 0x2d, 0xc7, 0x46, 0x89, 0x65, 0xd6, 0x63, 0x9b, 0x7a, 0x0d, 0x7d, 0x7a, 0xcb, 0x35, + 0xaf, 0xad, 0xc7, 0x95, 0x28, 0x12, 0xe3, 0xb4, 0xec, 0xec, 0x6c, 0x9b, 0xb6, 0xb5, 0x45, 0xfd, + 0x20, 0x19, 0xdc, 0x5a, 0x91, 0x70, 0xd4, 0x14, 0x64, 0x19, 0x26, 0x7d, 0x1a, 0xac, 0xed, 0xda, + 0xd4, 0xd3, 0x09, 0x65, 0x32, 0xc3, 0xf0, 0x51, 0x65, 0x2c, 0x54, 0x93, 0x04, 0xd8, 0x5d, 0x86, + 0x5b, 0xe2, 0x22, 0xb9, 0x4f, 0x27, 0x6a, 0xc9, 0x85, 0x1d, 0x5a, 0xe2, 0x09, 0x3c, 0x76, 0x95, + 0x60, 0x5c, 0xb6, 0x4c, 0xab, 0xd5, 0xf1, 0x68, 0xc8, 0x65, 0x38, 0xce, 0x65, 0x29, 0x81, 0xc7, + 0xae, 0x12, 0x3c, 0x2e, 0xde, 0x32, 0x1b, 0x7e, 0x79, 0x24, 0x12, 0x17, 0x67, 0x00, 0x14, 0x70, + 0xe3, 0x83, 0x01, 0x18, 0x43, 0x1a, 0x78, 0x7b, 0xba, 0xd7, 0x5e, 0x83, 0x7c, 0x8b, 0x27, 0x1b, + 0xe6, 0x32, 0xde, 0x6a, 0xe0, 0x42, 0x44, 0x36, 0xa2, 0xe0, 0x44, 0x16, 0xa0, 0xe4, 0x31, 0x19, + 0x32, 0x15, 0x54, 0x8c, 0xa1, 0x11, 0x5e, 0x12, 0xd4, 0xa8, 0xbb, 0xf1, 0x4f, 0x8c, 0x16, 0x23, + 0x36, 0x8c, 0x6c, 0x8a, 0x8b, 0x1a, 0x52, 0x59, 0xc9, 0x36, 0xbd, 0xe5, 0x65, 0x0f, 0x7e, 0x0a, + 0xa8, 0x9b, 0x1f, 0x77, 0xc3, 0x9f, 0xa8, 0x84, 0x18, 0x1f, 0xe4, 0x00, 0xc2, 0xdb, 0x81, 0x64, + 0x1b, 0x0a, 0xfe, 0xb3, 0x31, 0x35, 0x31, 0x63, 0x16, 0x95, 0x64, 0x12, 0xc9, 0xaf, 0x91, 0x10, + 0xd4, 0x02, 0xee, 0xa7, 0x23, 0x7e, 0x34, 0x08, 0xba, 0xd4, 0x03, 0x52, 0x11, 0x9f, 0x64, 0xea, + 0x45, 0x23, 0xbc, 0x82, 0xa2, 0xe9, 0x90, 0x43, 0x51, 0x62, 0x99, 0x8a, 0xa1, 0x82, 0xfc, 0x72, + 0xb5, 0x70, 0x15, 0x43, 0xe5, 0x03, 0xa0, 0xc6, 0xa6, 0x29, 0x9d, 0xf9, 0x87, 0xa6, 0x74, 0x0e, + 0x3f, 0x10, 0xa5, 0x93, 0xd9, 0x21, 0x9e, 0xd3, 0xa2, 0x73, 0xb8, 0x2a, 0x5d, 0x54, 0xda, 0x0e, + 0x41, 0x01, 0x46, 0x85, 0x27, 0xcf, 0x41, 0xa9, 0xe3, 0xd3, 0xea, 0xc2, 0xb5, 0x79, 0x8f, 0xd6, + 0x7d, 0x99, 0x3f, 0xa1, 0x9d, 0x96, 0x37, 0x42, 0x14, 0x46, 0xe9, 0x8c, 0x5f, 0xc9, 0xc1, 0x89, + 0x6a, 0xcd, 0xb3, 0xdc, 0x40, 0x6f, 0x9e, 0xab, 0xfc, 0x8a, 0x4f, 0x60, 0xb2, 0xa5, 0x28, 0xa7, + 0xe2, 0x63, 0x3d, 0x42, 0xc7, 0x82, 0x28, 0x76, 0xdd, 0x4f, 0x80, 0x30, 0x64, 0xc1, 0x86, 0x5a, + 0x6c, 0xcf, 0xc9, 0x29, 0x51, 0xe5, 0x50, 0x94, 0x58, 0xe3, 0x0e, 0x4c, 0x54, 0x69, 0xdb, 0x74, + 0x9b, 0x3c, 0x95, 0x43, 0x78, 0x91, 0x67, 0xa1, 0xe8, 0x2b, 0x58, 0xf2, 0x6e, 0xa1, 0x26, 0xc6, + 0x90, 0x86, 0x3c, 0x21, 0x9c, 0xdc, 0x2a, 0x06, 0x5c, 0x14, 0xc7, 0x8c, 0xf0, 0x8c, 0xfb, 0xa8, + 0x70, 0xc6, 0x2e, 0x8c, 0x86, 0xc5, 0xe9, 0x16, 0x69, 0xc0, 0x78, 0x2d, 0x12, 0x09, 0x0f, 0xaf, + 0x10, 0x1e, 0x3e, 0x68, 0xce, 0xb3, 0x00, 0xe6, 0xe3, 0x4c, 0x30, 0xc9, 0xd5, 0xf8, 0xf7, 0x1c, + 0x8c, 0x6b, 0xc9, 0xd2, 0xda, 0x74, 0x93, 0x8e, 0xf9, 0xc5, 0x8c, 0xf9, 0x93, 0xf1, 0xce, 0xbb, + 0x87, 0x73, 0xde, 0x4d, 0x3a, 0xe7, 0x8f, 0x5b, 0x62, 0x97, 0x99, 0xfc, 0x8d, 0x01, 0x28, 0xe8, + 0x04, 0xce, 0xd7, 0x20, 0xcf, 0xcf, 0xfb, 0xfe, 0xce, 0x00, 0xae, 0x3b, 0xa0, 0xe0, 0xc4, 0x58, + 0x72, 0x4f, 0x67, 0xe6, 0xcb, 0x72, 0x45, 0x61, 0x3a, 0x98, 0x5e, 0x80, 0x82, 0x13, 0xb9, 0x06, + 0x83, 0xd4, 0xae, 0xcb, 0xc3, 0xe0, 0xe8, 0x0c, 0xf9, 0xed, 0xd9, 0x45, 0xbb, 0x8e, 0x8c, 0x0b, + 0xbf, 0x05, 0xe4, 0x78, 0x6d, 0x33, 0x90, 0xaa, 0x62, 0x78, 0x0b, 0x88, 0x43, 0x51, 0x62, 0x8d, + 0x5f, 0x1f, 0x80, 0xe1, 0x6a, 0x67, 0x93, 0x1d, 0x6b, 0xbf, 0x93, 0x83, 0x93, 0x49, 0x9f, 0x77, + 0x38, 0x31, 0xaf, 0x1c, 0xcb, 0x2d, 0x35, 0xa4, 0x5b, 0x95, 0x73, 0xb2, 0x2a, 0x27, 0x53, 0x90, + 0x98, 0x56, 0x03, 0xa6, 0x76, 0x86, 0xe9, 0xda, 0x03, 0xc7, 0x92, 0xae, 0x3d, 0xd6, 0x2b, 0x55, + 0xdb, 0xf8, 0xeb, 0x21, 0x00, 0xd1, 0x23, 0x6b, 0x6e, 0x70, 0x18, 0xdb, 0xe0, 0x79, 0x18, 0x55, + 0xef, 0x98, 0xac, 0x86, 0x81, 0x1e, 0xed, 0x89, 0x5b, 0x8e, 0xe0, 0x30, 0x46, 0xc9, 0xac, 0x25, + 0x6a, 0x07, 0xde, 0x9e, 0x38, 0xec, 0x86, 0xe2, 0xd6, 0xd2, 0xa2, 0xc6, 0x60, 0x84, 0x8a, 0xcc, + 0xc4, 0x7c, 0x01, 0x22, 0xa5, 0xfb, 0xc4, 0x3d, 0xec, 0xf8, 0x17, 0x60, 0x4c, 0x7f, 0x2d, 0x59, + 0x2d, 0x95, 0x25, 0xa3, 0x55, 0xce, 0xf5, 0x28, 0x12, 0xe3, 0xb4, 0xe4, 0x25, 0x38, 0x11, 0xcf, + 0xbd, 0x94, 0xc7, 0xc2, 0x19, 0x59, 0xfa, 0x44, 0x3c, 0x65, 0x13, 0x13, 0xd4, 0x6c, 0x16, 0xd6, + 0xbd, 0x3d, 0xec, 0xd8, 0xf2, 0x7c, 0xd0, 0xb3, 0x70, 0x81, 0x43, 0x51, 0x62, 0x59, 0x17, 0xb2, + 0x92, 0xd4, 0x13, 0x70, 0x1e, 0xb7, 0x28, 0x84, 0x5d, 0x58, 0x8d, 0xe0, 0x30, 0x46, 0xc9, 0x24, + 0x48, 0xc3, 0x0c, 0xe2, 0xf3, 0x3c, 0x61, 0x5a, 0xb9, 0x70, 0xc2, 0x89, 0xeb, 0xc2, 0x22, 0x20, + 0xf1, 0xa9, 0x43, 0x5e, 0x02, 0x89, 0x95, 0x15, 0xc9, 0x8d, 0x09, 0xd5, 0x39, 0xc1, 0xdf, 0x38, + 0x09, 0x93, 0xd5, 0x8e, 0xeb, 0xb6, 0x2c, 0x5a, 0xd7, 0xa6, 0xb2, 0xf1, 0x32, 0x8c, 0xcb, 0x6b, + 0x3d, 0xfa, 0xf8, 0x3b, 0xd2, 0x2d, 0x5d, 0x63, 0x9f, 0xed, 0xe7, 0x71, 0x1f, 0x22, 0xb1, 0x93, + 0x87, 0x56, 0x56, 0xff, 0x46, 0xf4, 0x88, 0x12, 0x2b, 0x24, 0xf5, 0xcc, 0xbb, 0xad, 0xa2, 0xc6, + 0xfd, 0xe4, 0x51, 0xf0, 0x40, 0xab, 0xd8, 0x05, 0xa3, 0xd1, 0x66, 0xe3, 0xc7, 0x39, 0x48, 0x77, + 0xcf, 0x92, 0xb7, 0xbb, 0x9b, 0xb9, 0xd0, 0x5f, 0x33, 0xa5, 0x4b, 0xb8, 0x77, 0x4b, 0xcd, 0x78, + 0x4b, 0x5f, 0xc9, 0xde, 0x52, 0x29, 0xaa, 0xbb, 0xbd, 0xff, 0x91, 0x83, 0xd2, 0xc6, 0xc6, 0x75, + 0x6d, 0xaf, 0x20, 0x9c, 0xf1, 0xc5, 0xc5, 0xac, 0xb9, 0xad, 0x80, 0x7a, 0xf3, 0x4e, 0xdb, 0x6d, + 0x51, 0x3d, 0x39, 0xe4, 0x6d, 0xa9, 0x6a, 0x2a, 0x05, 0xf6, 0x28, 0x49, 0xae, 0xc2, 0xc9, 0x28, + 0x46, 0x9a, 0x6b, 0xbc, 0x51, 0x79, 0x99, 0x40, 0xdb, 0x8d, 0xc6, 0xb4, 0x32, 0x49, 0x56, 0xd2, + 0x66, 0x93, 0xef, 0xde, 0x74, 0xb1, 0x92, 0x68, 0x4c, 0x2b, 0x63, 0xac, 0x41, 0x29, 0xf2, 0xa2, + 0x12, 0x79, 0x05, 0x26, 0x6a, 0x4e, 0xdb, 0xf5, 0xa8, 0xef, 0x5b, 0x8e, 0x7d, 0x9d, 0xee, 0xd0, + 0x96, 0x6c, 0x32, 0xbf, 0x76, 0x35, 0x9f, 0xc0, 0x61, 0x17, 0xb5, 0xf1, 0xa7, 0xe7, 0x40, 0x5f, + 0xf6, 0xf9, 0xf9, 0x95, 0xa1, 0x4c, 0x61, 0xf7, 0x9a, 0x0e, 0xbf, 0xe5, 0xfb, 0x0f, 0xbf, 0xe9, + 0xbd, 0x38, 0x11, 0x82, 0x6b, 0x84, 0x21, 0xb8, 0xe1, 0x63, 0x08, 0xc1, 0x69, 0x25, 0xb0, 0x2b, + 0x0c, 0xf7, 0xe5, 0x1c, 0x8c, 0xda, 0x4e, 0x9d, 0x2a, 0x9d, 0x99, 0xbb, 0x0d, 0x4a, 0x97, 0xd7, + 0xfa, 0xea, 0x44, 0x11, 0x5b, 0x92, 0x1c, 0x45, 0xf4, 0x55, 0x1f, 0x54, 0x51, 0x14, 0xc6, 0x44, + 0x93, 0x25, 0x28, 0x98, 0x5b, 0x5b, 0x96, 0x6d, 0x05, 0x7b, 0xf2, 0xd6, 0xd2, 0xf9, 0x34, 0x55, + 0x7f, 0x4e, 0xd2, 0x08, 0xb3, 0x53, 0x7d, 0xa1, 0x2e, 0xcb, 0xec, 0x76, 0x7d, 0x49, 0xb8, 0xd8, + 0x87, 0xdd, 0xae, 0x92, 0xb5, 0x22, 0x4e, 0x24, 0x75, 0xa1, 0x31, 0xbc, 0x33, 0x6c, 0xc0, 0xb0, + 0x88, 0xcc, 0xca, 0x97, 0x90, 0xb8, 0xd3, 0x52, 0x44, 0x6d, 0x51, 0x62, 0x48, 0x43, 0x79, 0xd6, + 0x4b, 0xbc, 0x73, 0x2b, 0x99, 0xe3, 0x12, 0xda, 0x59, 0x9f, 0xee, 0x5a, 0x27, 0xaf, 0x46, 0xed, + 0xc4, 0xd1, 0xc3, 0xd8, 0x89, 0x63, 0x3d, 0x6d, 0xc4, 0x06, 0x0c, 0xfb, 0xdc, 0x0a, 0xe5, 0xe1, + 0xe8, 0xd2, 0xe5, 0xf9, 0x6c, 0x07, 0x49, 0xcc, 0x90, 0x15, 0xbd, 0x23, 0x60, 0x28, 0xd9, 0x13, + 0x07, 0x0a, 0x2a, 0x66, 0x2e, 0x23, 0xda, 0xd9, 0x4c, 0x9f, 0xa4, 0xcb, 0x51, 0xdd, 0x5d, 0x11, + 0x50, 0xd4, 0x42, 0xc8, 0x6d, 0x18, 0xac, 0x9b, 0x0d, 0x19, 0xdb, 0x7e, 0x25, 0xf3, 0x65, 0x2c, + 0x25, 0x86, 0x5b, 0x15, 0x0b, 0x73, 0xcb, 0xc8, 0xb8, 0x92, 0xed, 0xf0, 0xb2, 0xf2, 0x44, 0x3f, + 0x07, 0x70, 0x5c, 0x05, 0x12, 0x36, 0x73, 0xd7, 0x75, 0xe7, 0x45, 0x18, 0xd9, 0x71, 0x5a, 0x9d, + 0xb6, 0x0c, 0x8a, 0x97, 0x2e, 0x4f, 0xa5, 0x8d, 0xf6, 0x4d, 0x4e, 0x12, 0x6e, 0x02, 0xe2, 0xdb, + 0x47, 0x55, 0x96, 0x7c, 0x21, 0x07, 0x27, 0xd8, 0xd2, 0xd1, 0xf3, 0xc0, 0x2f, 0x93, 0x3e, 0x66, + 0xea, 0x0d, 0x9f, 0x1d, 0xad, 0x6a, 0x86, 0x69, 0x45, 0xf8, 0x6a, 0x4c, 0x02, 0x26, 0x24, 0x12, + 0x17, 0x0a, 0xbe, 0x55, 0xa7, 0x35, 0xd3, 0xf3, 0xcb, 0x27, 0x8f, 0x4d, 0x7a, 0xe8, 0x72, 0x93, + 0xbc, 0x51, 0x4b, 0x21, 0xbf, 0xcc, 0x1f, 0xdb, 0x91, 0x4f, 0x8b, 0xc9, 0x07, 0xe5, 0x4e, 0x1d, + 0xe7, 0x83, 0x72, 0x27, 0xc5, 0x4b, 0x3b, 0x31, 0x09, 0x98, 0x14, 0x49, 0x3e, 0x9f, 0x83, 0xd3, + 0xe2, 0xd6, 0x72, 0xf2, 0xca, 0xfa, 0xe9, 0x8c, 0x76, 0x2e, 0x0f, 0xe0, 0xcf, 0xa5, 0xb1, 0xc4, + 0x74, 0x49, 0xe4, 0x3d, 0x18, 0xf3, 0xa2, 0x3e, 0x61, 0x9e, 0x2b, 0x91, 0x75, 0x04, 0x62, 0xde, + 0x65, 0x91, 0xa7, 0x11, 0x03, 0x61, 0x5c, 0x16, 0x79, 0x06, 0x4a, 0xae, 0xdc, 0xdc, 0x2c, 0xbf, + 0xcd, 0xd3, 0x2c, 0x06, 0xc5, 0x21, 0xbc, 0x1e, 0x82, 0x31, 0x4a, 0x43, 0x6e, 0x40, 0x29, 0x70, + 0x5a, 0xd4, 0x93, 0x49, 0xc1, 0x65, 0x3e, 0x5f, 0x2e, 0xa4, 0x4d, 0xfe, 0x0d, 0x4d, 0x16, 0xba, 0xde, 0x42, 0x98, 0x8f, 0x51, 0x3e, 0xcc, 0x12, 0x54, 0x6f, 0x1a, 0x78, 0xdc, 0x50, 0x7d, 0x34, - 0x6e, 0x09, 0x56, 0xa3, 0x48, 0x8c, 0xd3, 0x92, 0x55, 0x98, 0x76, 0x3d, 0xcb, 0xf1, 0xac, 0x60, - 0x6f, 0xb1, 0x6d, 0xfa, 0x3e, 0x67, 0x20, 0xf2, 0xa2, 0x74, 0x38, 0x61, 0x23, 0x49, 0x80, 0xbd, - 0x65, 0xc8, 0xd3, 0x50, 0x50, 0xc0, 0xf2, 0x63, 0x5c, 0xbd, 0x1b, 0x17, 0x39, 0x55, 0x02, 0x86, - 0x1a, 0xdb, 0xe7, 0x0a, 0xe6, 0xb9, 0x2c, 0x57, 0x30, 0x49, 0x1d, 0xce, 0x99, 0xdd, 0xc0, 0xe1, - 0xb7, 0x0f, 0xe2, 0x45, 0x36, 0x9d, 0x6d, 0x6a, 0x97, 0x2f, 0xf0, 0xe3, 0xed, 0xc2, 0xc1, 0xfe, - 0xec, 0xb9, 0x85, 0x7b, 0xd0, 0xe1, 0x3d, 0xb9, 0x90, 0x0e, 0x14, 0xa8, 0xbc, 0x46, 0x5a, 0xfe, - 0xc4, 0x00, 0xe7, 0x4a, 0xfc, 0x2e, 0xaa, 0x0a, 0x72, 0x0b, 0x18, 0x6a, 0x11, 0x64, 0x13, 0x4a, - 0x2d, 0xc7, 0x0f, 0x16, 0xda, 0x96, 0xe9, 0x53, 0xbf, 0xfc, 0x38, 0x9f, 0x27, 0xa9, 0x47, 0xe2, - 0x65, 0x45, 0x16, 0x4e, 0x93, 0xcb, 0x61, 0x49, 0x8c, 0xb2, 0x21, 0x94, 0x7b, 0x9b, 0xbb, 0x7c, - 0xd4, 0x1c, 0x3b, 0xa0, 0xef, 0x06, 0xe5, 0xf3, 0xbc, 0x2d, 0x4f, 0xa5, 0x71, 0xde, 0x70, 0xea, - 0xd5, 0x38, 0xb5, 0xd8, 0x18, 0x12, 0x40, 0x4c, 0xf2, 0x64, 0x26, 0xbf, 0xeb, 0xd4, 0xab, 0x2e, - 0xad, 0x6d, 0x98, 0x41, 0xad, 0x55, 0x9e, 0x8d, 0x7b, 0x4d, 0x36, 0x22, 0x38, 0x8c, 0x51, 0x92, - 0x1a, 0x8c, 0x75, 0x44, 0xae, 0x75, 0xf9, 0x89, 0x01, 0xd4, 0x47, 0x99, 0xaf, 0x2d, 0x0e, 0x1f, - 0xf9, 0x81, 0x8a, 0x33, 0xf9, 0xcd, 0x1c, 0x4c, 0x26, 0xd2, 0x81, 0xca, 0x9f, 0x1c, 0xe4, 0xc8, - 0x8b, 0xf3, 0xaa, 0x3c, 0xc5, 0x3b, 0x29, 0x0e, 0xbc, 0xdb, 0x0b, 0xc2, 0x64, 0x25, 0x44, 0xeb, - 0xf9, 0x75, 0x87, 0xf2, 0x93, 0x03, 0xb5, 0x9e, 0xf3, 0x50, 0xad, 0xe7, 0x1f, 0xa8, 0x38, 0x93, - 0x8b, 0x30, 0x16, 0x58, 0x1d, 0xea, 0x74, 0x83, 0xf2, 0x53, 0xf1, 0x38, 0xc0, 0xa6, 0x00, 0xa3, - 0xc2, 0xcf, 0xbc, 0x02, 0xd3, 0x3d, 0x0a, 0xf1, 0x91, 0xb2, 0xf1, 0x7f, 0xc4, 0x0c, 0xe0, 0x88, - 0x09, 0x72, 0xdc, 0x86, 0xdb, 0x2a, 0x4c, 0xcb, 0x87, 0x77, 0x99, 0xb6, 0xd4, 0xee, 0xea, 0x77, - 0xc8, 0x22, 0x81, 0x50, 0x4c, 0x12, 0x60, 0x6f, 0x19, 0x36, 0x63, 0x6b, 0xe2, 0x21, 0x2a, 0x91, - 0xf9, 0x3b, 0x12, 0x77, 0x52, 0x2d, 0x46, 0x70, 0x18, 0xa3, 0x34, 0xfe, 0x20, 0x07, 0x13, 0xb1, - 0x93, 0xfb, 0xd8, 0x63, 0x1e, 0x2b, 0x40, 0x3a, 0x96, 0xe7, 0x39, 0x9e, 0x50, 0x7f, 0xd6, 0xd8, - 0x9e, 0xe4, 0xcb, 0x5b, 0xce, 0xfc, 0x76, 0xdd, 0x5a, 0x0f, 0x16, 0x53, 0x4a, 0x18, 0x5f, 0x1e, - 0x86, 0x30, 0xb1, 0x43, 0x5f, 0x29, 0xcd, 0xf5, 0xbd, 0x52, 0xfa, 0x0c, 0x14, 0xee, 0xf8, 0x8e, - 0xbd, 0x11, 0x5e, 0x3c, 0xd5, 0x43, 0xf1, 0x5a, 0x75, 0xfd, 0x3a, 0xa7, 0xd4, 0x14, 0x9c, 0xfa, - 0x9d, 0x15, 0xab, 0x1d, 0xf4, 0x5e, 0xcf, 0x7c, 0xed, 0x75, 0x01, 0x47, 0x4d, 0xc1, 0x5f, 0xbb, - 0xda, 0xa1, 0xda, 0xe7, 0x18, 0xbe, 0x76, 0xc5, 0x80, 0x28, 0x70, 0x64, 0x1e, 0x8a, 0xda, 0x65, - 0x29, 0x3d, 0xa8, 0xba, 0xa7, 0xb4, 0x6b, 0x13, 0x43, 0x1a, 0xae, 0x89, 0x49, 0xb7, 0x9c, 0xb4, - 0x3e, 0x57, 0x32, 0xea, 0xb0, 0x09, 0xdf, 0x9e, 0xd8, 0xa6, 0x15, 0x18, 0xb5, 0x94, 0x68, 0x8a, - 0x4f, 0xfe, 0x90, 0x29, 0x3e, 0x6c, 0x1c, 0xc6, 0x6e, 0x52, 0x8f, 0xdf, 0x16, 0xbf, 0x08, 0x63, - 0x3b, 0xe2, 0x67, 0x32, 0x39, 0x50, 0x52, 0xa0, 0xc2, 0xb3, 0xde, 0xd8, 0xea, 0x5a, 0xed, 0xfa, - 0x52, 0xb8, 0x34, 0x74, 0x6f, 0x54, 0x14, 0x02, 0x43, 0x1a, 0x56, 0xa0, 0xc9, 0x14, 0xd5, 0x4e, - 0xc7, 0x0a, 0x92, 0xd7, 0xad, 0x56, 0x15, 0x02, 0x43, 0x1a, 0xf2, 0x14, 0x8c, 0x36, 0xad, 0x60, - 0xd3, 0x6c, 0x26, 0xe3, 0x0a, 0xab, 0x1c, 0x8a, 0x12, 0xcb, 0x9d, 0xe2, 0x56, 0xb0, 0xe9, 0x51, - 0xee, 0x64, 0xeb, 0xb9, 0x6e, 0xb0, 0x1a, 0xc1, 0x61, 0x8c, 0x92, 0x57, 0xc9, 0x91, 0x2d, 0x93, - 0xce, 0xea, 0xb0, 0x4a, 0x0a, 0x81, 0x21, 0x0d, 0x9b, 0x55, 0x35, 0xa7, 0xe3, 0x5a, 0x6d, 0x99, - 0x28, 0x12, 0x99, 0x55, 0x8b, 0x12, 0x8e, 0x9a, 0x82, 0x51, 0xb3, 0x7d, 0xa1, 0xe1, 0x78, 0x9d, - 0xe4, 0xcb, 0x41, 0x1b, 0x12, 0x8e, 0x9a, 0xc2, 0xb8, 0x09, 0x13, 0x62, 0x7d, 0x2c, 0xb6, 0x4d, - 0xab, 0xb3, 0xba, 0x48, 0x96, 0x7b, 0x12, 0x8f, 0x2e, 0xa6, 0x24, 0x1e, 0x9d, 0x8e, 0x15, 0x4a, - 0x49, 0x40, 0xfa, 0xf6, 0x10, 0x14, 0x1e, 0xe2, 0x43, 0x6a, 0xb5, 0xd8, 0x43, 0x6a, 0xc7, 0xf0, - 0xea, 0x56, 0xda, 0x23, 0x6a, 0xdb, 0x89, 0x47, 0xd4, 0x16, 0x07, 0xcc, 0xb1, 0xbb, 0xe7, 0x03, - 0x6a, 0x3f, 0xce, 0x81, 0xbe, 0xb6, 0xc1, 0x37, 0x84, 0x8a, 0x65, 0xf3, 0x50, 0xe3, 0x83, 0xef, - 0x4c, 0x27, 0xd6, 0x99, 0x6b, 0x03, 0xb5, 0x32, 0x5a, 0xf5, 0xbe, 0x2f, 0x38, 0x7e, 0x9c, 0x83, - 0x72, 0x5a, 0x81, 0x87, 0xf0, 0x68, 0x9c, 0x1d, 0x7f, 0x34, 0xee, 0xca, 0xb1, 0x35, 0xb6, 0xcf, - 0xe3, 0x71, 0x3f, 0xe8, 0xd3, 0x54, 0xfe, 0x6c, 0xdb, 0xdb, 0xea, 0x40, 0xc8, 0x0d, 0x10, 0x77, - 0x10, 0x5c, 0xd3, 0x0f, 0x93, 0xb7, 0x61, 0xd4, 0xe7, 0x91, 0x3f, 0x39, 0xb6, 0x2f, 0x66, 0x3c, - 0x19, 0x18, 0x0b, 0xe9, 0x0d, 0xe2, 0xbf, 0x51, 0xb2, 0x35, 0xbe, 0x97, 0x83, 0xf1, 0x87, 0xf8, - 0xe4, 0xdf, 0x56, 0x7c, 0xf4, 0x5e, 0x1a, 0x68, 0xf4, 0xfa, 0x8c, 0xd8, 0x37, 0x1e, 0x83, 0xd8, - 0x53, 0x7b, 0xc4, 0x86, 0xa2, 0xd2, 0xbd, 0x54, 0xb6, 0xed, 0x4b, 0x03, 0x39, 0x5c, 0xc3, 0xed, - 0x5f, 0x41, 0x7c, 0x0c, 0x45, 0x24, 0x82, 0xa8, 0x43, 0x87, 0x0a, 0xa2, 0x3e, 0x74, 0x67, 0x7e, - 0xba, 0x2d, 0x3b, 0xf2, 0x40, 0x6c, 0xd9, 0x73, 0xc7, 0x6e, 0xcb, 0x3e, 0xfe, 0xe0, 0x6d, 0xd9, - 0x88, 0xb3, 0x2f, 0x3f, 0x80, 0xb3, 0xef, 0x7d, 0x38, 0xb5, 0x13, 0x1e, 0xbd, 0x7a, 0xbe, 0xc8, - 0x77, 0xcc, 0x2e, 0xa6, 0x5a, 0xb0, 0x4c, 0x8d, 0xf0, 0x03, 0x6a, 0x07, 0x91, 0x43, 0x3b, 0xbc, - 0x1b, 0x78, 0x33, 0x85, 0x1d, 0xa6, 0x0a, 0x49, 0xba, 0x7a, 0xc6, 0x0e, 0xe1, 0xea, 0xf9, 0x66, - 0x0e, 0x4e, 0x9b, 0x69, 0x6f, 0x76, 0xcb, 0x18, 0xc1, 0x6b, 0x03, 0xf9, 0xea, 0x62, 0x1c, 0xa5, - 0xe3, 0x2c, 0x0d, 0x85, 0xe9, 0x75, 0x20, 0x4f, 0x86, 0xee, 0x5e, 0x11, 0x91, 0x4f, 0x77, 0xd4, - 0x7e, 0x3d, 0x19, 0x66, 0x01, 0xde, 0xdb, 0xd5, 0x81, 0xd5, 0x8c, 0x63, 0x08, 0xb5, 0x94, 0x06, - 0x08, 0xb5, 0x24, 0xfc, 0x70, 0xe3, 0xc7, 0xe4, 0x87, 0xb3, 0x61, 0xca, 0xea, 0x98, 0x4d, 0xba, - 0xd1, 0x6d, 0xb7, 0x45, 0xde, 0x9d, 0x5f, 0x9e, 0xe0, 0xbc, 0x53, 0x93, 0xbf, 0xae, 0x39, 0x35, - 0xb3, 0x9d, 0x7c, 0x19, 0x52, 0x27, 0xcd, 0x5e, 0x49, 0x70, 0xc2, 0x1e, 0xde, 0x6c, 0x5a, 0xf2, - 0xfb, 0x5f, 0x34, 0x60, 0xbd, 0xcd, 0xa3, 0x10, 0xf2, 0x5f, 0x15, 0x2e, 0x87, 0x60, 0x8c, 0xd2, - 0x90, 0xab, 0x50, 0xac, 0xdb, 0xbe, 0xcc, 0x6f, 0x9d, 0xe4, 0xbb, 0xd4, 0xa7, 0xd8, 0xde, 0xb6, - 0x74, 0xbd, 0xaa, 0x33, 0x5b, 0xcf, 0xa5, 0x5c, 0x20, 0xd4, 0x78, 0x0c, 0xcb, 0x93, 0x35, 0xce, - 0x4c, 0x3e, 0x1f, 0x24, 0xc2, 0x06, 0x17, 0xfa, 0xb8, 0x92, 0x96, 0xae, 0xab, 0xd7, 0x8e, 0x26, - 0xa4, 0x38, 0xf9, 0x28, 0x50, 0xc8, 0x21, 0xf2, 0xf4, 0xdd, 0xf4, 0x3d, 0x9f, 0xbe, 0xbb, 0x01, - 0x67, 0x83, 0xa0, 0x1d, 0x8b, 0x46, 0xcb, 0xbb, 0xa3, 0xfc, 0x22, 0x71, 0x5e, 0xbc, 0x96, 0xba, - 0xb9, 0x79, 0x2d, 0x8d, 0x04, 0xfb, 0x95, 0xe5, 0x61, 0xd9, 0xa0, 0xad, 0x5d, 0xc9, 0xe7, 0x07, - 0x09, 0xcb, 0x86, 0x61, 0x7f, 0x19, 0x96, 0x0d, 0x01, 0x18, 0x95, 0x42, 0xd6, 0xfb, 0x39, 0xd1, - 0x4f, 0xf2, 0x3d, 0xe6, 0xe8, 0x2e, 0xf1, 0xa8, 0x17, 0xf6, 0xd4, 0x3d, 0xbd, 0xb0, 0x3d, 0x5e, - 0xe3, 0xd3, 0x47, 0xf0, 0x1a, 0xdf, 0xe6, 0x97, 0x43, 0x57, 0x17, 0xa5, 0xc7, 0x3d, 0x9b, 0xc6, - 0xc6, 0x2f, 0x71, 0x88, 0xcc, 0x09, 0xfe, 0x13, 0x05, 0x4f, 0xb2, 0x01, 0xa7, 0x5c, 0xa7, 0xde, - 0xe3, 0x74, 0xe6, 0x2e, 0xf6, 0xc8, 0xe5, 0xee, 0x8d, 0x14, 0x1a, 0x4c, 0x2d, 0xc9, 0x37, 0xf0, - 0x10, 0xce, 0xef, 0x12, 0xe7, 0xe5, 0x06, 0x1e, 0x82, 0x31, 0x4a, 0x93, 0xf4, 0xc1, 0x3e, 0xfa, - 0xc0, 0x7c, 0xb0, 0x33, 0x0f, 0xc1, 0x07, 0xfb, 0xd8, 0xa1, 0x7d, 0xb0, 0xff, 0x17, 0x4e, 0xba, - 0x4e, 0x7d, 0xc9, 0xf2, 0xbd, 0x2e, 0xff, 0xcf, 0x98, 0x4a, 0xb7, 0xde, 0xa4, 0x01, 0x77, 0xe2, - 0x96, 0x2e, 0x5d, 0x8a, 0x56, 0x52, 0xfc, 0x27, 0xd7, 0x9c, 0xfc, 0x4f, 0x2e, 0xbe, 0xc8, 0x13, - 0xa5, 0xb8, 0xdd, 0xc3, 0x53, 0x47, 0x52, 0x90, 0x98, 0x26, 0x27, 0xea, 0x02, 0xbe, 0xf0, 0xc0, - 0x5c, 0xc0, 0xaf, 0x42, 0xc1, 0x6f, 0x75, 0x83, 0xba, 0xb3, 0x6b, 0x73, 0x6f, 0x7e, 0x51, 0xbf, - 0x35, 0x5d, 0xa8, 0x4a, 0xf8, 0xdd, 0xfd, 0xd9, 0x29, 0xf5, 0x3b, 0x62, 0xe5, 0x4b, 0x08, 0xf9, - 0x8d, 0x3e, 0x19, 0x95, 0xc6, 0x31, 0x67, 0x54, 0x9e, 0x3d, 0x52, 0x36, 0x65, 0x9a, 0x6b, 0xfb, - 0x89, 0x9f, 0x05, 0xd7, 0xf6, 0xaf, 0xe4, 0x60, 0x62, 0x27, 0xea, 0x38, 0x91, 0x1e, 0xf7, 0x6c, - 0x81, 0xba, 0x98, 0x0b, 0xa6, 0x62, 0xb0, 0xbd, 0x2a, 0x06, 0xba, 0x9b, 0x04, 0x60, 0x5c, 0x78, - 0x6f, 0xd8, 0xf0, 0xc9, 0x87, 0x17, 0x36, 0x1c, 0xdc, 0xad, 0xfe, 0x87, 0x53, 0x70, 0x22, 0xf1, - 0x06, 0xb5, 0x7e, 0x7e, 0x22, 0x77, 0xd8, 0xe7, 0x27, 0x62, 0xef, 0x43, 0x0c, 0x3d, 0xd0, 0xf7, - 0x21, 0x86, 0x1f, 0xce, 0xfb, 0x10, 0x53, 0x0f, 0xe2, 0x7d, 0x88, 0xe9, 0x23, 0xbd, 0x0f, 0x11, - 0x79, 0x9f, 0x63, 0xe4, 0x3e, 0xef, 0x73, 0x2c, 0xc0, 0xa4, 0xca, 0x72, 0xa3, 0xf2, 0x7d, 0x00, - 0xe1, 0x48, 0xd5, 0x57, 0x3a, 0x16, 0xe3, 0x68, 0x4c, 0xd2, 0x93, 0xff, 0x03, 0x79, 0x9b, 0x17, - 0x1c, 0x1d, 0xe0, 0x6d, 0xa9, 0xf8, 0x44, 0xe2, 0x6a, 0xb9, 0x7c, 0xde, 0x49, 0x25, 0x40, 0xe4, - 0x39, 0xec, 0xae, 0xfa, 0x81, 0x42, 0x28, 0x79, 0x13, 0xca, 0x4e, 0xa3, 0xd1, 0x76, 0xcc, 0x7a, - 0xf8, 0x86, 0x85, 0xf2, 0xed, 0x8a, 0x84, 0xdd, 0x0b, 0x92, 0x41, 0x79, 0xbd, 0x0f, 0x1d, 0xf6, - 0xe5, 0xc0, 0xac, 0xa7, 0xc9, 0xf8, 0x9b, 0x2f, 0x7e, 0xb9, 0xc8, 0x9b, 0xf9, 0xbf, 0x8e, 0xa3, - 0x99, 0xf1, 0x07, 0x66, 0x64, 0x83, 0xc3, 0xcb, 0x34, 0x71, 0x2c, 0x26, 0x6b, 0x42, 0x3c, 0x38, - 0xe3, 0xa6, 0xd9, 0x96, 0xbe, 0x4c, 0x43, 0xbb, 0x97, 0x85, 0x7b, 0x5e, 0x4a, 0x39, 0x93, 0x6a, - 0x9d, 0xfa, 0xd8, 0x87, 0x73, 0xf4, 0x75, 0x8b, 0xc2, 0x03, 0x7b, 0xdd, 0x22, 0xfe, 0x1a, 0xfc, - 0xc4, 0xc3, 0x78, 0x0d, 0x9e, 0xfc, 0x34, 0xf5, 0x51, 0x15, 0x61, 0x92, 0xbd, 0x71, 0x1c, 0x83, - 0xfd, 0x33, 0xf7, 0xb0, 0xca, 0x6f, 0xe7, 0x60, 0x46, 0x4c, 0xa9, 0xb4, 0xbf, 0xfa, 0x91, 0xc9, - 0x64, 0xc7, 0xe0, 0xca, 0xe7, 0xe1, 0xc1, 0x6a, 0x4c, 0x10, 0xf7, 0x3d, 0xdf, 0x43, 0x38, 0xf9, - 0x6a, 0x8a, 0x0a, 0x31, 0x39, 0x80, 0xc3, 0x22, 0xfd, 0xa9, 0x8e, 0x93, 0x07, 0x87, 0xd0, 0x1a, - 0x66, 0xf6, 0xc4, 0x4b, 0x5c, 0x7d, 0xdf, 0x81, 0xbb, 0x11, 0x3d, 0x22, 0xb3, 0x3e, 0xc5, 0x16, - 0xee, 0x3d, 0xd1, 0x37, 0xe8, 0xbe, 0x98, 0x83, 0x53, 0x69, 0x9b, 0x44, 0x4a, 0x2d, 0xaa, 0xf1, - 0x5a, 0x0c, 0xe6, 0x11, 0x8d, 0xd6, 0xe1, 0x78, 0x5e, 0x27, 0xf9, 0xf5, 0xd1, 0x88, 0x17, 0x37, - 0xa0, 0xee, 0x2f, 0xd2, 0xa7, 0x33, 0xa5, 0x4f, 0xc7, 0xfe, 0x3b, 0x21, 0xff, 0x10, 0xff, 0x3b, - 0x61, 0x34, 0xc3, 0x7f, 0x27, 0x8c, 0x3d, 0xcc, 0xff, 0x4e, 0x28, 0x1c, 0xf2, 0xbf, 0x13, 0x8a, - 0x3f, 0x33, 0xff, 0x9d, 0x60, 0x7c, 0x94, 0x83, 0xa9, 0xff, 0xea, 0x7f, 0x0e, 0xf7, 0xa3, 0x48, - 0x18, 0xf5, 0x21, 0xfe, 0x2b, 0xdc, 0x9d, 0x78, 0x60, 0x6a, 0xf9, 0x58, 0x1a, 0xd9, 0x27, 0x40, - 0xf5, 0x0e, 0xa4, 0x99, 0xc6, 0x87, 0xbb, 0xd7, 0x17, 0xcb, 0xf7, 0x19, 0x3a, 0x74, 0xbe, 0xcf, - 0x7f, 0xa4, 0xf4, 0x2a, 0x3f, 0x37, 0xdf, 0x7f, 0x50, 0xff, 0x82, 0x75, 0x2a, 0xed, 0x5f, 0xb0, - 0x12, 0xff, 0x7a, 0x95, 0xfc, 0x17, 0xa4, 0xa1, 0x07, 0xf8, 0x2f, 0x48, 0x13, 0x50, 0x8a, 0xfe, - 0x7b, 0xf6, 0xdc, 0x77, 0x3e, 0x3a, 0xff, 0xc8, 0xf7, 0x3e, 0x3a, 0xff, 0xc8, 0xf7, 0x3f, 0x3a, - 0xff, 0xc8, 0x07, 0x07, 0xe7, 0x73, 0xdf, 0x39, 0x38, 0x9f, 0xfb, 0xde, 0xc1, 0xf9, 0xdc, 0xf7, - 0x0f, 0xce, 0xe7, 0x7e, 0x74, 0x70, 0x3e, 0xf7, 0x6b, 0xff, 0x78, 0xfe, 0x91, 0x37, 0x0a, 0xaa, - 0x6d, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0x04, 0x35, 0xfa, 0xb9, 0xa2, 0x7e, 0x00, 0x00, + 0x6e, 0x09, 0x56, 0xa3, 0x48, 0x8c, 0xd3, 0x92, 0x65, 0x98, 0x74, 0x3d, 0xcb, 0xf1, 0xac, 0x60, + 0x6f, 0xbe, 0x65, 0xfa, 0x3e, 0x67, 0x20, 0xf2, 0xa2, 0x74, 0x38, 0x61, 0x3d, 0x49, 0x80, 0xdd, + 0x65, 0xc8, 0x53, 0x50, 0x50, 0xc0, 0xf2, 0x39, 0xae, 0xde, 0x8d, 0x8a, 0x9c, 0x2a, 0x01, 0x43, + 0x8d, 0xed, 0x71, 0x05, 0xf3, 0x7c, 0x96, 0x2b, 0x98, 0xa4, 0x0e, 0xe7, 0xcd, 0x4e, 0xe0, 0xf0, + 0xdb, 0x07, 0xf1, 0x22, 0x1b, 0xce, 0x36, 0xb5, 0xcb, 0x17, 0xf9, 0xf1, 0x76, 0xf1, 0x60, 0x7f, + 0xfa, 0xfc, 0xdc, 0x3d, 0xe8, 0xf0, 0x9e, 0x5c, 0x48, 0x1b, 0x0a, 0x54, 0x5e, 0x23, 0x2d, 0x7f, + 0xac, 0x8f, 0x73, 0x25, 0x7e, 0x17, 0x55, 0x05, 0xb9, 0x05, 0x0c, 0xb5, 0x08, 0xb2, 0x01, 0xa5, + 0xa6, 0xe3, 0x07, 0x73, 0x2d, 0xcb, 0xf4, 0xa9, 0x5f, 0x7e, 0x8c, 0xcf, 0x93, 0xd4, 0x23, 0xf1, + 0x8a, 0x22, 0x0b, 0xa7, 0xc9, 0x95, 0xb0, 0x24, 0x46, 0xd9, 0x10, 0xca, 0xbd, 0xcd, 0x1d, 0x3e, + 0x6a, 0x8e, 0x1d, 0xd0, 0x77, 0x82, 0xf2, 0x05, 0xde, 0x96, 0x27, 0xd3, 0x38, 0xaf, 0x3b, 0xf5, + 0x6a, 0x9c, 0x5a, 0x6c, 0x0c, 0x09, 0x20, 0x26, 0x79, 0x32, 0x93, 0xdf, 0x75, 0xea, 0x55, 0x97, + 0xd6, 0xd6, 0xcd, 0xa0, 0xd6, 0x2c, 0x4f, 0xc7, 0xbd, 0x26, 0xeb, 0x11, 0x1c, 0xc6, 0x28, 0x49, + 0x0d, 0x46, 0xda, 0x22, 0xd7, 0xba, 0xfc, 0x78, 0x1f, 0xea, 0xa3, 0xcc, 0xd7, 0x16, 0x87, 0x8f, + 0xfc, 0x40, 0xc5, 0x99, 0xfc, 0x76, 0x0e, 0xc6, 0x13, 0xe9, 0x40, 0xe5, 0x8f, 0xf7, 0x73, 0xe4, + 0xc5, 0x79, 0x55, 0x9e, 0xe4, 0x9d, 0x14, 0x07, 0xde, 0xed, 0x06, 0x61, 0xb2, 0x12, 0xa2, 0xf5, + 0xfc, 0xba, 0x43, 0xf9, 0x89, 0xbe, 0x5a, 0xcf, 0x79, 0xa8, 0xd6, 0xf3, 0x0f, 0x54, 0x9c, 0xc9, + 0x25, 0x18, 0x09, 0xac, 0x36, 0x75, 0x3a, 0x41, 0xf9, 0xc9, 0x78, 0x1c, 0x60, 0x43, 0x80, 0x51, + 0xe1, 0xa7, 0x5e, 0x86, 0xc9, 0x2e, 0x85, 0xf8, 0x48, 0xd9, 0xf8, 0x3f, 0x64, 0x06, 0x70, 0xc4, + 0x04, 0x39, 0x6e, 0xc3, 0x6d, 0x19, 0x26, 0xe5, 0x53, 0xc5, 0x4c, 0x5b, 0x6a, 0x75, 0xf4, 0x3b, + 0x64, 0x91, 0x40, 0x28, 0x26, 0x09, 0xb0, 0xbb, 0x0c, 0x9b, 0xb1, 0x35, 0xf1, 0x10, 0x95, 0xc8, + 0xfc, 0x1d, 0x8a, 0x3b, 0xa9, 0xe6, 0x23, 0x38, 0x8c, 0x51, 0x1a, 0x7f, 0x94, 0x83, 0xb1, 0xd8, + 0xc9, 0x7d, 0xec, 0x31, 0x8f, 0x25, 0x20, 0x6d, 0xcb, 0xf3, 0x1c, 0x4f, 0xa8, 0x3f, 0x2b, 0x6c, + 0x4f, 0xf2, 0xe5, 0x2d, 0x67, 0x7e, 0xbb, 0x6e, 0xa5, 0x0b, 0x8b, 0x29, 0x25, 0x8c, 0x2f, 0x0e, + 0x42, 0x98, 0xd8, 0xa1, 0xaf, 0x94, 0xe6, 0x7a, 0x5e, 0x29, 0x7d, 0x1a, 0x0a, 0x77, 0x7c, 0xc7, + 0x5e, 0x0f, 0x2f, 0x9e, 0xea, 0xa1, 0x78, 0xb5, 0xba, 0xb6, 0xca, 0x29, 0x35, 0x05, 0xa7, 0x7e, + 0x7b, 0xc9, 0x6a, 0x05, 0xdd, 0xd7, 0x33, 0x5f, 0x7d, 0x4d, 0xc0, 0x51, 0x53, 0xf0, 0xd7, 0xae, + 0x76, 0xa8, 0xf6, 0x39, 0x86, 0xaf, 0x5d, 0x31, 0x20, 0x0a, 0x1c, 0x99, 0x85, 0xa2, 0x76, 0x59, + 0x4a, 0x0f, 0xaa, 0xee, 0x29, 0xed, 0xda, 0xc4, 0x90, 0x86, 0x6b, 0x62, 0xd2, 0x2d, 0x27, 0xad, + 0xcf, 0xa5, 0x8c, 0x3a, 0x6c, 0xc2, 0xb7, 0x27, 0xb6, 0x69, 0x05, 0x46, 0x2d, 0x25, 0x9a, 0xe2, + 0x93, 0x3f, 0x64, 0x8a, 0x0f, 0x1b, 0x87, 0x91, 0x9b, 0xd4, 0xe3, 0xb7, 0xc5, 0x2f, 0xc1, 0xc8, + 0x8e, 0xf8, 0x99, 0x4c, 0x0e, 0x94, 0x14, 0xa8, 0xf0, 0xac, 0x37, 0x36, 0x3b, 0x56, 0xab, 0xbe, + 0x10, 0x2e, 0x0d, 0xdd, 0x1b, 0x15, 0x85, 0xc0, 0x90, 0x86, 0x15, 0x68, 0x30, 0x45, 0xb5, 0xdd, + 0xb6, 0x82, 0xe4, 0x75, 0xab, 0x65, 0x85, 0xc0, 0x90, 0x86, 0x3c, 0x09, 0xc3, 0x0d, 0x2b, 0xd8, + 0x30, 0x1b, 0xc9, 0xb8, 0xc2, 0x32, 0x87, 0xa2, 0xc4, 0x72, 0xa7, 0xb8, 0x15, 0x6c, 0x78, 0x94, + 0x3b, 0xd9, 0xba, 0xae, 0x1b, 0x2c, 0x47, 0x70, 0x18, 0xa3, 0xe4, 0x55, 0x72, 0x64, 0xcb, 0xa4, + 0xb3, 0x3a, 0xac, 0x92, 0x42, 0x60, 0x48, 0xc3, 0x66, 0x55, 0xcd, 0x69, 0xbb, 0x56, 0x4b, 0x26, + 0x8a, 0x44, 0x66, 0xd5, 0xbc, 0x84, 0xa3, 0xa6, 0x60, 0xd4, 0x6c, 0x5f, 0xd8, 0x72, 0xbc, 0x76, + 0xf2, 0xe5, 0xa0, 0x75, 0x09, 0x47, 0x4d, 0x61, 0xdc, 0x84, 0x31, 0xb1, 0x3e, 0xe6, 0x5b, 0xa6, + 0xd5, 0x5e, 0x9e, 0x27, 0x8b, 0x5d, 0x89, 0x47, 0x97, 0x52, 0x12, 0x8f, 0x4e, 0xc7, 0x0a, 0xa5, + 0x24, 0x20, 0x7d, 0x6b, 0x00, 0x0a, 0x0f, 0xf1, 0x21, 0xb5, 0x5a, 0xec, 0x21, 0xb5, 0x63, 0x78, + 0x75, 0x2b, 0xed, 0x11, 0xb5, 0xed, 0xc4, 0x23, 0x6a, 0xf3, 0x7d, 0xe6, 0xd8, 0xdd, 0xf3, 0x01, + 0xb5, 0x1f, 0xe5, 0x40, 0x5f, 0xdb, 0xe0, 0x1b, 0x42, 0xc5, 0xb2, 0x79, 0xa8, 0xf1, 0xc1, 0x77, + 0xa6, 0x13, 0xeb, 0xcc, 0x95, 0xbe, 0x5a, 0x19, 0xad, 0x7a, 0xcf, 0x17, 0x1c, 0x3f, 0xca, 0x41, + 0x39, 0xad, 0xc0, 0x43, 0x78, 0x34, 0xce, 0x8e, 0x3f, 0x1a, 0x77, 0xf5, 0xd8, 0x1a, 0xdb, 0xe3, + 0xf1, 0xb8, 0xef, 0xf7, 0x68, 0x2a, 0x7f, 0xb6, 0xed, 0x2d, 0x75, 0x20, 0xe4, 0xfa, 0x88, 0x3b, + 0x08, 0xae, 0xe9, 0x87, 0xc9, 0x5b, 0x30, 0xec, 0xf3, 0xc8, 0x9f, 0x1c, 0xdb, 0x17, 0x32, 0x9e, + 0x0c, 0x8c, 0x85, 0xf4, 0x06, 0xf1, 0xdf, 0x28, 0xd9, 0x1a, 0xdf, 0xcd, 0xc1, 0xe8, 0x43, 0x7c, + 0xf2, 0x6f, 0x33, 0x3e, 0x7a, 0x2f, 0xf6, 0x35, 0x7a, 0x3d, 0x46, 0xec, 0x6b, 0xe7, 0x20, 0xf6, + 0xd4, 0x1e, 0xb1, 0xa1, 0xa8, 0x74, 0x2f, 0x95, 0x6d, 0xfb, 0x62, 0x5f, 0x0e, 0xd7, 0x70, 0xfb, + 0x57, 0x10, 0x1f, 0x43, 0x11, 0x89, 0x20, 0xea, 0xc0, 0xa1, 0x82, 0xa8, 0x0f, 0xdd, 0x99, 0x9f, + 0x6e, 0xcb, 0x0e, 0x3d, 0x10, 0x5b, 0xf6, 0xfc, 0xb1, 0xdb, 0xb2, 0x8f, 0x3d, 0x78, 0x5b, 0x36, + 0xe2, 0xec, 0xcb, 0xf7, 0xe1, 0xec, 0x7b, 0x0f, 0x4e, 0xed, 0x84, 0x47, 0xaf, 0x9e, 0x2f, 0xf2, + 0x1d, 0xb3, 0x4b, 0xa9, 0x16, 0x2c, 0x53, 0x23, 0xfc, 0x80, 0xda, 0x41, 0xe4, 0xd0, 0x0e, 0xef, + 0x06, 0xde, 0x4c, 0x61, 0x87, 0xa9, 0x42, 0x92, 0xae, 0x9e, 0x91, 0x43, 0xb8, 0x7a, 0xbe, 0xde, + 0xf3, 0x45, 0xf1, 0xc2, 0xb1, 0xbf, 0x28, 0xfe, 0xe8, 0x91, 0x5f, 0x13, 0x7f, 0x22, 0x74, 0xf7, + 0x8a, 0x88, 0x7c, 0xba, 0xa3, 0xf6, 0xab, 0xc9, 0x30, 0x0b, 0xf0, 0xde, 0xae, 0xf6, 0xad, 0x66, + 0x1c, 0x43, 0xa8, 0xa5, 0xd4, 0x47, 0xa8, 0x25, 0xe1, 0x87, 0x1b, 0x3d, 0x26, 0x3f, 0x9c, 0x0d, + 0x13, 0x56, 0xdb, 0x6c, 0xd0, 0xf5, 0x4e, 0xab, 0x25, 0xf2, 0xee, 0xfc, 0xf2, 0x18, 0xe7, 0x9d, + 0x9a, 0xfc, 0x75, 0xdd, 0xa9, 0x99, 0xad, 0xe4, 0xcb, 0x90, 0x3a, 0x69, 0xf6, 0x6a, 0x82, 0x13, + 0x76, 0xf1, 0x66, 0xd3, 0x92, 0xdf, 0xff, 0xa2, 0x01, 0xeb, 0x6d, 0x1e, 0x85, 0x90, 0xff, 0x43, + 0x71, 0x25, 0x04, 0x63, 0x94, 0x86, 0x5c, 0x83, 0x62, 0xdd, 0xf6, 0x65, 0x7e, 0xeb, 0x38, 0xdf, + 0xa5, 0x3e, 0xc1, 0xf6, 0xb6, 0x85, 0xd5, 0xaa, 0xce, 0x6c, 0x3d, 0x9f, 0x72, 0x81, 0x50, 0xe3, + 0x31, 0x2c, 0x4f, 0x56, 0x38, 0x33, 0xf9, 0x7c, 0x90, 0x08, 0x1b, 0x5c, 0xec, 0xe1, 0x4a, 0x5a, + 0x58, 0x55, 0xaf, 0x1d, 0x8d, 0x49, 0x71, 0xf2, 0x51, 0xa0, 0x90, 0x43, 0xe4, 0xe9, 0xbb, 0xc9, + 0x7b, 0x3e, 0x7d, 0x77, 0x03, 0xce, 0x06, 0x41, 0x2b, 0x16, 0x8d, 0x96, 0x77, 0x47, 0xf9, 0x45, + 0xe2, 0xbc, 0x78, 0x2d, 0x75, 0x63, 0xe3, 0x7a, 0x1a, 0x09, 0xf6, 0x2a, 0xcb, 0xc3, 0xb2, 0x41, + 0x4b, 0xbb, 0x92, 0x2f, 0xf4, 0x13, 0x96, 0x0d, 0xc3, 0xfe, 0x32, 0x2c, 0x1b, 0x02, 0x30, 0x2a, + 0x85, 0xac, 0xf5, 0x72, 0xa2, 0x9f, 0xe4, 0x7b, 0xcc, 0xd1, 0x5d, 0xe2, 0x51, 0x2f, 0xec, 0xa9, + 0x7b, 0x7a, 0x61, 0xbb, 0xbc, 0xc6, 0xa7, 0x8f, 0xe0, 0x35, 0xbe, 0xcd, 0x2f, 0x87, 0x2e, 0xcf, + 0x4b, 0x8f, 0x7b, 0x36, 0x8d, 0x8d, 0x5f, 0xe2, 0x10, 0x99, 0x13, 0xfc, 0x27, 0x0a, 0x9e, 0x64, + 0x1d, 0x4e, 0xb9, 0x4e, 0xbd, 0xcb, 0xe9, 0xcc, 0x5d, 0xec, 0x91, 0xcb, 0xdd, 0xeb, 0x29, 0x34, + 0x98, 0x5a, 0x92, 0x6f, 0xe0, 0x21, 0x9c, 0xdf, 0x25, 0xce, 0xcb, 0x0d, 0x3c, 0x04, 0x63, 0x94, + 0x26, 0xe9, 0x83, 0x7d, 0xf4, 0x81, 0xf9, 0x60, 0xa7, 0x1e, 0x82, 0x0f, 0xf6, 0xdc, 0xa1, 0x7d, + 0xb0, 0xbf, 0x08, 0x27, 0x5d, 0xa7, 0xbe, 0x60, 0xf9, 0x5e, 0x87, 0xff, 0xcb, 0x4e, 0xa5, 0x53, + 0x6f, 0xd0, 0x80, 0x3b, 0x71, 0x4b, 0x97, 0x2f, 0x47, 0x2b, 0x29, 0xfe, 0xc5, 0x6c, 0x46, 0xfe, + 0x8b, 0x19, 0x5f, 0xe4, 0x89, 0x52, 0xdc, 0xee, 0xe1, 0xa9, 0x23, 0x29, 0x48, 0x4c, 0x93, 0x13, + 0x75, 0x01, 0x5f, 0x7c, 0x60, 0x2e, 0xe0, 0x57, 0xa0, 0xe0, 0x37, 0x3b, 0x41, 0xdd, 0xd9, 0xb5, + 0xb9, 0x37, 0xbf, 0xa8, 0xdf, 0x9a, 0x2e, 0x54, 0x25, 0xfc, 0xee, 0xfe, 0xf4, 0x84, 0xfa, 0x1d, + 0xb1, 0xf2, 0x25, 0x84, 0xfc, 0x56, 0x8f, 0x8c, 0x4a, 0xe3, 0x98, 0x33, 0x2a, 0xcf, 0x1e, 0x29, + 0x9b, 0x32, 0xcd, 0xb5, 0xfd, 0xf8, 0x4f, 0x83, 0x6b, 0xfb, 0xd7, 0x72, 0x30, 0xb6, 0x13, 0x75, + 0x9c, 0x48, 0x8f, 0x7b, 0xb6, 0x40, 0x5d, 0xcc, 0x05, 0x53, 0x31, 0xd8, 0x5e, 0x15, 0x03, 0xdd, + 0x4d, 0x02, 0x30, 0x2e, 0xbc, 0x3b, 0x6c, 0xf8, 0xc4, 0xc3, 0x0b, 0x1b, 0xf6, 0xef, 0x56, 0xff, + 0xfb, 0x49, 0x38, 0x91, 0x78, 0x83, 0x5a, 0x3f, 0x3f, 0x91, 0x3b, 0xec, 0xf3, 0x13, 0xb1, 0xf7, + 0x21, 0x06, 0x1e, 0xe8, 0xfb, 0x10, 0x83, 0x0f, 0xe7, 0x7d, 0x88, 0x89, 0x07, 0xf1, 0x3e, 0xc4, + 0xe4, 0x91, 0xde, 0x87, 0x88, 0xbc, 0xcf, 0x31, 0x74, 0x9f, 0xf7, 0x39, 0xe6, 0x60, 0x5c, 0x65, + 0xb9, 0x51, 0xf9, 0x3e, 0x80, 0x70, 0xa4, 0xea, 0x2b, 0x1d, 0xf3, 0x71, 0x34, 0x26, 0xe9, 0xc9, + 0x2f, 0x40, 0xde, 0xe6, 0x05, 0x87, 0xfb, 0x78, 0x5b, 0x2a, 0x3e, 0x91, 0xb8, 0x5a, 0x2e, 0x9f, + 0x77, 0x52, 0x09, 0x10, 0x79, 0x0e, 0xbb, 0xab, 0x7e, 0xa0, 0x10, 0x4a, 0xde, 0x80, 0xb2, 0xb3, + 0xb5, 0xd5, 0x72, 0xcc, 0x7a, 0xf8, 0x86, 0x85, 0xf2, 0xed, 0x8a, 0x84, 0xdd, 0x8b, 0x92, 0x41, + 0x79, 0xad, 0x07, 0x1d, 0xf6, 0xe4, 0xc0, 0xac, 0xa7, 0xf1, 0xf8, 0x9b, 0x2f, 0x7e, 0xb9, 0xc8, + 0x9b, 0xf9, 0xff, 0x8e, 0xa3, 0x99, 0xf1, 0x07, 0x66, 0x64, 0x83, 0xc3, 0xcb, 0x34, 0x71, 0x2c, + 0x26, 0x6b, 0x42, 0x3c, 0x38, 0xe3, 0xa6, 0xd9, 0x96, 0xbe, 0x4c, 0x43, 0xbb, 0x97, 0x85, 0x7b, + 0x41, 0x4a, 0x39, 0x93, 0x6a, 0x9d, 0xfa, 0xd8, 0x83, 0x73, 0xf4, 0x75, 0x8b, 0xc2, 0x03, 0x7b, + 0xdd, 0x22, 0xfe, 0x1a, 0xfc, 0xd8, 0xc3, 0x78, 0x0d, 0x9e, 0xfc, 0x24, 0xf5, 0x51, 0x15, 0x61, + 0x92, 0xbd, 0x7e, 0x1c, 0x83, 0xfd, 0x53, 0xf7, 0xb0, 0xca, 0xef, 0xe6, 0x60, 0x4a, 0x4c, 0xa9, + 0xb4, 0xbf, 0xfa, 0x91, 0xc9, 0x64, 0xc7, 0xe0, 0xca, 0xe7, 0xe1, 0xc1, 0x6a, 0x4c, 0x10, 0xf7, + 0x3d, 0xdf, 0x43, 0x38, 0xf9, 0x72, 0x8a, 0x0a, 0x31, 0xde, 0x87, 0xc3, 0x22, 0xfd, 0xa9, 0x8e, + 0x93, 0x07, 0x87, 0xd1, 0x1a, 0xfe, 0xb0, 0xa7, 0x0b, 0x85, 0xf0, 0x1a, 0xad, 0x1f, 0x9f, 0x0b, + 0x25, 0xfa, 0x84, 0xc8, 0x51, 0x1c, 0x29, 0x53, 0x7b, 0xe2, 0xb5, 0xb0, 0x9e, 0x6f, 0xd5, 0xdd, + 0x88, 0x1e, 0xe3, 0x59, 0x9f, 0x8b, 0x0b, 0xf7, 0xc7, 0xe8, 0x3b, 0x79, 0x9f, 0xcf, 0xc1, 0xa9, + 0xb4, 0x8d, 0x2c, 0xa5, 0x16, 0xd5, 0x78, 0x2d, 0xfa, 0xf3, 0xda, 0x46, 0xeb, 0x70, 0x3c, 0x2f, + 0xa8, 0xfc, 0xe6, 0x70, 0xc4, 0xd3, 0x1c, 0x50, 0xf7, 0xe7, 0x29, 0xde, 0x99, 0x52, 0xbc, 0x63, + 0xff, 0xef, 0x90, 0x7f, 0x88, 0xff, 0xef, 0x30, 0x9c, 0xe1, 0xff, 0x1d, 0x46, 0x1e, 0xe6, 0xff, + 0x3b, 0x14, 0x0e, 0xf9, 0xff, 0x0e, 0xc5, 0x9f, 0x9a, 0xff, 0x77, 0x30, 0x3e, 0xcc, 0xc1, 0xc4, + 0xff, 0xf4, 0x3f, 0xb0, 0xfb, 0x61, 0x24, 0xd4, 0xfb, 0x10, 0xff, 0xb9, 0xee, 0x4e, 0x3c, 0x78, + 0xb6, 0x78, 0x2c, 0x8d, 0xec, 0x11, 0x44, 0x7b, 0x1b, 0xd2, 0xcc, 0xf7, 0xc3, 0xdd, 0x3d, 0x8c, + 0xe5, 0x24, 0x0d, 0x1c, 0x3a, 0x27, 0xe9, 0xbf, 0x52, 0x7a, 0x95, 0x9f, 0xed, 0xef, 0x3d, 0xa8, + 0x7f, 0xea, 0x3a, 0x95, 0xf6, 0x4f, 0x5d, 0x89, 0x7f, 0xe6, 0x4a, 0xfe, 0x53, 0xd3, 0xc0, 0x03, + 0xfc, 0xa7, 0xa6, 0x31, 0x28, 0x45, 0xff, 0x13, 0x7d, 0xe6, 0xdb, 0x1f, 0x5e, 0x78, 0xe4, 0xbb, + 0x1f, 0x5e, 0x78, 0xe4, 0x7b, 0x1f, 0x5e, 0x78, 0xe4, 0xfd, 0x83, 0x0b, 0xb9, 0x6f, 0x1f, 0x5c, + 0xc8, 0x7d, 0xf7, 0xe0, 0x42, 0xee, 0x7b, 0x07, 0x17, 0x72, 0x3f, 0x3c, 0xb8, 0x90, 0xfb, 0x8d, + 0x7f, 0xbe, 0xf0, 0xc8, 0xeb, 0x05, 0xd5, 0xb6, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x93, + 0x85, 0x41, 0x78, 0x80, 0x00, 0x00, } func (m *Amount) Marshal() (dAtA []byte, err error) { @@ -3544,6 +3578,52 @@ func (m *ArtifactRepositoryRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ArtifactRepositoryRefStatus) 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 *ArtifactRepositoryRefStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ArtifactRepositoryRefStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i-- + if m.Default { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + i -= len(m.Namespace) + copy(dAtA[i:], m.Namespace) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Namespace))) + i-- + dAtA[i] = 0x12 + { + size, err := m.ArtifactRepositoryRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ArtifactoryArtifact) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8241,6 +8321,20 @@ func (m *WorkflowStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ArtifactRepositoryRef != nil { + { + size, err := m.ArtifactRepositoryRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } i -= len(m.Progress) copy(dAtA[i:], m.Progress) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Progress))) @@ -8893,6 +8987,20 @@ func (m *ArtifactRepositoryRef) Size() (n int) { return n } +func (m *ArtifactRepositoryRefStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ArtifactRepositoryRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + func (m *ArtifactoryArtifact) Size() (n int) { if m == nil { return 0 @@ -10660,6 +10768,10 @@ func (m *WorkflowStatus) Size() (n int) { n += 2 + sovGenerated(uint64(m.EstimatedDuration)) l = len(m.Progress) n += 2 + l + sovGenerated(uint64(l)) + if m.ArtifactRepositoryRef != nil { + l = m.ArtifactRepositoryRef.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -10854,17 +10966,6 @@ func (this *ArtifactLocation) String() string { }, "") return s } -func (this *ArtifactRepositoryRef) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ArtifactRepositoryRef{`, - `ConfigMap:` + fmt.Sprintf("%v", this.ConfigMap) + `,`, - `Key:` + fmt.Sprintf("%v", this.Key) + `,`, - `}`, - }, "") - return s -} func (this *ArtifactoryArtifact) String() string { if this == nil { return "nil" @@ -12056,7 +12157,7 @@ func (this *WorkflowSpec) String() string { `Volumes:` + repeatedStringForVolumes + `,`, `VolumeClaimTemplates:` + repeatedStringForVolumeClaimTemplates + `,`, `Parallelism:` + valueToStringGenerated(this.Parallelism) + `,`, - `ArtifactRepositoryRef:` + strings.Replace(this.ArtifactRepositoryRef.String(), "ArtifactRepositoryRef", "ArtifactRepositoryRef", 1) + `,`, + `ArtifactRepositoryRef:` + strings.Replace(fmt.Sprintf("%v", this.ArtifactRepositoryRef), "ArtifactRepositoryRef", "ArtifactRepositoryRef", 1) + `,`, `Suspend:` + valueToStringGenerated(this.Suspend) + `,`, `NodeSelector:` + mapStringForNodeSelector + `,`, `Affinity:` + strings.Replace(fmt.Sprintf("%v", this.Affinity), "Affinity", "v1.Affinity", 1) + `,`, @@ -12151,6 +12252,7 @@ func (this *WorkflowStatus) String() string { `Synchronization:` + strings.Replace(this.Synchronization.String(), "SynchronizationStatus", "SynchronizationStatus", 1) + `,`, `EstimatedDuration:` + fmt.Sprintf("%v", this.EstimatedDuration) + `,`, `Progress:` + fmt.Sprintf("%v", this.Progress) + `,`, + `ArtifactRepositoryRef:` + strings.Replace(fmt.Sprintf("%v", this.ArtifactRepositoryRef), "ArtifactRepositoryRefStatus", "ArtifactRepositoryRefStatus", 1) + `,`, `}`, }, "") return s @@ -13433,6 +13535,144 @@ func (m *ArtifactRepositoryRef) Unmarshal(dAtA []byte) error { } return nil } +func (m *ArtifactRepositoryRefStatus) 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: ArtifactRepositoryRefStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ArtifactRepositoryRefStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ArtifactRepositoryRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ArtifactRepositoryRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", 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.Namespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Default", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Default = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ArtifactoryArtifact) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -28958,6 +29198,42 @@ func (m *WorkflowStatus) Unmarshal(dAtA []byte) error { } m.Progress = Progress(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ArtifactRepositoryRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ArtifactRepositoryRef == nil { + m.ArtifactRepositoryRef = &ArtifactRepositoryRefStatus{} + } + if err := m.ArtifactRepositoryRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 105ae6e63fdb..d8a427ebed06 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -111,12 +111,26 @@ message ArtifactLocation { optional GCSArtifact gcs = 9; } +// +protobuf.options.(gogoproto.goproto_stringer)=false message ArtifactRepositoryRef { + // The name of the config map. Defaults to "artifact-repositories". optional string configMap = 1; + // The config map key. Defaults to the value of the "workflows.argoproj.io/default-artifact-repository" annotation. optional string key = 2; } +// +protobuf.options.(gogoproto.goproto_stringer)=false +message ArtifactRepositoryRefStatus { + optional ArtifactRepositoryRef artifactRepositoryRef = 1; + + // The namespace of the config map. Defaults to the workflow's namespace, or the controller's namespace (if found). + optional string namespace = 2; + + // If this ref represents the default artifact repository, rather than a config map. + optional bool default = 3; +} + // ArtifactoryArtifact is the location of an artifactory artifact message ArtifactoryArtifact { // URL of the artifact @@ -1497,6 +1511,9 @@ message WorkflowStatus { // Synchronization stores the status of synchronization locks optional SynchronizationStatus synchronization = 15; + + // ArtifactRepositoryRef is used to cache the repository to use so we do not need to determine it everytime we reconcile. + optional ArtifactRepositoryRefStatus artifactRepositoryRef = 18; } // WorkflowStep is a reference to a template to execute in a series of step diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index a8a5a797ddb8..378d66bb32e3 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -19,6 +19,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Artifact": schema_pkg_apis_workflow_v1alpha1_Artifact(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactLocation": schema_pkg_apis_workflow_v1alpha1_ArtifactLocation(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef": schema_pkg_apis_workflow_v1alpha1_ArtifactRepositoryRef(ref), + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRefStatus": schema_pkg_apis_workflow_v1alpha1_ArtifactRepositoryRefStatus(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactoryArtifact": schema_pkg_apis_workflow_v1alpha1_ArtifactoryArtifact(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactoryAuth": schema_pkg_apis_workflow_v1alpha1_ArtifactoryAuth(ref), "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Backoff": schema_pkg_apis_workflow_v1alpha1_Backoff(ref), @@ -413,14 +414,56 @@ func schema_pkg_apis_workflow_v1alpha1_ArtifactRepositoryRef(ref common.Referenc Properties: map[string]spec.Schema{ "configMap": { SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", + Description: "The name of the config map. Defaults to \"artifact-repositories\".", + Type: []string{"string"}, + Format: "", }, }, "key": { SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", + Description: "The config map key. Defaults to the value of the \"workflows.argoproj.io/default-artifact-repository\" annotation.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_workflow_v1alpha1_ArtifactRepositoryRefStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "configMap": { + SchemaProps: spec.SchemaProps{ + Description: "The name of the config map. Defaults to \"artifact-repositories\".", + Type: []string{"string"}, + Format: "", + }, + }, + "key": { + SchemaProps: spec.SchemaProps{ + Description: "The config map key. Defaults to the value of the \"workflows.argoproj.io/default-artifact-repository\" annotation.", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "The namespace of the config map. Defaults to the workflow's namespace, or the controller's namespace (if found).", + Type: []string{"string"}, + Format: "", + }, + }, + "default": { + SchemaProps: spec.SchemaProps{ + Description: "If this ref represents the default artifact repository, rather than a config map.", + Type: []string{"boolean"}, + Format: "", }, }, }, @@ -4918,11 +4961,17 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowStatus(ref common.ReferenceCallba Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.SynchronizationStatus"), }, }, + "artifactRepositoryRef": { + SchemaProps: spec.SchemaProps{ + Description: "ArtifactRepositoryRef is used to cache the repository to use so we do not need to determine it everytime we reconcile.", + Ref: ref("github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRefStatus"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Condition", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.NodeStatus", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Outputs", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.SynchronizationStatus", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec", "k8s.io/api/core/v1.Volume", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRefStatus", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Condition", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.NodeStatus", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Outputs", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.SynchronizationStatus", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1.WorkflowSpec", "k8s.io/api/core/v1.Volume", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, } } diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go index 1d776b43997f..aa5c683e537f 100644 --- a/pkg/apis/workflow/v1alpha1/workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/workflow_types.go @@ -940,18 +940,56 @@ func (a *ArtifactLocation) GetKey() string { return "" } +// +protobuf.options.(gogoproto.goproto_stringer)=false type ArtifactRepositoryRef struct { + // The name of the config map. Defaults to "artifact-repositories". ConfigMap string `json:"configMap,omitempty" protobuf:"bytes,1,opt,name=configMap"` - Key string `json:"key,omitempty" protobuf:"bytes,2,opt,name=key"` + // The config map key. Defaults to the value of the "workflows.argoproj.io/default-artifact-repository" annotation. + Key string `json:"key,omitempty" protobuf:"bytes,2,opt,name=key"` } -func (r ArtifactRepositoryRef) GetConfigMap() string { - if r.ConfigMap == "" { - return "artifact-repositories" +func (r *ArtifactRepositoryRef) GetConfigMapOr(configMap string) string { + if r == nil || r.ConfigMap == "" { + return configMap } return r.ConfigMap } +func (r *ArtifactRepositoryRef) GetKeyOr(key string) string { + if r == nil || r.Key == "" { + return key + } + return r.Key +} + +func (r *ArtifactRepositoryRef) String() string { + if r == nil { + return "nil" + } + return fmt.Sprintf("%s#%s", r.ConfigMap, r.Key) +} + +var DefaultArtifactRepositoryRefStatus = &ArtifactRepositoryRefStatus{Default: true} + +// +protobuf.options.(gogoproto.goproto_stringer)=false +type ArtifactRepositoryRefStatus struct { + ArtifactRepositoryRef `json:",inline" protobuf:"bytes,1,opt,name=artifactRepositoryRef"` + // The namespace of the config map. Defaults to the workflow's namespace, or the controller's namespace (if found). + Namespace string `json:"namespace,omitempty" protobuf:"bytes,2,opt,name=namespace"` + // If this ref represents the default artifact repository, rather than a config map. + Default bool `json:"default,omitempty" protobuf:"varint,3,opt,name=default"` +} + +func (r *ArtifactRepositoryRefStatus) String() string { + if r == nil { + return "nil" + } + if r.Default { + return "default-artifact-repository" + } + return fmt.Sprintf("%s/%s", r.Namespace, r.ArtifactRepositoryRef.String()) +} + // Outputs hold parameters, artifacts, and results from a step type Outputs struct { // Parameters holds the list of output parameters produced by a step @@ -1217,6 +1255,9 @@ type WorkflowStatus struct { // Synchronization stores the status of synchronization locks Synchronization *SynchronizationStatus `json:"synchronization,omitempty" protobuf:"bytes,15,opt,name=synchronization"` + + // ArtifactRepositoryRef is used to cache the repository to use so we do not need to determine it everytime we reconcile. + ArtifactRepositoryRef *ArtifactRepositoryRefStatus `json:"artifactRepositoryRef,omitempty" protobuf:"bytes,18,opt,name=artifactRepositoryRef"` } func (ws *WorkflowStatus) IsOffloadNodeStatus() bool { diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 66b4774b635e..829c5adc2728 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -193,6 +193,23 @@ func (in *ArtifactRepositoryRef) DeepCopy() *ArtifactRepositoryRef { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArtifactRepositoryRefStatus) DeepCopyInto(out *ArtifactRepositoryRefStatus) { + *out = *in + out.ArtifactRepositoryRef = in.ArtifactRepositoryRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArtifactRepositoryRefStatus. +func (in *ArtifactRepositoryRefStatus) DeepCopy() *ArtifactRepositoryRefStatus { + if in == nil { + return nil + } + out := new(ArtifactRepositoryRefStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ArtifactoryArtifact) DeepCopyInto(out *ArtifactoryArtifact) { *out = *in @@ -2500,6 +2517,11 @@ func (in *WorkflowStatus) DeepCopyInto(out *WorkflowStatus) { *out = new(SynchronizationStatus) (*in).DeepCopyInto(*out) } + if in.ArtifactRepositoryRef != nil { + in, out := &in.ArtifactRepositoryRef, &out.ArtifactRepositoryRef + *out = new(ArtifactRepositoryRefStatus) + **out = **in + } return } diff --git a/server/apiserver/argoserver.go b/server/apiserver/argoserver.go index 2f5864d233eb..66412d02c244 100644 --- a/server/apiserver/argoserver.go +++ b/server/apiserver/argoserver.go @@ -46,6 +46,7 @@ import ( grpcutil "github.com/argoproj/argo/util/grpc" "github.com/argoproj/argo/util/instanceid" "github.com/argoproj/argo/util/json" + "github.com/argoproj/argo/workflow/artifactrepositories" "github.com/argoproj/argo/workflow/events" "github.com/argoproj/argo/workflow/hydrator" ) @@ -162,7 +163,8 @@ func (as *argoServer) Run(ctx context.Context, port int, browserOpenFunc func(st wfArchive = sqldb.NewWorkflowArchive(session, persistence.GetClusterName(), as.managedNamespace, instanceIDService) } eventRecorderManager := events.NewEventRecorderManager(as.kubeClientset) - artifactServer := artifacts.NewArtifactServer(as.gatekeeper, hydrator.New(offloadRepo), wfArchive, instanceIDService) + artifactRepositories := artifactrepositories.New(as.kubeClientset, as.managedNamespace, &config.ArtifactRepository) + artifactServer := artifacts.NewArtifactServer(as.gatekeeper, hydrator.New(offloadRepo), wfArchive, instanceIDService, artifactRepositories) eventServer := event.NewController(instanceIDService, eventRecorderManager, as.eventQueueSize, as.eventWorkerCount) grpcServer := as.newGRPCServer(instanceIDService, offloadRepo, wfArchive, eventServer, config.Links) httpServer := as.newHTTPServer(ctx, port, artifactServer) diff --git a/server/artifacts/artifact_server.go b/server/artifacts/artifact_server.go index 63888e0c7e15..f2f260731d7c 100644 --- a/server/artifacts/artifact_server.go +++ b/server/artifacts/artifact_server.go @@ -21,24 +21,26 @@ import ( wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/server/auth" "github.com/argoproj/argo/util/instanceid" + "github.com/argoproj/argo/workflow/artifactrepositories" artifact "github.com/argoproj/argo/workflow/artifacts" "github.com/argoproj/argo/workflow/hydrator" ) type ArtifactServer struct { - gatekeeper auth.Gatekeeper - hydrator hydrator.Interface - wfArchive sqldb.WorkflowArchive - instanceIDService instanceid.Service - artDriverFactory artifact.NewDriverFunc + gatekeeper auth.Gatekeeper + hydrator hydrator.Interface + wfArchive sqldb.WorkflowArchive + instanceIDService instanceid.Service + artDriverFactory artifact.NewDriverFunc + artifactRepositories artifactrepositories.Interface } -func NewArtifactServer(authN auth.Gatekeeper, hydrator hydrator.Interface, wfArchive sqldb.WorkflowArchive, instanceIDService instanceid.Service) *ArtifactServer { - return newArtifactServer(authN, hydrator, wfArchive, instanceIDService, artifact.NewDriver) +func NewArtifactServer(authN auth.Gatekeeper, hydrator hydrator.Interface, wfArchive sqldb.WorkflowArchive, instanceIDService instanceid.Service, artifactRepositories artifactrepositories.Interface) *ArtifactServer { + return newArtifactServer(authN, hydrator, wfArchive, instanceIDService, artifact.NewDriver, artifactRepositories) } -func newArtifactServer(authN auth.Gatekeeper, hydrator hydrator.Interface, wfArchive sqldb.WorkflowArchive, instanceIDService instanceid.Service, artDriverFactory artifact.NewDriverFunc) *ArtifactServer { - return &ArtifactServer{authN, hydrator, wfArchive, instanceIDService, artDriverFactory} +func newArtifactServer(authN auth.Gatekeeper, hydrator hydrator.Interface, wfArchive sqldb.WorkflowArchive, instanceIDService instanceid.Service, artDriverFactory artifact.NewDriverFunc, artifactRepositories artifactrepositories.Interface) *ArtifactServer { + return &ArtifactServer{authN, hydrator, wfArchive, instanceIDService, artDriverFactory, artifactRepositories} } func (a *ArtifactServer) GetArtifact(w http.ResponseWriter, r *http.Request) { diff --git a/server/artifacts/artifact_server_test.go b/server/artifacts/artifact_server_test.go index 3abcbc58eab8..0762662b164c 100644 --- a/server/artifacts/artifact_server_test.go +++ b/server/artifacts/artifact_server_test.go @@ -17,12 +17,14 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubefake "k8s.io/client-go/kubernetes/fake" - "github.com/argoproj/argo/persist/sqldb/mocks" + "github.com/argoproj/argo/config" + sqldbmocks "github.com/argoproj/argo/persist/sqldb/mocks" wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" fakewfv1 "github.com/argoproj/argo/pkg/client/clientset/versioned/fake" "github.com/argoproj/argo/server/auth" authmocks "github.com/argoproj/argo/server/auth/mocks" "github.com/argoproj/argo/util/instanceid" + armocks "github.com/argoproj/argo/workflow/artifactrepositories/mocks" "github.com/argoproj/argo/workflow/common" hydratorfake "github.com/argoproj/argo/workflow/hydrator/fake" ) @@ -94,14 +96,14 @@ func newServer() *ArtifactServer { ObjectMeta: metav1.ObjectMeta{Namespace: "my-ns", Name: "your-wf"}}) ctx := context.WithValue(context.WithValue(context.Background(), auth.KubeKey, kube), auth.WfKey, argo) gatekeeper.On("Context", mock.Anything).Return(ctx, nil) - a := &mocks.WorkflowArchive{} + a := &sqldbmocks.WorkflowArchive{} a.On("GetWorkflow", "my-uuid").Return(wf, nil) fakeArtifactDriverFactory := func(_ *wfv1.Artifact, _ resource.Interface) (artifact.ArtifactDriver, error) { return &fakeArtifactDriver{data: []byte("my-data")}, nil } - return newArtifactServer(gatekeeper, hydratorfake.Noop, a, instanceid.NewService(instanceId), fakeArtifactDriverFactory) + return newArtifactServer(gatekeeper, hydratorfake.Noop, a, instanceid.NewService(instanceId), fakeArtifactDriverFactory, armocks.DummyArtifactRepositories(&config.ArtifactRepository{})) } func TestArtifactServer_GetArtifact(t *testing.T) { diff --git a/test/e2e/smoke_test.go b/test/e2e/smoke_test.go index 925fa20ee387..0b47c1b66eec 100644 --- a/test/e2e/smoke_test.go +++ b/test/e2e/smoke_test.go @@ -3,6 +3,7 @@ package e2e import ( + "os" "testing" "time" @@ -49,9 +50,16 @@ func (s *SmokeSuite) TestRunAsNonRootWorkflow() { } func (s *SmokeSuite) TestArtifactPassing() { - if s.Config.ContainerRuntimeExecutor != common.ContainerRuntimeExecutorDocker { + + switch s.Config.ContainerRuntimeExecutor { + case common.ContainerRuntimeExecutorKubelet, common.ContainerRuntimeExecutorK8sAPI: s.T().Skip("non-docker not supported") + case common.ContainerRuntimeExecutorPNS: + if os.Getenv("CI") == "true" { + s.T().Skip("non-docker not supported") + } } + s.Given(). Workflow("@smoke/artifact-passing.yaml"). When(). diff --git a/test/e2e/testdata/artifact-repository-ref.yaml b/test/e2e/testdata/artifact-repository-ref.yaml index 23f3c4b70ba2..9502924562f9 100644 --- a/test/e2e/testdata/artifact-repository-ref.yaml +++ b/test/e2e/testdata/artifact-repository-ref.yaml @@ -7,7 +7,7 @@ metadata: spec: entrypoint: main artifactRepositoryRef: - key: minio + key: my-key templates: - name: main container: diff --git a/workflow/artifactrepositories/artifactrepositories.go b/workflow/artifactrepositories/artifactrepositories.go new file mode 100644 index 000000000000..7ddc04109d06 --- /dev/null +++ b/workflow/artifactrepositories/artifactrepositories.go @@ -0,0 +1,96 @@ +package artifactrepositories + +import ( + "fmt" + + log "github.com/sirupsen/logrus" + v1 "k8s.io/api/core/v1" + apierr "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/kubernetes" + "sigs.k8s.io/yaml" + + "github.com/argoproj/argo/config" + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" + errorsutil "github.com/argoproj/argo/util/errors" + "github.com/argoproj/argo/util/retry" +) + +//go:generate mockery -name Interface + +type Interface interface { + // Resolve Figures out the correct repository to for a workflow. + Resolve(ref *wfv1.ArtifactRepositoryRef, workflowNamespace string) (*wfv1.ArtifactRepositoryRefStatus, error) + // Get returns the referenced repository. May return nil (if no default artifact repository is configured). + Get(ref *wfv1.ArtifactRepositoryRefStatus) (*config.ArtifactRepository, error) +} + +func New(kubernetesInterface kubernetes.Interface, namespace string, defaultArtifactRepository *config.ArtifactRepository) Interface { + return &artifactRepositories{kubernetesInterface, namespace, defaultArtifactRepository} +} + +type artifactRepositories struct { + kubernetesInterface kubernetes.Interface + namespace string + defaultArtifactRepository *config.ArtifactRepository +} + +func (s *artifactRepositories) Resolve(ref *wfv1.ArtifactRepositoryRef, workflowNamespace string) (*wfv1.ArtifactRepositoryRefStatus, error) { + var refs []*wfv1.ArtifactRepositoryRefStatus + if ref != nil { + refs = []*wfv1.ArtifactRepositoryRefStatus{ + {Namespace: workflowNamespace, ArtifactRepositoryRef: wfv1.ArtifactRepositoryRef{ConfigMap: ref.ConfigMap, Key: ref.Key}}, + {Namespace: s.namespace, ArtifactRepositoryRef: wfv1.ArtifactRepositoryRef{ConfigMap: ref.ConfigMap, Key: ref.Key}}, + } + } else { + refs = []*wfv1.ArtifactRepositoryRefStatus{ + {Namespace: workflowNamespace}, + wfv1.DefaultArtifactRepositoryRefStatus, + } + } + for _, r := range refs { + resolvedRef, _, err := s.get(r) + if apierr.IsNotFound(err) { + continue + } + if err != nil { + return nil, fmt.Errorf(`error getting config map for artifact repository ref "%v": %w`, r, err) + } + log.WithField("artifactRepositoryRef", r).Info("resolved artifact repository") + return resolvedRef, nil + } + return nil, fmt.Errorf("failed to find any artifact repository - should never happen") +} + +func (s *artifactRepositories) Get(ref *wfv1.ArtifactRepositoryRefStatus) (*config.ArtifactRepository, error) { + _, repo, err := s.get(ref) + return repo, err +} + +func (s *artifactRepositories) get(ref *wfv1.ArtifactRepositoryRefStatus) (*wfv1.ArtifactRepositoryRefStatus, *config.ArtifactRepository, error) { + if ref.Default { + return ref, s.defaultArtifactRepository, nil + } + var cm *v1.ConfigMap + namespace := ref.Namespace + configMap := ref.GetConfigMapOr("artifact-repositories") + err := wait.ExponentialBackoff(retry.DefaultRetry, func() (bool, error) { + var err error + cm, err = s.kubernetesInterface.CoreV1().ConfigMaps(namespace).Get(configMap, metav1.GetOptions{}) + return err == nil || !errorsutil.IsTransientErr(err), err + }) + if err != nil { + return nil, nil, err + } + key := ref.GetKeyOr(cm.Annotations["workflows.argoproj.io/default-artifact-repository"]) + value, ok := cm.Data[key] + if !ok { + return nil, nil, fmt.Errorf(`config map missing key %s for artifact repository ref "%v"`, ref, key) + } + repo := &config.ArtifactRepository{} + // we need the fully filled out ref so we can store it in the workflow status and it will never change + // (even if the config map default annotation is changed) + // this means users can change the default + return &wfv1.ArtifactRepositoryRefStatus{Namespace: namespace, ArtifactRepositoryRef: wfv1.ArtifactRepositoryRef{ConfigMap: configMap, Key: key}}, repo, yaml.Unmarshal([]byte(value), repo) +} diff --git a/workflow/artifactrepositories/artifactrepositories_test.go b/workflow/artifactrepositories/artifactrepositories_test.go new file mode 100644 index 000000000000..ca63e5516ab4 --- /dev/null +++ b/workflow/artifactrepositories/artifactrepositories_test.go @@ -0,0 +1,96 @@ +package artifactrepositories + +import ( + "testing" + + "github.com/stretchr/testify/assert" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kubefake "k8s.io/client-go/kubernetes/fake" + + "github.com/argoproj/argo/config" + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" +) + +func TestArtifactRepositories(t *testing.T) { + defaultArtifactRepository := &config.ArtifactRepository{} + k := kubefake.NewSimpleClientset() + i := New(k, "my-ctrl-ns", defaultArtifactRepository) + t.Run("Explicit.WorkflowNamespace", func(t *testing.T) { + _, err := k.CoreV1().ConfigMaps("my-wf-ns").Create(&corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "artifact-repositories"}, + Data: map[string]string{"my-key": ""}, + }) + assert.NoError(t, err) + + ref, err := i.Resolve(&wfv1.ArtifactRepositoryRef{Key: "my-key"}, "my-wf-ns") + if assert.NoError(t, err) { + assert.Equal(t, "my-wf-ns", ref.Namespace) + assert.Equal(t, "artifact-repositories", ref.ConfigMap) + assert.Equal(t, "my-key", ref.Key) + assert.False(t, ref.Default) + } + + err = k.CoreV1().ConfigMaps("my-wf-ns").Delete("artifact-repositories", nil) + assert.NoError(t, err) + }) + t.Run("Explicit.ControllerNamespace", func(t *testing.T) { + _, err := k.CoreV1().ConfigMaps("my-ctrl-ns").Create(&corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "artifact-repositories"}, + Data: map[string]string{"my-key": ""}, + }) + assert.NoError(t, err) + + ref, err := i.Resolve(&wfv1.ArtifactRepositoryRef{Key: "my-key"}, "my-wf-ns") + if assert.NoError(t, err) { + assert.Equal(t, "my-ctrl-ns", ref.Namespace) + assert.Equal(t, "artifact-repositories", ref.ConfigMap) + assert.Equal(t, "my-key", ref.Key) + assert.False(t, ref.Default) + } + + err = k.CoreV1().ConfigMaps("my-ctrl-ns").Delete("artifact-repositories", nil) + assert.NoError(t, err) + }) + t.Run("Explicit.ConfigMapNotFound", func(t *testing.T) { + _, err := i.Resolve(&wfv1.ArtifactRepositoryRef{}, "my-wf-ns") + assert.Error(t, err) + }) + t.Run("Explicit.ConfigMapMissingKey", func(t *testing.T) { + _, err := k.CoreV1().ConfigMaps("my-ns").Create(&corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "artifact-repositories"}, + }) + assert.NoError(t, err) + + _, err = i.Resolve(&wfv1.ArtifactRepositoryRef{}, "my-wf-ns") + assert.Error(t, err) + + err = k.CoreV1().ConfigMaps("my-ns").Delete("artifact-repositories", nil) + assert.NoError(t, err) + }) + t.Run("WorkflowNamespaceDefault", func(t *testing.T) { + _, err := k.CoreV1().ConfigMaps("my-wf-ns").Create(&corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "artifact-repositories", + Annotations: map[string]string{"workflows.argoproj.io/default-artifact-repository": "default-v1"}, + }, + Data: map[string]string{"default-v1": ""}, + }) + assert.NoError(t, err) + + ref, err := i.Resolve(nil, "my-wf-ns") + if assert.NoError(t, err) { + assert.Equal(t, "my-wf-ns", ref.Namespace) + assert.Equal(t, "artifact-repositories", ref.ConfigMap) + assert.Equal(t, "default-v1", ref.Key) + assert.False(t, ref.Default) + } + err = k.CoreV1().ConfigMaps("my-wf-ns").Delete("artifact-repositories", nil) + assert.NoError(t, err) + }) + t.Run("Default", func(t *testing.T) { + ref, err := i.Resolve(nil, "my-wf-ns") + assert.NoError(t, err) + assert.Equal(t, wfv1.DefaultArtifactRepositoryRefStatus, ref) + }) +} diff --git a/workflow/artifactrepositories/mocks/Interface.go b/workflow/artifactrepositories/mocks/Interface.go new file mode 100644 index 000000000000..7b6bc00c193c --- /dev/null +++ b/workflow/artifactrepositories/mocks/Interface.go @@ -0,0 +1,61 @@ +// Code generated by mockery v1.1.1. DO NOT EDIT. + +package mocks + +import ( + config "github.com/argoproj/argo/config" + mock "github.com/stretchr/testify/mock" + + v1alpha1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" +) + +// Interface is an autogenerated mock type for the Interface type +type Interface struct { + mock.Mock +} + +// Get provides a mock function with given fields: ref +func (_m *Interface) Get(ref *v1alpha1.ArtifactRepositoryRefStatus) (*config.ArtifactRepository, error) { + ret := _m.Called(ref) + + var r0 *config.ArtifactRepository + if rf, ok := ret.Get(0).(func(*v1alpha1.ArtifactRepositoryRefStatus) *config.ArtifactRepository); ok { + r0 = rf(ref) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*config.ArtifactRepository) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(*v1alpha1.ArtifactRepositoryRefStatus) error); ok { + r1 = rf(ref) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Resolve provides a mock function with given fields: ref, workflowNamespace +func (_m *Interface) Resolve(ref *v1alpha1.ArtifactRepositoryRef, workflowNamespace string) (*v1alpha1.ArtifactRepositoryRefStatus, error) { + ret := _m.Called(ref, workflowNamespace) + + var r0 *v1alpha1.ArtifactRepositoryRefStatus + if rf, ok := ret.Get(0).(func(*v1alpha1.ArtifactRepositoryRef, string) *v1alpha1.ArtifactRepositoryRefStatus); ok { + r0 = rf(ref, workflowNamespace) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1alpha1.ArtifactRepositoryRefStatus) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(*v1alpha1.ArtifactRepositoryRef, string) error); ok { + r1 = rf(ref, workflowNamespace) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} diff --git a/workflow/artifactrepositories/mocks/default.go b/workflow/artifactrepositories/mocks/default.go new file mode 100644 index 000000000000..980830107ed5 --- /dev/null +++ b/workflow/artifactrepositories/mocks/default.go @@ -0,0 +1,15 @@ +package mocks + +import ( + "github.com/stretchr/testify/mock" + + "github.com/argoproj/argo/config" + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" +) + +func DummyArtifactRepositories(repo *config.ArtifactRepository) *Interface { + i := &Interface{} + i.On("Resolve", mock.Anything, mock.Anything).Return(wfv1.DefaultArtifactRepositoryRefStatus, nil) + i.On("Get", mock.Anything).Return(repo, nil) + return i +} diff --git a/workflow/controller/config.go b/workflow/controller/config.go index 29a7a168cdc2..ff341acc5030 100644 --- a/workflow/controller/config.go +++ b/workflow/controller/config.go @@ -12,6 +12,7 @@ import ( "github.com/argoproj/argo/errors" "github.com/argoproj/argo/persist/sqldb" "github.com/argoproj/argo/util/instanceid" + "github.com/argoproj/argo/workflow/artifactrepositories" "github.com/argoproj/argo/workflow/hydrator" ) @@ -33,6 +34,7 @@ func (wfc *WorkflowController) updateConfig(v interface{}) error { } } wfc.session = nil + wfc.artifactRepositories = artifactrepositories.New(wfc.kubeclientset, wfc.namespace, &wfc.Config.ArtifactRepository) wfc.offloadNodeStatusRepo = sqldb.ExplosiveOffloadNodeStatusRepo wfc.wfArchive = sqldb.NullWorkflowArchive wfc.archiveLabelSelector = labels.Everything() diff --git a/workflow/controller/controller.go b/workflow/controller/controller.go index ca0325e047fe..40871c9ee9be 100644 --- a/workflow/controller/controller.go +++ b/workflow/controller/controller.go @@ -40,6 +40,7 @@ import ( wfextvv1alpha1 "github.com/argoproj/argo/pkg/client/informers/externalversions/workflow/v1alpha1" authutil "github.com/argoproj/argo/util/auth" errorsutil "github.com/argoproj/argo/util/errors" + "github.com/argoproj/argo/workflow/artifactrepositories" "github.com/argoproj/argo/workflow/common" controllercache "github.com/argoproj/argo/workflow/controller/cache" "github.com/argoproj/argo/workflow/controller/estimation" @@ -64,6 +65,8 @@ type WorkflowController struct { configController config.Controller // Config is the workflow controller's configuration Config config.Config + // get the artifact repository + artifactRepositories artifactrepositories.Interface // cliExecutorImage is the executor image as specified from the command line cliExecutorImage string diff --git a/workflow/controller/controller_test.go b/workflow/controller/controller_test.go index 3667f58c21a9..2176c6079f76 100644 --- a/workflow/controller/controller_test.go +++ b/workflow/controller/controller_test.go @@ -29,6 +29,7 @@ import ( "github.com/argoproj/argo/pkg/client/clientset/versioned/scheme" wfextv "github.com/argoproj/argo/pkg/client/informers/externalversions" "github.com/argoproj/argo/test" + armocks "github.com/argoproj/argo/workflow/artifactrepositories/mocks" "github.com/argoproj/argo/workflow/common" controllercache "github.com/argoproj/argo/workflow/controller/cache" "github.com/argoproj/argo/workflow/controller/estimation" @@ -146,7 +147,12 @@ func newController(options ...interface{}) (context.CancelFunc, *WorkflowControl ctx, cancel := context.WithCancel(context.Background()) kube := fake.NewSimpleClientset() wfc := &WorkflowController{ - Config: config.Config{ExecutorImage: "executor:latest"}, + Config: config.Config{ExecutorImage: "executor:latest"}, + artifactRepositories: armocks.DummyArtifactRepositories(&config.ArtifactRepository{ + S3: &config.S3ArtifactRepository{ + S3Bucket: wfv1.S3Bucket{Endpoint: "my-endpoint", Bucket: "my-bucket"}, + }, + }), kubeclientset: kube, dynamicInterface: dynamicClient, wfclientset: wfclientset, diff --git a/workflow/controller/dag_test.go b/workflow/controller/dag_test.go index 683b2a9892be..80beb0e7cb8a 100644 --- a/workflow/controller/dag_test.go +++ b/workflow/controller/dag_test.go @@ -1867,16 +1867,12 @@ status: ` func TestDagOptionalInputArtifacts(t *testing.T) { - cancel, controller := newController() - defer cancel() - wfcset := controller.wfclientset.ArgoprojV1alpha1().Workflows("") - wf := unmarshalWF(testDagOptionalInputArtifacts) - wf, err := wfcset.Create(wf) - assert.NoError(t, err) + cancel, controller := newController(wf) + defer cancel() woc := newWorkflowOperationCtx(wf, controller) - woc.operate() + assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) optionalInputArtifactsNode := woc.wf.GetNodeByName("dag-optional-inputartifacts.B") if assert.NotNil(t, optionalInputArtifactsNode) { assert.Equal(t, wfv1.NodePending, optionalInputArtifactsNode.Phase) diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 403753e3777d..116f63cf0f40 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -150,7 +150,6 @@ func newWorkflowOperationCtx(wf *wfv1.Workflow, wfc *WorkflowController) *wfOper controller: wfc, globalParams: make(map[string]string), volumes: wf.Spec.DeepCopy().Volumes, - artifactRepository: &wfc.Config.ArtifactRepository, completedPods: make(map[string]bool), succeededPods: make(map[string]bool), deadline: time.Now().UTC().Add(maxOperationTime), @@ -203,6 +202,23 @@ func (woc *wfOperationCtx) operate() { return } + if woc.wf.Status.ArtifactRepositoryRef == nil { + ref, err := woc.controller.artifactRepositories.Resolve(woc.execWf.Spec.ArtifactRepositoryRef, woc.wf.Namespace) + if err != nil { + woc.markWorkflowError(fmt.Errorf("failed to resolve artifact repository: %w", err)) + return + } + woc.wf.Status.ArtifactRepositoryRef = ref + woc.updated = true + } + + repo, err := woc.controller.artifactRepositories.Get(woc.wf.Status.ArtifactRepositoryRef) + if err != nil { + woc.markWorkflowError(fmt.Errorf("failed to get artifact repository: %v", err)) + return + } + woc.artifactRepository = repo + // Workflow Level Synchronization lock if woc.execWf.Spec.Synchronization != nil { acquired, wfUpdate, msg, err := woc.controller.syncManager.TryAcquire(woc.wf, "", woc.execWf.Spec.Synchronization) @@ -301,16 +317,6 @@ func (woc *wfOperationCtx) operate() { return } - if woc.execWf.Spec.ArtifactRepositoryRef != nil { - repo, err := woc.getArtifactRepositoryByRef(woc.execWf.Spec.ArtifactRepositoryRef) - if err == nil { - woc.artifactRepository = repo - } else { - woc.markWorkflowError(err) - return - } - } - err = woc.substituteParamsInVolumes(woc.globalParams) if err != nil { woc.log.WithError(err).Error("volumes global param substitution error") @@ -3059,31 +3065,6 @@ func (woc *wfOperationCtx) includeScriptOutput(nodeName, boundaryID string) (boo return false, nil } -func (woc *wfOperationCtx) getArtifactRepositoryByRef(arRef *wfv1.ArtifactRepositoryRef) (*config.ArtifactRepository, error) { - namespaces := []string{woc.wf.ObjectMeta.Namespace, woc.controller.namespace} - for _, namespace := range namespaces { - cm, err := woc.controller.kubeclientset.CoreV1().ConfigMaps(namespace).Get(arRef.GetConfigMap(), metav1.GetOptions{}) - if err != nil { - if apierr.IsNotFound(err) { - continue - } - return nil, err - } - value, ok := cm.Data[arRef.Key] - if !ok { - continue - } - woc.log.WithFields(log.Fields{"namespace": namespace, "name": cm.Name}).Debug("Found artifact repository by ref") - ar := &config.ArtifactRepository{} - err = yaml.Unmarshal([]byte(value), ar) - if err != nil { - return nil, err - } - return ar, nil - } - return nil, fmt.Errorf("failed to find artifactory ref {%s}/%s#%s", strings.Join(namespaces, ","), arRef.GetConfigMap(), arRef.Key) -} - func (woc *wfOperationCtx) fetchWorkflowSpec() (wfv1.WorkflowSpecHolder, error) { if woc.wf.Spec.WorkflowTemplateRef == nil { return nil, fmt.Errorf("cannot fetch workflow spec without workflowTemplateRef") diff --git a/workflow/controller/operator_test.go b/workflow/controller/operator_test.go index ec9a0205da1b..e0010c4cf668 100644 --- a/workflow/controller/operator_test.go +++ b/workflow/controller/operator_test.go @@ -2339,7 +2339,6 @@ spec: func TestResolveIOPathPlaceholders(t *testing.T) { wf := unmarshalWF(ioPathPlaceholders) woc := newWoc(*wf) - woc.artifactRepository.S3 = new(config.S3ArtifactRepository) woc.operate() assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) pods, err := woc.controller.kubeclientset.CoreV1().Pods(wf.ObjectMeta.Namespace).List(metav1.ListOptions{}) @@ -2369,7 +2368,6 @@ spec: func TestResolvePlaceholdersInOutputValues(t *testing.T) { wf := unmarshalWF(outputValuePlaceholders) woc := newWoc(*wf) - woc.artifactRepository.S3 = new(config.S3ArtifactRepository) woc.operate() assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) pods, err := woc.controller.kubeclientset.CoreV1().Pods(wf.ObjectMeta.Namespace).List(metav1.ListOptions{}) @@ -2407,7 +2405,6 @@ spec: func TestResolvePodNameInRetries(t *testing.T) { wf := unmarshalWF(podNameInRetries) woc := newWoc(*wf) - woc.artifactRepository.S3 = new(config.S3ArtifactRepository) woc.operate() assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) pods, err := woc.controller.kubeclientset.CoreV1().Pods(wf.ObjectMeta.Namespace).List(metav1.ListOptions{}) @@ -2633,65 +2630,6 @@ func TestResourceWithOwnerReferenceTemplate(t *testing.T) { } } -var artifactRepositoryRef = ` -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: artifact-repo-config-ref- - namespace: my-ns -spec: - entrypoint: whalesay - artifactRepositoryRef: - key: minio - templates: - - name: whalesay - container: - image: docker/whalesay:latest - command: [sh, -c] - args: ["cowsay hello world | tee /tmp/hello_world.txt"] - outputs: - artifacts: - - name: message - path: /tmp/hello_world.txt -` - -var artifactRepositoryConfigMapData = ` -s3: - bucket: my-bucket - keyPrefix: prefix/in/bucket - endpoint: my-minio-endpoint.default:9000 - insecure: true - accessKeySecret: - name: my-minio-cred - key: accesskey - secretKeySecret: - name: my-minio-cred - key: secretkey -` - -func TestArtifactRepositoryRef(t *testing.T) { - wf := unmarshalWF(artifactRepositoryRef) - woc := newWoc(*wf) - _, err := woc.controller.kubeclientset.CoreV1().ConfigMaps(wf.ObjectMeta.Namespace).Create( - &apiv1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: "artifact-repositories", - }, - Data: map[string]string{ - "minio": artifactRepositoryConfigMapData, - }, - }, - ) - assert.NoError(t, err) - woc.operate() - assert.Equal(t, woc.artifactRepository.S3.Bucket, "my-bucket") - assert.Equal(t, woc.artifactRepository.S3.Endpoint, "my-minio-endpoint.default:9000") - assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) - pods, err := woc.controller.kubeclientset.CoreV1().Pods(wf.ObjectMeta.Namespace).List(metav1.ListOptions{}) - assert.NoError(t, err) - assert.True(t, len(pods.Items) > 0, "pod was not created successfully") -} - var stepScriptTmpl = ` apiVersion: argoproj.io/v1alpha1 kind: Workflow @@ -3010,30 +2948,6 @@ spec: "Normal WorkflowRunning Workflow Running", "Warning WorkflowFailed invalid spec: template name '123' undefined", }, - ` -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - name: artifact-repo-config-ref- -spec: - entrypoint: whalesay - artifactRepositoryRef: - configMap: artifact-repository - key: config - templates: - - name: whalesay - container: - image: docker/whalesay:latest - command: [sh, -c] - args: ["cowsay hello world | tee /tmp/hello_world.txt"] - outputs: - artifacts: - - name: message - path: /tmp/hello_world.txt -`: { - "Normal WorkflowRunning Workflow Running", - "Warning WorkflowFailed failed to find artifactory ref {,}/artifact-repository#config", - }, // DAG ` metadata: @@ -3078,8 +2992,9 @@ spec: }, } { wf := unmarshalWF(manifest) - cancel, controller := newController(wf) t.Run(wf.Name, func(t *testing.T) { + cancel, controller := newController(wf) + defer cancel() woc := newWorkflowOperationCtx(wf, controller) woc.operate() makePodsPhase(woc, apiv1.PodSucceeded) @@ -3087,7 +3002,6 @@ spec: woc.operate() assert.Equal(t, want, getEvents(controller, len(want))) }) - cancel() } } @@ -3676,7 +3590,6 @@ spec: func TestResolvePlaceholdersInGlobalVariables(t *testing.T) { wf := unmarshalWF(globalVariablePlaceholders) woc := newWoc(*wf) - woc.artifactRepository.S3 = new(config.S3ArtifactRepository) woc.operate() assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) pods, err := woc.controller.kubeclientset.CoreV1().Pods(wf.ObjectMeta.Namespace).List(metav1.ListOptions{}) diff --git a/workflow/controller/workflowpod_test.go b/workflow/controller/workflowpod_test.go index 788e31b12825..5bb633ebd74b 100644 --- a/workflow/controller/workflowpod_test.go +++ b/workflow/controller/workflowpod_test.go @@ -16,6 +16,7 @@ import ( "github.com/argoproj/argo/config" wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" "github.com/argoproj/argo/test/util" + armocks "github.com/argoproj/argo/workflow/artifactrepositories/mocks" "github.com/argoproj/argo/workflow/common" ) @@ -36,12 +37,8 @@ func newWoc(wfs ...wfv1.Workflow) *wfOperationCtx { } else { wf = &wfs[0] } - cancel, controller := newController() + cancel, controller := newController(wf) defer cancel() - _, err := controller.wfclientset.ArgoprojV1alpha1().Workflows(wf.ObjectMeta.Namespace).Create(wf) - if err != nil { - panic(err) - } woc := newWorkflowOperationCtx(wf, controller) return woc } @@ -480,18 +477,22 @@ func TestMetadata(t *testing.T) { // TestWorkflowControllerArchiveConfig verifies archive location substitution of workflow func TestWorkflowControllerArchiveConfig(t *testing.T) { woc := newWoc() - woc.artifactRepository.S3 = &config.S3ArtifactRepository{ + setArtifactRepository(woc.controller, &config.ArtifactRepository{S3: &config.S3ArtifactRepository{ S3Bucket: wfv1.S3Bucket{ Bucket: "foo", }, KeyFormat: "{{workflow.creationTimestamp.Y}}/{{workflow.creationTimestamp.m}}/{{workflow.creationTimestamp.d}}/{{workflow.name}}/{{pod.name}}", - } + }}) woc.operate() pods, err := woc.controller.kubeclientset.CoreV1().Pods("").List(metav1.ListOptions{}) assert.NoError(t, err) assert.Len(t, pods.Items, 1) } +func setArtifactRepository(controller *WorkflowController, repo *config.ArtifactRepository) { + controller.artifactRepositories = armocks.DummyArtifactRepositories(repo) +} + // TestWorkflowControllerArchiveConfigUnresolvable verifies workflow fails when archive location has // unresolvable variables func TestWorkflowControllerArchiveConfigUnresolvable(t *testing.T) { @@ -505,12 +506,12 @@ func TestWorkflowControllerArchiveConfigUnresolvable(t *testing.T) { }, } woc := newWoc(*wf) - woc.artifactRepository.S3 = &config.S3ArtifactRepository{ + setArtifactRepository(woc.controller, &config.ArtifactRepository{S3: &config.S3ArtifactRepository{ S3Bucket: wfv1.S3Bucket{ Bucket: "foo", }, KeyFormat: "{{workflow.unresolvable}}", - } + }}) woc.operate() pods, err := woc.controller.kubeclientset.CoreV1().Pods("").List(metav1.ListOptions{}) assert.NoError(t, err) @@ -520,12 +521,12 @@ func TestWorkflowControllerArchiveConfigUnresolvable(t *testing.T) { // TestConditionalNoAddArchiveLocation verifies we do not add archive location if it is not needed func TestConditionalNoAddArchiveLocation(t *testing.T) { woc := newWoc() - woc.artifactRepository.S3 = &config.S3ArtifactRepository{ + setArtifactRepository(woc.controller, &config.ArtifactRepository{S3: &config.S3ArtifactRepository{ S3Bucket: wfv1.S3Bucket{ Bucket: "foo", }, KeyFormat: "path/in/bucket", - } + }}) woc.operate() pods, err := woc.controller.kubeclientset.CoreV1().Pods("").List(metav1.ListOptions{}) assert.NoError(t, err) @@ -540,14 +541,17 @@ func TestConditionalNoAddArchiveLocation(t *testing.T) { // TestConditionalNoAddArchiveLocation verifies we do add archive location if it is needed for logs func TestConditionalAddArchiveLocationArchiveLogs(t *testing.T) { woc := newWoc() - woc.artifactRepository.S3 = &config.S3ArtifactRepository{ - S3Bucket: wfv1.S3Bucket{ - Bucket: "foo", + setArtifactRepository(woc.controller, &config.ArtifactRepository{ + S3: &config.S3ArtifactRepository{ + S3Bucket: wfv1.S3Bucket{ + Bucket: "foo", + }, + KeyFormat: "path/in/bucket", }, - KeyFormat: "path/in/bucket", - } - woc.artifactRepository.ArchiveLogs = pointer.BoolPtr(true) + ArchiveLogs: pointer.BoolPtr(true), + }) woc.operate() + assert.Equal(t, wfv1.NodeRunning, woc.wf.Status.Phase) pods, err := woc.controller.kubeclientset.CoreV1().Pods("").List(metav1.ListOptions{}) assert.NoError(t, err) assert.Len(t, pods.Items, 1) @@ -570,12 +574,12 @@ func TestConditionalArchiveLocation(t *testing.T) { }, } woc := newWoc() - woc.artifactRepository.S3 = &config.S3ArtifactRepository{ + setArtifactRepository(woc.controller, &config.ArtifactRepository{S3: &config.S3ArtifactRepository{ S3Bucket: wfv1.S3Bucket{ Bucket: "foo", }, KeyFormat: "path/in/bucket", - } + }}) woc.operate() pods, err := woc.controller.kubeclientset.CoreV1().Pods("").List(metav1.ListOptions{}) assert.NoError(t, err)