diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json
index 664f5a2c5802..35ce2886c0e3 100644
--- a/api/jsonschema/schema.json
+++ b/api/jsonschema/schema.json
@@ -5518,6 +5518,10 @@
"$ref": "#/definitions/io.argoproj.workflow.v1alpha1.Arguments",
"description": "Arguments hold arguments to the template"
},
+ "expression": {
+ "description": "Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored",
+ "type": "string"
+ },
"template": {
"description": "Template is the name of the template to execute by the hook",
"type": "string"
@@ -7416,6 +7420,13 @@
"$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ExecutorConfig",
"description": "Executor holds configurations of executor containers of the io.argoproj.workflow.v1alpha1."
},
+ "hooks": {
+ "additionalProperties": {
+ "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.LifecycleHook"
+ },
+ "description": "Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step",
+ "type": "object"
+ },
"hostAliases": {
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.HostAlias"
@@ -7932,6 +7943,13 @@
"$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ExecutorConfig",
"description": "Executor holds configurations of executor containers of the io.argoproj.workflow.v1alpha1."
},
+ "hooks": {
+ "additionalProperties": {
+ "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.LifecycleHook"
+ },
+ "description": "Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step",
+ "type": "object"
+ },
"hostAliases": {
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.HostAlias"
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index 4699cbb40171..2d7ac2c3eae9 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -9784,6 +9784,10 @@
"description": "Arguments hold arguments to the template",
"$ref": "#/definitions/io.argoproj.workflow.v1alpha1.Arguments"
},
+ "expression": {
+ "description": "Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored",
+ "type": "string"
+ },
"template": {
"description": "Template is the name of the template to execute by the hook",
"type": "string"
@@ -11661,6 +11665,13 @@
"description": "Executor holds configurations of executor containers of the io.argoproj.workflow.v1alpha1.",
"$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ExecutorConfig"
},
+ "hooks": {
+ "description": "Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.LifecycleHook"
+ }
+ },
"hostAliases": {
"type": "array",
"items": {
@@ -12168,6 +12179,13 @@
"description": "Executor holds configurations of executor containers of the io.argoproj.workflow.v1alpha1.",
"$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ExecutorConfig"
},
+ "hooks": {
+ "description": "Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step",
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.LifecycleHook"
+ }
+ },
"hostAliases": {
"type": "array",
"items": {
diff --git a/docs/fields.md b/docs/fields.md
index ee2cf39976d3..586e360d1f69 100644
--- a/docs/fields.md
+++ b/docs/fields.md
@@ -200,6 +200,10 @@ Workflow is the definition of a workflow resource
- [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml)
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
@@ -603,6 +607,10 @@ WorkflowSpec is the specification of a Workflow.
- [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml)
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
@@ -759,6 +767,7 @@ WorkflowSpec is the specification of a Workflow.
|`dnsPolicy`|`string`|Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.|
|`entrypoint`|`string`|Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1.|
|`executor`|[`ExecutorConfig`](#executorconfig)|Executor holds configurations of executor containers of the io.argoproj.workflow.v1alpha1.|
+|`hooks`|[`LifecycleHook`](#lifecyclehook)|Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step|
|`hostAliases`|`Array<`[`HostAlias`](#hostalias)`>`|_No description available_|
|`hostNetwork`|`boolean`|Host networking requested for this workflow pod. Default to false.|
|`imagePullSecrets`|`Array<`[`LocalObjectReference`](#localobjectreference)`>`|ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod|
@@ -1014,6 +1023,10 @@ CronWorkflowSpec is the specification of a CronWorkflow
- [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml)
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
@@ -1381,6 +1394,10 @@ WorkflowTemplateSpec is a spec of WorkflowTemplate.
- [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml)
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
@@ -1537,6 +1554,7 @@ WorkflowTemplateSpec is a spec of WorkflowTemplate.
|`dnsPolicy`|`string`|Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.|
|`entrypoint`|`string`|Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1.|
|`executor`|[`ExecutorConfig`](#executorconfig)|Executor holds configurations of executor containers of the io.argoproj.workflow.v1alpha1.|
+|`hooks`|[`LifecycleHook`](#lifecyclehook)|Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step|
|`hostAliases`|`Array<`[`HostAlias`](#hostalias)`>`|_No description available_|
|`hostNetwork`|`boolean`|Host networking requested for this workflow pod. Default to false.|
|`imagePullSecrets`|`Array<`[`LocalObjectReference`](#localobjectreference)`>`|ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod|
@@ -1796,6 +1814,31 @@ ExecutorConfig holds configurations of an executor container.
|:----------:|:----------:|---------------|
|`serviceAccountName`|`string`|ServiceAccountName specifies the service account name of the executor container.|
+## LifecycleHook
+
+_No description available_
+
+
+Examples with this field (click to open)
+
+
+- [`exit-handler-with-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/exit-handler-with-artifacts.yaml)
+
+- [`exit-handler-with-param.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/exit-handler-with-param.yaml)
+
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
+
+### Fields
+| Field Name | Field Type | Description |
+|:----------:|:----------:|---------------|
+|`arguments`|[`Arguments`](#arguments)|Arguments hold arguments to the template|
+|`expression`|`string`|Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored|
+|`template`|`string`|Template is the name of the template to execute by the hook|
+|`templateRef`|[`TemplateRef`](#templateref)|TemplateRef is the reference to the template resource to execute by the hook|
+
## Metrics
Metrics are a list of metrics emitted from a Workflow/Template
@@ -2470,6 +2513,40 @@ Parameter indicate a passed string parameter to a service template with an optio
|`value`|`string`|Value is the literal value to use for the parameter. If specified in the context of an input parameter, the value takes precedence over any passed values|
|`valueFrom`|[`ValueFrom`](#valuefrom)|ValueFrom is the source for the output parameter's value|
+## TemplateRef
+
+TemplateRef is a reference of template resource.
+
+
+Examples with this field (click to open)
+
+
+- [`cluster-wftmpl-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cluster-workflow-template/cluster-wftmpl-dag.yaml)
+
+- [`clustertemplates.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cluster-workflow-template/clustertemplates.yaml)
+
+- [`mixed-cluster-namespaced-wftmpl-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cluster-workflow-template/mixed-cluster-namespaced-wftmpl-steps.yaml)
+
+- [`cron-backfill.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cron-backfill.yaml)
+
+- [`dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/dag.yaml)
+
+- [`hello-world.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/hello-world.yaml)
+
+- [`retry-with-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/retry-with-steps.yaml)
+
+- [`steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/steps.yaml)
+
+- [`templates.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/templates.yaml)
+
+
+### Fields
+| Field Name | Field Type | Description |
+|:----------:|:----------:|---------------|
+|`clusterScope`|`boolean`|ClusterScope indicates the referred template is cluster scoped (i.e. a ClusterWorkflowTemplate).|
+|`name`|`string`|Name is the resource name of the template.|
+|`template`|`string`|Template is the name of referred template in the resource.|
+
## Prometheus
Prometheus is a prometheus metric to be emitted
@@ -2726,6 +2803,10 @@ _No description available_
- [`input-artifact-oss.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/input-artifact-oss.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`sidecar-nginx.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/sidecar-nginx.yaml)
- [`sidecar.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/sidecar.yaml)
@@ -3184,6 +3265,10 @@ WorkflowStep is a reference to a template to execute in a series of step
- [`k8s-wait-wf.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/k8s-wait-wf.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
- [`loops-param-argument.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-param-argument.yaml)
@@ -3341,40 +3426,6 @@ NodeSynchronizationStatus stores the status of a node
|:----------:|:----------:|---------------|
|`waiting`|`string`|Waiting is the name of the lock that this node is waiting for|
-## TemplateRef
-
-TemplateRef is a reference of template resource.
-
-
-Examples with this field (click to open)
-
-
-- [`cluster-wftmpl-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cluster-workflow-template/cluster-wftmpl-dag.yaml)
-
-- [`clustertemplates.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cluster-workflow-template/clustertemplates.yaml)
-
-- [`mixed-cluster-namespaced-wftmpl-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cluster-workflow-template/mixed-cluster-namespaced-wftmpl-steps.yaml)
-
-- [`cron-backfill.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/cron-backfill.yaml)
-
-- [`dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/dag.yaml)
-
-- [`hello-world.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/hello-world.yaml)
-
-- [`retry-with-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/retry-with-steps.yaml)
-
-- [`steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/steps.yaml)
-
-- [`templates.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/workflow-template/templates.yaml)
-
-
-### Fields
-| Field Name | Field Type | Description |
-|:----------:|:----------:|---------------|
-|`clusterScope`|`boolean`|ClusterScope indicates the referred template is cluster scoped (i.e. a ClusterWorkflowTemplate).|
-|`name`|`string`|Name is the resource name of the template.|
-|`template`|`string`|Template is the name of referred template in the resource.|
-
## MutexStatus
MutexStatus contains which objects hold mutex locks, and which objects this workflow is waiting on to release locks.
@@ -3551,6 +3602,10 @@ HTTPArtifact allows an file served on HTTP to be placed as an input artifact in
- [`input-artifact-oss.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/input-artifact-oss.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`sidecar-nginx.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/sidecar-nginx.yaml)
- [`sidecar.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/sidecar.yaml)
@@ -4098,26 +4153,6 @@ ContinueOn defines if a workflow should continue even if a task or step fails/er
|`error`|`boolean`|_No description available_|
|`failed`|`boolean`|_No description available_|
-## LifecycleHook
-
-_No description available_
-
-
-Examples with this field (click to open)
-
-
-- [`exit-handler-with-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/exit-handler-with-artifacts.yaml)
-
-- [`exit-handler-with-param.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/exit-handler-with-param.yaml)
-
-
-### Fields
-| Field Name | Field Type | Description |
-|:----------:|:----------:|---------------|
-|`arguments`|[`Arguments`](#arguments)|Arguments hold arguments to the template|
-|`template`|`string`|Template is the name of the template to execute by the hook|
-|`templateRef`|[`TemplateRef`](#templateref)|TemplateRef is the reference to the template resource to execute by the hook|
-
## Item
Item expands a single workflow step into multiple parallel steps The value of Item can be a map, string, bool, or number
@@ -4697,6 +4732,10 @@ ObjectMeta is metadata that all persisted resources must have, which includes al
- [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml)
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
@@ -5274,6 +5313,10 @@ A single application container that you want to run within a pod.
- [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml)
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
@@ -5956,6 +5999,10 @@ PersistentVolumeClaimSpec describes the common attributes of storage devices and
- [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml)
+- [`life-cycle-hooks-tmpl-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-tmpl-level.yaml)
+
+- [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml)
+
- [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml)
- [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml)
diff --git a/examples/life-cycle-hooks-tmpl-level.yaml b/examples/life-cycle-hooks-tmpl-level.yaml
new file mode 100644
index 000000000000..58bdbeb8c7ba
--- /dev/null
+++ b/examples/life-cycle-hooks-tmpl-level.yaml
@@ -0,0 +1,39 @@
+ apiVersion: argoproj.io/v1alpha1
+ kind: Workflow
+ metadata:
+ generateName: lifecycle-hook-tmpl-level-
+ spec:
+ entrypoint: main
+ templates:
+ - name: main
+ steps:
+ - - name: step-1
+ hooks:
+ exit:
+ # Expr will not support `-` on variable name. Variable should wrap with `[]`
+ expression: steps["step-1"].status == "Running"
+ template: http
+ success:
+ expression: steps["step-1"].status == "Succeeded"
+ template: http
+ template: echo
+ - - name: step2
+ hooks:
+ exit:
+ expression: steps.step2.status == "Running"
+ template: http
+ success:
+ expression: steps.step2.status == "Succeeded"
+ template: http
+ template: echo
+
+ - name: echo
+ container:
+ image: alpine:3.6
+ command: [sh, -c]
+ args: ["echo \"it was heads\""]
+
+ - name: http
+ http:
+ # url: http://dummy.restapiexample.com/api/v1/employees
+ url: "https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json"
diff --git a/examples/life-cycle-hooks-wf-level.yaml b/examples/life-cycle-hooks-wf-level.yaml
new file mode 100644
index 000000000000..9ff62de7b2c1
--- /dev/null
+++ b/examples/life-cycle-hooks-wf-level.yaml
@@ -0,0 +1,28 @@
+apiVersion: argoproj.io/v1alpha1
+kind: Workflow
+metadata:
+ generateName: lifecycle-hook-
+spec:
+ entrypoint: main
+ hooks:
+ exit:
+ template: http
+ running:
+ expression: workflow.status == "Running"
+ template: http
+ templates:
+ - name: main
+ steps:
+ - - name: step1
+ template: heads
+
+ - name: heads
+ container:
+ image: alpine:3.6
+ command: [sh, -c]
+ args: ["echo \"it was heads\""]
+
+ - name: http
+ http:
+ # url: http://dummy.restapiexample.com/api/v1/employees
+ url: "https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json"
\ No newline at end of file
diff --git a/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml b/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml
index d7f7f6ace1aa..19b35d5ce717 100644
--- a/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml
+++ b/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml
@@ -811,6 +811,413 @@ spec:
serviceAccountName:
type: string
type: object
+ hooks:
+ additionalProperties:
+ properties:
+ arguments:
+ properties:
+ artifacts:
+ items:
+ properties:
+ archive:
+ properties:
+ none:
+ type: object
+ tar:
+ properties:
+ compressionLevel:
+ format: int32
+ type: integer
+ type: object
+ zip:
+ type: object
+ type: object
+ archiveLogs:
+ type: boolean
+ artifactory:
+ properties:
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ url:
+ type: string
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - url
+ type: object
+ from:
+ type: string
+ fromExpression:
+ type: string
+ gcs:
+ properties:
+ bucket:
+ type: string
+ key:
+ type: string
+ serviceAccountKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - key
+ type: object
+ git:
+ properties:
+ depth:
+ format: int64
+ type: integer
+ disableSubmodules:
+ type: boolean
+ fetch:
+ items:
+ type: string
+ type: array
+ insecureIgnoreHostKey:
+ type: boolean
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ repo:
+ type: string
+ revision:
+ type: string
+ sshPrivateKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - repo
+ type: object
+ globalName:
+ type: string
+ hdfs:
+ properties:
+ addresses:
+ items:
+ type: string
+ type: array
+ force:
+ type: boolean
+ hdfsUser:
+ type: string
+ krbCCacheSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbConfigConfigMap:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbKeytabSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbRealm:
+ type: string
+ krbServicePrincipalName:
+ type: string
+ krbUsername:
+ type: string
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ http:
+ properties:
+ headers:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ url:
+ type: string
+ required:
+ - url
+ type: object
+ mode:
+ format: int32
+ type: integer
+ name:
+ type: string
+ optional:
+ type: boolean
+ oss:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ type: boolean
+ endpoint:
+ type: string
+ key:
+ type: string
+ lifecycleRule:
+ properties:
+ markDeletionAfterDays:
+ format: int32
+ type: integer
+ markInfrequentAccessAfterDays:
+ format: int32
+ type: integer
+ type: object
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ securityToken:
+ type: string
+ required:
+ - key
+ type: object
+ path:
+ type: string
+ raw:
+ properties:
+ data:
+ type: string
+ required:
+ - data
+ type: object
+ recurseMode:
+ type: boolean
+ s3:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ properties:
+ objectLocking:
+ type: boolean
+ type: object
+ encryptionOptions:
+ properties:
+ enableEncryption:
+ type: boolean
+ kmsEncryptionContext:
+ type: string
+ kmsKeyId:
+ type: string
+ serverSideCustomerKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ type: object
+ endpoint:
+ type: string
+ insecure:
+ type: boolean
+ key:
+ type: string
+ region:
+ type: string
+ roleARN:
+ type: string
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ useSDKCreds:
+ type: boolean
+ type: object
+ subPath:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ parameters:
+ items:
+ properties:
+ default:
+ type: string
+ description:
+ type: string
+ enum:
+ items:
+ type: string
+ type: array
+ globalName:
+ type: string
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ default:
+ type: string
+ event:
+ type: string
+ expression:
+ type: string
+ jqFilter:
+ type: string
+ jsonPath:
+ type: string
+ parameter:
+ type: string
+ path:
+ type: string
+ supplied:
+ type: object
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ type: object
+ expression:
+ type: string
+ template:
+ type: string
+ templateRef:
+ properties:
+ clusterScope:
+ type: boolean
+ name:
+ type: string
+ template:
+ type: string
+ type: object
+ required:
+ - template
+ type: object
+ type: object
hostAliases:
items:
properties:
@@ -3704,6 +4111,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
@@ -10175,6 +10584,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
diff --git a/manifests/base/crds/full/argoproj.io_cronworkflows.yaml b/manifests/base/crds/full/argoproj.io_cronworkflows.yaml
index 91d5e2ef0431..5e10a0f70e96 100644
--- a/manifests/base/crds/full/argoproj.io_cronworkflows.yaml
+++ b/manifests/base/crds/full/argoproj.io_cronworkflows.yaml
@@ -832,6 +832,413 @@ spec:
serviceAccountName:
type: string
type: object
+ hooks:
+ additionalProperties:
+ properties:
+ arguments:
+ properties:
+ artifacts:
+ items:
+ properties:
+ archive:
+ properties:
+ none:
+ type: object
+ tar:
+ properties:
+ compressionLevel:
+ format: int32
+ type: integer
+ type: object
+ zip:
+ type: object
+ type: object
+ archiveLogs:
+ type: boolean
+ artifactory:
+ properties:
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ url:
+ type: string
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - url
+ type: object
+ from:
+ type: string
+ fromExpression:
+ type: string
+ gcs:
+ properties:
+ bucket:
+ type: string
+ key:
+ type: string
+ serviceAccountKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - key
+ type: object
+ git:
+ properties:
+ depth:
+ format: int64
+ type: integer
+ disableSubmodules:
+ type: boolean
+ fetch:
+ items:
+ type: string
+ type: array
+ insecureIgnoreHostKey:
+ type: boolean
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ repo:
+ type: string
+ revision:
+ type: string
+ sshPrivateKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - repo
+ type: object
+ globalName:
+ type: string
+ hdfs:
+ properties:
+ addresses:
+ items:
+ type: string
+ type: array
+ force:
+ type: boolean
+ hdfsUser:
+ type: string
+ krbCCacheSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbConfigConfigMap:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbKeytabSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbRealm:
+ type: string
+ krbServicePrincipalName:
+ type: string
+ krbUsername:
+ type: string
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ http:
+ properties:
+ headers:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ url:
+ type: string
+ required:
+ - url
+ type: object
+ mode:
+ format: int32
+ type: integer
+ name:
+ type: string
+ optional:
+ type: boolean
+ oss:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ type: boolean
+ endpoint:
+ type: string
+ key:
+ type: string
+ lifecycleRule:
+ properties:
+ markDeletionAfterDays:
+ format: int32
+ type: integer
+ markInfrequentAccessAfterDays:
+ format: int32
+ type: integer
+ type: object
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ securityToken:
+ type: string
+ required:
+ - key
+ type: object
+ path:
+ type: string
+ raw:
+ properties:
+ data:
+ type: string
+ required:
+ - data
+ type: object
+ recurseMode:
+ type: boolean
+ s3:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ properties:
+ objectLocking:
+ type: boolean
+ type: object
+ encryptionOptions:
+ properties:
+ enableEncryption:
+ type: boolean
+ kmsEncryptionContext:
+ type: string
+ kmsKeyId:
+ type: string
+ serverSideCustomerKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ type: object
+ endpoint:
+ type: string
+ insecure:
+ type: boolean
+ key:
+ type: string
+ region:
+ type: string
+ roleARN:
+ type: string
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ useSDKCreds:
+ type: boolean
+ type: object
+ subPath:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ parameters:
+ items:
+ properties:
+ default:
+ type: string
+ description:
+ type: string
+ enum:
+ items:
+ type: string
+ type: array
+ globalName:
+ type: string
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ default:
+ type: string
+ event:
+ type: string
+ expression:
+ type: string
+ jqFilter:
+ type: string
+ jsonPath:
+ type: string
+ parameter:
+ type: string
+ path:
+ type: string
+ supplied:
+ type: object
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ type: object
+ expression:
+ type: string
+ template:
+ type: string
+ templateRef:
+ properties:
+ clusterScope:
+ type: boolean
+ name:
+ type: string
+ template:
+ type: string
+ type: object
+ required:
+ - template
+ type: object
+ type: object
hostAliases:
items:
properties:
@@ -3725,6 +4132,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
@@ -10196,6 +10605,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
diff --git a/manifests/base/crds/full/argoproj.io_workflows.yaml b/manifests/base/crds/full/argoproj.io_workflows.yaml
index 99c7715b5bd8..97bbc7a0c2a9 100644
--- a/manifests/base/crds/full/argoproj.io_workflows.yaml
+++ b/manifests/base/crds/full/argoproj.io_workflows.yaml
@@ -820,6 +820,413 @@ spec:
serviceAccountName:
type: string
type: object
+ hooks:
+ additionalProperties:
+ properties:
+ arguments:
+ properties:
+ artifacts:
+ items:
+ properties:
+ archive:
+ properties:
+ none:
+ type: object
+ tar:
+ properties:
+ compressionLevel:
+ format: int32
+ type: integer
+ type: object
+ zip:
+ type: object
+ type: object
+ archiveLogs:
+ type: boolean
+ artifactory:
+ properties:
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ url:
+ type: string
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - url
+ type: object
+ from:
+ type: string
+ fromExpression:
+ type: string
+ gcs:
+ properties:
+ bucket:
+ type: string
+ key:
+ type: string
+ serviceAccountKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - key
+ type: object
+ git:
+ properties:
+ depth:
+ format: int64
+ type: integer
+ disableSubmodules:
+ type: boolean
+ fetch:
+ items:
+ type: string
+ type: array
+ insecureIgnoreHostKey:
+ type: boolean
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ repo:
+ type: string
+ revision:
+ type: string
+ sshPrivateKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - repo
+ type: object
+ globalName:
+ type: string
+ hdfs:
+ properties:
+ addresses:
+ items:
+ type: string
+ type: array
+ force:
+ type: boolean
+ hdfsUser:
+ type: string
+ krbCCacheSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbConfigConfigMap:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbKeytabSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbRealm:
+ type: string
+ krbServicePrincipalName:
+ type: string
+ krbUsername:
+ type: string
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ http:
+ properties:
+ headers:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ url:
+ type: string
+ required:
+ - url
+ type: object
+ mode:
+ format: int32
+ type: integer
+ name:
+ type: string
+ optional:
+ type: boolean
+ oss:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ type: boolean
+ endpoint:
+ type: string
+ key:
+ type: string
+ lifecycleRule:
+ properties:
+ markDeletionAfterDays:
+ format: int32
+ type: integer
+ markInfrequentAccessAfterDays:
+ format: int32
+ type: integer
+ type: object
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ securityToken:
+ type: string
+ required:
+ - key
+ type: object
+ path:
+ type: string
+ raw:
+ properties:
+ data:
+ type: string
+ required:
+ - data
+ type: object
+ recurseMode:
+ type: boolean
+ s3:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ properties:
+ objectLocking:
+ type: boolean
+ type: object
+ encryptionOptions:
+ properties:
+ enableEncryption:
+ type: boolean
+ kmsEncryptionContext:
+ type: string
+ kmsKeyId:
+ type: string
+ serverSideCustomerKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ type: object
+ endpoint:
+ type: string
+ insecure:
+ type: boolean
+ key:
+ type: string
+ region:
+ type: string
+ roleARN:
+ type: string
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ useSDKCreds:
+ type: boolean
+ type: object
+ subPath:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ parameters:
+ items:
+ properties:
+ default:
+ type: string
+ description:
+ type: string
+ enum:
+ items:
+ type: string
+ type: array
+ globalName:
+ type: string
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ default:
+ type: string
+ event:
+ type: string
+ expression:
+ type: string
+ jqFilter:
+ type: string
+ jsonPath:
+ type: string
+ parameter:
+ type: string
+ path:
+ type: string
+ supplied:
+ type: object
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ type: object
+ expression:
+ type: string
+ template:
+ type: string
+ templateRef:
+ properties:
+ clusterScope:
+ type: boolean
+ name:
+ type: string
+ template:
+ type: string
+ type: object
+ required:
+ - template
+ type: object
+ type: object
hostAliases:
items:
properties:
@@ -3713,6 +4120,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
@@ -10184,6 +10593,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
@@ -19661,6 +20072,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
@@ -24320,6 +24733,413 @@ spec:
serviceAccountName:
type: string
type: object
+ hooks:
+ additionalProperties:
+ properties:
+ arguments:
+ properties:
+ artifacts:
+ items:
+ properties:
+ archive:
+ properties:
+ none:
+ type: object
+ tar:
+ properties:
+ compressionLevel:
+ format: int32
+ type: integer
+ type: object
+ zip:
+ type: object
+ type: object
+ archiveLogs:
+ type: boolean
+ artifactory:
+ properties:
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ url:
+ type: string
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - url
+ type: object
+ from:
+ type: string
+ fromExpression:
+ type: string
+ gcs:
+ properties:
+ bucket:
+ type: string
+ key:
+ type: string
+ serviceAccountKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - key
+ type: object
+ git:
+ properties:
+ depth:
+ format: int64
+ type: integer
+ disableSubmodules:
+ type: boolean
+ fetch:
+ items:
+ type: string
+ type: array
+ insecureIgnoreHostKey:
+ type: boolean
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ repo:
+ type: string
+ revision:
+ type: string
+ sshPrivateKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - repo
+ type: object
+ globalName:
+ type: string
+ hdfs:
+ properties:
+ addresses:
+ items:
+ type: string
+ type: array
+ force:
+ type: boolean
+ hdfsUser:
+ type: string
+ krbCCacheSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbConfigConfigMap:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbKeytabSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbRealm:
+ type: string
+ krbServicePrincipalName:
+ type: string
+ krbUsername:
+ type: string
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ http:
+ properties:
+ headers:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ url:
+ type: string
+ required:
+ - url
+ type: object
+ mode:
+ format: int32
+ type: integer
+ name:
+ type: string
+ optional:
+ type: boolean
+ oss:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ type: boolean
+ endpoint:
+ type: string
+ key:
+ type: string
+ lifecycleRule:
+ properties:
+ markDeletionAfterDays:
+ format: int32
+ type: integer
+ markInfrequentAccessAfterDays:
+ format: int32
+ type: integer
+ type: object
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ securityToken:
+ type: string
+ required:
+ - key
+ type: object
+ path:
+ type: string
+ raw:
+ properties:
+ data:
+ type: string
+ required:
+ - data
+ type: object
+ recurseMode:
+ type: boolean
+ s3:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ properties:
+ objectLocking:
+ type: boolean
+ type: object
+ encryptionOptions:
+ properties:
+ enableEncryption:
+ type: boolean
+ kmsEncryptionContext:
+ type: string
+ kmsKeyId:
+ type: string
+ serverSideCustomerKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ type: object
+ endpoint:
+ type: string
+ insecure:
+ type: boolean
+ key:
+ type: string
+ region:
+ type: string
+ roleARN:
+ type: string
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ useSDKCreds:
+ type: boolean
+ type: object
+ subPath:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ parameters:
+ items:
+ properties:
+ default:
+ type: string
+ description:
+ type: string
+ enum:
+ items:
+ type: string
+ type: array
+ globalName:
+ type: string
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ default:
+ type: string
+ event:
+ type: string
+ expression:
+ type: string
+ jqFilter:
+ type: string
+ jsonPath:
+ type: string
+ parameter:
+ type: string
+ path:
+ type: string
+ supplied:
+ type: object
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ type: object
+ expression:
+ type: string
+ template:
+ type: string
+ templateRef:
+ properties:
+ clusterScope:
+ type: boolean
+ name:
+ type: string
+ template:
+ type: string
+ type: object
+ required:
+ - template
+ type: object
+ type: object
hostAliases:
items:
properties:
@@ -27213,6 +28033,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
@@ -33684,6 +34506,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
diff --git a/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml b/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml
index 271ae379c4e8..3625956678ec 100644
--- a/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml
+++ b/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml
@@ -2625,6 +2625,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
diff --git a/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml b/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml
index dea3887c0bd9..da8034b781c9 100644
--- a/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml
+++ b/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml
@@ -810,6 +810,413 @@ spec:
serviceAccountName:
type: string
type: object
+ hooks:
+ additionalProperties:
+ properties:
+ arguments:
+ properties:
+ artifacts:
+ items:
+ properties:
+ archive:
+ properties:
+ none:
+ type: object
+ tar:
+ properties:
+ compressionLevel:
+ format: int32
+ type: integer
+ type: object
+ zip:
+ type: object
+ type: object
+ archiveLogs:
+ type: boolean
+ artifactory:
+ properties:
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ url:
+ type: string
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - url
+ type: object
+ from:
+ type: string
+ fromExpression:
+ type: string
+ gcs:
+ properties:
+ bucket:
+ type: string
+ key:
+ type: string
+ serviceAccountKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - key
+ type: object
+ git:
+ properties:
+ depth:
+ format: int64
+ type: integer
+ disableSubmodules:
+ type: boolean
+ fetch:
+ items:
+ type: string
+ type: array
+ insecureIgnoreHostKey:
+ type: boolean
+ passwordSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ repo:
+ type: string
+ revision:
+ type: string
+ sshPrivateKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ usernameSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ required:
+ - repo
+ type: object
+ globalName:
+ type: string
+ hdfs:
+ properties:
+ addresses:
+ items:
+ type: string
+ type: array
+ force:
+ type: boolean
+ hdfsUser:
+ type: string
+ krbCCacheSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbConfigConfigMap:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbKeytabSecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ krbRealm:
+ type: string
+ krbServicePrincipalName:
+ type: string
+ krbUsername:
+ type: string
+ path:
+ type: string
+ required:
+ - path
+ type: object
+ http:
+ properties:
+ headers:
+ items:
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ type: array
+ url:
+ type: string
+ required:
+ - url
+ type: object
+ mode:
+ format: int32
+ type: integer
+ name:
+ type: string
+ optional:
+ type: boolean
+ oss:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ type: boolean
+ endpoint:
+ type: string
+ key:
+ type: string
+ lifecycleRule:
+ properties:
+ markDeletionAfterDays:
+ format: int32
+ type: integer
+ markInfrequentAccessAfterDays:
+ format: int32
+ type: integer
+ type: object
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ securityToken:
+ type: string
+ required:
+ - key
+ type: object
+ path:
+ type: string
+ raw:
+ properties:
+ data:
+ type: string
+ required:
+ - data
+ type: object
+ recurseMode:
+ type: boolean
+ s3:
+ properties:
+ accessKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ bucket:
+ type: string
+ createBucketIfNotPresent:
+ properties:
+ objectLocking:
+ type: boolean
+ type: object
+ encryptionOptions:
+ properties:
+ enableEncryption:
+ type: boolean
+ kmsEncryptionContext:
+ type: string
+ kmsKeyId:
+ type: string
+ serverSideCustomerKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ type: object
+ endpoint:
+ type: string
+ insecure:
+ type: boolean
+ key:
+ type: string
+ region:
+ type: string
+ roleARN:
+ type: string
+ secretKeySecret:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ useSDKCreds:
+ type: boolean
+ type: object
+ subPath:
+ type: string
+ required:
+ - name
+ type: object
+ type: array
+ parameters:
+ items:
+ properties:
+ default:
+ type: string
+ description:
+ type: string
+ enum:
+ items:
+ type: string
+ type: array
+ globalName:
+ type: string
+ name:
+ type: string
+ value:
+ type: string
+ valueFrom:
+ properties:
+ configMapKeyRef:
+ properties:
+ key:
+ type: string
+ name:
+ type: string
+ optional:
+ type: boolean
+ required:
+ - key
+ type: object
+ default:
+ type: string
+ event:
+ type: string
+ expression:
+ type: string
+ jqFilter:
+ type: string
+ jsonPath:
+ type: string
+ parameter:
+ type: string
+ path:
+ type: string
+ supplied:
+ type: object
+ type: object
+ required:
+ - name
+ type: object
+ type: array
+ type: object
+ expression:
+ type: string
+ template:
+ type: string
+ templateRef:
+ properties:
+ clusterScope:
+ type: boolean
+ name:
+ type: string
+ template:
+ type: string
+ type: object
+ required:
+ - template
+ type: object
+ type: object
hostAliases:
items:
properties:
@@ -3703,6 +4110,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
@@ -10174,6 +10583,8 @@ spec:
type: object
type: array
type: object
+ expression:
+ type: string
template:
type: string
templateRef:
diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go
index 1f6357e4045a..b2bd374e6f27 100644
--- a/pkg/apis/workflow/v1alpha1/generated.pb.go
+++ b/pkg/apis/workflow/v1alpha1/generated.pb.go
@@ -3569,6 +3569,7 @@ func init() {
proto.RegisterType((*WorkflowEventBindingSpec)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowEventBindingSpec")
proto.RegisterType((*WorkflowList)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowList")
proto.RegisterType((*WorkflowSpec)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowSpec")
+ proto.RegisterMapType((LifecycleHooks)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowSpec.HooksEntry")
proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowSpec.NodeSelectorEntry")
proto.RegisterType((*WorkflowStatus)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStatus")
proto.RegisterMapType((Nodes)(nil), "github.com.argoproj.argo_workflows.v3.pkg.apis.workflow.v1alpha1.WorkflowStatus.NodesEntry")
@@ -3594,570 +3595,572 @@ func init() {
}
var fileDescriptor_724696e352c3df5f = []byte{
- // 9006 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x64, 0xc9,
- 0x75, 0xd8, 0xde, 0x26, 0x9b, 0xec, 0x3e, 0x7c, 0xd7, 0xbc, 0x7a, 0xb9, 0xbb, 0xc3, 0xf5, 0x5d,
- 0xef, 0x66, 0xc7, 0x5e, 0x91, 0xde, 0x19, 0x29, 0xd9, 0x48, 0x88, 0x2c, 0x36, 0x39, 0x7c, 0x2c,
- 0x9f, 0x5b, 0xcd, 0x99, 0xc9, 0x3e, 0x22, 0xeb, 0xb2, 0xbb, 0xd8, 0x7d, 0x97, 0xdd, 0xf7, 0xf6,
- 0xde, 0x7b, 0x9b, 0x8f, 0x7d, 0x48, 0x8a, 0xfc, 0xd0, 0x6e, 0x2c, 0xc7, 0x79, 0x38, 0xb6, 0xac,
- 0xc4, 0x80, 0xe1, 0x58, 0xb1, 0xe1, 0x18, 0x09, 0x04, 0xe4, 0xcb, 0x01, 0xf2, 0x15, 0x04, 0x0a,
- 0x12, 0x20, 0x0e, 0xac, 0xc4, 0x02, 0x92, 0x50, 0x11, 0x93, 0xf8, 0x23, 0x81, 0x83, 0x20, 0x88,
- 0x64, 0x61, 0x92, 0x8f, 0xa0, 0x9e, 0xb7, 0xea, 0xf6, 0x6d, 0x0e, 0x39, 0x73, 0xc9, 0x11, 0xe2,
- 0xfc, 0x75, 0x9f, 0x3a, 0x75, 0x4e, 0x55, 0xdd, 0xaa, 0x53, 0xa7, 0xce, 0x39, 0x75, 0x0a, 0x36,
- 0xeb, 0x6e, 0xd4, 0xe8, 0x6c, 0x4f, 0x57, 0xfd, 0xd6, 0x8c, 0x13, 0xd4, 0xfd, 0x76, 0xe0, 0xbf,
- 0xcd, 0x7e, 0x7c, 0x6c, 0xdf, 0x0f, 0x76, 0x77, 0x9a, 0xfe, 0x7e, 0x38, 0xb3, 0x77, 0x6b, 0xa6,
- 0xbd, 0x5b, 0x9f, 0x71, 0xda, 0x6e, 0x38, 0x23, 0xa1, 0x33, 0x7b, 0x2f, 0x3b, 0xcd, 0x76, 0xc3,
- 0x79, 0x79, 0xa6, 0x4e, 0x3c, 0x12, 0x38, 0x11, 0xa9, 0x4d, 0xb7, 0x03, 0x3f, 0xf2, 0xd1, 0x67,
- 0x62, 0x8a, 0xd3, 0x92, 0x22, 0xfb, 0xf1, 0x53, 0x8a, 0xe2, 0xf4, 0xde, 0xad, 0xe9, 0xf6, 0x6e,
- 0x7d, 0x9a, 0x52, 0x9c, 0x96, 0xd0, 0x69, 0x49, 0x71, 0xf2, 0x63, 0x5a, 0x9b, 0xea, 0x7e, 0xdd,
- 0x9f, 0x61, 0x84, 0xb7, 0x3b, 0x3b, 0xec, 0x1f, 0xfb, 0xc3, 0x7e, 0x71, 0x86, 0x93, 0xf6, 0xee,
- 0x2b, 0xe1, 0xb4, 0xeb, 0xd3, 0xf6, 0xcd, 0x54, 0xfd, 0x80, 0xcc, 0xec, 0x75, 0x35, 0x6a, 0xf2,
- 0x86, 0x86, 0xd3, 0xf6, 0x9b, 0x6e, 0xf5, 0x70, 0x66, 0xef, 0xe5, 0x6d, 0x12, 0x75, 0xb7, 0x7f,
- 0xf2, 0xe3, 0x31, 0x6a, 0xcb, 0xa9, 0x36, 0x5c, 0x8f, 0x04, 0x87, 0x71, 0xff, 0x5b, 0x24, 0x72,
- 0xd2, 0x18, 0xcc, 0xf4, 0xaa, 0x15, 0x74, 0xbc, 0xc8, 0x6d, 0x91, 0xae, 0x0a, 0x7f, 0xf6, 0x41,
- 0x15, 0xc2, 0x6a, 0x83, 0xb4, 0x9c, 0xae, 0x7a, 0xb7, 0x7a, 0xd5, 0xeb, 0x44, 0x6e, 0x73, 0xc6,
- 0xf5, 0xa2, 0x30, 0x0a, 0x92, 0x95, 0xec, 0xdb, 0x30, 0x30, 0xdb, 0xf2, 0x3b, 0x5e, 0x84, 0x3e,
- 0x05, 0xf9, 0x3d, 0xa7, 0xd9, 0x21, 0x25, 0xeb, 0x59, 0xeb, 0xc5, 0x62, 0xf9, 0xf9, 0x6f, 0x1e,
- 0x4d, 0x3d, 0x71, 0x7c, 0x34, 0x95, 0xbf, 0x4b, 0x81, 0xf7, 0x8f, 0xa6, 0x2e, 0x13, 0xaf, 0xea,
- 0xd7, 0x5c, 0xaf, 0x3e, 0xf3, 0x76, 0xe8, 0x7b, 0xd3, 0xeb, 0x9d, 0xd6, 0x36, 0x09, 0x30, 0xaf,
- 0x63, 0xff, 0x41, 0x0e, 0xc6, 0x66, 0x83, 0x6a, 0xc3, 0xdd, 0x23, 0x95, 0x88, 0xd2, 0xaf, 0x1f,
- 0xa2, 0x06, 0xf4, 0x45, 0x4e, 0xc0, 0xc8, 0x0d, 0xdd, 0x5c, 0x9b, 0x7e, 0xd4, 0x8f, 0x3f, 0xbd,
- 0xe5, 0x04, 0x92, 0x76, 0x79, 0xf0, 0xf8, 0x68, 0xaa, 0x6f, 0xcb, 0x09, 0x30, 0x65, 0x81, 0x9a,
- 0xd0, 0xef, 0xf9, 0x1e, 0x29, 0xe5, 0x18, 0xab, 0xf5, 0x47, 0x67, 0xb5, 0xee, 0x7b, 0xaa, 0x1f,
- 0xe5, 0xc2, 0xf1, 0xd1, 0x54, 0x3f, 0x85, 0x60, 0xc6, 0x85, 0xf6, 0xeb, 0x5d, 0xb7, 0x5d, 0xea,
- 0xcb, 0xaa, 0x5f, 0x6f, 0xb8, 0x6d, 0xb3, 0x5f, 0x6f, 0xb8, 0x6d, 0x4c, 0x59, 0xd8, 0x1f, 0xe5,
- 0xa0, 0x38, 0x1b, 0xd4, 0x3b, 0x2d, 0xe2, 0x45, 0x21, 0xfa, 0x02, 0x40, 0xdb, 0x09, 0x9c, 0x16,
- 0x89, 0x48, 0x10, 0x96, 0xac, 0x67, 0xfb, 0x5e, 0x1c, 0xba, 0xb9, 0xf2, 0xe8, 0xec, 0x37, 0x25,
- 0xcd, 0x32, 0x12, 0x9f, 0x1c, 0x14, 0x28, 0xc4, 0x1a, 0x4b, 0xf4, 0x1e, 0x14, 0x9d, 0x20, 0x72,
- 0x77, 0x9c, 0x6a, 0x14, 0x96, 0x72, 0x8c, 0xff, 0xab, 0x8f, 0xce, 0x7f, 0x56, 0x90, 0x2c, 0x4f,
- 0x08, 0xf6, 0x45, 0x09, 0x09, 0x71, 0xcc, 0xcf, 0xfe, 0xad, 0x3c, 0x14, 0x64, 0x01, 0x7a, 0x16,
- 0xfa, 0x3d, 0xa7, 0x25, 0xa7, 0xea, 0xb0, 0xa8, 0xd8, 0xbf, 0xee, 0xb4, 0xe8, 0x47, 0x72, 0x5a,
- 0x84, 0x62, 0xb4, 0x9d, 0xa8, 0xc1, 0xa6, 0x84, 0x86, 0xb1, 0xe9, 0x44, 0x0d, 0xcc, 0x4a, 0xd0,
- 0xd3, 0xd0, 0xdf, 0xf2, 0x6b, 0x84, 0x7d, 0xc7, 0x3c, 0xff, 0xc8, 0x6b, 0x7e, 0x8d, 0x60, 0x06,
- 0xa5, 0xf5, 0x77, 0x02, 0xbf, 0x55, 0xea, 0x37, 0xeb, 0x2f, 0x04, 0x7e, 0x0b, 0xb3, 0x12, 0xf4,
- 0x55, 0x0b, 0xc6, 0x65, 0xf3, 0x56, 0xfd, 0xaa, 0x13, 0xb9, 0xbe, 0x57, 0xca, 0xb3, 0x49, 0x81,
- 0xb3, 0x1b, 0x15, 0x49, 0xb9, 0x5c, 0x12, 0x4d, 0x18, 0x4f, 0x96, 0xe0, 0xae, 0x56, 0xa0, 0x9b,
- 0x00, 0xf5, 0xa6, 0xbf, 0xed, 0x34, 0xe9, 0x80, 0x94, 0x06, 0x58, 0x17, 0xd4, 0xc7, 0x5d, 0x54,
- 0x25, 0x58, 0xc3, 0x42, 0x07, 0x30, 0xe8, 0xf0, 0x05, 0x5c, 0x1a, 0x64, 0x9d, 0x78, 0x2d, 0x8b,
- 0x4e, 0x18, 0x12, 0xa1, 0x3c, 0x74, 0x7c, 0x34, 0x35, 0x28, 0x80, 0x58, 0xb2, 0x43, 0x2f, 0x41,
- 0xc1, 0x6f, 0xd3, 0x76, 0x3b, 0xcd, 0x52, 0xe1, 0x59, 0xeb, 0xc5, 0x42, 0x79, 0x5c, 0xb4, 0xb5,
- 0xb0, 0x21, 0xe0, 0x58, 0x61, 0xa0, 0x1b, 0x30, 0x18, 0x76, 0xb6, 0xe9, 0x77, 0x2c, 0x15, 0x59,
- 0xc7, 0xc6, 0x04, 0xf2, 0x60, 0x85, 0x83, 0xb1, 0x2c, 0x47, 0x9f, 0x80, 0xa1, 0x80, 0x54, 0x3b,
- 0x41, 0x48, 0xe8, 0x87, 0x2d, 0x01, 0xa3, 0x7d, 0x49, 0xa0, 0x0f, 0xe1, 0xb8, 0x08, 0xeb, 0x78,
- 0xe8, 0xd3, 0x30, 0x4a, 0x3f, 0xf0, 0xed, 0x83, 0x76, 0x40, 0xc2, 0x90, 0x7e, 0xd5, 0x21, 0xc6,
- 0xe8, 0xaa, 0xa8, 0x39, 0xba, 0x60, 0x94, 0xe2, 0x04, 0xb6, 0xfd, 0x7b, 0x83, 0xd0, 0xf5, 0x91,
- 0xd0, 0xcb, 0x30, 0x24, 0xfa, 0xbb, 0xea, 0xd7, 0x43, 0x36, 0x71, 0x0b, 0xe5, 0x31, 0xda, 0x8e,
- 0xd9, 0x18, 0x8c, 0x75, 0x1c, 0x54, 0x83, 0x5c, 0x78, 0x4b, 0xc8, 0xb4, 0xd5, 0x47, 0xff, 0x18,
- 0x95, 0x5b, 0x6a, 0xa5, 0x0d, 0x1c, 0x1f, 0x4d, 0xe5, 0x2a, 0xb7, 0x70, 0x2e, 0xbc, 0x45, 0xa5,
- 0x59, 0xdd, 0x8d, 0xb2, 0x93, 0x66, 0x8b, 0x6e, 0xa4, 0xf8, 0x30, 0x69, 0xb6, 0xe8, 0x46, 0x98,
- 0xb2, 0xa0, 0x52, 0xba, 0x11, 0x45, 0x6d, 0xb6, 0xa4, 0x32, 0x91, 0xd2, 0x4b, 0x5b, 0x5b, 0x9b,
- 0x8a, 0x17, 0x5b, 0xc0, 0x14, 0x82, 0x19, 0x17, 0xf4, 0xa1, 0x45, 0x47, 0x9c, 0x17, 0xfa, 0xc1,
- 0xa1, 0x58, 0x99, 0x77, 0xb2, 0x5b, 0x99, 0x7e, 0x70, 0xa8, 0x98, 0x8b, 0x0f, 0xa9, 0x0a, 0xb0,
- 0xce, 0x9a, 0x75, 0xbc, 0xb6, 0x13, 0xb2, 0x85, 0x98, 0x4d, 0xc7, 0xe7, 0x17, 0x2a, 0x89, 0x8e,
- 0xcf, 0x2f, 0x54, 0x30, 0xe3, 0x42, 0x3f, 0x68, 0xe0, 0xec, 0x8b, 0x45, 0x9c, 0xc1, 0x07, 0xc5,
- 0xce, 0xbe, 0xf9, 0x41, 0xb1, 0xb3, 0x8f, 0x29, 0x0b, 0xca, 0xc9, 0x0f, 0x43, 0xb6, 0x66, 0x33,
- 0xe1, 0xb4, 0x51, 0xa9, 0x98, 0x9c, 0x36, 0x2a, 0x15, 0x4c, 0x59, 0xb0, 0x49, 0x5a, 0x0d, 0xd9,
- 0x82, 0xcf, 0x66, 0x92, 0xce, 0x25, 0x38, 0x2d, 0xce, 0x55, 0x30, 0x65, 0x61, 0x7f, 0x64, 0xc1,
- 0x88, 0x2c, 0xa2, 0x42, 0x24, 0x44, 0x07, 0x50, 0x90, 0x1f, 0x53, 0xe8, 0x32, 0x59, 0x6e, 0x7a,
- 0x4a, 0xd4, 0x49, 0x08, 0x56, 0xdc, 0xec, 0xdf, 0xcd, 0x03, 0x52, 0x60, 0xd2, 0xf6, 0x43, 0x97,
- 0x4d, 0xa7, 0x87, 0x10, 0x25, 0x9e, 0x26, 0x4a, 0xee, 0x66, 0x29, 0x4a, 0xe2, 0x66, 0x19, 0x42,
- 0xe5, 0x6f, 0x24, 0x16, 0x1f, 0x97, 0x2e, 0x3f, 0x75, 0x2e, 0x8b, 0x4f, 0x6b, 0xc2, 0xc9, 0xcb,
- 0x70, 0x4f, 0x2c, 0x43, 0x2e, 0x7f, 0xfe, 0x62, 0xb6, 0xcb, 0x50, 0x6b, 0x45, 0x72, 0x41, 0x06,
- 0x7c, 0x99, 0x70, 0x01, 0x74, 0x2f, 0xd3, 0x65, 0xa2, 0x71, 0x35, 0x17, 0x4c, 0xc0, 0x17, 0xcc,
- 0x40, 0x56, 0x3c, 0xb5, 0x05, 0x93, 0xe4, 0xa9, 0x96, 0xce, 0x3b, 0x70, 0xa5, 0x1b, 0x07, 0x93,
- 0x1d, 0x34, 0x03, 0xc5, 0xaa, 0xef, 0xed, 0xb8, 0xf5, 0x35, 0xa7, 0x2d, 0x54, 0x36, 0xa5, 0xeb,
- 0xcd, 0xc9, 0x02, 0x1c, 0xe3, 0xa0, 0x67, 0xa0, 0x6f, 0x97, 0x1c, 0x0a, 0xdd, 0x6d, 0x48, 0xa0,
- 0xf6, 0xad, 0x90, 0x43, 0x4c, 0xe1, 0x9f, 0x2c, 0x7c, 0xf5, 0xd7, 0xa7, 0x9e, 0xf8, 0xe2, 0xbf,
- 0x7f, 0xf6, 0x09, 0xfb, 0x5f, 0xf7, 0xc1, 0x53, 0xa9, 0x3c, 0x2b, 0x91, 0x13, 0x75, 0x42, 0xf4,
- 0xbb, 0x16, 0x5c, 0x71, 0xd2, 0xca, 0xc5, 0x4a, 0xbe, 0x97, 0xdd, 0x8c, 0x34, 0xc8, 0x97, 0x9f,
- 0x11, 0x8d, 0x4e, 0x1f, 0x11, 0x9c, 0xde, 0x28, 0x3a, 0x50, 0x54, 0x79, 0x0d, 0xdb, 0x4e, 0x95,
- 0x88, 0xde, 0xab, 0x81, 0x5a, 0x97, 0x05, 0x38, 0xc6, 0xa1, 0xca, 0x50, 0x8d, 0xec, 0x38, 0x9d,
- 0x26, 0xdf, 0xc0, 0x0b, 0xb1, 0x32, 0x34, 0xcf, 0xc1, 0x58, 0x96, 0xa3, 0xbf, 0x63, 0x01, 0xea,
- 0xe6, 0x2a, 0x16, 0xc3, 0xd6, 0x79, 0x8c, 0x43, 0xf9, 0xea, 0xf1, 0xd1, 0x54, 0x8a, 0x00, 0xc3,
- 0x29, 0xed, 0xd0, 0xbe, 0xe9, 0xbf, 0xb0, 0xe0, 0x52, 0xca, 0x32, 0xa7, 0x93, 0xa2, 0x13, 0x34,
- 0xc5, 0xfc, 0x51, 0x93, 0xe2, 0x0e, 0x5e, 0xc5, 0x14, 0x8e, 0x7e, 0xc9, 0x82, 0x31, 0x6d, 0xb5,
- 0xcf, 0x76, 0x84, 0xf2, 0x9f, 0x91, 0x22, 0x6b, 0x10, 0x2e, 0x5f, 0x13, 0xec, 0xc7, 0x12, 0x05,
- 0x38, 0xd9, 0x04, 0xfb, 0xbb, 0x16, 0x3c, 0x73, 0xa2, 0xd0, 0x4a, 0x6d, 0xb8, 0xf5, 0xd8, 0x1b,
- 0x4e, 0xa7, 0x56, 0x40, 0xda, 0xfe, 0x1d, 0xbc, 0x2a, 0x66, 0xa2, 0x9a, 0x5a, 0x98, 0x83, 0xb1,
- 0x2c, 0xb7, 0xff, 0xd0, 0x82, 0x24, 0x3d, 0xe4, 0xc0, 0x68, 0x27, 0x24, 0x01, 0x9d, 0xaa, 0x15,
- 0x52, 0x0d, 0x88, 0xdc, 0x3b, 0x9f, 0x9f, 0xe6, 0x56, 0x0a, 0xda, 0xe0, 0xe9, 0xaa, 0x1f, 0x90,
- 0xe9, 0xbd, 0x97, 0xa7, 0x39, 0xc6, 0x0a, 0x39, 0xac, 0x90, 0x26, 0xa1, 0x34, 0xca, 0x88, 0xea,
- 0xd9, 0x77, 0x0c, 0x02, 0x38, 0x41, 0x90, 0xb2, 0x68, 0x3b, 0x61, 0xb8, 0xef, 0x07, 0x35, 0xc1,
- 0x22, 0x77, 0x66, 0x16, 0x9b, 0x06, 0x01, 0x9c, 0x20, 0x68, 0xff, 0x53, 0x0b, 0x06, 0xcb, 0x4e,
- 0x75, 0xd7, 0xdf, 0xd9, 0xa1, 0xc7, 0x94, 0x5a, 0x27, 0xe0, 0xc7, 0x3c, 0x3e, 0x09, 0xd5, 0xde,
- 0x3d, 0x2f, 0xe0, 0x58, 0x61, 0xa0, 0x2d, 0x18, 0xe0, 0xc3, 0x21, 0x1a, 0xf5, 0x13, 0x5a, 0xa3,
- 0x94, 0x75, 0x86, 0x7d, 0xb9, 0x4e, 0xe4, 0x36, 0xa7, 0xb9, 0x75, 0x66, 0x7a, 0xd9, 0x8b, 0x36,
- 0x82, 0x4a, 0x14, 0xb8, 0x5e, 0xbd, 0x0c, 0xc7, 0x47, 0x53, 0x03, 0x0b, 0x8c, 0x06, 0x16, 0xb4,
- 0xe8, 0x89, 0xa6, 0xe5, 0x1c, 0x48, 0x76, 0x6c, 0xcd, 0x17, 0xe3, 0x13, 0xcd, 0x5a, 0x5c, 0x84,
- 0x75, 0x3c, 0xfb, 0xb3, 0x90, 0x9f, 0x73, 0xaa, 0x0d, 0x82, 0xee, 0x24, 0x25, 0xf1, 0xd0, 0xcd,
- 0x17, 0xd3, 0x46, 0x4b, 0x49, 0x65, 0x7d, 0xc0, 0x46, 0x7a, 0xc9, 0x6b, 0xfb, 0x7b, 0x16, 0x5c,
- 0x9b, 0x6b, 0x76, 0xc2, 0x88, 0x04, 0xf7, 0xc4, 0x14, 0xdc, 0x22, 0xad, 0x76, 0xd3, 0x89, 0x08,
- 0xfa, 0x1c, 0x14, 0x5a, 0x24, 0x72, 0x6a, 0x4e, 0xe4, 0x08, 0x8e, 0xbd, 0x87, 0x82, 0x4d, 0x62,
- 0x8a, 0x4d, 0xdb, 0xb0, 0xb1, 0xfd, 0x36, 0xa9, 0x46, 0x6b, 0x24, 0x72, 0xe2, 0xb3, 0x6b, 0x0c,
- 0xc3, 0x8a, 0x2a, 0x3a, 0x80, 0xfe, 0xb0, 0x4d, 0xaa, 0xd9, 0xa9, 0x37, 0xc9, 0x3e, 0x54, 0xda,
- 0xa4, 0x1a, 0x9b, 0x00, 0xe8, 0x3f, 0xcc, 0x38, 0xda, 0xff, 0xdb, 0x82, 0xa7, 0x7a, 0xf4, 0x7b,
- 0xd5, 0x0d, 0x23, 0xf4, 0x56, 0x57, 0xdf, 0xa7, 0x4f, 0xd7, 0x77, 0x5a, 0x9b, 0xf5, 0x5c, 0x4d,
- 0x31, 0x09, 0xd1, 0xfa, 0xfd, 0x79, 0xc8, 0xbb, 0x11, 0x69, 0x49, 0x53, 0xcc, 0xeb, 0x8f, 0xde,
- 0xf1, 0x1e, 0x7d, 0x29, 0x8f, 0x48, 0x5b, 0xe0, 0x32, 0xe5, 0x87, 0x39, 0x5b, 0xfb, 0x9f, 0x5b,
- 0x40, 0xa7, 0x43, 0xcd, 0x15, 0x07, 0xdc, 0xfe, 0xe8, 0xb0, 0x2d, 0x4d, 0x32, 0x72, 0xff, 0xeb,
- 0xdf, 0x3a, 0x6c, 0x93, 0xfb, 0x47, 0x53, 0x23, 0x0a, 0x91, 0x02, 0x30, 0x43, 0x45, 0x9f, 0x85,
- 0x81, 0x90, 0xed, 0xd3, 0x42, 0xc2, 0x2c, 0x88, 0x4a, 0x03, 0x7c, 0xf7, 0xbe, 0x7f, 0x34, 0x75,
- 0x2a, 0x8b, 0xeb, 0xb4, 0xa2, 0xcd, 0xeb, 0x61, 0x41, 0x95, 0x8a, 0xb0, 0x16, 0x09, 0x43, 0xa7,
- 0x4e, 0xc4, 0x4a, 0x51, 0x22, 0x6c, 0x8d, 0x83, 0xb1, 0x2c, 0xb7, 0xff, 0x96, 0x05, 0xb4, 0x89,
- 0x91, 0x43, 0x59, 0xac, 0xfb, 0x35, 0x82, 0xd6, 0xd9, 0x52, 0xe1, 0x00, 0xf1, 0xf1, 0x9e, 0xe9,
- 0xb1, 0x54, 0x38, 0x92, 0xa1, 0xd3, 0x70, 0x10, 0x8e, 0x49, 0xa0, 0x8f, 0xc3, 0x70, 0x8d, 0xb4,
- 0x89, 0x57, 0x23, 0x5e, 0xd5, 0x25, 0xfc, 0xa3, 0x15, 0xcb, 0xe3, 0xc7, 0x47, 0x53, 0xc3, 0xf3,
- 0x1a, 0x1c, 0x1b, 0x58, 0xf6, 0x9f, 0x58, 0x70, 0x59, 0x91, 0xab, 0x90, 0x48, 0x2d, 0xab, 0x9f,
- 0xb6, 0x00, 0x14, 0x71, 0xaa, 0xd3, 0xd2, 0x29, 0xb0, 0x91, 0xc1, 0x14, 0xd0, 0x07, 0x21, 0x5e,
- 0x78, 0x0a, 0x1c, 0x62, 0x8d, 0x2d, 0x7a, 0x1d, 0x86, 0xf7, 0xfc, 0x66, 0xa7, 0x45, 0xd6, 0xfc,
- 0x8e, 0x17, 0x85, 0xa5, 0x3e, 0xd6, 0x8c, 0xa9, 0xb4, 0x71, 0xba, 0x1b, 0xe3, 0x95, 0x2f, 0x0b,
- 0xb2, 0xc3, 0x1a, 0x30, 0xc4, 0x06, 0x29, 0xfb, 0x75, 0x60, 0x4c, 0x5d, 0xaf, 0x43, 0x36, 0x3c,
- 0xf4, 0x1c, 0xe4, 0x49, 0x10, 0xf8, 0x81, 0x38, 0xed, 0xa8, 0x09, 0x79, 0x9b, 0x02, 0x31, 0x2f,
- 0x43, 0x2f, 0x50, 0x99, 0xeb, 0x36, 0x49, 0x8d, 0xcd, 0xa7, 0x42, 0x79, 0x54, 0xce, 0xa7, 0x05,
- 0x06, 0xc5, 0xa2, 0xd4, 0x9e, 0x86, 0xc1, 0x39, 0xca, 0x84, 0x04, 0x94, 0xae, 0x6e, 0xf4, 0x1e,
- 0x31, 0x8c, 0xde, 0xd2, 0xb8, 0xbd, 0x05, 0x57, 0xe6, 0x02, 0x42, 0x05, 0xc1, 0xad, 0x72, 0xa7,
- 0xba, 0x4b, 0x22, 0x6e, 0x96, 0x0a, 0xd1, 0xa7, 0x60, 0xc4, 0x67, 0x12, 0x69, 0xd5, 0xaf, 0xee,
- 0xba, 0x5e, 0x5d, 0x28, 0x61, 0x57, 0x04, 0x95, 0x91, 0x0d, 0xbd, 0x10, 0x9b, 0xb8, 0xf6, 0x7f,
- 0xce, 0xc1, 0xf0, 0x5c, 0xe0, 0x7b, 0x72, 0xb5, 0x5d, 0x80, 0xa4, 0x8c, 0x0c, 0x49, 0x99, 0x81,
- 0x95, 0x52, 0x6f, 0x7f, 0x2f, 0x29, 0x89, 0xde, 0x57, 0xcb, 0xbc, 0x2f, 0x2b, 0x65, 0xd3, 0xe0,
- 0xcb, 0x68, 0xc7, 0x1f, 0xdb, 0x14, 0x02, 0xf6, 0x7f, 0xb1, 0x60, 0x5c, 0x47, 0xbf, 0x00, 0xc1,
- 0x1c, 0x9a, 0x82, 0x79, 0x3d, 0xdb, 0xfe, 0xf6, 0x90, 0xc6, 0x1f, 0x0d, 0x98, 0xfd, 0xa4, 0x1f,
- 0x00, 0x7d, 0xd5, 0x82, 0xe1, 0x7d, 0x0d, 0x20, 0x3a, 0xbb, 0x9e, 0xdd, 0x1e, 0xc9, 0xbe, 0xfa,
- 0x8f, 0xca, 0xf5, 0xac, 0x43, 0xef, 0x27, 0xfe, 0x63, 0xa3, 0x25, 0x54, 0x9d, 0x0a, 0xab, 0x0d,
- 0x52, 0xeb, 0x34, 0xe5, 0x51, 0x47, 0x0d, 0x69, 0x45, 0xc0, 0xb1, 0xc2, 0x40, 0x6f, 0xc1, 0x44,
- 0xd5, 0xf7, 0xaa, 0x9d, 0x20, 0x20, 0x5e, 0xf5, 0x70, 0x93, 0xf9, 0xe9, 0x84, 0x50, 0x9f, 0x16,
- 0xd5, 0x26, 0xe6, 0x92, 0x08, 0xf7, 0xd3, 0x80, 0xb8, 0x9b, 0x10, 0xb7, 0x29, 0x87, 0x54, 0xec,
- 0xb2, 0xf3, 0x50, 0x41, 0xb7, 0x29, 0x33, 0x30, 0x96, 0xe5, 0xe8, 0x0e, 0x5c, 0x0b, 0x23, 0xaa,
- 0x2b, 0x7b, 0xf5, 0x79, 0xe2, 0xd4, 0x9a, 0xae, 0x47, 0xd5, 0x51, 0xdf, 0xab, 0xf1, 0x03, 0x7e,
- 0x5f, 0xf9, 0xa9, 0xe3, 0xa3, 0xa9, 0x6b, 0x95, 0x74, 0x14, 0xdc, 0xab, 0x2e, 0xfa, 0x2c, 0x4c,
- 0x86, 0x9d, 0x6a, 0x95, 0x84, 0xe1, 0x4e, 0xa7, 0xf9, 0xaa, 0xbf, 0x1d, 0x2e, 0xb9, 0x21, 0xd5,
- 0xa5, 0x57, 0xdd, 0x96, 0x1b, 0xb1, 0x63, 0x7c, 0xbe, 0x7c, 0xfd, 0xf8, 0x68, 0x6a, 0xb2, 0xd2,
- 0x13, 0x0b, 0x9f, 0x40, 0x01, 0x61, 0xb8, 0xca, 0x85, 0x5f, 0x17, 0xed, 0x41, 0x46, 0x7b, 0xf2,
- 0xf8, 0x68, 0xea, 0xea, 0x42, 0x2a, 0x06, 0xee, 0x51, 0x93, 0x7e, 0xc1, 0xc8, 0x6d, 0x91, 0x77,
- 0x7d, 0x8f, 0x30, 0x1b, 0xa0, 0xf6, 0x05, 0xb7, 0x04, 0x1c, 0x2b, 0x0c, 0xf4, 0x76, 0x3c, 0x13,
- 0xe9, 0x72, 0x11, 0xb6, 0xbc, 0xb3, 0x4b, 0xb8, 0xcb, 0xc7, 0x47, 0x53, 0xe3, 0xf7, 0x34, 0x4a,
- 0x74, 0xc9, 0x61, 0x83, 0xb6, 0xfd, 0x07, 0x39, 0x40, 0xdd, 0x22, 0x02, 0xad, 0xc0, 0x80, 0x53,
- 0x8d, 0xdc, 0x3d, 0x22, 0x9c, 0x67, 0xcf, 0xa5, 0xed, 0x53, 0x9c, 0x15, 0x26, 0x3b, 0x84, 0xce,
- 0x10, 0x12, 0xcb, 0x95, 0x59, 0x56, 0x15, 0x0b, 0x12, 0xc8, 0x87, 0x89, 0xa6, 0x13, 0x46, 0x72,
- 0xae, 0xd6, 0x68, 0x97, 0x85, 0x60, 0xfd, 0xb1, 0xd3, 0x75, 0x8a, 0xd6, 0x28, 0x5f, 0xa1, 0x33,
- 0x77, 0x35, 0x49, 0x08, 0x77, 0xd3, 0x46, 0x5f, 0x60, 0x1b, 0x3e, 0x57, 0x74, 0xe4, 0x4e, 0xbb,
- 0x92, 0xc9, 0x86, 0xcf, 0x69, 0x1a, 0x9b, 0xbd, 0x60, 0x83, 0x35, 0x96, 0xf6, 0xbf, 0x04, 0x18,
- 0x9c, 0x9f, 0x5d, 0xdc, 0x72, 0xc2, 0xdd, 0x53, 0x38, 0xe0, 0xe8, 0xec, 0x10, 0xca, 0x4a, 0x72,
- 0x7d, 0x4b, 0x25, 0x06, 0x2b, 0x0c, 0xe4, 0xc1, 0x80, 0xeb, 0xd1, 0x05, 0x51, 0x1a, 0xcd, 0xca,
- 0xc4, 0xaa, 0xb4, 0x57, 0x76, 0x90, 0x5a, 0x66, 0xd4, 0xb1, 0xe0, 0x82, 0xde, 0x87, 0xa2, 0x23,
- 0x1d, 0xab, 0x62, 0x5b, 0x5a, 0xc9, 0xe2, 0xb4, 0x2d, 0x48, 0xea, 0xbe, 0x4c, 0x01, 0xc2, 0x31,
- 0x43, 0xf4, 0x45, 0x0b, 0x86, 0x64, 0xd7, 0x31, 0xd9, 0x11, 0x46, 0x98, 0xb5, 0xec, 0xfa, 0x8c,
- 0xc9, 0x0e, 0x37, 0x86, 0x6a, 0x00, 0xac, 0xb3, 0xec, 0x52, 0x47, 0xf3, 0xa7, 0x51, 0x47, 0xd1,
- 0x3e, 0x14, 0xf7, 0xdd, 0xa8, 0xc1, 0x36, 0x9e, 0xd2, 0x00, 0x9b, 0x82, 0x0b, 0x8f, 0xde, 0x6a,
- 0x4a, 0x2e, 0x1e, 0xb1, 0x7b, 0x92, 0x01, 0x8e, 0x79, 0xa1, 0x19, 0xce, 0x98, 0x39, 0xa6, 0x99,
- 0xc8, 0x2a, 0x9a, 0x15, 0x58, 0x01, 0x8e, 0x71, 0xe8, 0x10, 0x0f, 0xd3, 0x7f, 0x15, 0xf2, 0x4e,
- 0x87, 0xae, 0x63, 0xe1, 0xa5, 0xc8, 0x60, 0x5e, 0x49, 0x8a, 0x7c, 0xb0, 0xee, 0x69, 0x3c, 0xb0,
- 0xc1, 0x91, 0xae, 0x91, 0xfd, 0x06, 0xf1, 0x84, 0x9b, 0x52, 0xad, 0x91, 0x7b, 0x0d, 0xe2, 0x61,
- 0x56, 0x82, 0xde, 0xe7, 0x3a, 0x3c, 0xd7, 0x71, 0x99, 0x7f, 0x32, 0x13, 0x4f, 0x5f, 0xac, 0x37,
- 0x97, 0x47, 0xa5, 0xf2, 0xce, 0xff, 0x63, 0x8d, 0x1f, 0x55, 0x97, 0x7d, 0xef, 0xf6, 0x81, 0x1b,
- 0x09, 0xff, 0xa6, 0x92, 0x74, 0x1b, 0x0c, 0x8a, 0x45, 0x29, 0x37, 0x32, 0xd2, 0x49, 0x10, 0x96,
- 0x86, 0xcd, 0x63, 0x14, 0x9f, 0x29, 0x21, 0x96, 0xe5, 0xe8, 0xd7, 0x2c, 0xc8, 0x37, 0x7c, 0x7f,
- 0x37, 0x2c, 0x8d, 0xb0, 0xc9, 0x91, 0x81, 0xaa, 0x27, 0x24, 0xce, 0xf4, 0x12, 0x25, 0x7b, 0xdb,
- 0x8b, 0x82, 0xc3, 0xf2, 0xcb, 0x52, 0x01, 0x62, 0xb0, 0xfb, 0x47, 0x53, 0xa3, 0xab, 0xee, 0x0e,
- 0xa9, 0x1e, 0x56, 0x9b, 0x84, 0x41, 0xbe, 0xf4, 0x1d, 0x0d, 0x72, 0x7b, 0x8f, 0x78, 0x11, 0xe6,
- 0xad, 0x9a, 0xfc, 0xc8, 0x02, 0x88, 0x09, 0xa1, 0x71, 0x6e, 0x67, 0x66, 0x42, 0x8c, 0x99, 0x96,
- 0x11, 0x91, 0xe7, 0x01, 0x2e, 0xc9, 0x33, 0x38, 0x50, 0x19, 0x4d, 0x13, 0x27, 0x8a, 0x4f, 0xe6,
- 0x5e, 0xb1, 0xec, 0x7f, 0x65, 0xc1, 0x10, 0xed, 0x9c, 0x14, 0x81, 0x2f, 0xc0, 0x40, 0xe4, 0x04,
- 0x75, 0x61, 0x29, 0xd3, 0x3e, 0xc7, 0x16, 0x83, 0x62, 0x51, 0x8a, 0x3c, 0xc8, 0x47, 0x4e, 0xb8,
- 0x2b, 0xb5, 0xcb, 0xe5, 0xcc, 0x86, 0x38, 0x56, 0x2c, 0xe9, 0xbf, 0x10, 0x73, 0x36, 0xe8, 0x45,
- 0x28, 0x50, 0x05, 0x60, 0xc1, 0x09, 0xa5, 0x91, 0x79, 0x98, 0x0a, 0xf1, 0x05, 0x01, 0xc3, 0xaa,
- 0xd4, 0xfe, 0x9b, 0x39, 0xe8, 0x9f, 0xe7, 0xe7, 0x8c, 0x81, 0xd0, 0xef, 0x04, 0x55, 0x22, 0xf4,
- 0xcd, 0x0c, 0xe6, 0x34, 0xa5, 0x5b, 0x61, 0x34, 0x35, 0x4d, 0x9f, 0xfd, 0xc7, 0x82, 0x17, 0xfa,
- 0x25, 0x0b, 0x46, 0xa3, 0xc0, 0xf1, 0xc2, 0x1d, 0x3f, 0x68, 0x71, 0x03, 0x59, 0x2e, 0xab, 0x59,
- 0xb8, 0x65, 0xd0, 0xad, 0x44, 0xa4, 0x1d, 0x87, 0x03, 0x98, 0x65, 0x38, 0xd1, 0x06, 0xfb, 0x57,
- 0x2c, 0x80, 0xb8, 0xf5, 0xe8, 0x43, 0x0b, 0x46, 0x1c, 0xdd, 0xc1, 0x28, 0xc6, 0x68, 0x23, 0x3b,
- 0x63, 0x2f, 0x23, 0x5b, 0x9e, 0xa0, 0x27, 0x50, 0x03, 0x84, 0x4d, 0xc6, 0xf6, 0x27, 0x20, 0xcf,
- 0x56, 0x07, 0xd3, 0xc5, 0x85, 0x95, 0x2f, 0x69, 0xda, 0x94, 0xd6, 0x3f, 0xac, 0x30, 0xec, 0xb7,
- 0x60, 0xf4, 0xf6, 0x01, 0xa9, 0x76, 0x22, 0x3f, 0xe0, 0xd6, 0x40, 0xf4, 0x2a, 0xa0, 0x90, 0x04,
- 0x7b, 0x6e, 0x95, 0xcc, 0x56, 0xab, 0xf4, 0x64, 0xbd, 0x1e, 0xeb, 0x06, 0x93, 0x82, 0x12, 0xaa,
- 0x74, 0x61, 0xe0, 0x94, 0x5a, 0xf6, 0xef, 0x58, 0x30, 0xa4, 0x79, 0x9b, 0xe8, 0x4e, 0x5d, 0x9f,
- 0xab, 0xf0, 0x73, 0xb7, 0x18, 0xaa, 0x95, 0x4c, 0xfc, 0x59, 0x9c, 0x64, 0xbc, 0x8d, 0x28, 0x10,
- 0x8e, 0x19, 0x3e, 0xc0, 0x13, 0x65, 0xff, 0x33, 0x0b, 0xae, 0xa4, 0xba, 0xc6, 0x1e, 0x73, 0xb3,
- 0x67, 0xa0, 0xb8, 0x4b, 0x0e, 0x17, 0xd8, 0x1c, 0x4c, 0x3a, 0x92, 0x56, 0x64, 0x01, 0x8e, 0x71,
- 0xec, 0x6f, 0x58, 0x10, 0x53, 0xa2, 0xa2, 0x68, 0x3b, 0x6e, 0xb9, 0x26, 0x8a, 0x04, 0x27, 0x51,
- 0x8a, 0xde, 0x87, 0x6b, 0xe6, 0x17, 0x64, 0xe6, 0xe2, 0xb3, 0x9b, 0xe2, 0xf9, 0x99, 0x29, 0x9d,
- 0x12, 0xee, 0xc5, 0xc2, 0xbe, 0x0b, 0xf9, 0x45, 0xa7, 0x53, 0x27, 0xa7, 0x32, 0xe2, 0x50, 0x31,
- 0x16, 0x10, 0xa7, 0x19, 0x49, 0x35, 0x5d, 0x88, 0x31, 0x2c, 0x60, 0x58, 0x95, 0xda, 0xdf, 0xeb,
- 0x87, 0x21, 0x2d, 0x8a, 0x85, 0xee, 0xe3, 0x01, 0x69, 0xfb, 0x49, 0x5d, 0x97, 0x7e, 0x6c, 0xcc,
- 0x4a, 0xe8, 0xfa, 0x09, 0xc8, 0x9e, 0x1b, 0x72, 0x91, 0x63, 0xac, 0x1f, 0x2c, 0xe0, 0x58, 0x61,
- 0xa0, 0x29, 0xc8, 0xd7, 0x48, 0x3b, 0x6a, 0x30, 0x69, 0xda, 0x5f, 0x2e, 0xd2, 0xa6, 0xce, 0x53,
- 0x00, 0xe6, 0x70, 0x8a, 0xb0, 0x43, 0xa2, 0x6a, 0x83, 0x59, 0xf5, 0x8a, 0x1c, 0x61, 0x81, 0x02,
- 0x30, 0x87, 0xa7, 0x38, 0x57, 0xf2, 0xe7, 0xef, 0x5c, 0x19, 0xc8, 0xd8, 0xb9, 0x82, 0xda, 0x70,
- 0x29, 0x0c, 0x1b, 0x9b, 0x81, 0xbb, 0xe7, 0x44, 0x24, 0x9e, 0x39, 0x83, 0x67, 0xe1, 0x73, 0xed,
- 0xf8, 0x68, 0xea, 0x52, 0xa5, 0xb2, 0x94, 0xa4, 0x82, 0xd3, 0x48, 0xa3, 0x0a, 0x5c, 0x71, 0xbd,
- 0x90, 0x54, 0x3b, 0x01, 0x59, 0xae, 0x7b, 0x7e, 0x40, 0x96, 0xfc, 0x90, 0x92, 0x13, 0x61, 0x67,
- 0xca, 0x69, 0xbb, 0x9c, 0x86, 0x84, 0xd3, 0xeb, 0xa2, 0x45, 0x98, 0xa8, 0xb9, 0xa1, 0xb3, 0xdd,
- 0x24, 0x95, 0xce, 0x76, 0xcb, 0xa7, 0x07, 0x36, 0x1e, 0xa9, 0x52, 0x28, 0x3f, 0x29, 0x4d, 0x13,
- 0xf3, 0x49, 0x04, 0xdc, 0x5d, 0xc7, 0xfe, 0xb6, 0x05, 0xc3, 0x7a, 0x48, 0x01, 0xd5, 0x61, 0xa1,
- 0x31, 0xbf, 0x50, 0xe1, 0x52, 0x36, 0xbb, 0xbd, 0x74, 0x49, 0xd1, 0x8c, 0xcf, 0x7c, 0x31, 0x0c,
- 0x6b, 0x3c, 0x4f, 0x11, 0x46, 0xf9, 0x1c, 0xe4, 0x77, 0x7c, 0xba, 0xd5, 0xf7, 0x99, 0x96, 0xd9,
- 0x05, 0x0a, 0xc4, 0xbc, 0xcc, 0xfe, 0x5f, 0x16, 0x5c, 0x4d, 0x8f, 0x96, 0xf8, 0x61, 0xe8, 0xe4,
- 0x4d, 0x00, 0xda, 0x15, 0x43, 0x5c, 0x6a, 0xb1, 0xb0, 0xb2, 0x04, 0x6b, 0x58, 0xa7, 0xeb, 0xf6,
- 0xf7, 0xa9, 0xba, 0x19, 0xf3, 0xf9, 0x8a, 0x05, 0x23, 0x94, 0xed, 0x4a, 0xb0, 0x6d, 0xf4, 0x76,
- 0x23, 0x9b, 0xde, 0x2a, 0xb2, 0xb1, 0x01, 0xda, 0x00, 0x63, 0x93, 0x39, 0xfa, 0x71, 0x28, 0x3a,
- 0xb5, 0x5a, 0x40, 0xc2, 0x50, 0xb9, 0x23, 0x98, 0x8b, 0x6f, 0x56, 0x02, 0x71, 0x5c, 0x4e, 0x45,
- 0x5c, 0xa3, 0xb6, 0x13, 0x52, 0xa9, 0x21, 0xec, 0x6e, 0x4a, 0xc4, 0x51, 0x26, 0x14, 0x8e, 0x15,
- 0x86, 0xfd, 0x0b, 0xfd, 0x60, 0xf2, 0x46, 0x35, 0x18, 0xdb, 0x0d, 0xb6, 0xe7, 0x98, 0x1b, 0xf2,
- 0x61, 0x1c, 0xc2, 0x97, 0x8e, 0x8f, 0xa6, 0xc6, 0x56, 0x4c, 0x0a, 0x38, 0x49, 0x52, 0x70, 0x59,
- 0x21, 0x87, 0x91, 0xb3, 0xfd, 0x30, 0x1b, 0x91, 0xe4, 0xa2, 0x53, 0xc0, 0x49, 0x92, 0xe8, 0x13,
- 0x30, 0xb4, 0x1b, 0x6c, 0x4b, 0x01, 0x9a, 0xf4, 0xc2, 0xae, 0xc4, 0x45, 0x58, 0xc7, 0xa3, 0x43,
- 0xb8, 0x1b, 0x6c, 0xd3, 0x0d, 0x47, 0x86, 0x15, 0xab, 0x21, 0x5c, 0x11, 0x70, 0xac, 0x30, 0x50,
- 0x1b, 0xd0, 0xae, 0x1c, 0x3d, 0xe5, 0x74, 0x15, 0x72, 0xfe, 0xf4, 0x3e, 0x5b, 0x16, 0x82, 0xb1,
- 0xd2, 0x45, 0x07, 0xa7, 0xd0, 0x46, 0xaf, 0xc3, 0xb5, 0xdd, 0x60, 0x5b, 0x6c, 0xc3, 0x9b, 0x81,
- 0xeb, 0x55, 0xdd, 0xb6, 0x11, 0x42, 0x3c, 0x25, 0x9a, 0x7b, 0x6d, 0x25, 0x1d, 0x0d, 0xf7, 0xaa,
- 0x6f, 0xff, 0xd7, 0x1c, 0xb0, 0xd8, 0x4c, 0xaa, 0x59, 0xb4, 0x48, 0xd4, 0xf0, 0x6b, 0x49, 0xcd,
- 0x62, 0x8d, 0x41, 0xb1, 0x28, 0x95, 0xc1, 0x1e, 0xb9, 0x1e, 0xc1, 0x1e, 0xfb, 0x30, 0xd8, 0x20,
- 0x4e, 0x8d, 0x04, 0xd2, 0x10, 0xb6, 0x9a, 0x4d, 0x34, 0xe9, 0x12, 0x23, 0x1a, 0x1f, 0x70, 0xf9,
- 0xff, 0x10, 0x4b, 0x6e, 0xe8, 0x93, 0x30, 0x4a, 0x75, 0x04, 0xbf, 0x13, 0x49, 0xab, 0x6f, 0x3f,
- 0xb3, 0xfa, 0xb2, 0xfd, 0x6e, 0xcb, 0x28, 0xc1, 0x09, 0x4c, 0x34, 0x0f, 0xe3, 0xc2, 0x42, 0xab,
- 0x0c, 0x6c, 0x62, 0x60, 0x55, 0x6c, 0x77, 0x25, 0x51, 0x8e, 0xbb, 0x6a, 0x50, 0x89, 0xbc, 0xed,
- 0xd7, 0x78, 0x3c, 0xab, 0x26, 0x91, 0xcb, 0x7e, 0xed, 0x10, 0xb3, 0x12, 0xfb, 0x37, 0xe8, 0x3e,
- 0xa2, 0x85, 0xc6, 0x3e, 0x28, 0x72, 0x26, 0x8c, 0x07, 0x93, 0x9f, 0x97, 0x96, 0x32, 0x18, 0xcc,
- 0x07, 0x0c, 0xa4, 0xfd, 0x2d, 0x2a, 0x1a, 0xd5, 0x88, 0x9f, 0xc2, 0x9e, 0xf8, 0x9c, 0x7e, 0x32,
- 0xef, 0xa5, 0xe4, 0x7d, 0x01, 0x8a, 0xec, 0xc7, 0x42, 0xe0, 0xb7, 0x84, 0x59, 0x0f, 0x67, 0x39,
- 0x33, 0xc4, 0x09, 0x94, 0x89, 0xc9, 0xbb, 0x92, 0x11, 0x8e, 0x79, 0xda, 0x3e, 0x8c, 0x27, 0xb1,
- 0xd1, 0x9b, 0x30, 0x1c, 0x4a, 0x49, 0x13, 0x87, 0x9e, 0x9d, 0x52, 0x22, 0x31, 0x23, 0x53, 0x45,
- 0xab, 0x8e, 0x0d, 0x62, 0xf6, 0x06, 0x0c, 0x64, 0x3a, 0x84, 0xf6, 0xd7, 0x2d, 0x28, 0x32, 0x33,
- 0x7f, 0x3d, 0x70, 0x5a, 0x71, 0x95, 0xbe, 0x13, 0x46, 0x3d, 0x84, 0x41, 0x7e, 0x20, 0x90, 0x7e,
- 0xe8, 0x0c, 0x26, 0x10, 0xbf, 0x94, 0x14, 0x4f, 0x20, 0x7e, 0xf2, 0x08, 0xb1, 0xe4, 0x64, 0xff,
- 0x5c, 0x0e, 0x06, 0x96, 0xbd, 0x76, 0xe7, 0x4f, 0xfd, 0xc5, 0x98, 0x35, 0xe8, 0x5f, 0x8e, 0x48,
- 0xcb, 0xbc, 0xbf, 0x35, 0x5c, 0x7e, 0x5e, 0xbf, 0xbb, 0x55, 0x32, 0xef, 0x6e, 0x61, 0x67, 0x5f,
- 0x46, 0x40, 0x08, 0x83, 0x54, 0x1c, 0x7e, 0xf7, 0x12, 0x14, 0x57, 0x9d, 0x6d, 0xd2, 0x5c, 0x21,
- 0x87, 0x21, 0x3d, 0x89, 0x70, 0x4f, 0xa6, 0x15, 0x9f, 0x44, 0x0c, 0xaf, 0xe3, 0x34, 0x0c, 0x31,
- 0x6c, 0xc6, 0xe8, 0x14, 0xf8, 0xff, 0x24, 0x07, 0x23, 0x86, 0x45, 0xcc, 0xf0, 0x13, 0x58, 0x0f,
- 0xf4, 0x13, 0x18, 0x76, 0xfb, 0xdc, 0xe3, 0xb6, 0xdb, 0xf7, 0x5d, 0xb8, 0xdd, 0xde, 0x6e, 0x42,
- 0xff, 0xaa, 0xeb, 0xed, 0x9e, 0x6e, 0xb5, 0x87, 0x55, 0xbf, 0xdd, 0xb5, 0xda, 0x2b, 0x14, 0x88,
- 0x79, 0x99, 0xdc, 0x1a, 0xfa, 0xd2, 0xb7, 0x06, 0xfb, 0x4b, 0x16, 0x4c, 0xac, 0x91, 0x96, 0xef,
- 0xbe, 0xeb, 0xc4, 0xf1, 0x35, 0xb4, 0x52, 0xc3, 0x8d, 0x44, 0x28, 0x86, 0xaa, 0xb4, 0xe4, 0x46,
- 0x98, 0xc2, 0x1f, 0x60, 0x33, 0x61, 0xd1, 0xc0, 0x54, 0x65, 0x5b, 0x8f, 0x75, 0xa7, 0x38, 0x72,
- 0x46, 0x16, 0xe0, 0x18, 0xc7, 0xfe, 0x3d, 0x0b, 0x06, 0x79, 0x23, 0x88, 0xa4, 0x6d, 0xf5, 0xa0,
- 0xdd, 0x80, 0x3c, 0xab, 0x27, 0xa6, 0xc6, 0x62, 0x06, 0xb6, 0x74, 0x4a, 0x8e, 0x4f, 0x64, 0xf6,
- 0x13, 0x73, 0x06, 0x4c, 0x91, 0x71, 0x0e, 0x66, 0x55, 0x68, 0x51, 0xac, 0xc8, 0x30, 0x28, 0x16,
- 0xa5, 0xf6, 0xd7, 0xfa, 0xa0, 0x20, 0xbd, 0x94, 0x3c, 0x2c, 0xde, 0xf3, 0xfc, 0xc8, 0xe1, 0x4e,
- 0x3c, 0x2e, 0xaa, 0xde, 0x7c, 0xf4, 0x56, 0x4a, 0x0e, 0xd3, 0xb3, 0x31, 0x75, 0x6e, 0x2b, 0x57,
- 0x6a, 0xa9, 0x56, 0x82, 0xf5, 0x46, 0xa0, 0xcf, 0xc3, 0x40, 0x93, 0x2e, 0x61, 0x29, 0xb9, 0xee,
- 0x66, 0xd8, 0x1c, 0x26, 0x1b, 0x44, 0x4b, 0xd4, 0x08, 0x71, 0x20, 0x16, 0x5c, 0x27, 0x3f, 0x0d,
- 0xe3, 0xc9, 0x56, 0xa7, 0x18, 0xe6, 0x2f, 0x1b, 0x7b, 0x97, 0x66, 0x47, 0x9f, 0xfc, 0xf3, 0x42,
- 0x04, 0x9d, 0xbd, 0xaa, 0xfd, 0x1a, 0x0c, 0xad, 0x91, 0x28, 0x70, 0xab, 0x8c, 0xc0, 0x83, 0x26,
- 0xd7, 0xa9, 0xb6, 0xcf, 0x2f, 0xb3, 0xc9, 0x4a, 0x69, 0x86, 0xe8, 0x7d, 0x80, 0x76, 0xe0, 0x53,
- 0x8d, 0x96, 0x74, 0xe4, 0xc7, 0xce, 0x40, 0x51, 0xdd, 0x54, 0x34, 0xb9, 0x7b, 0x27, 0xfe, 0x8f,
- 0x35, 0x7e, 0xf6, 0x0d, 0xc8, 0xaf, 0x75, 0x22, 0x72, 0xf0, 0x60, 0x51, 0x61, 0xbf, 0x09, 0xc3,
- 0x0c, 0x75, 0xc9, 0x6f, 0xd2, 0x4d, 0x82, 0xf6, 0xb4, 0x45, 0xff, 0x27, 0x0d, 0x6a, 0x0c, 0x09,
- 0xf3, 0x32, 0xba, 0x02, 0x1a, 0x7e, 0xb3, 0x46, 0x02, 0x31, 0x1e, 0xea, 0xfb, 0x2e, 0x31, 0x28,
- 0x16, 0xa5, 0xf6, 0x4f, 0xe7, 0x60, 0x88, 0x55, 0x14, 0xd2, 0xe3, 0x10, 0x06, 0x1b, 0x9c, 0x8f,
- 0x18, 0x92, 0x0c, 0xa2, 0x51, 0xf4, 0xd6, 0x6b, 0x4a, 0x27, 0x07, 0x60, 0xc9, 0x8f, 0xb2, 0xde,
- 0x77, 0xdc, 0x88, 0xb2, 0xce, 0x9d, 0x2f, 0xeb, 0x7b, 0x9c, 0x0d, 0x96, 0xfc, 0xec, 0x7f, 0x67,
- 0x01, 0xac, 0xfb, 0x35, 0x82, 0x49, 0xd8, 0x69, 0x46, 0xe8, 0x27, 0x20, 0xdf, 0x6e, 0x38, 0x61,
- 0xd2, 0x48, 0x9e, 0xdf, 0xa4, 0xc0, 0xfb, 0x47, 0x53, 0x45, 0x8a, 0xcb, 0xfe, 0x60, 0x8e, 0xa8,
- 0x07, 0x33, 0xe6, 0x4e, 0x0e, 0x66, 0x44, 0x6d, 0x18, 0xf4, 0x3b, 0x11, 0x55, 0x8d, 0xc4, 0x0e,
- 0x95, 0x81, 0x8f, 0x68, 0x83, 0x13, 0xe4, 0x57, 0x38, 0xc5, 0x1f, 0x2c, 0xd9, 0xd8, 0x7f, 0x34,
- 0xc6, 0x7b, 0x27, 0x3e, 0xf1, 0x24, 0xe4, 0x5c, 0x79, 0xc2, 0x03, 0xd1, 0xcc, 0xdc, 0xf2, 0x3c,
- 0xce, 0xb9, 0x35, 0x35, 0x1b, 0x73, 0x3d, 0x37, 0xae, 0x4f, 0xc0, 0x50, 0xcd, 0x0d, 0xdb, 0x4d,
- 0xe7, 0x70, 0x3d, 0xe5, 0x78, 0x3d, 0x1f, 0x17, 0x61, 0x1d, 0x0f, 0xbd, 0x24, 0x02, 0x50, 0xfb,
- 0x8d, 0x23, 0x95, 0x0c, 0x40, 0x2d, 0xd0, 0xe6, 0x69, 0xb1, 0xa7, 0xaf, 0xc0, 0xb0, 0xdc, 0x56,
- 0x19, 0x17, 0x7e, 0x9c, 0x52, 0x81, 0x89, 0x5b, 0x5a, 0x19, 0x36, 0x30, 0xbb, 0x94, 0x80, 0x81,
- 0x8b, 0x77, 0xde, 0x7f, 0x0a, 0x46, 0xe4, 0x5f, 0xb6, 0x9b, 0x97, 0x2e, 0xb3, 0xd6, 0x2b, 0xb3,
- 0xcf, 0x96, 0x5e, 0x88, 0x4d, 0xdc, 0x78, 0xea, 0x0d, 0x9e, 0x76, 0xea, 0xdd, 0x04, 0xd8, 0xf6,
- 0x3b, 0x5e, 0xcd, 0x09, 0x0e, 0x97, 0xe7, 0x45, 0xa8, 0x8f, 0x52, 0x89, 0xcb, 0xaa, 0x04, 0x6b,
- 0x58, 0xfa, 0x74, 0x2d, 0x3e, 0x60, 0xba, 0xbe, 0x09, 0x45, 0x16, 0x16, 0x45, 0x6a, 0xb3, 0x91,
- 0x70, 0x82, 0x9f, 0x25, 0x82, 0x46, 0x29, 0x0f, 0x15, 0x49, 0x04, 0xc7, 0xf4, 0xd0, 0x67, 0x01,
- 0x76, 0x5c, 0xcf, 0x0d, 0x1b, 0x8c, 0xfa, 0xd0, 0x99, 0xa9, 0xab, 0x7e, 0x2e, 0x28, 0x2a, 0x58,
- 0xa3, 0x88, 0xde, 0x82, 0x09, 0x12, 0x46, 0x6e, 0xcb, 0x89, 0x48, 0x4d, 0xc5, 0xe5, 0x97, 0x98,
- 0x4d, 0x40, 0x05, 0xa6, 0xdd, 0x4e, 0x22, 0xdc, 0x4f, 0x03, 0xe2, 0x6e, 0x42, 0xe8, 0x15, 0x28,
- 0xb4, 0x03, 0xbf, 0x1e, 0x90, 0x30, 0x2c, 0x4d, 0xb2, 0x61, 0x7c, 0x5a, 0x2a, 0xc7, 0x9b, 0x02,
- 0x7e, 0x5f, 0xfb, 0x8d, 0x15, 0x36, 0xfa, 0x81, 0x05, 0x13, 0x01, 0xe1, 0x9e, 0xd1, 0x50, 0x35,
- 0xec, 0x0a, 0x93, 0x7a, 0xd5, 0x2c, 0x12, 0x24, 0xc8, 0xc5, 0x3e, 0x8d, 0x93, 0x5c, 0xf8, 0x76,
- 0x4f, 0x64, 0xef, 0xbb, 0xca, 0xef, 0xa7, 0x01, 0xbf, 0xf4, 0x9d, 0xa9, 0xa9, 0xee, 0x6c, 0x1d,
- 0x8a, 0x38, 0x5d, 0x79, 0x7f, 0xe5, 0x3b, 0x53, 0xe3, 0xf2, 0x7f, 0x3c, 0x68, 0x5d, 0x9d, 0xa4,
- 0xbb, 0x57, 0xdb, 0xaf, 0x2d, 0x6f, 0x8a, 0x68, 0x05, 0xb5, 0x7b, 0x6d, 0x52, 0x20, 0xe6, 0x65,
- 0xe8, 0x45, 0x28, 0xd4, 0x1c, 0xd2, 0xf2, 0x3d, 0x52, 0x2b, 0x8d, 0xc4, 0xee, 0xa0, 0x79, 0x01,
- 0xc3, 0xaa, 0x14, 0x35, 0x61, 0xc0, 0x65, 0xe7, 0x4c, 0x11, 0x9a, 0x94, 0xc1, 0xe1, 0x96, 0x9f,
- 0x5b, 0x65, 0x60, 0x12, 0x13, 0xa5, 0x82, 0x87, 0x2e, 0xbb, 0xc7, 0x2e, 0x44, 0x76, 0xd3, 0x91,
- 0xa8, 0x36, 0xdc, 0x66, 0x2d, 0x20, 0x5e, 0x69, 0x9c, 0x1d, 0xdb, 0xd8, 0x48, 0xcc, 0x09, 0x18,
- 0x56, 0xa5, 0xe8, 0xcf, 0xc1, 0x88, 0xdf, 0x89, 0xd8, 0x22, 0xa7, 0xdf, 0x3f, 0x2c, 0x4d, 0x30,
- 0x74, 0xe6, 0x68, 0xde, 0xd0, 0x0b, 0xb0, 0x89, 0x47, 0x85, 0x6d, 0xc3, 0x0f, 0x23, 0xfa, 0x87,
- 0x09, 0xdb, 0xab, 0xa6, 0xb0, 0x5d, 0xd2, 0xca, 0xb0, 0x81, 0x89, 0xbe, 0x6a, 0xc1, 0x44, 0x2b,
- 0x79, 0x00, 0x29, 0x5d, 0x63, 0x23, 0x53, 0xc9, 0x42, 0x51, 0x4d, 0x90, 0xe6, 0xf1, 0x78, 0x5d,
- 0x60, 0xdc, 0xdd, 0x08, 0x76, 0xb7, 0x30, 0x3c, 0xf4, 0xaa, 0x8d, 0xc0, 0xf7, 0xcc, 0xe6, 0x3d,
- 0xc9, 0x9a, 0xf7, 0x66, 0x46, 0xab, 0x2c, 0x8d, 0x45, 0xf9, 0xc9, 0xe3, 0xa3, 0xa9, 0x2b, 0xa9,
- 0x45, 0x38, 0xbd, 0x51, 0x93, 0xf3, 0x70, 0x35, 0x7d, 0xa5, 0x3e, 0x48, 0x63, 0xee, 0xd3, 0x35,
- 0xe6, 0x05, 0x78, 0xb2, 0x67, 0xa3, 0xa8, 0xcc, 0x97, 0xea, 0x95, 0x65, 0xca, 0xfc, 0x2e, 0x75,
- 0x68, 0x14, 0x86, 0xf5, 0x1c, 0x2b, 0xcc, 0xeb, 0xaf, 0xdd, 0x6b, 0xa5, 0xe7, 0x7c, 0xbf, 0x92,
- 0xb9, 0xfb, 0x7c, 0xa3, 0xd2, 0xe5, 0x3e, 0x57, 0x20, 0x1c, 0x33, 0x3c, 0x8d, 0xd7, 0x3f, 0xf5,
- 0x12, 0xee, 0x63, 0x6e, 0xf6, 0x99, 0xbd, 0xfe, 0xff, 0xb6, 0x1f, 0x62, 0x4a, 0xe8, 0x25, 0x28,
- 0x10, 0xaf, 0xd6, 0xf6, 0x5d, 0x2f, 0x4a, 0x5a, 0x62, 0x6e, 0x0b, 0x38, 0x56, 0x18, 0x5a, 0x8c,
- 0x40, 0xee, 0xc4, 0x18, 0x81, 0x1a, 0x8c, 0x39, 0xcc, 0x84, 0x1d, 0x7b, 0x78, 0xfb, 0xce, 0xec,
- 0x92, 0x99, 0x35, 0x29, 0xe0, 0x24, 0x49, 0xca, 0x25, 0x8c, 0xab, 0x32, 0x2e, 0xfd, 0x67, 0xe6,
- 0x52, 0x31, 0x29, 0xe0, 0x24, 0x49, 0xf4, 0x16, 0x94, 0xaa, 0xec, 0x22, 0x08, 0xef, 0xe3, 0xf2,
- 0xce, 0xba, 0x1f, 0x6d, 0x06, 0x24, 0x24, 0x1e, 0xf7, 0xc0, 0x17, 0xca, 0xcf, 0x8a, 0x51, 0x28,
- 0xcd, 0xf5, 0xc0, 0xc3, 0x3d, 0x29, 0x50, 0xad, 0x8e, 0xf9, 0x97, 0xdd, 0xe8, 0x70, 0xcb, 0xdf,
- 0x25, 0xd2, 0x39, 0xa0, 0xb4, 0xba, 0x8a, 0x5e, 0x88, 0x4d, 0x5c, 0xf4, 0xf3, 0x16, 0x8c, 0x34,
- 0xa5, 0x61, 0x0d, 0x77, 0x9a, 0x32, 0x8b, 0x0b, 0xce, 0x64, 0xfa, 0xad, 0xea, 0x94, 0xb9, 0xc0,
- 0x37, 0x40, 0xd8, 0xe4, 0x6d, 0x7f, 0xcb, 0x82, 0xf1, 0x64, 0x35, 0xb4, 0x0b, 0xcf, 0xb4, 0x9c,
- 0x60, 0x77, 0xd9, 0xdb, 0x09, 0x58, 0x88, 0x64, 0xc4, 0xbf, 0xea, 0xec, 0x4e, 0x44, 0x82, 0x79,
- 0xe7, 0x90, 0x07, 0x42, 0xe5, 0x55, 0xe2, 0xa9, 0x67, 0xd6, 0x4e, 0x42, 0xc6, 0x27, 0xd3, 0x42,
- 0x15, 0xb8, 0x42, 0x11, 0xe6, 0x49, 0x93, 0x50, 0x09, 0x15, 0x33, 0xc9, 0x31, 0x26, 0xca, 0xd5,
- 0xbf, 0x96, 0x86, 0x84, 0xd3, 0xeb, 0xda, 0x05, 0x18, 0xe0, 0xe1, 0xe1, 0xf6, 0xbf, 0xc9, 0x81,
- 0xdc, 0x49, 0xff, 0x74, 0x9b, 0x9f, 0x91, 0x0d, 0x03, 0x01, 0x3b, 0xd3, 0x8a, 0x83, 0x1a, 0x53,
- 0x6a, 0xf8, 0x29, 0x17, 0x8b, 0x12, 0xaa, 0x62, 0x90, 0x03, 0x37, 0x9a, 0xf3, 0x6b, 0xf2, 0x78,
- 0xc6, 0x54, 0x8c, 0xdb, 0x02, 0x86, 0x55, 0xa9, 0xfd, 0x33, 0x16, 0x8c, 0xd0, 0x5e, 0x36, 0x9b,
- 0xa4, 0x59, 0x89, 0x48, 0x3b, 0x44, 0x21, 0xe4, 0x43, 0xfa, 0x23, 0x3b, 0x63, 0x41, 0x7c, 0x2b,
- 0x80, 0xb4, 0x35, 0xb3, 0x28, 0x65, 0x82, 0x39, 0x2f, 0xfb, 0xb7, 0xfb, 0xa0, 0xa8, 0x06, 0xfb,
- 0x14, 0xb6, 0xd6, 0x9b, 0xf1, 0x3d, 0x7c, 0x2e, 0x0d, 0x4b, 0xda, 0x1d, 0x7c, 0x7a, 0xa6, 0x9a,
- 0xf5, 0x0e, 0xf9, 0xb5, 0xde, 0xf8, 0x42, 0xfe, 0x4b, 0xa6, 0x6b, 0xe5, 0xaa, 0x6e, 0xaf, 0xd7,
- 0xf0, 0x85, 0x8f, 0xe5, 0x40, 0xf7, 0x6c, 0xf5, 0x67, 0xb5, 0xb3, 0x28, 0x1f, 0x56, 0x6f, 0x97,
- 0x56, 0x22, 0x99, 0x54, 0xfe, 0x54, 0xc9, 0xa4, 0x6e, 0x40, 0x3f, 0xf1, 0x3a, 0x2d, 0x16, 0x22,
- 0x5e, 0x64, 0x3a, 0x55, 0xff, 0x6d, 0xaf, 0xd3, 0x32, 0x7b, 0xc6, 0x50, 0xd0, 0xa7, 0x61, 0xa8,
- 0x46, 0xc2, 0x6a, 0xe0, 0xb2, 0x3b, 0x75, 0xe2, 0x50, 0xfa, 0x34, 0x3b, 0xe9, 0xc7, 0x60, 0xb3,
- 0xa2, 0x5e, 0xc1, 0x7e, 0x17, 0x06, 0x36, 0x9b, 0x9d, 0xba, 0xeb, 0xa1, 0x36, 0x0c, 0xf0, 0x1b,
- 0x76, 0x62, 0xe7, 0xcd, 0x40, 0x51, 0xe7, 0xab, 0x5d, 0x8b, 0x8c, 0xe6, 0x97, 0x43, 0x04, 0x1f,
- 0xfb, 0x1f, 0x59, 0x40, 0x4f, 0x15, 0x8b, 0x73, 0xe8, 0x2f, 0x40, 0x21, 0x14, 0xba, 0x8c, 0x98,
- 0x26, 0x3f, 0xa2, 0x22, 0x28, 0x05, 0xfc, 0xfe, 0xd1, 0xd4, 0x08, 0x43, 0x96, 0x00, 0xac, 0xaa,
- 0xa0, 0x26, 0x8c, 0x30, 0x6b, 0xa8, 0xdc, 0x8f, 0x84, 0xfd, 0xfa, 0xd6, 0x29, 0x2f, 0xa5, 0xe9,
- 0x55, 0x85, 0x74, 0xd6, 0x41, 0xd8, 0x24, 0x6e, 0xff, 0xe3, 0x7e, 0xd0, 0x8c, 0x86, 0xa7, 0x98,
- 0xde, 0xef, 0x24, 0x4c, 0xc4, 0x6b, 0x99, 0x98, 0x88, 0xa5, 0xdd, 0x95, 0x8b, 0x0c, 0xd3, 0x2a,
- 0x4c, 0x1b, 0xd5, 0x20, 0xcd, 0xb6, 0x58, 0x1c, 0xaa, 0x51, 0x4b, 0xa4, 0xd9, 0xc6, 0xac, 0x44,
- 0x85, 0xd7, 0xf7, 0xf7, 0x0c, 0xaf, 0x6f, 0x40, 0xbe, 0xee, 0x74, 0xea, 0x44, 0x44, 0x4d, 0x64,
- 0xe0, 0x0d, 0x60, 0xf1, 0x86, 0xdc, 0x1b, 0xc0, 0x7e, 0x62, 0xce, 0x80, 0xae, 0xce, 0x86, 0xf4,
- 0x99, 0x0a, 0x83, 0x50, 0x06, 0xab, 0x53, 0xb9, 0x61, 0xf9, 0xea, 0x54, 0x7f, 0x71, 0xcc, 0x8c,
- 0x9e, 0x17, 0xab, 0xfc, 0x2e, 0xab, 0xd8, 0xf0, 0x97, 0xb3, 0xb8, 0x3f, 0xc0, 0x08, 0xf2, 0xf3,
- 0xa2, 0xf8, 0x83, 0x25, 0x1b, 0x7b, 0x06, 0x86, 0xb4, 0x94, 0x50, 0xf4, 0x33, 0xa8, 0x6b, 0x94,
- 0xda, 0x67, 0x98, 0x77, 0x22, 0x07, 0xb3, 0x12, 0xfb, 0x6f, 0xf7, 0x81, 0x3a, 0xb7, 0xeb, 0xd1,
- 0xee, 0x4e, 0x55, 0xcb, 0xa5, 0x60, 0x5c, 0xb3, 0xf2, 0x3d, 0x2c, 0x4a, 0xa9, 0x52, 0xd4, 0x22,
- 0x41, 0x5d, 0x9d, 0x14, 0x84, 0x7c, 0x55, 0x4a, 0xd1, 0x9a, 0x5e, 0x88, 0x4d, 0x5c, 0xaa, 0xd1,
- 0xb6, 0x1c, 0xcf, 0xdd, 0x21, 0x61, 0x94, 0x0c, 0x5a, 0x5a, 0x13, 0x70, 0xac, 0x30, 0xd0, 0x22,
- 0x4c, 0x84, 0x24, 0xda, 0xd8, 0xf7, 0x48, 0xa0, 0xae, 0x7f, 0x89, 0xfb, 0x80, 0x2a, 0x90, 0xaf,
- 0x92, 0x44, 0xc0, 0xdd, 0x75, 0x52, 0x03, 0x3d, 0xf2, 0x67, 0x0e, 0xf4, 0x98, 0x87, 0xf1, 0x1d,
- 0xc7, 0x6d, 0x76, 0x02, 0xd2, 0x33, 0x5c, 0x64, 0x21, 0x51, 0x8e, 0xbb, 0x6a, 0xb0, 0x58, 0xd2,
- 0xa6, 0x53, 0x0f, 0x4b, 0x83, 0x5a, 0x2c, 0x29, 0x05, 0x60, 0x0e, 0xb7, 0xff, 0xbe, 0x05, 0x23,
- 0x98, 0x44, 0xc1, 0xe1, 0xec, 0xce, 0x8e, 0xeb, 0xb9, 0xd1, 0x21, 0xfa, 0x55, 0x0b, 0xc6, 0x3d,
- 0xbf, 0x46, 0x66, 0xbd, 0xc8, 0x95, 0xc0, 0xec, 0xf2, 0xe5, 0x30, 0x5e, 0xeb, 0x09, 0xf2, 0xfc,
- 0x56, 0x5f, 0x12, 0x8a, 0xbb, 0x9a, 0x61, 0x5f, 0x83, 0x2b, 0xa9, 0x04, 0xec, 0x6f, 0xf5, 0x89,
- 0x6e, 0xa8, 0x8f, 0xff, 0x1a, 0xe4, 0x9b, 0xec, 0x86, 0xa3, 0xf5, 0x90, 0x09, 0x38, 0xd8, 0x58,
- 0xf1, 0x2b, 0x90, 0x9c, 0x12, 0x9a, 0x87, 0xa1, 0x80, 0xf2, 0x10, 0xf7, 0x4f, 0xf9, 0x54, 0xb4,
- 0xe3, 0x84, 0x82, 0xaa, 0xe8, 0xbe, 0xf9, 0x17, 0xeb, 0xd5, 0xd0, 0x7b, 0x30, 0xb8, 0xcd, 0x73,
- 0x8a, 0x64, 0x67, 0x9e, 0x17, 0x49, 0x4a, 0x98, 0x16, 0x21, 0x33, 0x96, 0xdc, 0x8f, 0x7f, 0x62,
- 0xc9, 0x11, 0x1d, 0x42, 0xc1, 0x91, 0xdf, 0xb4, 0x3f, 0xab, 0xe8, 0x43, 0x63, 0xfe, 0x70, 0xdd,
- 0x4e, 0x7d, 0x43, 0xc5, 0x8e, 0x2a, 0x12, 0x24, 0xce, 0xa9, 0x98, 0x50, 0x24, 0xb4, 0x7c, 0x8a,
- 0x1a, 0x96, 0xfd, 0x75, 0x0b, 0x20, 0xce, 0x36, 0x86, 0x0e, 0xa0, 0x10, 0xde, 0x32, 0x8e, 0xd7,
- 0x59, 0x5c, 0xe8, 0x12, 0x14, 0xb5, 0x4b, 0x0f, 0x02, 0x82, 0x15, 0xb7, 0x07, 0x99, 0x04, 0xfe,
- 0xa7, 0x05, 0x97, 0xd3, 0xb2, 0xa2, 0x3d, 0xc6, 0x16, 0x9f, 0xd5, 0x1a, 0x20, 0x2a, 0x6c, 0x06,
- 0x64, 0xc7, 0x3d, 0x48, 0x3a, 0xe6, 0x57, 0x64, 0x01, 0x8e, 0x71, 0xec, 0x6f, 0x0c, 0x80, 0x62,
- 0x7c, 0x4e, 0xd6, 0x83, 0x17, 0xe8, 0xe9, 0xa2, 0x1e, 0xe7, 0xba, 0x51, 0x78, 0x98, 0x41, 0xb1,
- 0x28, 0xa5, 0x27, 0x0c, 0x19, 0x9d, 0x2d, 0x44, 0x36, 0x9b, 0x85, 0x32, 0x90, 0x1b, 0xab, 0xd2,
- 0x34, 0x7b, 0x44, 0xfe, 0x42, 0xec, 0x11, 0x03, 0xd9, 0xdb, 0x23, 0x6e, 0xc0, 0x60, 0xe0, 0x37,
- 0xc9, 0x2c, 0x5e, 0x17, 0x7a, 0x73, 0x9c, 0xa3, 0x89, 0x83, 0xb1, 0x2c, 0x47, 0x9f, 0x80, 0xa1,
- 0x4e, 0x48, 0x2a, 0xf3, 0x2b, 0x73, 0x01, 0xa9, 0x85, 0x22, 0xe0, 0x5d, 0x39, 0xd5, 0xee, 0xc4,
- 0x45, 0x58, 0xc7, 0x43, 0xdf, 0xb0, 0x4e, 0x30, 0x79, 0x14, 0xb3, 0xda, 0x13, 0x52, 0xb3, 0x6b,
- 0xb0, 0x43, 0xc0, 0xc3, 0xd8, 0x51, 0xbe, 0x66, 0xc1, 0x04, 0xf1, 0xaa, 0xc1, 0x21, 0xa3, 0x23,
- 0xa8, 0x09, 0xc7, 0xd2, 0x9d, 0x2c, 0x16, 0xdf, 0xed, 0x24, 0x71, 0x6e, 0x35, 0xee, 0x02, 0xe3,
- 0xee, 0x66, 0xd8, 0x7f, 0x94, 0x83, 0x4b, 0x29, 0x14, 0x58, 0x70, 0x70, 0x8b, 0x4e, 0xa0, 0xe5,
- 0x5a, 0x72, 0xf9, 0xac, 0x08, 0x38, 0x56, 0x18, 0x68, 0x13, 0x2e, 0xef, 0xb6, 0xc2, 0x98, 0xca,
- 0x9c, 0xef, 0x45, 0xe4, 0x40, 0x2e, 0x26, 0xe9, 0x23, 0xba, 0xbc, 0x92, 0x82, 0x83, 0x53, 0x6b,
- 0x52, 0x6d, 0x83, 0x78, 0xce, 0x76, 0x93, 0xc4, 0x45, 0x22, 0xb4, 0x5d, 0x69, 0x1b, 0xb7, 0x13,
- 0xe5, 0xb8, 0xab, 0x06, 0xfa, 0xd0, 0x82, 0xa7, 0x42, 0x12, 0xec, 0x91, 0xa0, 0xe2, 0xd6, 0xc8,
- 0x5c, 0x27, 0x8c, 0xfc, 0x16, 0x09, 0x1e, 0xd2, 0x26, 0x37, 0x75, 0x7c, 0x34, 0xf5, 0x54, 0xa5,
- 0x37, 0x35, 0x7c, 0x12, 0x2b, 0xfb, 0x43, 0x0b, 0x46, 0x2b, 0xec, 0x94, 0xa8, 0x74, 0xce, 0xac,
- 0x53, 0xfa, 0xbc, 0xa0, 0xae, 0x39, 0x26, 0x84, 0x98, 0x79, 0x31, 0xd1, 0x7e, 0x1b, 0xc6, 0x2b,
- 0xa4, 0xe5, 0xb4, 0x1b, 0xec, 0xd6, 0x08, 0x0f, 0x45, 0x98, 0x81, 0x62, 0x28, 0x61, 0xc9, 0x9c,
- 0x88, 0x0a, 0x19, 0xc7, 0x38, 0xe8, 0x79, 0x1e, 0x36, 0x21, 0xa3, 0x74, 0x8b, 0x5c, 0x3b, 0xe7,
- 0xb1, 0x16, 0x21, 0x96, 0x65, 0xf6, 0x3e, 0x0c, 0xc7, 0xd5, 0xc9, 0x0e, 0xaa, 0xc3, 0x58, 0x55,
- 0x0b, 0x0c, 0x8f, 0xe3, 0x4f, 0x4f, 0x1f, 0x43, 0xce, 0x64, 0xd1, 0x9c, 0x49, 0x04, 0x27, 0xa9,
- 0xda, 0xbf, 0x98, 0x83, 0x31, 0xc5, 0x59, 0x38, 0x04, 0x3e, 0x48, 0x86, 0x7a, 0xe0, 0x2c, 0xae,
- 0x5f, 0x9b, 0x23, 0x79, 0x42, 0xb8, 0xc7, 0x07, 0xc9, 0x70, 0x8f, 0x73, 0x65, 0xdf, 0xe5, 0xe3,
- 0xf8, 0x7a, 0x0e, 0x0a, 0xea, 0x32, 0xf8, 0x6b, 0x90, 0x67, 0x07, 0xa8, 0x47, 0xd3, 0x46, 0xd9,
- 0x61, 0x0c, 0x73, 0x4a, 0x94, 0x24, 0xf3, 0x73, 0x3f, 0x74, 0x86, 0xb9, 0x22, 0xb7, 0x7b, 0x39,
- 0x41, 0x84, 0x39, 0x25, 0xb4, 0x02, 0x7d, 0xc4, 0xab, 0x09, 0xb5, 0xf4, 0xec, 0x04, 0x59, 0x3e,
- 0xd0, 0xdb, 0x5e, 0x0d, 0x53, 0x2a, 0x2c, 0x1d, 0x13, 0xd7, 0x3e, 0xfa, 0xcd, 0xe5, 0x21, 0x54,
- 0x0f, 0x51, 0x6a, 0xff, 0x7c, 0x1f, 0x0c, 0x54, 0x3a, 0xdb, 0x54, 0xc1, 0xfe, 0x4d, 0x0b, 0x2e,
- 0xed, 0x27, 0xb2, 0x8f, 0xc5, 0x53, 0xf6, 0x4e, 0xf6, 0xa9, 0xdd, 0x30, 0xd9, 0x29, 0x3f, 0x25,
- 0xda, 0x75, 0x29, 0xa5, 0x10, 0xa7, 0x35, 0xc7, 0xc8, 0xd4, 0xd4, 0x77, 0x4e, 0x39, 0xed, 0xce,
- 0x37, 0xce, 0x75, 0xa4, 0x57, 0x8c, 0xab, 0xfd, 0x83, 0x3c, 0x00, 0xff, 0x1a, 0x1b, 0xed, 0xe8,
- 0x34, 0xc6, 0xa1, 0x57, 0x60, 0x58, 0x3e, 0x2a, 0xb1, 0x1e, 0x07, 0xf6, 0x28, 0xe7, 0xee, 0xa2,
- 0x56, 0x86, 0x0d, 0x4c, 0x76, 0x20, 0xf0, 0xa2, 0xe0, 0x90, 0x2b, 0x8d, 0xfd, 0x89, 0x03, 0x81,
- 0x2a, 0xc1, 0x1a, 0x16, 0x9a, 0x36, 0x8c, 0xed, 0x3c, 0x6b, 0xc5, 0xe8, 0x09, 0xb6, 0xf1, 0x4f,
- 0xc1, 0x88, 0xfa, 0xb7, 0xe0, 0x36, 0x49, 0xd2, 0xa9, 0xb2, 0xa9, 0x17, 0x62, 0x13, 0x17, 0x7d,
- 0x1a, 0x46, 0xcd, 0xcb, 0xa7, 0x42, 0xcd, 0x52, 0x57, 0xbf, 0xcd, 0x3b, 0xab, 0x38, 0x81, 0x4d,
- 0x57, 0x40, 0x2d, 0x38, 0xc4, 0x1d, 0x4f, 0xe8, 0x5b, 0x6a, 0x05, 0xcc, 0x33, 0x28, 0x16, 0xa5,
- 0x74, 0x08, 0xf9, 0x56, 0xc6, 0xe1, 0xe2, 0xf6, 0xa0, 0x1a, 0xc2, 0x8a, 0x56, 0x86, 0x0d, 0x4c,
- 0xca, 0x41, 0x58, 0xe6, 0xc0, 0x5c, 0x63, 0x09, 0x73, 0x5a, 0x1b, 0x46, 0x7d, 0xd3, 0xb0, 0xc1,
- 0x43, 0x61, 0x3e, 0x7e, 0xca, 0x79, 0x6b, 0xd4, 0xe5, 0xb7, 0x5d, 0x12, 0x76, 0x90, 0x04, 0x7d,
- 0xaa, 0x70, 0xea, 0xa1, 0xae, 0xc3, 0x66, 0x14, 0x57, 0xcf, 0x68, 0xd4, 0x4d, 0xb8, 0xdc, 0xf6,
- 0x6b, 0x9b, 0x81, 0xeb, 0x07, 0x6e, 0x74, 0x38, 0xd7, 0x74, 0xc2, 0x90, 0xcd, 0xaa, 0x11, 0x53,
- 0xb3, 0xd9, 0x4c, 0xc1, 0xc1, 0xa9, 0x35, 0xe9, 0xd1, 0xa0, 0x2d, 0x80, 0x2c, 0x82, 0x23, 0xcf,
- 0x8f, 0x06, 0x12, 0x11, 0xab, 0x52, 0xfb, 0x12, 0x4c, 0x54, 0x3a, 0xed, 0x76, 0xd3, 0x25, 0x35,
- 0x65, 0x09, 0xb7, 0x7f, 0x12, 0xc6, 0x44, 0x12, 0x28, 0xa5, 0x47, 0x9c, 0x29, 0x13, 0xa8, 0xfd,
- 0x03, 0x0b, 0xc6, 0x12, 0xfe, 0x72, 0xf4, 0x5e, 0x72, 0xf7, 0xcf, 0xc4, 0xb1, 0xa1, 0x6f, 0xfc,
- 0x7c, 0x85, 0xa7, 0x6a, 0x12, 0x0d, 0x19, 0xdd, 0x99, 0x59, 0x90, 0x34, 0x8b, 0x81, 0xe4, 0xdb,
- 0x89, 0x1e, 0x22, 0x6a, 0x7f, 0x39, 0x07, 0xe9, 0x41, 0x0a, 0xe8, 0xf3, 0xdd, 0x03, 0xf0, 0x5a,
- 0x86, 0x03, 0x20, 0xa2, 0x24, 0x7a, 0x8f, 0x81, 0x67, 0x8e, 0xc1, 0x5a, 0x46, 0x63, 0x20, 0xf8,
- 0x76, 0x8f, 0xc4, 0x9f, 0x58, 0x30, 0xb4, 0xb5, 0xb5, 0xaa, 0x8c, 0x53, 0x18, 0xae, 0x86, 0xfc,
- 0x5a, 0x18, 0xf3, 0x2e, 0xce, 0xf9, 0xad, 0x36, 0x77, 0x36, 0x0a, 0x27, 0x28, 0xcb, 0xc7, 0x55,
- 0x49, 0xc5, 0xc0, 0x3d, 0x6a, 0xa2, 0x65, 0xb8, 0xa4, 0x97, 0x08, 0x13, 0xa3, 0x70, 0x78, 0xf2,
- 0x8b, 0xd2, 0xdd, 0xc5, 0x38, 0xad, 0x4e, 0x92, 0x94, 0xb0, 0x33, 0x8a, 0xa7, 0x52, 0xba, 0x48,
- 0x89, 0x62, 0x9c, 0x56, 0xc7, 0xde, 0x80, 0x21, 0xed, 0xe1, 0x1e, 0xf4, 0x19, 0x18, 0xaf, 0xfa,
- 0x2d, 0x69, 0xdf, 0x59, 0x25, 0x7b, 0xa4, 0x29, 0xba, 0xcc, 0x4c, 0x80, 0x73, 0x89, 0x32, 0xdc,
- 0x85, 0x6d, 0xff, 0x8f, 0xeb, 0xa0, 0x6e, 0x86, 0x9c, 0x62, 0x7b, 0x6a, 0xab, 0xf0, 0xad, 0x7c,
- 0xc6, 0xe1, 0x5b, 0x4a, 0xd6, 0x26, 0x42, 0xb8, 0xa2, 0x38, 0x84, 0x6b, 0x20, 0xeb, 0x10, 0x2e,
- 0xa5, 0x6d, 0x76, 0x85, 0x71, 0xfd, 0xb2, 0x05, 0xc3, 0x9e, 0x5f, 0x23, 0xca, 0x85, 0x34, 0xc8,
- 0x54, 0xde, 0xb7, 0xb2, 0x8b, 0x4b, 0xe5, 0xe1, 0x48, 0x82, 0x3c, 0x0f, 0xf2, 0x53, 0x5b, 0x94,
- 0x5e, 0x84, 0x8d, 0x76, 0xa0, 0x05, 0xcd, 0xe2, 0xc8, 0x93, 0x30, 0x3d, 0x9d, 0x76, 0xf4, 0x78,
- 0xa0, 0xf9, 0xf0, 0x40, 0x53, 0xba, 0x8a, 0x59, 0x59, 0xd2, 0xe4, 0x4d, 0x05, 0xcd, 0x31, 0x20,
- 0x53, 0xca, 0xc5, 0xca, 0x98, 0x0d, 0x03, 0x3c, 0x1a, 0x50, 0x3c, 0x21, 0xc3, 0xfc, 0x55, 0x3c,
- 0x52, 0x10, 0x8b, 0x12, 0x14, 0x49, 0x37, 0xf5, 0x50, 0x56, 0x99, 0x58, 0x0d, 0x37, 0x78, 0xba,
- 0x9f, 0x1a, 0xbd, 0xaa, 0x9f, 0x68, 0x87, 0x4f, 0x73, 0xa2, 0x1d, 0xe9, 0x79, 0x9a, 0xfd, 0x8a,
- 0x05, 0xc3, 0x55, 0x2d, 0xd5, 0x6c, 0xe9, 0xc5, 0xac, 0xf2, 0x29, 0xa7, 0x25, 0xb0, 0xe5, 0x17,
- 0x1b, 0xf5, 0x12, 0x6c, 0x70, 0x67, 0x39, 0x84, 0xd8, 0xf1, 0x9d, 0x6d, 0xfd, 0x43, 0x37, 0x37,
- 0x33, 0xd8, 0x1e, 0x0c, 0x73, 0x00, 0xff, 0x8c, 0x1c, 0x86, 0x05, 0x2f, 0xf4, 0x3e, 0x14, 0x64,
- 0x40, 0xa9, 0x08, 0xf7, 0xc4, 0x59, 0x98, 0xc7, 0x4d, 0xe7, 0x97, 0xcc, 0x3c, 0xc2, 0xa1, 0x58,
- 0x71, 0x44, 0x0d, 0xe8, 0xab, 0x39, 0x75, 0x11, 0xf8, 0xb9, 0x96, 0x4d, 0x62, 0x27, 0xc9, 0x93,
- 0x9d, 0xcd, 0xe6, 0x67, 0x17, 0x31, 0x65, 0x81, 0x0e, 0xe2, 0x8c, 0x97, 0xe3, 0x99, 0xed, 0xbe,
- 0xa6, 0x9a, 0xc4, 0x0d, 0x14, 0x5d, 0x09, 0x34, 0x6b, 0xc2, 0x5f, 0xf8, 0x67, 0x18, 0xdb, 0x85,
- 0x6c, 0x32, 0x43, 0xf1, 0x37, 0x37, 0x62, 0x9f, 0x23, 0xe5, 0xc2, 0xde, 0x1a, 0xfa, 0xb1, 0xac,
- 0xb8, 0x2c, 0x6d, 0x6d, 0x6d, 0x76, 0xbd, 0x31, 0xd4, 0x84, 0x81, 0x36, 0x8b, 0x3d, 0x28, 0xfd,
- 0x78, 0x56, 0x7b, 0x0b, 0x8f, 0x65, 0xe0, 0x73, 0x93, 0xff, 0xc6, 0x82, 0x07, 0xba, 0x0d, 0x83,
- 0x3c, 0x43, 0x32, 0x0f, 0xbc, 0x1d, 0xba, 0x39, 0xd9, 0x3b, 0xcf, 0x72, 0xbc, 0x51, 0xf0, 0xff,
- 0x21, 0x96, 0x75, 0xd1, 0x2f, 0x5a, 0x30, 0x4a, 0x25, 0x6a, 0x9c, 0xd2, 0xb9, 0x84, 0xb2, 0x92,
- 0x59, 0x77, 0x42, 0xaa, 0x91, 0x48, 0x59, 0xa3, 0x8e, 0x49, 0xcb, 0x06, 0x3b, 0x9c, 0x60, 0x8f,
- 0x3e, 0x80, 0x42, 0xe8, 0xd6, 0x48, 0xd5, 0x09, 0xc2, 0xd2, 0xa5, 0xf3, 0x69, 0x4a, 0xec, 0x28,
- 0x11, 0x8c, 0xb0, 0x62, 0x89, 0xfe, 0x3a, 0x7b, 0x80, 0x41, 0x3c, 0x96, 0x23, 0xde, 0x71, 0xbb,
- 0x7c, 0x6e, 0xef, 0xb8, 0x71, 0xff, 0x81, 0xc9, 0x0e, 0x27, 0xf9, 0xa3, 0xbf, 0x6c, 0xc1, 0x15,
- 0x9e, 0x68, 0x34, 0x99, 0x65, 0xf6, 0xca, 0x43, 0xda, 0x66, 0x58, 0xc4, 0xf0, 0x6c, 0x1a, 0x49,
- 0x9c, 0xce, 0x89, 0x65, 0x2a, 0x0b, 0x74, 0x97, 0x2a, 0x8b, 0xdb, 0xce, 0xce, 0x61, 0xa8, 0x9e,
- 0x85, 0x63, 0x11, 0x2b, 0x06, 0x08, 0x9b, 0x8c, 0xd1, 0xcb, 0x30, 0xd4, 0x16, 0xdb, 0xa1, 0x1b,
- 0xb6, 0x58, 0xfc, 0x77, 0x1f, 0xbf, 0x23, 0xb3, 0x19, 0x83, 0xb1, 0x8e, 0x63, 0xa4, 0xad, 0xbb,
- 0x71, 0x52, 0xda, 0x3a, 0x74, 0x07, 0x86, 0x22, 0xbf, 0x49, 0x02, 0x71, 0x52, 0x2d, 0xb1, 0x19,
- 0x78, 0x3d, 0x6d, 0x6d, 0x6d, 0x29, 0xb4, 0xf8, 0x24, 0x1b, 0xc3, 0x42, 0xac, 0xd3, 0x61, 0xe1,
- 0x9c, 0x22, 0x81, 0x6b, 0xc0, 0x8e, 0xb0, 0x4f, 0x26, 0xc2, 0x39, 0xf5, 0x42, 0x6c, 0xe2, 0xa2,
- 0x45, 0x98, 0x68, 0x77, 0x9d, 0x81, 0xf9, 0x0d, 0x10, 0x15, 0x8b, 0xd0, 0x7d, 0x00, 0xee, 0xae,
- 0x63, 0x9c, 0x7e, 0x9f, 0x3a, 0xe9, 0xf4, 0xdb, 0x23, 0x89, 0xdb, 0xd3, 0x0f, 0x93, 0xc4, 0x0d,
- 0xd5, 0xe0, 0x69, 0xa7, 0x13, 0xf9, 0xec, 0x0e, 0xbf, 0x59, 0x85, 0x47, 0xb6, 0x3e, 0xcb, 0x83,
- 0x65, 0x8f, 0x8f, 0xa6, 0x9e, 0x9e, 0x3d, 0x01, 0x0f, 0x9f, 0x48, 0x05, 0xbd, 0x0b, 0x05, 0x22,
- 0x12, 0xd1, 0x95, 0x7e, 0x24, 0x2b, 0x25, 0xc1, 0x4c, 0x6d, 0x27, 0x03, 0x15, 0x39, 0x0c, 0x2b,
- 0x7e, 0x68, 0x0b, 0x86, 0x1a, 0x7e, 0x18, 0xcd, 0x36, 0x5d, 0x27, 0x24, 0x61, 0xe9, 0x19, 0x36,
- 0x69, 0x52, 0x75, 0xaf, 0x25, 0x89, 0x16, 0xcf, 0x99, 0xa5, 0xb8, 0x26, 0xd6, 0xc9, 0x20, 0xc2,
- 0xdc, 0x86, 0x2c, 0xac, 0x57, 0xba, 0x74, 0xae, 0xb3, 0x8e, 0xbd, 0x90, 0x46, 0x79, 0xd3, 0xaf,
- 0x55, 0x4c, 0x6c, 0xe5, 0x37, 0xd4, 0x81, 0x38, 0x49, 0x13, 0xbd, 0x02, 0xc3, 0x6d, 0xbf, 0x56,
- 0x69, 0x93, 0xea, 0xa6, 0x13, 0x55, 0x1b, 0xa5, 0x29, 0xd3, 0x64, 0xb7, 0xa9, 0x95, 0x61, 0x03,
- 0x13, 0xb5, 0x61, 0xb0, 0xc5, 0x6f, 0xb7, 0x96, 0x9e, 0xcb, 0xea, 0x6c, 0x23, 0xae, 0xcb, 0x72,
- 0x7d, 0x41, 0xfc, 0xc1, 0x92, 0x0d, 0xfa, 0xbb, 0x16, 0x8c, 0x25, 0x6e, 0x34, 0x94, 0x7e, 0x34,
- 0x33, 0x95, 0xc5, 0x24, 0x5c, 0x7e, 0x81, 0x0d, 0x9f, 0x09, 0xbc, 0xdf, 0x0d, 0xc2, 0xc9, 0x16,
- 0xf1, 0x71, 0x61, 0x57, 0xd4, 0x4b, 0xcf, 0x67, 0x37, 0x2e, 0x8c, 0xa0, 0x1c, 0x17, 0xf6, 0x07,
- 0x4b, 0x36, 0xe8, 0x06, 0x0c, 0x8a, 0xfc, 0x32, 0xa5, 0x17, 0x4c, 0xdf, 0xaf, 0x48, 0x43, 0x83,
- 0x65, 0xf9, 0xe4, 0x4f, 0xc2, 0x44, 0xd7, 0xd1, 0xed, 0x4c, 0xf7, 0xa4, 0x7f, 0xc5, 0x02, 0xfd,
- 0x32, 0x62, 0xe6, 0xd9, 0x9f, 0x5f, 0x81, 0xe1, 0x2a, 0x7f, 0x7a, 0x84, 0x5f, 0x67, 0xec, 0x37,
- 0xed, 0x9f, 0x73, 0x5a, 0x19, 0x36, 0x30, 0xed, 0x25, 0x40, 0xdd, 0xa9, 0x39, 0x13, 0x91, 0x26,
- 0xd6, 0xa9, 0x22, 0x4d, 0x7e, 0xcb, 0x82, 0x11, 0x43, 0x67, 0xc8, 0xdc, 0x5d, 0xb8, 0x00, 0xa8,
- 0xe5, 0x06, 0x81, 0x1f, 0xe8, 0xaf, 0x5e, 0x88, 0x5c, 0x84, 0x2c, 0x4f, 0xd3, 0x5a, 0x57, 0x29,
- 0x4e, 0xa9, 0x61, 0xff, 0xc3, 0x7e, 0x88, 0x23, 0x75, 0x55, 0x86, 0x36, 0xab, 0x67, 0x86, 0xb6,
- 0x97, 0xa0, 0xf0, 0x76, 0xe8, 0x7b, 0x9b, 0x71, 0x1e, 0x37, 0xf5, 0x2d, 0x5e, 0xad, 0x6c, 0xac,
- 0x33, 0x4c, 0x85, 0xc1, 0xb0, 0xdf, 0x59, 0x70, 0x9b, 0x51, 0x77, 0xa2, 0xaf, 0x57, 0x5f, 0xe3,
- 0x70, 0xac, 0x30, 0xd8, 0xbb, 0x1c, 0x7b, 0x44, 0x19, 0xc6, 0xe3, 0x77, 0x39, 0x78, 0xd6, 0x5d,
- 0x56, 0x86, 0x66, 0xa0, 0xa8, 0xec, 0xea, 0xc2, 0xcc, 0xaf, 0x46, 0x4a, 0xd9, 0xdf, 0x71, 0x8c,
- 0xc3, 0x14, 0x42, 0x61, 0x88, 0x15, 0x26, 0x94, 0x4a, 0x16, 0xc7, 0x93, 0x84, 0x69, 0x97, 0xcb,
- 0x76, 0x09, 0xc6, 0x8a, 0x65, 0x9a, 0xcf, 0xb4, 0x78, 0x1e, 0x3e, 0x53, 0x3d, 0x6c, 0x3c, 0x7f,
- 0xda, 0xb0, 0x71, 0x73, 0x6e, 0x17, 0x4e, 0x35, 0xb7, 0x7f, 0xb6, 0x0f, 0x06, 0xef, 0x92, 0x80,
- 0x65, 0x9f, 0xbc, 0x01, 0x83, 0x7b, 0xfc, 0x67, 0xf2, 0x92, 0x96, 0xc0, 0xc0, 0xb2, 0x9c, 0x7e,
- 0xb7, 0xed, 0x8e, 0xdb, 0xac, 0xcd, 0xc7, 0xab, 0x58, 0x7d, 0xb7, 0xb2, 0x2c, 0xc0, 0x31, 0x0e,
- 0xad, 0x50, 0xa7, 0x9a, 0x7d, 0xab, 0xe5, 0x46, 0xc9, 0x08, 0xa2, 0x45, 0x59, 0x80, 0x63, 0x1c,
- 0xf4, 0x02, 0x0c, 0xd4, 0xdd, 0x68, 0xcb, 0xa9, 0x27, 0x5d, 0x84, 0x8b, 0x0c, 0x8a, 0x45, 0x29,
- 0xf3, 0x31, 0xb9, 0xd1, 0x56, 0x40, 0x98, 0x65, 0xb7, 0xeb, 0xb6, 0xf6, 0xa2, 0x56, 0x86, 0x0d,
- 0x4c, 0xd6, 0x24, 0x5f, 0xf4, 0x4c, 0xf8, 0x7e, 0xe2, 0x26, 0xc9, 0x02, 0x1c, 0xe3, 0xd0, 0xf9,
- 0x5f, 0xf5, 0x5b, 0x6d, 0xb7, 0x29, 0x22, 0x6a, 0xb5, 0xf9, 0x3f, 0x27, 0xe0, 0x58, 0x61, 0x50,
- 0x6c, 0x2a, 0xc2, 0xa8, 0xf8, 0x49, 0xbe, 0x81, 0xb0, 0x29, 0xe0, 0x58, 0x61, 0xd8, 0x77, 0x61,
- 0x84, 0xaf, 0xe4, 0xb9, 0xa6, 0xe3, 0xb6, 0x16, 0xe7, 0xd0, 0xed, 0xae, 0xb0, 0xf1, 0x1b, 0x29,
- 0x61, 0xe3, 0x57, 0x8c, 0x4a, 0xdd, 0xe1, 0xe3, 0xf6, 0xb7, 0x73, 0x50, 0xb8, 0xc0, 0x67, 0x64,
- 0xda, 0xc6, 0x33, 0x32, 0x59, 0x3f, 0x26, 0x92, 0xf6, 0x84, 0xcc, 0x41, 0xe2, 0x09, 0x99, 0xcd,
- 0x2c, 0x6f, 0x81, 0x9c, 0xf8, 0x7c, 0xcc, 0xf7, 0x2d, 0xb8, 0x2c, 0x51, 0x99, 0x50, 0x2b, 0xbb,
- 0x1e, 0x0b, 0x2e, 0x38, 0xff, 0x61, 0x7e, 0xdf, 0x18, 0xe6, 0x37, 0xb2, 0xeb, 0xb2, 0xde, 0x8f,
- 0x9e, 0x6f, 0x9b, 0x7d, 0xcf, 0x82, 0x52, 0x5a, 0x85, 0x0b, 0x78, 0x3f, 0xe7, 0x3d, 0xf3, 0xfd,
- 0x9c, 0xbb, 0xe7, 0xd3, 0xf3, 0x1e, 0xef, 0xe8, 0x7c, 0xbf, 0x47, 0xbf, 0xd9, 0xa3, 0x35, 0x4d,
- 0xb9, 0xdd, 0x59, 0x59, 0xb9, 0xce, 0x38, 0x8b, 0xf4, 0x7d, 0xb3, 0x09, 0x03, 0x21, 0xf3, 0xc4,
- 0x8b, 0x29, 0xb0, 0x94, 0xc5, 0x26, 0x48, 0xe9, 0x09, 0xd3, 0x27, 0xfb, 0x8d, 0x05, 0x0f, 0xfb,
- 0x3f, 0x58, 0x30, 0x7c, 0x81, 0x8f, 0x24, 0xf9, 0xe6, 0x47, 0x7e, 0x35, 0xbb, 0x8f, 0xdc, 0xe3,
- 0xc3, 0xfe, 0xda, 0x75, 0x30, 0xde, 0x23, 0x42, 0xef, 0x41, 0x51, 0x6a, 0xa0, 0xf2, 0x76, 0x59,
- 0x96, 0xcf, 0x8e, 0xa8, 0x6d, 0x46, 0x42, 0x42, 0x1c, 0xf3, 0x4b, 0xc4, 0x3e, 0xe4, 0x4e, 0x15,
- 0xfb, 0xf0, 0x78, 0x1f, 0x2d, 0x49, 0xb7, 0x0f, 0xf4, 0x9f, 0x8b, 0x7d, 0xe0, 0xe9, 0xcc, 0xed,
- 0x03, 0xcf, 0x5c, 0xb0, 0x7d, 0x40, 0x33, 0xd6, 0xe6, 0x1f, 0xc1, 0x58, 0xfb, 0x1e, 0x5c, 0xde,
- 0x8b, 0x37, 0x7f, 0x35, 0x93, 0xc4, 0xdb, 0x2b, 0x37, 0x52, 0xad, 0x02, 0x54, 0x91, 0x09, 0x23,
- 0xe2, 0x45, 0x9a, 0xda, 0x10, 0x47, 0x4e, 0xdc, 0x4d, 0x21, 0x87, 0x53, 0x99, 0x24, 0xad, 0x6e,
- 0x83, 0xa7, 0xb0, 0xba, 0xfd, 0x76, 0xcf, 0x07, 0x97, 0x0b, 0xe7, 0xfb, 0xe0, 0xf2, 0x93, 0x67,
- 0x7e, 0x6c, 0xf9, 0xf9, 0xd8, 0x05, 0xc2, 0xe3, 0x6d, 0xd2, 0xfd, 0x15, 0x5f, 0x4b, 0xfa, 0x55,
- 0x81, 0x0d, 0xfd, 0xe7, 0xb2, 0xd5, 0x7a, 0x32, 0xf0, 0xad, 0x0e, 0x3d, 0x82, 0x6f, 0x35, 0x61,
- 0x02, 0x1d, 0xce, 0xc8, 0x04, 0xea, 0xc1, 0xb8, 0xdb, 0x72, 0xea, 0x64, 0xb3, 0xd3, 0x6c, 0xf2,
- 0xb0, 0x5c, 0xf9, 0x30, 0x4c, 0xea, 0x49, 0x6a, 0xd5, 0xaf, 0x3a, 0xcd, 0xe4, 0xfb, 0x5b, 0x2a,
- 0xfc, 0x78, 0x39, 0x41, 0x09, 0x77, 0xd1, 0xa6, 0x13, 0x96, 0x65, 0x0f, 0x21, 0x11, 0x1d, 0x6d,
- 0xe6, 0xc0, 0x13, 0x2f, 0xe3, 0x2f, 0xc5, 0x60, 0xac, 0xe3, 0xa0, 0x15, 0x28, 0xd6, 0xbc, 0x50,
- 0x5c, 0xe8, 0x19, 0x63, 0xc2, 0xec, 0x63, 0x54, 0x04, 0xce, 0xaf, 0x57, 0xd4, 0x55, 0x9e, 0xa7,
- 0x53, 0x12, 0xd3, 0xa8, 0x72, 0x1c, 0xd7, 0x47, 0x6b, 0x8c, 0x98, 0xc8, 0xed, 0xcd, 0xfd, 0x6a,
- 0xcf, 0xf6, 0x30, 0xdc, 0xcd, 0xaf, 0xcb, 0xec, 0xe4, 0x23, 0x82, 0x9d, 0x48, 0xd2, 0x1d, 0x53,
- 0xd0, 0x1e, 0xe8, 0x99, 0x38, 0xf1, 0x81, 0x1e, 0x96, 0x91, 0x2a, 0x6a, 0x2a, 0x33, 0xfd, 0xf5,
- 0xcc, 0x32, 0x52, 0xc5, 0x11, 0x2b, 0x22, 0x23, 0x55, 0x0c, 0xc0, 0x3a, 0x4b, 0xb4, 0xd1, 0xcb,
- 0x5d, 0x71, 0x89, 0x09, 0x8d, 0xb3, 0x3b, 0x1f, 0x74, 0xbb, 0xf5, 0xe5, 0x13, 0xed, 0xd6, 0x5d,
- 0x76, 0xf6, 0x2b, 0x67, 0xb0, 0xb3, 0x37, 0x58, 0xae, 0xa0, 0xc5, 0x39, 0xe1, 0xda, 0xc8, 0x40,
- 0xa1, 0x63, 0x57, 0x7c, 0x79, 0x04, 0x10, 0xfb, 0x89, 0x39, 0x83, 0x9e, 0x81, 0x6d, 0xd7, 0x1e,
- 0x3a, 0xb0, 0x8d, 0x8a, 0xe7, 0x18, 0xce, 0x92, 0x4e, 0xe5, 0x85, 0x78, 0x8e, 0xc1, 0x58, 0xc7,
- 0x49, 0x5a, 0xad, 0x9f, 0x3c, 0x37, 0xab, 0xf5, 0xe4, 0x05, 0x58, 0xad, 0x9f, 0x3a, 0xb5, 0xd5,
- 0xfa, 0x03, 0xb8, 0xd4, 0xf6, 0x6b, 0xf3, 0x6e, 0x18, 0x74, 0xd8, 0x3d, 0x85, 0x72, 0xa7, 0x56,
- 0x27, 0x11, 0x33, 0x7b, 0x0f, 0xdd, 0xbc, 0xa9, 0x37, 0xb2, 0xcd, 0x16, 0xf2, 0xf4, 0xde, 0xcb,
- 0xdb, 0x24, 0xe2, 0x1f, 0x33, 0x59, 0x8b, 0x1d, 0x98, 0x58, 0x08, 0x54, 0x4a, 0x21, 0x4e, 0xe3,
- 0xa3, 0x1b, 0xcd, 0x9f, 0xbd, 0x18, 0xa3, 0xf9, 0x67, 0xa0, 0x10, 0x36, 0x3a, 0x51, 0xcd, 0xdf,
- 0xf7, 0x98, 0x67, 0xa4, 0xa8, 0x9e, 0xe8, 0x2c, 0x54, 0x04, 0xfc, 0xfe, 0xd1, 0xd4, 0xb8, 0xfc,
- 0xad, 0x99, 0x14, 0x04, 0x04, 0xfd, 0x7a, 0x8f, 0x48, 0x6c, 0xfb, 0x3c, 0x23, 0xb1, 0xaf, 0x9d,
- 0x29, 0x0a, 0x3b, 0xcd, 0x33, 0xf0, 0xdc, 0x0f, 0x9d, 0x67, 0xe0, 0x57, 0x2d, 0x18, 0xd9, 0xd3,
- 0xed, 0x37, 0xc2, 0x7b, 0x91, 0x81, 0x17, 0xd5, 0x30, 0x0b, 0x95, 0x6d, 0x2a, 0xec, 0x0c, 0xd0,
- 0xfd, 0x24, 0x00, 0x9b, 0x2d, 0x49, 0xf1, 0xf0, 0x3e, 0xff, 0xb8, 0x3c, 0xbc, 0x1f, 0x30, 0x61,
- 0x26, 0x83, 0xaf, 0x98, 0x4b, 0x23, 0xdb, 0x00, 0x2f, 0x29, 0x18, 0x55, 0x7c, 0x97, 0xce, 0x0f,
- 0x7d, 0xc5, 0x82, 0x71, 0x79, 0x38, 0x13, 0xf6, 0xd7, 0x50, 0x84, 0xa8, 0x64, 0x79, 0x26, 0x64,
- 0x31, 0x8e, 0x5b, 0x09, 0x3e, 0xb8, 0x8b, 0x33, 0x15, 0xed, 0x2a, 0x22, 0xa0, 0x1e, 0xb2, 0x48,
- 0x2c, 0xa1, 0xc8, 0xcc, 0xc6, 0x60, 0xac, 0xe3, 0x3c, 0xba, 0x93, 0xe7, 0x0f, 0x11, 0x8c, 0x26,
- 0x1e, 0x4c, 0xfd, 0xb8, 0x99, 0xa5, 0xf4, 0x7a, 0x32, 0x55, 0xe4, 0x88, 0xc4, 0x37, 0xd2, 0x45,
- 0x1a, 0xf9, 0x1c, 0x73, 0xe7, 0x9a, 0xcf, 0xb1, 0xef, 0x62, 0xf2, 0x39, 0x8e, 0x9f, 0x47, 0x3e,
- 0xc7, 0x89, 0x33, 0xe5, 0x73, 0xd4, 0xf2, 0x69, 0xf6, 0x3f, 0x20, 0x9f, 0xe6, 0x2c, 0x8c, 0xc9,
- 0xa0, 0x59, 0x22, 0x12, 0xf5, 0x71, 0x7b, 0xf9, 0x35, 0x51, 0x65, 0x6c, 0xce, 0x2c, 0xc6, 0x49,
- 0x7c, 0xf4, 0x91, 0x05, 0x79, 0x8f, 0xd5, 0x1c, 0xc8, 0x2a, 0x45, 0xb5, 0x39, 0xb5, 0xd8, 0x79,
- 0x47, 0x24, 0x86, 0x96, 0x61, 0x42, 0x79, 0x06, 0xbb, 0x2f, 0x7f, 0x60, 0xde, 0x02, 0xf4, 0x16,
- 0x94, 0xfc, 0x9d, 0x9d, 0xa6, 0xef, 0xd4, 0xe2, 0xa4, 0x93, 0xd2, 0xa0, 0xcf, 0x2f, 0x3d, 0xa8,
- 0xa4, 0x5b, 0x1b, 0x3d, 0xf0, 0x70, 0x4f, 0x0a, 0xf4, 0xc0, 0x3a, 0x16, 0x46, 0x7e, 0x40, 0x6a,
- 0xf1, 0xe1, 0xba, 0xc8, 0xfa, 0x4c, 0x32, 0xef, 0x73, 0xc5, 0xe4, 0xc3, 0x7b, 0xaf, 0x3e, 0x4a,
- 0xa2, 0x14, 0x27, 0x9b, 0x85, 0x02, 0xb8, 0xda, 0x4e, 0x3b, 0xdb, 0x87, 0x22, 0xd4, 0xf7, 0x24,
- 0x0b, 0x83, 0x5c, 0xba, 0x57, 0x53, 0xad, 0x03, 0x21, 0xee, 0x41, 0x59, 0x4f, 0x47, 0x59, 0xb8,
- 0x98, 0x74, 0x94, 0xe6, 0x33, 0xc7, 0x23, 0x17, 0xfe, 0xcc, 0x31, 0xfa, 0x3f, 0xa9, 0x99, 0x53,
- 0xf9, 0x91, 0xb8, 0x9e, 0xf9, 0x9c, 0xf8, 0xa1, 0xcb, 0x9e, 0xfa, 0xf7, 0x2c, 0x98, 0xe4, 0x33,
- 0x2f, 0xa9, 0x88, 0xb1, 0x07, 0xe4, 0x47, 0xcf, 0xc5, 0xe7, 0xc3, 0xdc, 0xdf, 0x15, 0x83, 0x2b,
- 0x73, 0x45, 0x9c, 0xd0, 0x12, 0xf4, 0xcb, 0x29, 0xea, 0xdf, 0x58, 0x56, 0x46, 0xa6, 0xf4, 0xac,
- 0x9b, 0x97, 0x8e, 0x4f, 0xa3, 0xf1, 0xfd, 0x83, 0x9e, 0x36, 0x30, 0xc4, 0x9a, 0xf7, 0x97, 0xce,
- 0xc9, 0x06, 0xa6, 0xa7, 0x06, 0x3d, 0x8b, 0x25, 0x6c, 0xf2, 0xe7, 0x44, 0x6e, 0xf2, 0x9e, 0x19,
- 0xf4, 0xb7, 0xcd, 0x57, 0x71, 0x57, 0xb3, 0xcc, 0x1f, 0xac, 0xa7, 0xf2, 0xff, 0xab, 0x16, 0x5c,
- 0x4e, 0x13, 0x92, 0x29, 0x4d, 0xfa, 0x9c, 0xd9, 0xa4, 0x0c, 0x95, 0x34, 0xbd, 0x41, 0xd9, 0x24,
- 0x4d, 0xfd, 0x5e, 0x51, 0xf3, 0x3c, 0x44, 0xa4, 0x7d, 0x8e, 0xaf, 0xa7, 0x8f, 0xfc, 0xff, 0xd7,
- 0xd3, 0x2f, 0x22, 0x01, 0xbb, 0xf1, 0x0e, 0x7a, 0xfe, 0x71, 0xbd, 0x83, 0x3e, 0xf0, 0x30, 0xef,
- 0xa0, 0x0f, 0x3e, 0xb6, 0x77, 0xd0, 0x0b, 0xa7, 0x7c, 0x07, 0xbd, 0xf8, 0x43, 0xfa, 0x0e, 0xfa,
- 0x6f, 0xa8, 0xc7, 0xcd, 0xb9, 0x32, 0xf0, 0x7a, 0xb6, 0xa9, 0x28, 0xff, 0xdf, 0x7b, 0xe1, 0xfc,
- 0x8f, 0x73, 0x30, 0xa6, 0xb6, 0x6e, 0x27, 0xdc, 0xad, 0x90, 0xe8, 0x02, 0xc2, 0x26, 0xf6, 0x8d,
- 0xb0, 0x89, 0x2c, 0x2d, 0x55, 0xbc, 0x0b, 0x3d, 0x83, 0x54, 0xbe, 0x90, 0x08, 0x52, 0xb9, 0x97,
- 0x3d, 0xeb, 0x93, 0x63, 0x55, 0xfe, 0x9b, 0x05, 0x97, 0x12, 0x35, 0x2e, 0xc0, 0x91, 0xbf, 0x67,
- 0x3a, 0xf2, 0x5f, 0xcb, 0xbc, 0xd7, 0x3d, 0xfc, 0xf9, 0xbf, 0x99, 0xeb, 0xea, 0x2d, 0xd3, 0x0b,
- 0x7f, 0xd6, 0x92, 0x0f, 0xe4, 0x5b, 0x59, 0x7b, 0xea, 0x34, 0x36, 0xd3, 0xec, 0x8d, 0x7c, 0xbe,
- 0x5a, 0x53, 0xdf, 0xcd, 0x9f, 0xfc, 0x19, 0x0b, 0x20, 0x46, 0x7a, 0x5c, 0x2a, 0x8c, 0xfd, 0x3b,
- 0x39, 0xb8, 0x92, 0x3a, 0x8d, 0xd0, 0x97, 0xd5, 0x21, 0x9f, 0x0f, 0xd4, 0xf6, 0x39, 0xcd, 0x57,
- 0xfd, 0xac, 0x3f, 0x62, 0x9c, 0xf5, 0xc5, 0x11, 0xff, 0x71, 0x29, 0xa0, 0x22, 0x4b, 0xb1, 0x36,
- 0x58, 0xff, 0xdd, 0x82, 0xf1, 0xe4, 0x61, 0xe3, 0x02, 0x44, 0xd6, 0x81, 0x21, 0xb2, 0xee, 0x66,
- 0x6f, 0x5c, 0xef, 0x19, 0xe5, 0xf5, 0xc7, 0x5a, 0x78, 0x9b, 0x44, 0xbe, 0x00, 0x99, 0xb1, 0x6f,
- 0xca, 0x0c, 0x9c, 0x7d, 0x8f, 0x7b, 0x08, 0x8d, 0x77, 0x20, 0xcd, 0xbf, 0x70, 0xba, 0x2c, 0x27,
- 0x46, 0x88, 0x7a, 0xee, 0xd4, 0x21, 0xea, 0xbf, 0x90, 0xeb, 0x1e, 0x62, 0x26, 0xa8, 0x3e, 0xa4,
- 0xaa, 0x99, 0x76, 0xda, 0xcd, 0x2e, 0x11, 0x84, 0x71, 0xb6, 0x56, 0x6d, 0x34, 0x4e, 0xd6, 0x06,
- 0x67, 0xf4, 0x76, 0xdc, 0x12, 0xfa, 0xa5, 0x1e, 0x98, 0x51, 0xa8, 0xd7, 0x34, 0x67, 0xf6, 0xed,
- 0x7b, 0x1a, 0x25, 0x66, 0x69, 0x37, 0x68, 0xdb, 0x23, 0x30, 0xf4, 0x86, 0xdb, 0x56, 0xae, 0x81,
- 0xe9, 0x6f, 0x7e, 0xf7, 0xfa, 0x13, 0xbf, 0xff, 0xdd, 0xeb, 0x4f, 0x7c, 0xfb, 0xbb, 0xd7, 0x9f,
- 0xf8, 0xe2, 0xf1, 0x75, 0xeb, 0x9b, 0xc7, 0xd7, 0xad, 0xdf, 0x3f, 0xbe, 0x6e, 0x7d, 0xfb, 0xf8,
- 0xba, 0xf5, 0x1f, 0x8f, 0xaf, 0x5b, 0x7f, 0xed, 0x3f, 0x5d, 0x7f, 0xe2, 0x8d, 0x82, 0xec, 0xdb,
- 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x36, 0x6f, 0xeb, 0x4f, 0x97, 0xaa, 0x00, 0x00,
+ // 9035 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc9,
+ 0x75, 0xd8, 0xf5, 0x90, 0x43, 0xce, 0x3c, 0x92, 0x4b, 0x6e, 0xed, 0xd7, 0x1c, 0x6f, 0x6f, 0xb9,
+ 0xee, 0xf3, 0x5d, 0x6e, 0xed, 0x13, 0xe9, 0xdb, 0x95, 0x92, 0x8b, 0x84, 0xc8, 0xe2, 0x90, 0xcb,
+ 0x25, 0x8f, 0x9f, 0x57, 0xc3, 0xdd, 0x8d, 0xee, 0x2e, 0xb2, 0x9a, 0x33, 0xc5, 0x99, 0x3e, 0xce,
+ 0x74, 0xcf, 0x75, 0xf7, 0xf0, 0xe3, 0x3e, 0x24, 0x45, 0xfe, 0xd0, 0x5d, 0x2c, 0xc7, 0xf9, 0x70,
+ 0x6c, 0x59, 0x49, 0x00, 0xc3, 0xb1, 0x62, 0xc3, 0x31, 0x12, 0x08, 0xc8, 0x2f, 0xe7, 0x6f, 0x10,
+ 0x28, 0x48, 0x90, 0x38, 0xb0, 0x12, 0x0b, 0x48, 0x42, 0x45, 0x4c, 0xe2, 0x1f, 0x09, 0x1c, 0x04,
+ 0x46, 0x24, 0x0b, 0x9b, 0xfc, 0x08, 0xea, 0xb3, 0xab, 0x7a, 0x7a, 0xb8, 0xc3, 0xdd, 0x26, 0xf7,
+ 0x10, 0xe7, 0xdf, 0xcc, 0xab, 0x57, 0xef, 0x55, 0x55, 0x57, 0xbd, 0x7a, 0xf5, 0xde, 0xab, 0x57,
+ 0xb0, 0x51, 0x77, 0xa3, 0x46, 0x67, 0x6b, 0xba, 0xea, 0xb7, 0x66, 0x9c, 0xa0, 0xee, 0xb7, 0x03,
+ 0xff, 0x2d, 0xf6, 0xe3, 0x63, 0x7b, 0x7e, 0xb0, 0xb3, 0xdd, 0xf4, 0xf7, 0xc2, 0x99, 0xdd, 0x5b,
+ 0x33, 0xed, 0x9d, 0xfa, 0x8c, 0xd3, 0x76, 0xc3, 0x19, 0x09, 0x9d, 0xd9, 0x7d, 0xd9, 0x69, 0xb6,
+ 0x1b, 0xce, 0xcb, 0x33, 0x75, 0xe2, 0x91, 0xc0, 0x89, 0x48, 0x6d, 0xba, 0x1d, 0xf8, 0x91, 0x8f,
+ 0x3e, 0x13, 0x53, 0x9c, 0x96, 0x14, 0xd9, 0x8f, 0x9f, 0x52, 0x14, 0xa7, 0x77, 0x6f, 0x4d, 0xb7,
+ 0x77, 0xea, 0xd3, 0x94, 0xe2, 0xb4, 0x84, 0x4e, 0x4b, 0x8a, 0x93, 0x1f, 0xd3, 0xda, 0x54, 0xf7,
+ 0xeb, 0xfe, 0x0c, 0x23, 0xbc, 0xd5, 0xd9, 0x66, 0xff, 0xd8, 0x1f, 0xf6, 0x8b, 0x33, 0x9c, 0xb4,
+ 0x77, 0x5e, 0x09, 0xa7, 0x5d, 0x9f, 0xb6, 0x6f, 0xa6, 0xea, 0x07, 0x64, 0x66, 0xb7, 0xab, 0x51,
+ 0x93, 0x37, 0x34, 0x9c, 0xb6, 0xdf, 0x74, 0xab, 0x07, 0x33, 0xbb, 0x2f, 0x6f, 0x91, 0xa8, 0xbb,
+ 0xfd, 0x93, 0x1f, 0x8f, 0x51, 0x5b, 0x4e, 0xb5, 0xe1, 0x7a, 0x24, 0x38, 0x88, 0xfb, 0xdf, 0x22,
+ 0x91, 0x93, 0xc6, 0x60, 0xa6, 0x57, 0xad, 0xa0, 0xe3, 0x45, 0x6e, 0x8b, 0x74, 0x55, 0xf8, 0xb3,
+ 0x0f, 0xab, 0x10, 0x56, 0x1b, 0xa4, 0xe5, 0x74, 0xd5, 0xbb, 0xd5, 0xab, 0x5e, 0x27, 0x72, 0x9b,
+ 0x33, 0xae, 0x17, 0x85, 0x51, 0x90, 0xac, 0x64, 0xdf, 0x86, 0xa1, 0xd9, 0x96, 0xdf, 0xf1, 0x22,
+ 0xf4, 0x29, 0xc8, 0xef, 0x3a, 0xcd, 0x0e, 0x29, 0x59, 0xd7, 0xad, 0x17, 0x8b, 0xe5, 0xe7, 0xbf,
+ 0x75, 0x38, 0xf5, 0xd4, 0xd1, 0xe1, 0x54, 0xfe, 0x1e, 0x05, 0x3e, 0x38, 0x9c, 0xba, 0x48, 0xbc,
+ 0xaa, 0x5f, 0x73, 0xbd, 0xfa, 0xcc, 0x5b, 0xa1, 0xef, 0x4d, 0xaf, 0x75, 0x5a, 0x5b, 0x24, 0xc0,
+ 0xbc, 0x8e, 0xfd, 0xfb, 0x39, 0x18, 0x9f, 0x0d, 0xaa, 0x0d, 0x77, 0x97, 0x54, 0x22, 0x4a, 0xbf,
+ 0x7e, 0x80, 0x1a, 0x30, 0x10, 0x39, 0x01, 0x23, 0x37, 0x72, 0x73, 0x75, 0xfa, 0x71, 0x3f, 0xfe,
+ 0xf4, 0xa6, 0x13, 0x48, 0xda, 0xe5, 0xe1, 0xa3, 0xc3, 0xa9, 0x81, 0x4d, 0x27, 0xc0, 0x94, 0x05,
+ 0x6a, 0xc2, 0xa0, 0xe7, 0x7b, 0xa4, 0x94, 0x63, 0xac, 0xd6, 0x1e, 0x9f, 0xd5, 0x9a, 0xef, 0xa9,
+ 0x7e, 0x94, 0x0b, 0x47, 0x87, 0x53, 0x83, 0x14, 0x82, 0x19, 0x17, 0xda, 0xaf, 0x77, 0xdc, 0x76,
+ 0x69, 0x20, 0xab, 0x7e, 0xbd, 0xee, 0xb6, 0xcd, 0x7e, 0xbd, 0xee, 0xb6, 0x31, 0x65, 0x61, 0x7f,
+ 0x98, 0x83, 0xe2, 0x6c, 0x50, 0xef, 0xb4, 0x88, 0x17, 0x85, 0xe8, 0x8b, 0x00, 0x6d, 0x27, 0x70,
+ 0x5a, 0x24, 0x22, 0x41, 0x58, 0xb2, 0xae, 0x0f, 0xbc, 0x38, 0x72, 0x73, 0xf9, 0xf1, 0xd9, 0x6f,
+ 0x48, 0x9a, 0x65, 0x24, 0x3e, 0x39, 0x28, 0x50, 0x88, 0x35, 0x96, 0xe8, 0x5d, 0x28, 0x3a, 0x41,
+ 0xe4, 0x6e, 0x3b, 0xd5, 0x28, 0x2c, 0xe5, 0x18, 0xff, 0x57, 0x1f, 0x9f, 0xff, 0xac, 0x20, 0x59,
+ 0x3e, 0x2f, 0xd8, 0x17, 0x25, 0x24, 0xc4, 0x31, 0x3f, 0xfb, 0x37, 0xf3, 0x50, 0x90, 0x05, 0xe8,
+ 0x3a, 0x0c, 0x7a, 0x4e, 0x4b, 0x4e, 0xd5, 0x51, 0x51, 0x71, 0x70, 0xcd, 0x69, 0xd1, 0x8f, 0xe4,
+ 0xb4, 0x08, 0xc5, 0x68, 0x3b, 0x51, 0x83, 0x4d, 0x09, 0x0d, 0x63, 0xc3, 0x89, 0x1a, 0x98, 0x95,
+ 0xa0, 0xab, 0x30, 0xd8, 0xf2, 0x6b, 0x84, 0x7d, 0xc7, 0x3c, 0xff, 0xc8, 0xab, 0x7e, 0x8d, 0x60,
+ 0x06, 0xa5, 0xf5, 0xb7, 0x03, 0xbf, 0x55, 0x1a, 0x34, 0xeb, 0x2f, 0x04, 0x7e, 0x0b, 0xb3, 0x12,
+ 0xf4, 0x35, 0x0b, 0x26, 0x64, 0xf3, 0x56, 0xfc, 0xaa, 0x13, 0xb9, 0xbe, 0x57, 0xca, 0xb3, 0x49,
+ 0x81, 0xb3, 0x1b, 0x15, 0x49, 0xb9, 0x5c, 0x12, 0x4d, 0x98, 0x48, 0x96, 0xe0, 0xae, 0x56, 0xa0,
+ 0x9b, 0x00, 0xf5, 0xa6, 0xbf, 0xe5, 0x34, 0xe9, 0x80, 0x94, 0x86, 0x58, 0x17, 0xd4, 0xc7, 0xbd,
+ 0xa3, 0x4a, 0xb0, 0x86, 0x85, 0xf6, 0x61, 0xd8, 0xe1, 0x0b, 0xb8, 0x34, 0xcc, 0x3a, 0xf1, 0x5a,
+ 0x16, 0x9d, 0x30, 0x24, 0x42, 0x79, 0xe4, 0xe8, 0x70, 0x6a, 0x58, 0x00, 0xb1, 0x64, 0x87, 0x5e,
+ 0x82, 0x82, 0xdf, 0xa6, 0xed, 0x76, 0x9a, 0xa5, 0xc2, 0x75, 0xeb, 0xc5, 0x42, 0x79, 0x42, 0xb4,
+ 0xb5, 0xb0, 0x2e, 0xe0, 0x58, 0x61, 0xa0, 0x1b, 0x30, 0x1c, 0x76, 0xb6, 0xe8, 0x77, 0x2c, 0x15,
+ 0x59, 0xc7, 0xc6, 0x05, 0xf2, 0x70, 0x85, 0x83, 0xb1, 0x2c, 0x47, 0x9f, 0x80, 0x91, 0x80, 0x54,
+ 0x3b, 0x41, 0x48, 0xe8, 0x87, 0x2d, 0x01, 0xa3, 0x7d, 0x41, 0xa0, 0x8f, 0xe0, 0xb8, 0x08, 0xeb,
+ 0x78, 0xe8, 0xd3, 0x70, 0x8e, 0x7e, 0xe0, 0xdb, 0xfb, 0xed, 0x80, 0x84, 0x21, 0xfd, 0xaa, 0x23,
+ 0x8c, 0xd1, 0x65, 0x51, 0xf3, 0xdc, 0x82, 0x51, 0x8a, 0x13, 0xd8, 0xf6, 0xef, 0x0e, 0x43, 0xd7,
+ 0x47, 0x42, 0x2f, 0xc3, 0x88, 0xe8, 0xef, 0x8a, 0x5f, 0x0f, 0xd9, 0xc4, 0x2d, 0x94, 0xc7, 0x69,
+ 0x3b, 0x66, 0x63, 0x30, 0xd6, 0x71, 0x50, 0x0d, 0x72, 0xe1, 0x2d, 0x21, 0xd3, 0x56, 0x1e, 0xff,
+ 0x63, 0x54, 0x6e, 0xa9, 0x95, 0x36, 0x74, 0x74, 0x38, 0x95, 0xab, 0xdc, 0xc2, 0xb9, 0xf0, 0x16,
+ 0x95, 0x66, 0x75, 0x37, 0xca, 0x4e, 0x9a, 0xdd, 0x71, 0x23, 0xc5, 0x87, 0x49, 0xb3, 0x3b, 0x6e,
+ 0x84, 0x29, 0x0b, 0x2a, 0xa5, 0x1b, 0x51, 0xd4, 0x66, 0x4b, 0x2a, 0x13, 0x29, 0xbd, 0xb8, 0xb9,
+ 0xb9, 0xa1, 0x78, 0xb1, 0x05, 0x4c, 0x21, 0x98, 0x71, 0x41, 0x1f, 0x58, 0x74, 0xc4, 0x79, 0xa1,
+ 0x1f, 0x1c, 0x88, 0x95, 0x79, 0x37, 0xbb, 0x95, 0xe9, 0x07, 0x07, 0x8a, 0xb9, 0xf8, 0x90, 0xaa,
+ 0x00, 0xeb, 0xac, 0x59, 0xc7, 0x6b, 0xdb, 0x21, 0x5b, 0x88, 0xd9, 0x74, 0x7c, 0x7e, 0xa1, 0x92,
+ 0xe8, 0xf8, 0xfc, 0x42, 0x05, 0x33, 0x2e, 0xf4, 0x83, 0x06, 0xce, 0x9e, 0x58, 0xc4, 0x19, 0x7c,
+ 0x50, 0xec, 0xec, 0x99, 0x1f, 0x14, 0x3b, 0x7b, 0x98, 0xb2, 0xa0, 0x9c, 0xfc, 0x30, 0x64, 0x6b,
+ 0x36, 0x13, 0x4e, 0xeb, 0x95, 0x8a, 0xc9, 0x69, 0xbd, 0x52, 0xc1, 0x94, 0x05, 0x9b, 0xa4, 0xd5,
+ 0x90, 0x2d, 0xf8, 0x6c, 0x26, 0xe9, 0x5c, 0x82, 0xd3, 0x9d, 0xb9, 0x0a, 0xa6, 0x2c, 0xec, 0x0f,
+ 0x2d, 0x18, 0x93, 0x45, 0x54, 0x88, 0x84, 0x68, 0x1f, 0x0a, 0xf2, 0x63, 0x0a, 0x5d, 0x26, 0xcb,
+ 0x4d, 0x4f, 0x89, 0x3a, 0x09, 0xc1, 0x8a, 0x9b, 0xfd, 0x3b, 0x79, 0x40, 0x0a, 0x4c, 0xda, 0x7e,
+ 0xe8, 0xb2, 0xe9, 0xf4, 0x08, 0xa2, 0xc4, 0xd3, 0x44, 0xc9, 0xbd, 0x2c, 0x45, 0x49, 0xdc, 0x2c,
+ 0x43, 0xa8, 0xfc, 0x8d, 0xc4, 0xe2, 0xe3, 0xd2, 0xe5, 0xa7, 0x4e, 0x65, 0xf1, 0x69, 0x4d, 0x38,
+ 0x7e, 0x19, 0xee, 0x8a, 0x65, 0xc8, 0xe5, 0xcf, 0x5f, 0xcc, 0x76, 0x19, 0x6a, 0xad, 0x48, 0x2e,
+ 0xc8, 0x80, 0x2f, 0x13, 0x2e, 0x80, 0xee, 0x67, 0xba, 0x4c, 0x34, 0xae, 0xe6, 0x82, 0x09, 0xf8,
+ 0x82, 0x19, 0xca, 0x8a, 0xa7, 0xb6, 0x60, 0x92, 0x3c, 0xd5, 0xd2, 0x79, 0x1b, 0x2e, 0x75, 0xe3,
+ 0x60, 0xb2, 0x8d, 0x66, 0xa0, 0x58, 0xf5, 0xbd, 0x6d, 0xb7, 0xbe, 0xea, 0xb4, 0x85, 0xca, 0xa6,
+ 0x74, 0xbd, 0x39, 0x59, 0x80, 0x63, 0x1c, 0xf4, 0x2c, 0x0c, 0xec, 0x90, 0x03, 0xa1, 0xbb, 0x8d,
+ 0x08, 0xd4, 0x81, 0x65, 0x72, 0x80, 0x29, 0xfc, 0x93, 0x85, 0xaf, 0xfd, 0xda, 0xd4, 0x53, 0x5f,
+ 0xfa, 0x0f, 0xd7, 0x9f, 0xb2, 0xff, 0xcd, 0x00, 0x3c, 0x93, 0xca, 0xb3, 0x12, 0x39, 0x51, 0x27,
+ 0x44, 0xbf, 0x63, 0xc1, 0x25, 0x27, 0xad, 0x5c, 0xac, 0xe4, 0xfb, 0xd9, 0xcd, 0x48, 0x83, 0x7c,
+ 0xf9, 0x59, 0xd1, 0xe8, 0xf4, 0x11, 0xc1, 0xe9, 0x8d, 0xa2, 0x03, 0x45, 0x95, 0xd7, 0xb0, 0xed,
+ 0x54, 0x89, 0xe8, 0xbd, 0x1a, 0xa8, 0x35, 0x59, 0x80, 0x63, 0x1c, 0xaa, 0x0c, 0xd5, 0xc8, 0xb6,
+ 0xd3, 0x69, 0xf2, 0x0d, 0xbc, 0x10, 0x2b, 0x43, 0xf3, 0x1c, 0x8c, 0x65, 0x39, 0xfa, 0x3b, 0x16,
+ 0xa0, 0x6e, 0xae, 0x62, 0x31, 0x6c, 0x9e, 0xc6, 0x38, 0x94, 0x2f, 0x1f, 0x1d, 0x4e, 0xa5, 0x08,
+ 0x30, 0x9c, 0xd2, 0x0e, 0xed, 0x9b, 0xfe, 0x0b, 0x0b, 0x2e, 0xa4, 0x2c, 0x73, 0x3a, 0x29, 0x3a,
+ 0x41, 0x53, 0xcc, 0x1f, 0x35, 0x29, 0xee, 0xe2, 0x15, 0x4c, 0xe1, 0xe8, 0x97, 0x2c, 0x18, 0xd7,
+ 0x56, 0xfb, 0x6c, 0x47, 0x28, 0xff, 0x19, 0x29, 0xb2, 0x06, 0xe1, 0xf2, 0x15, 0xc1, 0x7e, 0x3c,
+ 0x51, 0x80, 0x93, 0x4d, 0xb0, 0xbf, 0x67, 0xc1, 0xb3, 0xc7, 0x0a, 0xad, 0xd4, 0x86, 0x5b, 0x4f,
+ 0xbc, 0xe1, 0x74, 0x6a, 0x05, 0xa4, 0xed, 0xdf, 0xc5, 0x2b, 0x62, 0x26, 0xaa, 0xa9, 0x85, 0x39,
+ 0x18, 0xcb, 0x72, 0xfb, 0x0f, 0x2c, 0x48, 0xd2, 0x43, 0x0e, 0x9c, 0xeb, 0x84, 0x24, 0xa0, 0x53,
+ 0xb5, 0x42, 0xaa, 0x01, 0x91, 0x7b, 0xe7, 0xf3, 0xd3, 0xdc, 0x4a, 0x41, 0x1b, 0x3c, 0x5d, 0xf5,
+ 0x03, 0x32, 0xbd, 0xfb, 0xf2, 0x34, 0xc7, 0x58, 0x26, 0x07, 0x15, 0xd2, 0x24, 0x94, 0x46, 0x19,
+ 0x51, 0x3d, 0xfb, 0xae, 0x41, 0x00, 0x27, 0x08, 0x52, 0x16, 0x6d, 0x27, 0x0c, 0xf7, 0xfc, 0xa0,
+ 0x26, 0x58, 0xe4, 0x4e, 0xcc, 0x62, 0xc3, 0x20, 0x80, 0x13, 0x04, 0xed, 0x7f, 0x6a, 0xc1, 0x70,
+ 0xd9, 0xa9, 0xee, 0xf8, 0xdb, 0xdb, 0xf4, 0x98, 0x52, 0xeb, 0x04, 0xfc, 0x98, 0xc7, 0x27, 0xa1,
+ 0xda, 0xbb, 0xe7, 0x05, 0x1c, 0x2b, 0x0c, 0xb4, 0x09, 0x43, 0x7c, 0x38, 0x44, 0xa3, 0x7e, 0x42,
+ 0x6b, 0x94, 0xb2, 0xce, 0xb0, 0x2f, 0xd7, 0x89, 0xdc, 0xe6, 0x34, 0xb7, 0xce, 0x4c, 0x2f, 0x79,
+ 0xd1, 0x7a, 0x50, 0x89, 0x02, 0xd7, 0xab, 0x97, 0xe1, 0xe8, 0x70, 0x6a, 0x68, 0x81, 0xd1, 0xc0,
+ 0x82, 0x16, 0x3d, 0xd1, 0xb4, 0x9c, 0x7d, 0xc9, 0x8e, 0xad, 0xf9, 0x62, 0x7c, 0xa2, 0x59, 0x8d,
+ 0x8b, 0xb0, 0x8e, 0x67, 0x7f, 0x0e, 0xf2, 0x73, 0x4e, 0xb5, 0x41, 0xd0, 0xdd, 0xa4, 0x24, 0x1e,
+ 0xb9, 0xf9, 0x62, 0xda, 0x68, 0x29, 0xa9, 0xac, 0x0f, 0xd8, 0x58, 0x2f, 0x79, 0x6d, 0x7f, 0xdf,
+ 0x82, 0x2b, 0x73, 0xcd, 0x4e, 0x18, 0x91, 0xe0, 0xbe, 0x98, 0x82, 0x9b, 0xa4, 0xd5, 0x6e, 0x3a,
+ 0x11, 0x41, 0x9f, 0x87, 0x42, 0x8b, 0x44, 0x4e, 0xcd, 0x89, 0x1c, 0xc1, 0xb1, 0xf7, 0x50, 0xb0,
+ 0x49, 0x4c, 0xb1, 0x69, 0x1b, 0xd6, 0xb7, 0xde, 0x22, 0xd5, 0x68, 0x95, 0x44, 0x4e, 0x7c, 0x76,
+ 0x8d, 0x61, 0x58, 0x51, 0x45, 0xfb, 0x30, 0x18, 0xb6, 0x49, 0x35, 0x3b, 0xf5, 0x26, 0xd9, 0x87,
+ 0x4a, 0x9b, 0x54, 0x63, 0x13, 0x00, 0xfd, 0x87, 0x19, 0x47, 0xfb, 0x7f, 0x5b, 0xf0, 0x4c, 0x8f,
+ 0x7e, 0xaf, 0xb8, 0x61, 0x84, 0xde, 0xec, 0xea, 0xfb, 0x74, 0x7f, 0x7d, 0xa7, 0xb5, 0x59, 0xcf,
+ 0xd5, 0x14, 0x93, 0x10, 0xad, 0xdf, 0x5f, 0x80, 0xbc, 0x1b, 0x91, 0x96, 0x34, 0xc5, 0x7c, 0xf6,
+ 0xf1, 0x3b, 0xde, 0xa3, 0x2f, 0xe5, 0x31, 0x69, 0x0b, 0x5c, 0xa2, 0xfc, 0x30, 0x67, 0x6b, 0xff,
+ 0x73, 0x0b, 0xe8, 0x74, 0xa8, 0xb9, 0xe2, 0x80, 0x3b, 0x18, 0x1d, 0xb4, 0xa5, 0x49, 0x46, 0xee,
+ 0x7f, 0x83, 0x9b, 0x07, 0x6d, 0xf2, 0xe0, 0x70, 0x6a, 0x4c, 0x21, 0x52, 0x00, 0x66, 0xa8, 0xe8,
+ 0x73, 0x30, 0x14, 0xb2, 0x7d, 0x5a, 0x48, 0x98, 0x05, 0x51, 0x69, 0x88, 0xef, 0xde, 0x0f, 0x0e,
+ 0xa7, 0xfa, 0xb2, 0xb8, 0x4e, 0x2b, 0xda, 0xbc, 0x1e, 0x16, 0x54, 0xa9, 0x08, 0x6b, 0x91, 0x30,
+ 0x74, 0xea, 0x44, 0xac, 0x14, 0x25, 0xc2, 0x56, 0x39, 0x18, 0xcb, 0x72, 0xfb, 0x6f, 0x59, 0x40,
+ 0x9b, 0x18, 0x39, 0x94, 0xc5, 0x9a, 0x5f, 0x23, 0x68, 0x8d, 0x2d, 0x15, 0x0e, 0x10, 0x1f, 0xef,
+ 0xd9, 0x1e, 0x4b, 0x85, 0x23, 0x19, 0x3a, 0x0d, 0x07, 0xe1, 0x98, 0x04, 0xfa, 0x38, 0x8c, 0xd6,
+ 0x48, 0x9b, 0x78, 0x35, 0xe2, 0x55, 0x5d, 0xc2, 0x3f, 0x5a, 0xb1, 0x3c, 0x71, 0x74, 0x38, 0x35,
+ 0x3a, 0xaf, 0xc1, 0xb1, 0x81, 0x65, 0xff, 0x89, 0x05, 0x17, 0x15, 0xb9, 0x0a, 0x89, 0xd4, 0xb2,
+ 0xfa, 0x69, 0x0b, 0x40, 0x11, 0xa7, 0x3a, 0x2d, 0x9d, 0x02, 0xeb, 0x19, 0x4c, 0x01, 0x7d, 0x10,
+ 0xe2, 0x85, 0xa7, 0xc0, 0x21, 0xd6, 0xd8, 0xa2, 0xcf, 0xc2, 0xe8, 0xae, 0xdf, 0xec, 0xb4, 0xc8,
+ 0xaa, 0xdf, 0xf1, 0xa2, 0xb0, 0x34, 0xc0, 0x9a, 0x31, 0x95, 0x36, 0x4e, 0xf7, 0x62, 0xbc, 0xf2,
+ 0x45, 0x41, 0x76, 0x54, 0x03, 0x86, 0xd8, 0x20, 0x65, 0x7f, 0x16, 0x18, 0x53, 0xd7, 0xeb, 0x90,
+ 0x75, 0x0f, 0x3d, 0x07, 0x79, 0x12, 0x04, 0x7e, 0x20, 0x4e, 0x3b, 0x6a, 0x42, 0xde, 0xa6, 0x40,
+ 0xcc, 0xcb, 0xd0, 0x0b, 0x54, 0xe6, 0xba, 0x4d, 0x52, 0x63, 0xf3, 0xa9, 0x50, 0x3e, 0x27, 0xe7,
+ 0xd3, 0x02, 0x83, 0x62, 0x51, 0x6a, 0x4f, 0xc3, 0xf0, 0x1c, 0x65, 0x42, 0x02, 0x4a, 0x57, 0x37,
+ 0x7a, 0x8f, 0x19, 0x46, 0x6f, 0x69, 0xdc, 0xde, 0x84, 0x4b, 0x73, 0x01, 0xa1, 0x82, 0xe0, 0x56,
+ 0xb9, 0x53, 0xdd, 0x21, 0x11, 0x37, 0x4b, 0x85, 0xe8, 0x53, 0x30, 0xe6, 0x33, 0x89, 0xb4, 0xe2,
+ 0x57, 0x77, 0x5c, 0xaf, 0x2e, 0x94, 0xb0, 0x4b, 0x82, 0xca, 0xd8, 0xba, 0x5e, 0x88, 0x4d, 0x5c,
+ 0xfb, 0xbf, 0xe4, 0x60, 0x74, 0x2e, 0xf0, 0x3d, 0xb9, 0xda, 0xce, 0x40, 0x52, 0x46, 0x86, 0xa4,
+ 0xcc, 0xc0, 0x4a, 0xa9, 0xb7, 0xbf, 0x97, 0x94, 0x44, 0xef, 0xa9, 0x65, 0x3e, 0x90, 0x95, 0xb2,
+ 0x69, 0xf0, 0x65, 0xb4, 0xe3, 0x8f, 0x6d, 0x0a, 0x01, 0xfb, 0xbf, 0x5a, 0x30, 0xa1, 0xa3, 0x9f,
+ 0x81, 0x60, 0x0e, 0x4d, 0xc1, 0xbc, 0x96, 0x6d, 0x7f, 0x7b, 0x48, 0xe3, 0x0f, 0x87, 0xcc, 0x7e,
+ 0xd2, 0x0f, 0x80, 0xbe, 0x66, 0xc1, 0xe8, 0x9e, 0x06, 0x10, 0x9d, 0x5d, 0xcb, 0x6e, 0x8f, 0x64,
+ 0x5f, 0xfd, 0x47, 0xe5, 0x7a, 0xd6, 0xa1, 0x0f, 0x12, 0xff, 0xb1, 0xd1, 0x12, 0xaa, 0x4e, 0x85,
+ 0xd5, 0x06, 0xa9, 0x75, 0x9a, 0xf2, 0xa8, 0xa3, 0x86, 0xb4, 0x22, 0xe0, 0x58, 0x61, 0xa0, 0x37,
+ 0xe1, 0x7c, 0xd5, 0xf7, 0xaa, 0x9d, 0x20, 0x20, 0x5e, 0xf5, 0x60, 0x83, 0xf9, 0xe9, 0x84, 0x50,
+ 0x9f, 0x16, 0xd5, 0xce, 0xcf, 0x25, 0x11, 0x1e, 0xa4, 0x01, 0x71, 0x37, 0x21, 0x6e, 0x53, 0x0e,
+ 0xa9, 0xd8, 0x65, 0xe7, 0xa1, 0x82, 0x6e, 0x53, 0x66, 0x60, 0x2c, 0xcb, 0xd1, 0x5d, 0xb8, 0x12,
+ 0x46, 0x54, 0x57, 0xf6, 0xea, 0xf3, 0xc4, 0xa9, 0x35, 0x5d, 0x8f, 0xaa, 0xa3, 0xbe, 0x57, 0xe3,
+ 0x07, 0xfc, 0x81, 0xf2, 0x33, 0x47, 0x87, 0x53, 0x57, 0x2a, 0xe9, 0x28, 0xb8, 0x57, 0x5d, 0xf4,
+ 0x39, 0x98, 0x0c, 0x3b, 0xd5, 0x2a, 0x09, 0xc3, 0xed, 0x4e, 0xf3, 0x55, 0x7f, 0x2b, 0x5c, 0x74,
+ 0x43, 0xaa, 0x4b, 0xaf, 0xb8, 0x2d, 0x37, 0x62, 0xc7, 0xf8, 0x7c, 0xf9, 0xda, 0xd1, 0xe1, 0xd4,
+ 0x64, 0xa5, 0x27, 0x16, 0x3e, 0x86, 0x02, 0xc2, 0x70, 0x99, 0x0b, 0xbf, 0x2e, 0xda, 0xc3, 0x8c,
+ 0xf6, 0xe4, 0xd1, 0xe1, 0xd4, 0xe5, 0x85, 0x54, 0x0c, 0xdc, 0xa3, 0x26, 0xfd, 0x82, 0x91, 0xdb,
+ 0x22, 0xef, 0xf8, 0x1e, 0x61, 0x36, 0x40, 0xed, 0x0b, 0x6e, 0x0a, 0x38, 0x56, 0x18, 0xe8, 0xad,
+ 0x78, 0x26, 0xd2, 0xe5, 0x22, 0x6c, 0x79, 0x27, 0x97, 0x70, 0x17, 0x8f, 0x0e, 0xa7, 0x26, 0xee,
+ 0x6b, 0x94, 0xe8, 0x92, 0xc3, 0x06, 0x6d, 0xfb, 0xf7, 0x73, 0x80, 0xba, 0x45, 0x04, 0x5a, 0x86,
+ 0x21, 0xa7, 0x1a, 0xb9, 0xbb, 0x44, 0x38, 0xcf, 0x9e, 0x4b, 0xdb, 0xa7, 0x38, 0x2b, 0x4c, 0xb6,
+ 0x09, 0x9d, 0x21, 0x24, 0x96, 0x2b, 0xb3, 0xac, 0x2a, 0x16, 0x24, 0x90, 0x0f, 0xe7, 0x9b, 0x4e,
+ 0x18, 0xc9, 0xb9, 0x5a, 0xa3, 0x5d, 0x16, 0x82, 0xf5, 0xc7, 0xfa, 0xeb, 0x14, 0xad, 0x51, 0xbe,
+ 0x44, 0x67, 0xee, 0x4a, 0x92, 0x10, 0xee, 0xa6, 0x8d, 0xbe, 0xc8, 0x36, 0x7c, 0xae, 0xe8, 0xc8,
+ 0x9d, 0x76, 0x39, 0x93, 0x0d, 0x9f, 0xd3, 0x34, 0x36, 0x7b, 0xc1, 0x06, 0x6b, 0x2c, 0xed, 0x7f,
+ 0x09, 0x30, 0x3c, 0x3f, 0x7b, 0x67, 0xd3, 0x09, 0x77, 0xfa, 0x70, 0xc0, 0xd1, 0xd9, 0x21, 0x94,
+ 0x95, 0xe4, 0xfa, 0x96, 0x4a, 0x0c, 0x56, 0x18, 0xc8, 0x83, 0x21, 0xd7, 0xa3, 0x0b, 0xa2, 0x74,
+ 0x2e, 0x2b, 0x13, 0xab, 0xd2, 0x5e, 0xd9, 0x41, 0x6a, 0x89, 0x51, 0xc7, 0x82, 0x0b, 0x7a, 0x0f,
+ 0x8a, 0x8e, 0x74, 0xac, 0x8a, 0x6d, 0x69, 0x39, 0x8b, 0xd3, 0xb6, 0x20, 0xa9, 0xfb, 0x32, 0x05,
+ 0x08, 0xc7, 0x0c, 0xd1, 0x97, 0x2c, 0x18, 0x91, 0x5d, 0xc7, 0x64, 0x5b, 0x18, 0x61, 0x56, 0xb3,
+ 0xeb, 0x33, 0x26, 0xdb, 0xdc, 0x18, 0xaa, 0x01, 0xb0, 0xce, 0xb2, 0x4b, 0x1d, 0xcd, 0xf7, 0xa3,
+ 0x8e, 0xa2, 0x3d, 0x28, 0xee, 0xb9, 0x51, 0x83, 0x6d, 0x3c, 0xa5, 0x21, 0x36, 0x05, 0x17, 0x1e,
+ 0xbf, 0xd5, 0x94, 0x5c, 0x3c, 0x62, 0xf7, 0x25, 0x03, 0x1c, 0xf3, 0x42, 0x33, 0x9c, 0x31, 0x73,
+ 0x4c, 0x33, 0x91, 0x55, 0x34, 0x2b, 0xb0, 0x02, 0x1c, 0xe3, 0xd0, 0x21, 0x1e, 0xa5, 0xff, 0x2a,
+ 0xe4, 0xed, 0x0e, 0x5d, 0xc7, 0xc2, 0x4b, 0x91, 0xc1, 0xbc, 0x92, 0x14, 0xf9, 0x60, 0xdd, 0xd7,
+ 0x78, 0x60, 0x83, 0x23, 0x5d, 0x23, 0x7b, 0x0d, 0xe2, 0x09, 0x37, 0xa5, 0x5a, 0x23, 0xf7, 0x1b,
+ 0xc4, 0xc3, 0xac, 0x04, 0xbd, 0xc7, 0x75, 0x78, 0xae, 0xe3, 0x32, 0xff, 0x64, 0x26, 0x9e, 0xbe,
+ 0x58, 0x6f, 0x2e, 0x9f, 0x93, 0xca, 0x3b, 0xff, 0x8f, 0x35, 0x7e, 0x54, 0x5d, 0xf6, 0xbd, 0xdb,
+ 0xfb, 0x6e, 0x24, 0xfc, 0x9b, 0x4a, 0xd2, 0xad, 0x33, 0x28, 0x16, 0xa5, 0xdc, 0xc8, 0x48, 0x27,
+ 0x41, 0x58, 0x1a, 0x35, 0x8f, 0x51, 0x7c, 0xa6, 0x84, 0x58, 0x96, 0xa3, 0xbf, 0x6b, 0x41, 0xbe,
+ 0xe1, 0xfb, 0x3b, 0x61, 0x69, 0x8c, 0x4d, 0x8e, 0x0c, 0x54, 0x3d, 0x21, 0x71, 0xa6, 0x17, 0x29,
+ 0xd9, 0xdb, 0x5e, 0x14, 0x1c, 0x94, 0x5f, 0x96, 0x0a, 0x10, 0x83, 0x3d, 0x38, 0x9c, 0x3a, 0xb7,
+ 0xe2, 0x6e, 0x93, 0xea, 0x41, 0xb5, 0x49, 0x18, 0xe4, 0xcb, 0xdf, 0xd5, 0x20, 0xb7, 0x77, 0x89,
+ 0x17, 0x61, 0xde, 0xaa, 0xc9, 0x0f, 0x2d, 0x80, 0x98, 0x10, 0x9a, 0xe0, 0x76, 0x66, 0x26, 0xc4,
+ 0x98, 0x69, 0x19, 0x11, 0x79, 0x1e, 0xe0, 0x92, 0x3c, 0x83, 0x03, 0x95, 0xd1, 0x34, 0x71, 0xa2,
+ 0xf8, 0x64, 0xee, 0x15, 0xcb, 0xfe, 0xd7, 0x16, 0x8c, 0xd0, 0xce, 0x49, 0x11, 0xf8, 0x02, 0x0c,
+ 0x45, 0x4e, 0x50, 0x17, 0x96, 0x32, 0xed, 0x73, 0x6c, 0x32, 0x28, 0x16, 0xa5, 0xc8, 0x83, 0x7c,
+ 0xe4, 0x84, 0x3b, 0x52, 0xbb, 0x5c, 0xca, 0x6c, 0x88, 0x63, 0xc5, 0x92, 0xfe, 0x0b, 0x31, 0x67,
+ 0x83, 0x5e, 0x84, 0x02, 0x55, 0x00, 0x16, 0x9c, 0x50, 0x1a, 0x99, 0x47, 0xa9, 0x10, 0x5f, 0x10,
+ 0x30, 0xac, 0x4a, 0xed, 0xbf, 0x99, 0x83, 0xc1, 0x79, 0x7e, 0xce, 0x18, 0x0a, 0xfd, 0x4e, 0x50,
+ 0x25, 0x42, 0xdf, 0xcc, 0x60, 0x4e, 0x53, 0xba, 0x15, 0x46, 0x53, 0xd3, 0xf4, 0xd9, 0x7f, 0x2c,
+ 0x78, 0xa1, 0x5f, 0xb2, 0xe0, 0x5c, 0x14, 0x38, 0x5e, 0xb8, 0xed, 0x07, 0x2d, 0x6e, 0x20, 0xcb,
+ 0x65, 0x35, 0x0b, 0x37, 0x0d, 0xba, 0x95, 0x88, 0xb4, 0xe3, 0x70, 0x00, 0xb3, 0x0c, 0x27, 0xda,
+ 0x60, 0xff, 0x8a, 0x05, 0x10, 0xb7, 0x1e, 0x7d, 0x60, 0xc1, 0x98, 0xa3, 0x3b, 0x18, 0xc5, 0x18,
+ 0xad, 0x67, 0x67, 0xec, 0x65, 0x64, 0xcb, 0xe7, 0xe9, 0x09, 0xd4, 0x00, 0x61, 0x93, 0xb1, 0xfd,
+ 0x09, 0xc8, 0xb3, 0xd5, 0xc1, 0x74, 0x71, 0x61, 0xe5, 0x4b, 0x9a, 0x36, 0xa5, 0xf5, 0x0f, 0x2b,
+ 0x0c, 0xfb, 0x4d, 0x38, 0x77, 0x7b, 0x9f, 0x54, 0x3b, 0x91, 0x1f, 0x70, 0x6b, 0x20, 0x7a, 0x15,
+ 0x50, 0x48, 0x82, 0x5d, 0xb7, 0x4a, 0x66, 0xab, 0x55, 0x7a, 0xb2, 0x5e, 0x8b, 0x75, 0x83, 0x49,
+ 0x41, 0x09, 0x55, 0xba, 0x30, 0x70, 0x4a, 0x2d, 0xfb, 0xb7, 0x2d, 0x18, 0xd1, 0xbc, 0x4d, 0x74,
+ 0xa7, 0xae, 0xcf, 0x55, 0xf8, 0xb9, 0x5b, 0x0c, 0xd5, 0x72, 0x26, 0xfe, 0x2c, 0x4e, 0x32, 0xde,
+ 0x46, 0x14, 0x08, 0xc7, 0x0c, 0x1f, 0xe2, 0x89, 0xb2, 0xff, 0x99, 0x05, 0x97, 0x52, 0x5d, 0x63,
+ 0x4f, 0xb8, 0xd9, 0x33, 0x50, 0xdc, 0x21, 0x07, 0x0b, 0x6c, 0x0e, 0x26, 0x1d, 0x49, 0xcb, 0xb2,
+ 0x00, 0xc7, 0x38, 0xf6, 0x37, 0x2d, 0x88, 0x29, 0x51, 0x51, 0xb4, 0x15, 0xb7, 0x5c, 0x13, 0x45,
+ 0x82, 0x93, 0x28, 0x45, 0xef, 0xc1, 0x15, 0xf3, 0x0b, 0x32, 0x73, 0xf1, 0xc9, 0x4d, 0xf1, 0xfc,
+ 0xcc, 0x94, 0x4e, 0x09, 0xf7, 0x62, 0x61, 0xdf, 0x83, 0xfc, 0x1d, 0xa7, 0x53, 0x27, 0x7d, 0x19,
+ 0x71, 0xa8, 0x18, 0x0b, 0x88, 0xd3, 0x8c, 0xa4, 0x9a, 0x2e, 0xc4, 0x18, 0x16, 0x30, 0xac, 0x4a,
+ 0xed, 0xef, 0x0f, 0xc2, 0x88, 0x16, 0xc5, 0x42, 0xf7, 0xf1, 0x80, 0xb4, 0xfd, 0xa4, 0xae, 0x4b,
+ 0x3f, 0x36, 0x66, 0x25, 0x74, 0xfd, 0x04, 0x64, 0xd7, 0x0d, 0xb9, 0xc8, 0x31, 0xd6, 0x0f, 0x16,
+ 0x70, 0xac, 0x30, 0xd0, 0x14, 0xe4, 0x6b, 0xa4, 0x1d, 0x35, 0x98, 0x34, 0x1d, 0x2c, 0x17, 0x69,
+ 0x53, 0xe7, 0x29, 0x00, 0x73, 0x38, 0x45, 0xd8, 0x26, 0x51, 0xb5, 0xc1, 0xac, 0x7a, 0x45, 0x8e,
+ 0xb0, 0x40, 0x01, 0x98, 0xc3, 0x53, 0x9c, 0x2b, 0xf9, 0xd3, 0x77, 0xae, 0x0c, 0x65, 0xec, 0x5c,
+ 0x41, 0x6d, 0xb8, 0x10, 0x86, 0x8d, 0x8d, 0xc0, 0xdd, 0x75, 0x22, 0x12, 0xcf, 0x9c, 0xe1, 0x93,
+ 0xf0, 0xb9, 0x72, 0x74, 0x38, 0x75, 0xa1, 0x52, 0x59, 0x4c, 0x52, 0xc1, 0x69, 0xa4, 0x51, 0x05,
+ 0x2e, 0xb9, 0x5e, 0x48, 0xaa, 0x9d, 0x80, 0x2c, 0xd5, 0x3d, 0x3f, 0x20, 0x8b, 0x7e, 0x48, 0xc9,
+ 0x89, 0xb0, 0x33, 0xe5, 0xb4, 0x5d, 0x4a, 0x43, 0xc2, 0xe9, 0x75, 0xd1, 0x1d, 0x38, 0x5f, 0x73,
+ 0x43, 0x67, 0xab, 0x49, 0x2a, 0x9d, 0xad, 0x96, 0x4f, 0x0f, 0x6c, 0x3c, 0x52, 0xa5, 0x50, 0x7e,
+ 0x5a, 0x9a, 0x26, 0xe6, 0x93, 0x08, 0xb8, 0xbb, 0x8e, 0xfd, 0x1d, 0x0b, 0x46, 0xf5, 0x90, 0x02,
+ 0xaa, 0xc3, 0x42, 0x63, 0x7e, 0xa1, 0xc2, 0xa5, 0x6c, 0x76, 0x7b, 0xe9, 0xa2, 0xa2, 0x19, 0x9f,
+ 0xf9, 0x62, 0x18, 0xd6, 0x78, 0xf6, 0x11, 0x46, 0xf9, 0x1c, 0xe4, 0xb7, 0x7d, 0xba, 0xd5, 0x0f,
+ 0x98, 0x96, 0xd9, 0x05, 0x0a, 0xc4, 0xbc, 0xcc, 0xfe, 0x5f, 0x16, 0x5c, 0x4e, 0x8f, 0x96, 0xf8,
+ 0x28, 0x74, 0xf2, 0x26, 0x00, 0xed, 0x8a, 0x21, 0x2e, 0xb5, 0x58, 0x58, 0x59, 0x82, 0x35, 0xac,
+ 0xfe, 0xba, 0xfd, 0x03, 0xaa, 0x6e, 0xc6, 0x7c, 0xbe, 0x6a, 0xc1, 0x18, 0x65, 0xbb, 0x1c, 0x6c,
+ 0x19, 0xbd, 0x5d, 0xcf, 0xa6, 0xb7, 0x8a, 0x6c, 0x6c, 0x80, 0x36, 0xc0, 0xd8, 0x64, 0x8e, 0x7e,
+ 0x1c, 0x8a, 0x4e, 0xad, 0x16, 0x90, 0x30, 0x54, 0xee, 0x08, 0xe6, 0xe2, 0x9b, 0x95, 0x40, 0x1c,
+ 0x97, 0x53, 0x11, 0xd7, 0xa8, 0x6d, 0x87, 0x54, 0x6a, 0x08, 0xbb, 0x9b, 0x12, 0x71, 0x94, 0x09,
+ 0x85, 0x63, 0x85, 0x61, 0xff, 0xc2, 0x20, 0x98, 0xbc, 0x51, 0x0d, 0xc6, 0x77, 0x82, 0xad, 0x39,
+ 0xe6, 0x86, 0x7c, 0x14, 0x87, 0xf0, 0x85, 0xa3, 0xc3, 0xa9, 0xf1, 0x65, 0x93, 0x02, 0x4e, 0x92,
+ 0x14, 0x5c, 0x96, 0xc9, 0x41, 0xe4, 0x6c, 0x3d, 0xca, 0x46, 0x24, 0xb9, 0xe8, 0x14, 0x70, 0x92,
+ 0x24, 0xfa, 0x04, 0x8c, 0xec, 0x04, 0x5b, 0x52, 0x80, 0x26, 0xbd, 0xb0, 0xcb, 0x71, 0x11, 0xd6,
+ 0xf1, 0xe8, 0x10, 0xee, 0x04, 0x5b, 0x74, 0xc3, 0x91, 0x61, 0xc5, 0x6a, 0x08, 0x97, 0x05, 0x1c,
+ 0x2b, 0x0c, 0xd4, 0x06, 0xb4, 0x23, 0x47, 0x4f, 0x39, 0x5d, 0x85, 0x9c, 0xef, 0xdf, 0x67, 0xcb,
+ 0x42, 0x30, 0x96, 0xbb, 0xe8, 0xe0, 0x14, 0xda, 0xe8, 0xb3, 0x70, 0x65, 0x27, 0xd8, 0x12, 0xdb,
+ 0xf0, 0x46, 0xe0, 0x7a, 0x55, 0xb7, 0x6d, 0x84, 0x10, 0x4f, 0x89, 0xe6, 0x5e, 0x59, 0x4e, 0x47,
+ 0xc3, 0xbd, 0xea, 0xdb, 0xff, 0x2d, 0x07, 0x2c, 0x36, 0x93, 0x6a, 0x16, 0x2d, 0x12, 0x35, 0xfc,
+ 0x5a, 0x52, 0xb3, 0x58, 0x65, 0x50, 0x2c, 0x4a, 0x65, 0xb0, 0x47, 0xae, 0x47, 0xb0, 0xc7, 0x1e,
+ 0x0c, 0x37, 0x88, 0x53, 0x23, 0x81, 0x34, 0x84, 0xad, 0x64, 0x13, 0x4d, 0xba, 0xc8, 0x88, 0xc6,
+ 0x07, 0x5c, 0xfe, 0x3f, 0xc4, 0x92, 0x1b, 0xfa, 0x24, 0x9c, 0xa3, 0x3a, 0x82, 0xdf, 0x89, 0xa4,
+ 0xd5, 0x77, 0x90, 0x59, 0x7d, 0xd9, 0x7e, 0xb7, 0x69, 0x94, 0xe0, 0x04, 0x26, 0x9a, 0x87, 0x09,
+ 0x61, 0xa1, 0x55, 0x06, 0x36, 0x31, 0xb0, 0x2a, 0xb6, 0xbb, 0x92, 0x28, 0xc7, 0x5d, 0x35, 0xa8,
+ 0x44, 0xde, 0xf2, 0x6b, 0x3c, 0x9e, 0x55, 0x93, 0xc8, 0x65, 0xbf, 0x76, 0x80, 0x59, 0x89, 0xfd,
+ 0xeb, 0x74, 0x1f, 0xd1, 0x42, 0x63, 0x1f, 0x16, 0x39, 0x13, 0xc6, 0x83, 0xc9, 0xcf, 0x4b, 0x8b,
+ 0x19, 0x0c, 0xe6, 0x43, 0x06, 0xd2, 0xfe, 0x36, 0x15, 0x8d, 0x6a, 0xc4, 0xfb, 0xb0, 0x27, 0x3e,
+ 0xa7, 0x9f, 0xcc, 0x7b, 0x29, 0x79, 0x5f, 0x84, 0x22, 0xfb, 0xb1, 0x10, 0xf8, 0x2d, 0x61, 0xd6,
+ 0xc3, 0x59, 0xce, 0x0c, 0x71, 0x02, 0x65, 0x62, 0xf2, 0x9e, 0x64, 0x84, 0x63, 0x9e, 0xb6, 0x0f,
+ 0x13, 0x49, 0x6c, 0xf4, 0x06, 0x8c, 0x86, 0x52, 0xd2, 0xc4, 0xa1, 0x67, 0x7d, 0x4a, 0x24, 0x66,
+ 0x64, 0xaa, 0x68, 0xd5, 0xb1, 0x41, 0xcc, 0x5e, 0x87, 0xa1, 0x4c, 0x87, 0xd0, 0xfe, 0x86, 0x05,
+ 0x45, 0x66, 0xe6, 0xaf, 0x07, 0x4e, 0x2b, 0xae, 0x32, 0x70, 0xcc, 0xa8, 0x87, 0x30, 0xcc, 0x0f,
+ 0x04, 0xd2, 0x0f, 0x9d, 0xc1, 0x04, 0xe2, 0x97, 0x92, 0xe2, 0x09, 0xc4, 0x4f, 0x1e, 0x21, 0x96,
+ 0x9c, 0xec, 0x9f, 0xcb, 0xc1, 0xd0, 0x92, 0xd7, 0xee, 0xfc, 0xa9, 0xbf, 0x18, 0xb3, 0x0a, 0x83,
+ 0x4b, 0x11, 0x69, 0x99, 0xf7, 0xb7, 0x46, 0xcb, 0xcf, 0xeb, 0x77, 0xb7, 0x4a, 0xe6, 0xdd, 0x2d,
+ 0xec, 0xec, 0xc9, 0x08, 0x08, 0x61, 0x90, 0x8a, 0xc3, 0xef, 0x5e, 0x82, 0xe2, 0x8a, 0xb3, 0x45,
+ 0x9a, 0xcb, 0xe4, 0x20, 0xa4, 0x27, 0x11, 0xee, 0xc9, 0xb4, 0xe2, 0x93, 0x88, 0xe1, 0x75, 0x9c,
+ 0x86, 0x11, 0x86, 0xcd, 0x18, 0xf5, 0x81, 0xff, 0xc7, 0x39, 0x18, 0x33, 0x2c, 0x62, 0x86, 0x9f,
+ 0xc0, 0x7a, 0xa8, 0x9f, 0xc0, 0xb0, 0xdb, 0xe7, 0x9e, 0xb4, 0xdd, 0x7e, 0xe0, 0xec, 0xed, 0xf6,
+ 0x37, 0x01, 0x48, 0x7c, 0x31, 0x65, 0xd0, 0xd4, 0x55, 0xb5, 0x4b, 0x29, 0x1a, 0x96, 0xdd, 0x84,
+ 0xc1, 0x15, 0xd7, 0xdb, 0xe9, 0x4f, 0x42, 0x84, 0x55, 0xbf, 0xdd, 0x25, 0x21, 0x2a, 0x14, 0x88,
+ 0x79, 0x99, 0xdc, 0x4e, 0x06, 0xd2, 0xb7, 0x13, 0xfb, 0xcb, 0x16, 0x9c, 0x5f, 0x25, 0x2d, 0xdf,
+ 0x7d, 0xc7, 0x89, 0x63, 0x72, 0x68, 0xa5, 0x86, 0x1b, 0x89, 0xf0, 0x0d, 0x55, 0x69, 0xd1, 0x8d,
+ 0x30, 0x85, 0x3f, 0xc4, 0xce, 0xc2, 0x22, 0x88, 0xa9, 0x9a, 0xb7, 0x16, 0xeb, 0x5b, 0x71, 0xb4,
+ 0x8d, 0x2c, 0xc0, 0x31, 0x8e, 0xfd, 0xbb, 0x16, 0x0c, 0xf3, 0x46, 0x10, 0x49, 0xdb, 0xea, 0x41,
+ 0xbb, 0x01, 0x79, 0x56, 0x4f, 0x4c, 0xa7, 0x3b, 0x19, 0xd8, 0xdf, 0x29, 0x39, 0x3e, 0xf9, 0xd9,
+ 0x4f, 0xcc, 0x19, 0x30, 0xe5, 0xc7, 0xd9, 0x9f, 0x55, 0xe1, 0x48, 0xb1, 0xf2, 0xc3, 0xa0, 0x58,
+ 0x94, 0xda, 0x5f, 0x1f, 0x80, 0x82, 0xf4, 0x6c, 0xf2, 0x50, 0x7a, 0xcf, 0xf3, 0x23, 0x87, 0x3b,
+ 0xfe, 0xb8, 0x78, 0x7b, 0xe3, 0xf1, 0x5b, 0x29, 0x39, 0x4c, 0xcf, 0xc6, 0xd4, 0xb9, 0x7d, 0x5d,
+ 0xa9, 0xb2, 0x5a, 0x09, 0xd6, 0x1b, 0x81, 0xbe, 0x00, 0x43, 0x4d, 0xba, 0xec, 0xa5, 0xb4, 0xbb,
+ 0x97, 0x61, 0x73, 0x98, 0x3c, 0x11, 0x2d, 0x51, 0x23, 0xc4, 0x81, 0x58, 0x70, 0x9d, 0xfc, 0x34,
+ 0x4c, 0x24, 0x5b, 0x9d, 0x62, 0xcc, 0xbf, 0x68, 0xec, 0x77, 0x9a, 0xed, 0x7d, 0xf2, 0xcf, 0x0b,
+ 0xb1, 0x75, 0xf2, 0xaa, 0xf6, 0x6b, 0x30, 0xb2, 0x4a, 0xa2, 0xc0, 0xad, 0x32, 0x02, 0x0f, 0x9b,
+ 0x5c, 0x7d, 0x6d, 0xb9, 0x5f, 0x61, 0x93, 0x95, 0xd2, 0x0c, 0xd1, 0x7b, 0x00, 0xed, 0xc0, 0xa7,
+ 0x5a, 0x30, 0xe9, 0xc8, 0x8f, 0x9d, 0x81, 0x72, 0xbb, 0xa1, 0x68, 0x72, 0x97, 0x50, 0xfc, 0x1f,
+ 0x6b, 0xfc, 0xec, 0x1b, 0x90, 0x5f, 0xed, 0x44, 0x64, 0xff, 0xe1, 0xa2, 0xc2, 0x7e, 0x03, 0x46,
+ 0x19, 0xea, 0xa2, 0xdf, 0xa4, 0x1b, 0x0b, 0xed, 0x69, 0x8b, 0xfe, 0x4f, 0x1a, 0xe1, 0x18, 0x12,
+ 0xe6, 0x65, 0x74, 0x05, 0x34, 0xfc, 0x66, 0x8d, 0x04, 0x62, 0x3c, 0xd4, 0xf7, 0x5d, 0x64, 0x50,
+ 0x2c, 0x4a, 0xed, 0x9f, 0xce, 0xc1, 0x08, 0xab, 0x28, 0xa4, 0xc7, 0x01, 0x0c, 0x37, 0x38, 0x1f,
+ 0x31, 0x24, 0x19, 0x44, 0xb0, 0xe8, 0xad, 0xd7, 0x14, 0x55, 0x0e, 0xc0, 0x92, 0x1f, 0x65, 0xbd,
+ 0xe7, 0xb8, 0x11, 0x65, 0x9d, 0x3b, 0x5d, 0xd6, 0xf7, 0x39, 0x1b, 0x2c, 0xf9, 0xd9, 0xff, 0xde,
+ 0x02, 0x58, 0xf3, 0x6b, 0x04, 0x93, 0xb0, 0xd3, 0x8c, 0xd0, 0x4f, 0x40, 0xbe, 0xdd, 0x70, 0xc2,
+ 0xa4, 0x61, 0x3d, 0xbf, 0x41, 0x81, 0x0f, 0x0e, 0xa7, 0x8a, 0x14, 0x97, 0xfd, 0xc1, 0x1c, 0x51,
+ 0x0f, 0x80, 0xcc, 0x1d, 0x1f, 0x00, 0x89, 0xda, 0x30, 0xec, 0x77, 0x22, 0xaa, 0x4e, 0x89, 0x5d,
+ 0x2d, 0x03, 0xbf, 0xd2, 0x3a, 0x27, 0xc8, 0xaf, 0x7d, 0x8a, 0x3f, 0x58, 0xb2, 0xb1, 0xff, 0x70,
+ 0x9c, 0xf7, 0x4e, 0x7c, 0xe2, 0x49, 0xc8, 0xb9, 0xf2, 0x54, 0x08, 0xa2, 0x99, 0xb9, 0xa5, 0x79,
+ 0x9c, 0x73, 0x6b, 0x6a, 0x36, 0xe6, 0x7a, 0x6e, 0x5c, 0x9f, 0x80, 0x91, 0x9a, 0x1b, 0xb6, 0x9b,
+ 0xce, 0xc1, 0x5a, 0xca, 0x91, 0x7c, 0x3e, 0x2e, 0xc2, 0x3a, 0x1e, 0x7a, 0x49, 0x04, 0xad, 0x0e,
+ 0x1a, 0xc7, 0x30, 0x19, 0xb4, 0x5a, 0xa0, 0xcd, 0xd3, 0xe2, 0x55, 0x5f, 0x81, 0x51, 0xb9, 0x15,
+ 0x33, 0x2e, 0xfc, 0x08, 0xa6, 0x82, 0x19, 0x37, 0xb5, 0x32, 0x6c, 0x60, 0x76, 0x29, 0x0e, 0x43,
+ 0x67, 0xaf, 0x38, 0x7c, 0x0a, 0xc6, 0xe4, 0x5f, 0xb6, 0x9b, 0x97, 0x2e, 0xb2, 0xd6, 0x2b, 0x53,
+ 0xd1, 0xa6, 0x5e, 0x88, 0x4d, 0xdc, 0x78, 0xea, 0x0d, 0xf7, 0x3b, 0xf5, 0x6e, 0x02, 0x6c, 0xf9,
+ 0x1d, 0xaf, 0xe6, 0x04, 0x07, 0x4b, 0xf3, 0x22, 0x3c, 0x48, 0xe9, 0x29, 0x65, 0x55, 0x82, 0x35,
+ 0x2c, 0x7d, 0xba, 0x16, 0x1f, 0x32, 0x5d, 0xdf, 0x80, 0x22, 0x0b, 0xa5, 0x22, 0xb5, 0xd9, 0x48,
+ 0x38, 0xce, 0x4f, 0x12, 0x75, 0xa3, 0x94, 0x87, 0x8a, 0x24, 0x82, 0x63, 0x7a, 0xe8, 0x73, 0x00,
+ 0xdb, 0xae, 0xe7, 0x86, 0x0d, 0x46, 0x7d, 0xe4, 0xc4, 0xd4, 0x55, 0x3f, 0x17, 0x14, 0x15, 0xac,
+ 0x51, 0x44, 0x6f, 0xc2, 0x79, 0x12, 0x46, 0x6e, 0xcb, 0x89, 0x48, 0x4d, 0xc5, 0xf2, 0x97, 0x98,
+ 0x1d, 0x41, 0x05, 0xb3, 0xdd, 0x4e, 0x22, 0x3c, 0x48, 0x03, 0xe2, 0x6e, 0x42, 0xe8, 0x15, 0x28,
+ 0xb4, 0x03, 0xbf, 0x4e, 0x95, 0xbf, 0xd2, 0x24, 0x1b, 0xc6, 0xab, 0x52, 0xa1, 0xde, 0x10, 0xf0,
+ 0x07, 0xda, 0x6f, 0xac, 0xb0, 0xd1, 0x0f, 0x2d, 0x38, 0x1f, 0x10, 0xee, 0x4d, 0x0d, 0x55, 0xc3,
+ 0x2e, 0x31, 0xa9, 0x57, 0xcd, 0x22, 0xa9, 0x82, 0x5c, 0xec, 0xd3, 0x38, 0xc9, 0x85, 0x6f, 0xf7,
+ 0x44, 0xf6, 0xbe, 0xab, 0xfc, 0x41, 0x1a, 0xf0, 0xcb, 0xdf, 0x9d, 0x9a, 0xea, 0xce, 0xf0, 0xa1,
+ 0x88, 0xd3, 0x95, 0xf7, 0x57, 0xbe, 0x3b, 0x35, 0x21, 0xff, 0xc7, 0x83, 0xd6, 0xd5, 0x49, 0xba,
+ 0x7b, 0xb5, 0xfd, 0xda, 0xd2, 0x86, 0x88, 0x70, 0x50, 0xbb, 0xd7, 0x06, 0x05, 0x62, 0x5e, 0x86,
+ 0x5e, 0x84, 0x42, 0xcd, 0x21, 0x2d, 0xdf, 0x23, 0xb5, 0xd2, 0x58, 0xec, 0x42, 0x9a, 0x17, 0x30,
+ 0xac, 0x4a, 0x51, 0x13, 0x86, 0x5c, 0x76, 0x36, 0x15, 0xe1, 0x4c, 0x19, 0x1c, 0x88, 0xf9, 0x59,
+ 0x57, 0x06, 0x33, 0x31, 0x51, 0x2a, 0x78, 0xe8, 0xb2, 0x7b, 0xfc, 0x4c, 0x64, 0x37, 0x1d, 0x89,
+ 0x6a, 0xc3, 0x6d, 0xd6, 0x02, 0xe2, 0x95, 0x26, 0xd8, 0x51, 0x8f, 0x8d, 0xc4, 0x9c, 0x80, 0x61,
+ 0x55, 0x8a, 0xfe, 0x1c, 0x8c, 0xf9, 0x9d, 0x88, 0x2d, 0x72, 0xfa, 0xfd, 0xc3, 0xd2, 0x79, 0x86,
+ 0xce, 0x9c, 0xd3, 0xeb, 0x7a, 0x01, 0x36, 0xf1, 0xa8, 0xb0, 0x6d, 0xf8, 0x61, 0x44, 0xff, 0x30,
+ 0x61, 0x7b, 0xd9, 0x14, 0xb6, 0x8b, 0x5a, 0x19, 0x36, 0x30, 0xd1, 0xd7, 0x2c, 0x38, 0xdf, 0x4a,
+ 0x1e, 0x40, 0x4a, 0x57, 0xd8, 0xc8, 0x54, 0xb2, 0x50, 0x54, 0x13, 0xa4, 0x79, 0x0c, 0x5f, 0x17,
+ 0x18, 0x77, 0x37, 0x82, 0xdd, 0x47, 0x0c, 0x0f, 0xbc, 0x6a, 0x23, 0xf0, 0x3d, 0xb3, 0x79, 0x4f,
+ 0xb3, 0xe6, 0xbd, 0x91, 0xd1, 0x2a, 0x4b, 0x63, 0x51, 0x7e, 0xfa, 0xe8, 0x70, 0xea, 0x52, 0x6a,
+ 0x11, 0x4e, 0x6f, 0xd4, 0xe4, 0x3c, 0x5c, 0x4e, 0x5f, 0xa9, 0x0f, 0xd3, 0x98, 0x07, 0x74, 0x8d,
+ 0x79, 0x01, 0x9e, 0xee, 0xd9, 0x28, 0x2a, 0xf3, 0xa5, 0x7a, 0x65, 0x99, 0x32, 0xbf, 0x4b, 0x1d,
+ 0x3a, 0x07, 0xa3, 0x7a, 0x5e, 0x16, 0x16, 0x29, 0xa0, 0xdd, 0x85, 0x45, 0xef, 0x41, 0xd1, 0xaf,
+ 0x64, 0xee, 0x72, 0x5f, 0xaf, 0x74, 0xb9, 0xdc, 0x15, 0x08, 0xc7, 0x0c, 0xfb, 0x89, 0x14, 0x48,
+ 0xbd, 0xb8, 0xfb, 0x84, 0x9b, 0x7d, 0xe2, 0x48, 0x81, 0x7f, 0x37, 0x08, 0x31, 0x25, 0xf4, 0x12,
+ 0x14, 0x88, 0x57, 0x6b, 0xfb, 0xae, 0x17, 0x25, 0xad, 0x37, 0xb7, 0x05, 0x1c, 0x2b, 0x0c, 0x2d,
+ 0xae, 0x20, 0x77, 0x6c, 0x5c, 0x41, 0x0d, 0xc6, 0x1d, 0x66, 0xf6, 0x8e, 0xbd, 0xc2, 0x03, 0x27,
+ 0x76, 0xe3, 0xcc, 0x9a, 0x14, 0x70, 0x92, 0x24, 0xe5, 0x12, 0xc6, 0x55, 0x19, 0x97, 0xc1, 0x13,
+ 0x73, 0xa9, 0x98, 0x14, 0x70, 0x92, 0x24, 0x7a, 0x13, 0x4a, 0x55, 0x76, 0x79, 0x84, 0xf7, 0x71,
+ 0x69, 0x7b, 0xcd, 0x8f, 0x36, 0x02, 0x12, 0x12, 0x8f, 0x7b, 0xed, 0x0b, 0xe5, 0xeb, 0x62, 0x14,
+ 0x4a, 0x73, 0x3d, 0xf0, 0x70, 0x4f, 0x0a, 0x54, 0xab, 0x63, 0x3e, 0x69, 0x37, 0x3a, 0xd8, 0xf4,
+ 0x77, 0x88, 0x74, 0x28, 0x28, 0xad, 0xae, 0xa2, 0x17, 0x62, 0x13, 0x17, 0xfd, 0xbc, 0x05, 0x63,
+ 0x4d, 0x69, 0x8c, 0xc3, 0x9d, 0xa6, 0xcc, 0xfc, 0x82, 0x33, 0x99, 0x7e, 0x2b, 0x3a, 0x65, 0x2e,
+ 0xf0, 0x0d, 0x10, 0x36, 0x79, 0xdb, 0xdf, 0xb6, 0x60, 0x22, 0x59, 0x0d, 0xed, 0xc0, 0xb3, 0x2d,
+ 0x27, 0xd8, 0x59, 0xf2, 0xb6, 0x03, 0x16, 0x56, 0x19, 0xf1, 0xaf, 0x3a, 0xbb, 0x1d, 0x91, 0x60,
+ 0xde, 0x39, 0xe0, 0xc1, 0x53, 0x79, 0x95, 0xac, 0xea, 0xd9, 0xd5, 0xe3, 0x90, 0xf1, 0xf1, 0xb4,
+ 0x50, 0x05, 0x2e, 0x51, 0x84, 0x79, 0xd2, 0x24, 0x54, 0x42, 0xc5, 0x4c, 0x72, 0x8c, 0x89, 0x0a,
+ 0x0f, 0x58, 0x4d, 0x43, 0xc2, 0xe9, 0x75, 0xed, 0x02, 0x0c, 0xf1, 0x90, 0x72, 0xfb, 0xdf, 0xe6,
+ 0x40, 0xee, 0xa4, 0x7f, 0xba, 0x4d, 0xd6, 0xc8, 0x86, 0xa1, 0x80, 0x9d, 0x69, 0xc5, 0x41, 0x8d,
+ 0x29, 0x35, 0xfc, 0x94, 0x8b, 0x45, 0x09, 0x55, 0x31, 0xc8, 0xbe, 0x1b, 0xcd, 0xf9, 0x35, 0x79,
+ 0x3c, 0x63, 0x2a, 0xc6, 0x6d, 0x01, 0xc3, 0xaa, 0xd4, 0xfe, 0x19, 0x0b, 0xc6, 0x68, 0x2f, 0x9b,
+ 0x4d, 0xd2, 0xac, 0x44, 0xa4, 0x1d, 0xa2, 0x10, 0xf2, 0x21, 0xfd, 0x91, 0x9d, 0xb1, 0x20, 0xbe,
+ 0x49, 0x40, 0xda, 0x9a, 0x59, 0x94, 0x32, 0xc1, 0x9c, 0x97, 0xfd, 0x5b, 0x03, 0x50, 0x54, 0x83,
+ 0xdd, 0x87, 0xad, 0xf5, 0x66, 0x7c, 0x77, 0x9f, 0x4b, 0xc3, 0x92, 0x76, 0x6f, 0x9f, 0x9e, 0xa9,
+ 0x66, 0xbd, 0x03, 0x7e, 0x15, 0x38, 0xbe, 0xc4, 0xff, 0x92, 0xe9, 0x8e, 0xb9, 0xac, 0xdb, 0xf8,
+ 0x35, 0x7c, 0xe1, 0x97, 0xd9, 0xd7, 0xbd, 0x61, 0x83, 0x59, 0xed, 0x2c, 0xca, 0xef, 0xd5, 0xdb,
+ 0x0d, 0x96, 0x48, 0x40, 0x95, 0xef, 0x2b, 0x01, 0xd5, 0x0d, 0x18, 0x24, 0x5e, 0xa7, 0xc5, 0xc2,
+ 0xca, 0x8b, 0x4c, 0xa7, 0x1a, 0xbc, 0xed, 0x75, 0x5a, 0x66, 0xcf, 0x18, 0x0a, 0xfa, 0x34, 0x8c,
+ 0xd4, 0x48, 0x58, 0x0d, 0x5c, 0x76, 0x0f, 0x4f, 0x1c, 0x4a, 0xaf, 0xb2, 0x93, 0x7e, 0x0c, 0x36,
+ 0x2b, 0xea, 0x15, 0xec, 0x77, 0x60, 0x68, 0xa3, 0xd9, 0xa9, 0xbb, 0x1e, 0x6a, 0xc3, 0x10, 0xbf,
+ 0x95, 0x27, 0x76, 0xde, 0x0c, 0x14, 0x75, 0xbe, 0xda, 0xb5, 0x68, 0x6a, 0x7e, 0xa1, 0x44, 0xf0,
+ 0xb1, 0xff, 0xb1, 0x05, 0xf4, 0x54, 0x71, 0x67, 0x0e, 0xfd, 0x05, 0x28, 0x84, 0x42, 0x97, 0x11,
+ 0xd3, 0xe4, 0x47, 0x54, 0xd4, 0xa5, 0x80, 0x3f, 0x38, 0x9c, 0x1a, 0x63, 0xc8, 0x12, 0x80, 0x55,
+ 0x15, 0xd4, 0x84, 0x31, 0x66, 0x0d, 0x95, 0xfb, 0x91, 0xb0, 0x5f, 0xdf, 0xea, 0xf3, 0x22, 0x9b,
+ 0x5e, 0x55, 0x48, 0x67, 0x1d, 0x84, 0x4d, 0xe2, 0xf6, 0x3f, 0x19, 0x04, 0xcd, 0x68, 0xd8, 0xc7,
+ 0xf4, 0x7e, 0x3b, 0x61, 0x22, 0x5e, 0xcd, 0xc4, 0x44, 0x2c, 0xed, 0xae, 0x5c, 0x64, 0x98, 0x56,
+ 0x61, 0xda, 0xa8, 0x06, 0x69, 0xb6, 0xc5, 0xe2, 0x50, 0x8d, 0x5a, 0x24, 0xcd, 0x36, 0x66, 0x25,
+ 0x2a, 0x24, 0x7f, 0xb0, 0x67, 0x48, 0x7e, 0x03, 0xf2, 0x75, 0xa7, 0x53, 0x27, 0x22, 0xd2, 0x22,
+ 0x03, 0x6f, 0x00, 0x8b, 0x51, 0xe4, 0xde, 0x00, 0xf6, 0x13, 0x73, 0x06, 0x74, 0x75, 0x36, 0xa4,
+ 0x9f, 0x55, 0x18, 0x84, 0x32, 0x58, 0x9d, 0xca, 0x75, 0xcb, 0x57, 0xa7, 0xfa, 0x8b, 0x63, 0x66,
+ 0xf4, 0xbc, 0x58, 0xe5, 0xf7, 0x5f, 0xc5, 0x86, 0xbf, 0x94, 0xc5, 0x9d, 0x03, 0x46, 0x90, 0x9f,
+ 0x17, 0xc5, 0x1f, 0x2c, 0xd9, 0xd8, 0x33, 0x30, 0xa2, 0xa5, 0x91, 0xa2, 0x9f, 0x41, 0x5d, 0xbd,
+ 0xd4, 0x3e, 0xc3, 0xbc, 0x13, 0x39, 0x98, 0x95, 0xd8, 0x7f, 0x7b, 0x00, 0xd4, 0xb9, 0x5d, 0x8f,
+ 0x90, 0x77, 0xaa, 0x5a, 0xfe, 0x05, 0xe3, 0x6a, 0x96, 0xef, 0x61, 0x51, 0x4a, 0x95, 0xa2, 0x16,
+ 0x09, 0xea, 0xea, 0xa4, 0x20, 0xe4, 0xab, 0x52, 0x8a, 0x56, 0xf5, 0x42, 0x6c, 0xe2, 0x52, 0x8d,
+ 0xb6, 0xe5, 0x78, 0xee, 0x36, 0x09, 0xa3, 0x64, 0xa0, 0xd3, 0xaa, 0x80, 0x63, 0x85, 0x81, 0xee,
+ 0xc0, 0xf9, 0x90, 0x44, 0xeb, 0x7b, 0x1e, 0x09, 0xd4, 0x95, 0x31, 0x71, 0x87, 0x50, 0x05, 0xff,
+ 0x55, 0x92, 0x08, 0xb8, 0xbb, 0x4e, 0x6a, 0x70, 0x48, 0xfe, 0xc4, 0xc1, 0x21, 0xf3, 0x30, 0xb1,
+ 0xed, 0xb8, 0xcd, 0x4e, 0x40, 0x7a, 0x86, 0x98, 0x2c, 0x24, 0xca, 0x71, 0x57, 0x0d, 0x16, 0x7f,
+ 0xda, 0x74, 0xea, 0x61, 0x69, 0x58, 0x8b, 0x3f, 0xa5, 0x00, 0xcc, 0xe1, 0xf6, 0x3f, 0xb0, 0x60,
+ 0x0c, 0x93, 0x28, 0x38, 0x98, 0xdd, 0xde, 0x76, 0x3d, 0x37, 0x3a, 0x40, 0xbf, 0x6a, 0xc1, 0x84,
+ 0xe7, 0xd7, 0xc8, 0xac, 0x17, 0xb9, 0x12, 0x98, 0x5d, 0x8e, 0x1d, 0xc6, 0x6b, 0x2d, 0x41, 0x9e,
+ 0xdf, 0x04, 0x4c, 0x42, 0x71, 0x57, 0x33, 0xec, 0x2b, 0x70, 0x29, 0x95, 0x80, 0xfd, 0xed, 0x01,
+ 0xd1, 0x0d, 0xf5, 0xf1, 0x5f, 0x83, 0x7c, 0x93, 0xdd, 0x8a, 0xb4, 0x1e, 0x31, 0x69, 0x07, 0x1b,
+ 0x2b, 0x7e, 0x6d, 0x92, 0x53, 0x42, 0xf3, 0x30, 0x12, 0x50, 0x1e, 0xe2, 0xce, 0x2a, 0x9f, 0x8a,
+ 0x76, 0x9c, 0x84, 0x50, 0x15, 0x3d, 0x30, 0xff, 0x62, 0xbd, 0x1a, 0x7a, 0x17, 0x86, 0xb7, 0x78,
+ 0x1e, 0x92, 0xec, 0xcc, 0xf3, 0x22, 0xb1, 0x09, 0xd3, 0x22, 0x64, 0x96, 0x93, 0x07, 0xf1, 0x4f,
+ 0x2c, 0x39, 0xa2, 0x03, 0x28, 0x38, 0xf2, 0x9b, 0x0e, 0x66, 0x15, 0xb1, 0x68, 0xcc, 0x1f, 0xae,
+ 0xdb, 0xa9, 0x6f, 0xa8, 0xd8, 0x25, 0xdc, 0xdd, 0xf9, 0xbe, 0xdc, 0xdd, 0xdf, 0xb0, 0x00, 0xe2,
+ 0x0c, 0x65, 0x68, 0x1f, 0x0a, 0xe1, 0x2d, 0xe3, 0x78, 0x9d, 0xc5, 0x25, 0x30, 0x41, 0x51, 0xbb,
+ 0x28, 0x21, 0x20, 0x58, 0x71, 0x7b, 0x98, 0x49, 0xe0, 0x8f, 0x2d, 0xb8, 0x98, 0x96, 0x49, 0xed,
+ 0x09, 0xb6, 0xf8, 0xa4, 0xd6, 0x00, 0x51, 0x61, 0x23, 0x20, 0xdb, 0xee, 0x7e, 0xd2, 0x31, 0xbf,
+ 0x2c, 0x0b, 0x70, 0x8c, 0x63, 0x7f, 0x73, 0x08, 0x14, 0xe3, 0x53, 0xb2, 0x1e, 0xbc, 0x40, 0x4f,
+ 0x17, 0xf5, 0x38, 0x3f, 0x8e, 0xc2, 0xc3, 0x0c, 0x8a, 0x45, 0x29, 0x3d, 0x61, 0xc8, 0x88, 0x6e,
+ 0x21, 0xb2, 0xd9, 0x2c, 0x94, 0xc1, 0xdf, 0x58, 0x95, 0xa6, 0xd9, 0x23, 0xf2, 0x67, 0x62, 0x8f,
+ 0x18, 0xca, 0xde, 0x1e, 0x71, 0x03, 0x86, 0x03, 0xbf, 0x49, 0x66, 0xf1, 0x9a, 0xd0, 0x9b, 0xe3,
+ 0xbc, 0x4e, 0x1c, 0x8c, 0x65, 0x39, 0xfa, 0x04, 0x8c, 0x74, 0x42, 0x52, 0x99, 0x5f, 0x9e, 0x0b,
+ 0x48, 0x2d, 0x14, 0x41, 0xf2, 0xca, 0xa9, 0x76, 0x37, 0x2e, 0xc2, 0x3a, 0x1e, 0xfa, 0xa6, 0x75,
+ 0x8c, 0xc9, 0xa3, 0x98, 0xd5, 0x9e, 0x90, 0x9a, 0x91, 0x83, 0x1d, 0x02, 0x1e, 0xc5, 0x8e, 0xf2,
+ 0x75, 0x0b, 0xce, 0x13, 0xaf, 0x1a, 0x1c, 0x30, 0x3a, 0x82, 0x9a, 0x70, 0x2c, 0xdd, 0xcd, 0x62,
+ 0xf1, 0xdd, 0x4e, 0x12, 0xe7, 0x56, 0xe3, 0x2e, 0x30, 0xee, 0x6e, 0x86, 0xfd, 0x87, 0x39, 0xb8,
+ 0x90, 0x42, 0x81, 0x05, 0x14, 0xb7, 0xe8, 0x04, 0x5a, 0xaa, 0x25, 0x97, 0xcf, 0xb2, 0x80, 0x63,
+ 0x85, 0x81, 0x36, 0xe0, 0xe2, 0x4e, 0x2b, 0x8c, 0xa9, 0xcc, 0xf9, 0x5e, 0x44, 0xf6, 0xe5, 0x62,
+ 0x92, 0x3e, 0xa2, 0x8b, 0xcb, 0x29, 0x38, 0x38, 0xb5, 0x26, 0xd5, 0x36, 0x88, 0xe7, 0x6c, 0x35,
+ 0x49, 0x5c, 0x24, 0xc2, 0xe1, 0x95, 0xb6, 0x71, 0x3b, 0x51, 0x8e, 0xbb, 0x6a, 0xa0, 0x0f, 0x2c,
+ 0x78, 0x26, 0x24, 0xc1, 0x2e, 0x09, 0x2a, 0x6e, 0x8d, 0xcc, 0x75, 0xc2, 0xc8, 0x6f, 0x91, 0xe0,
+ 0x11, 0x6d, 0x72, 0x53, 0x47, 0x87, 0x53, 0xcf, 0x54, 0x7a, 0x53, 0xc3, 0xc7, 0xb1, 0xb2, 0x3f,
+ 0xb0, 0xe0, 0x5c, 0x85, 0x9d, 0x12, 0x95, 0xce, 0x99, 0x75, 0x1a, 0xa0, 0x17, 0xd4, 0xd5, 0xc8,
+ 0x84, 0x10, 0x33, 0x2f, 0x33, 0xda, 0x6f, 0xc1, 0x44, 0x85, 0xb4, 0x9c, 0x76, 0x83, 0xdd, 0x34,
+ 0xe1, 0xa1, 0x08, 0x33, 0x50, 0x0c, 0x25, 0x2c, 0x99, 0x47, 0x51, 0x21, 0xe3, 0x18, 0x07, 0x3d,
+ 0xcf, 0xc3, 0x26, 0x64, 0x64, 0x6f, 0x91, 0x6b, 0xe7, 0x3c, 0xd6, 0x22, 0xc4, 0xb2, 0xcc, 0xde,
+ 0x83, 0xd1, 0xb8, 0x3a, 0xd9, 0x46, 0x75, 0x18, 0xaf, 0x6a, 0xc1, 0xe4, 0x71, 0xcc, 0x6a, 0xff,
+ 0x71, 0xe7, 0x4c, 0x16, 0xcd, 0x99, 0x44, 0x70, 0x92, 0xaa, 0xfd, 0x8b, 0x39, 0x18, 0x57, 0x9c,
+ 0x85, 0x43, 0xe0, 0xfd, 0x64, 0xa8, 0x07, 0xce, 0xe2, 0xca, 0xb6, 0x39, 0x92, 0xc7, 0x84, 0x7b,
+ 0xbc, 0x9f, 0x0c, 0xf7, 0x38, 0x55, 0xf6, 0x5d, 0x3e, 0x8e, 0x6f, 0xe4, 0xa0, 0xa0, 0x2e, 0x90,
+ 0xbf, 0x06, 0x79, 0x76, 0x80, 0x7a, 0x3c, 0x6d, 0x94, 0x1d, 0xc6, 0x30, 0xa7, 0x44, 0x49, 0x32,
+ 0x3f, 0xf7, 0x23, 0x67, 0xa5, 0x2b, 0x72, 0xbb, 0x97, 0x13, 0x44, 0x98, 0x53, 0x42, 0xcb, 0x30,
+ 0x40, 0xbc, 0x9a, 0x50, 0x4b, 0x4f, 0x4e, 0x90, 0xe5, 0x10, 0xbd, 0xed, 0xd5, 0x30, 0xa5, 0xc2,
+ 0x52, 0x38, 0x71, 0xed, 0x63, 0xd0, 0x5c, 0x1e, 0x42, 0xf5, 0x10, 0xa5, 0xf6, 0xcf, 0x0f, 0xc0,
+ 0x50, 0xa5, 0xb3, 0x45, 0x15, 0xec, 0xdf, 0xb0, 0xe0, 0xc2, 0x5e, 0x22, 0x63, 0x59, 0x3c, 0x65,
+ 0xef, 0x66, 0x9f, 0x0e, 0x0e, 0x93, 0xed, 0xf2, 0x33, 0xa2, 0x5d, 0x17, 0x52, 0x0a, 0x71, 0x5a,
+ 0x73, 0x8c, 0xec, 0x4e, 0x03, 0xa7, 0x94, 0x07, 0xef, 0x74, 0x63, 0x63, 0xc7, 0x7a, 0xc5, 0xc5,
+ 0xda, 0x3f, 0xcc, 0x03, 0xf0, 0xaf, 0xb1, 0xde, 0x8e, 0xfa, 0x31, 0x0e, 0xbd, 0x02, 0xa3, 0xf2,
+ 0x21, 0x8a, 0xb5, 0x38, 0xb0, 0x47, 0x39, 0x77, 0xef, 0x68, 0x65, 0xd8, 0xc0, 0x64, 0x07, 0x02,
+ 0x2f, 0x0a, 0x0e, 0xb8, 0xd2, 0x98, 0x8c, 0x7f, 0x55, 0x25, 0x58, 0xc3, 0x42, 0xd3, 0x86, 0xb1,
+ 0x9d, 0x67, 0xba, 0x38, 0x77, 0x8c, 0x6d, 0xfc, 0x53, 0x30, 0xa6, 0xfe, 0x2d, 0xb8, 0x4d, 0x92,
+ 0x74, 0xaa, 0x6c, 0xe8, 0x85, 0xd8, 0xc4, 0x45, 0x9f, 0x86, 0x73, 0xe6, 0x85, 0x55, 0xa1, 0x66,
+ 0xa9, 0xeb, 0xe2, 0xe6, 0x3d, 0x57, 0x9c, 0xc0, 0xa6, 0x2b, 0xa0, 0x16, 0x1c, 0xe0, 0x8e, 0x27,
+ 0xf4, 0x2d, 0xb5, 0x02, 0xe6, 0x19, 0x14, 0x8b, 0x52, 0x3a, 0x84, 0x7c, 0x2b, 0xe3, 0x70, 0x71,
+ 0xe3, 0x50, 0x0d, 0x61, 0x45, 0x2b, 0xc3, 0x06, 0x26, 0xe5, 0x20, 0x2c, 0x73, 0x60, 0xae, 0xb1,
+ 0x84, 0x39, 0xad, 0x0d, 0xe7, 0x7c, 0xd3, 0xb0, 0xc1, 0x43, 0x61, 0x3e, 0xde, 0xe7, 0xbc, 0x35,
+ 0xea, 0xf2, 0x1b, 0x32, 0x09, 0x3b, 0x48, 0x82, 0x3e, 0x55, 0x38, 0xf5, 0x50, 0xd7, 0x51, 0x33,
+ 0x8a, 0xab, 0x67, 0x34, 0xea, 0x06, 0x5c, 0x6c, 0xfb, 0xb5, 0x8d, 0xc0, 0xf5, 0x03, 0x37, 0x3a,
+ 0x98, 0x6b, 0x3a, 0x61, 0xc8, 0x66, 0xd5, 0x98, 0xa9, 0xd9, 0x6c, 0xa4, 0xe0, 0xe0, 0xd4, 0x9a,
+ 0xf4, 0x68, 0xd0, 0x16, 0x40, 0x16, 0xc1, 0x91, 0xe7, 0x47, 0x03, 0x89, 0x88, 0x55, 0xa9, 0x7d,
+ 0x01, 0xce, 0x57, 0x3a, 0xed, 0x76, 0xd3, 0x25, 0x35, 0x65, 0x09, 0xb7, 0x7f, 0x12, 0xc6, 0x45,
+ 0xe2, 0x28, 0xa5, 0x47, 0x9c, 0x28, 0x7b, 0xa8, 0xfd, 0x43, 0x0b, 0xc6, 0x13, 0xfe, 0x72, 0xf4,
+ 0x6e, 0x72, 0xf7, 0xcf, 0xc4, 0xb1, 0xa1, 0x6f, 0xfc, 0x7c, 0x85, 0xa7, 0x6a, 0x12, 0x0d, 0x19,
+ 0xdd, 0x99, 0x59, 0x90, 0x34, 0x8b, 0x81, 0xe4, 0xdb, 0x89, 0x1e, 0x22, 0x6a, 0x7f, 0x25, 0x07,
+ 0xe9, 0x41, 0x0a, 0xe8, 0x0b, 0xdd, 0x03, 0xf0, 0x5a, 0x86, 0x03, 0x20, 0xa2, 0x24, 0x7a, 0x8f,
+ 0x81, 0x67, 0x8e, 0xc1, 0x6a, 0x46, 0x63, 0x20, 0xf8, 0x76, 0x8f, 0xc4, 0x9f, 0x58, 0x30, 0xb2,
+ 0xb9, 0xb9, 0xa2, 0x8c, 0x53, 0x18, 0x2e, 0x87, 0xfc, 0x2a, 0x19, 0xf3, 0x2e, 0xce, 0xf9, 0xad,
+ 0x36, 0x77, 0x36, 0x0a, 0x27, 0x28, 0xcb, 0xe1, 0x55, 0x49, 0xc5, 0xc0, 0x3d, 0x6a, 0xa2, 0x25,
+ 0xb8, 0xa0, 0x97, 0x08, 0x13, 0xa3, 0x70, 0x78, 0xf2, 0xcb, 0xd5, 0xdd, 0xc5, 0x38, 0xad, 0x4e,
+ 0x92, 0x94, 0xb0, 0x33, 0x8a, 0xe7, 0x55, 0xba, 0x48, 0x89, 0x62, 0x9c, 0x56, 0xc7, 0x5e, 0x87,
+ 0x11, 0xed, 0xb1, 0x1f, 0xf4, 0x19, 0x98, 0xa8, 0xfa, 0x2d, 0x69, 0xdf, 0x59, 0x21, 0xbb, 0xa4,
+ 0x29, 0xba, 0xcc, 0x4c, 0x80, 0x73, 0x89, 0x32, 0xdc, 0x85, 0x6d, 0xff, 0xcf, 0x6b, 0xa0, 0x6e,
+ 0x93, 0xf4, 0xb1, 0x3d, 0xb5, 0x55, 0xf8, 0x56, 0x3e, 0xe3, 0xf0, 0x2d, 0x25, 0x6b, 0x13, 0x21,
+ 0x5c, 0x51, 0x1c, 0xc2, 0x35, 0x94, 0x75, 0x08, 0x97, 0xd2, 0x36, 0xbb, 0xc2, 0xb8, 0x7e, 0xd9,
+ 0x82, 0x51, 0xcf, 0xaf, 0x11, 0xe5, 0x42, 0x1a, 0x66, 0x2a, 0xef, 0x9b, 0xd9, 0xc5, 0xa5, 0xf2,
+ 0x70, 0x24, 0x41, 0x9e, 0x07, 0xf9, 0xa9, 0x2d, 0x4a, 0x2f, 0xc2, 0x46, 0x3b, 0xd0, 0x82, 0x66,
+ 0x71, 0xe4, 0x89, 0x9b, 0xae, 0xa6, 0x1d, 0x3d, 0x1e, 0x6a, 0x3e, 0xdc, 0xd7, 0x94, 0xae, 0x62,
+ 0x56, 0x96, 0x34, 0x79, 0x53, 0x41, 0x73, 0x0c, 0xc8, 0x34, 0x74, 0xb1, 0x32, 0x66, 0xc3, 0x10,
+ 0x8f, 0x06, 0x14, 0xcf, 0xce, 0x30, 0x7f, 0x15, 0x8f, 0x14, 0xc4, 0xa2, 0x04, 0x45, 0xd2, 0x4d,
+ 0x3d, 0x92, 0x55, 0xf6, 0x56, 0xc3, 0x0d, 0x9e, 0xee, 0xa7, 0x46, 0xaf, 0xea, 0x27, 0xda, 0xd1,
+ 0x7e, 0x4e, 0xb4, 0x63, 0x3d, 0x4f, 0xb3, 0x5f, 0xb5, 0x60, 0xb4, 0xaa, 0xa5, 0xa7, 0x2d, 0xbd,
+ 0x98, 0x55, 0x0e, 0xe6, 0xb4, 0xa4, 0xb7, 0xfc, 0x32, 0xa4, 0x5e, 0x82, 0x0d, 0xee, 0x2c, 0xef,
+ 0x10, 0x3b, 0xbe, 0xb3, 0xad, 0x7f, 0xe4, 0xe6, 0x46, 0x06, 0xdb, 0x83, 0x61, 0x0e, 0xe0, 0x9f,
+ 0x91, 0xc3, 0xb0, 0xe0, 0x85, 0xde, 0x83, 0x82, 0x0c, 0x28, 0x15, 0xe1, 0x9e, 0x38, 0x0b, 0xf3,
+ 0xb8, 0xe9, 0xfc, 0x92, 0xd9, 0x4a, 0x38, 0x14, 0x2b, 0x8e, 0xa8, 0x01, 0x03, 0x35, 0xa7, 0x2e,
+ 0x02, 0x3f, 0x57, 0xb3, 0x49, 0x06, 0x25, 0x79, 0xb2, 0xb3, 0xd9, 0xfc, 0xec, 0x1d, 0x4c, 0x59,
+ 0xa0, 0xfd, 0x38, 0x4b, 0xe6, 0x44, 0x66, 0xbb, 0xaf, 0xa9, 0x26, 0x71, 0x03, 0x45, 0x57, 0xd2,
+ 0xcd, 0x9a, 0xf0, 0x17, 0xfe, 0x19, 0xc6, 0x76, 0x21, 0x9b, 0x6c, 0x52, 0xfc, 0x9d, 0x8e, 0xd8,
+ 0xe7, 0x48, 0xb9, 0xb0, 0xf7, 0x89, 0x7e, 0x2c, 0x2b, 0x2e, 0x8b, 0x9b, 0x9b, 0x1b, 0x5d, 0xef,
+ 0x12, 0x35, 0x61, 0xa8, 0xcd, 0x62, 0x0f, 0x4a, 0x3f, 0x9e, 0xd5, 0xde, 0xc2, 0x63, 0x19, 0xf8,
+ 0xdc, 0xe4, 0xbf, 0xb1, 0xe0, 0x81, 0x6e, 0xc3, 0x30, 0xcf, 0xaa, 0xcc, 0x03, 0x6f, 0x47, 0x6e,
+ 0x4e, 0xf6, 0xce, 0xcd, 0x1c, 0x6f, 0x14, 0xfc, 0x7f, 0x88, 0x65, 0x5d, 0xf4, 0x8b, 0x16, 0x9c,
+ 0xa3, 0x12, 0x35, 0x4e, 0x03, 0x5d, 0x42, 0x59, 0xc9, 0xac, 0xbb, 0x21, 0xd5, 0x48, 0xa4, 0xac,
+ 0x51, 0xc7, 0xa4, 0x25, 0x83, 0x1d, 0x4e, 0xb0, 0x47, 0xef, 0x43, 0x21, 0x74, 0x6b, 0xa4, 0xea,
+ 0x04, 0x61, 0xe9, 0xc2, 0xe9, 0x34, 0x25, 0x76, 0x94, 0x08, 0x46, 0x58, 0xb1, 0x44, 0x7f, 0x9d,
+ 0x3d, 0xda, 0x20, 0x1e, 0xd8, 0x11, 0x6f, 0xbf, 0x5d, 0x3c, 0xb5, 0xb7, 0xdf, 0xb8, 0xff, 0xc0,
+ 0x64, 0x87, 0x93, 0xfc, 0xd1, 0x5f, 0xb6, 0xe0, 0x12, 0x4f, 0x4e, 0x9a, 0xcc, 0x4c, 0x7b, 0xe9,
+ 0x11, 0x6d, 0x33, 0x2c, 0x62, 0x78, 0x36, 0x8d, 0x24, 0x4e, 0xe7, 0xc4, 0xb2, 0x9b, 0x05, 0xba,
+ 0x4b, 0x95, 0xc5, 0x6d, 0x67, 0xe7, 0x30, 0x54, 0x4f, 0xc9, 0xb1, 0x88, 0x15, 0x03, 0x84, 0x4d,
+ 0xc6, 0xe8, 0x65, 0x18, 0x69, 0x8b, 0xed, 0xd0, 0x0d, 0x5b, 0x2c, 0xfe, 0x7b, 0x80, 0xdf, 0x91,
+ 0xd9, 0x88, 0xc1, 0x58, 0xc7, 0x31, 0x52, 0xdd, 0xdd, 0x38, 0x2e, 0xd5, 0x1d, 0xba, 0x0b, 0x23,
+ 0x91, 0xdf, 0x24, 0x81, 0x38, 0xa9, 0x96, 0xd8, 0x0c, 0xbc, 0x96, 0xb6, 0xb6, 0x36, 0x15, 0x5a,
+ 0x7c, 0x92, 0x8d, 0x61, 0x21, 0xd6, 0xe9, 0xb0, 0x70, 0x4e, 0x91, 0xf4, 0x35, 0x60, 0x47, 0xd8,
+ 0xa7, 0x13, 0xe1, 0x9c, 0x7a, 0x21, 0x36, 0x71, 0xd1, 0x1d, 0x38, 0xdf, 0xee, 0x3a, 0x03, 0xf3,
+ 0x1b, 0x20, 0x2a, 0x16, 0xa1, 0xfb, 0x00, 0xdc, 0x5d, 0xc7, 0x38, 0xfd, 0x3e, 0x73, 0xdc, 0xe9,
+ 0xb7, 0x47, 0xe2, 0xb7, 0xab, 0x8f, 0x92, 0xf8, 0x0d, 0xd5, 0xe0, 0xaa, 0xd3, 0x89, 0x7c, 0x76,
+ 0xef, 0xdf, 0xac, 0xc2, 0x23, 0x5b, 0xaf, 0xf3, 0x60, 0xd9, 0xa3, 0xc3, 0xa9, 0xab, 0xb3, 0xc7,
+ 0xe0, 0xe1, 0x63, 0xa9, 0xa0, 0x77, 0xa0, 0x40, 0x44, 0xf2, 0xba, 0xd2, 0x8f, 0x64, 0xa5, 0x24,
+ 0x98, 0xe9, 0xf0, 0x64, 0xa0, 0x22, 0x87, 0x61, 0xc5, 0x0f, 0x6d, 0xc2, 0x48, 0xc3, 0x0f, 0xa3,
+ 0xd9, 0xa6, 0xeb, 0x84, 0x24, 0x2c, 0x3d, 0xcb, 0x26, 0x4d, 0xaa, 0xee, 0xb5, 0x28, 0xd1, 0xe2,
+ 0x39, 0xb3, 0x18, 0xd7, 0xc4, 0x3a, 0x19, 0x44, 0x98, 0xdb, 0x90, 0x85, 0xf5, 0x4a, 0x97, 0xce,
+ 0x35, 0xd6, 0xb1, 0x17, 0xd2, 0x28, 0x6f, 0xf8, 0xb5, 0x8a, 0x89, 0xad, 0xfc, 0x86, 0x3a, 0x10,
+ 0x27, 0x69, 0xa2, 0x57, 0x60, 0xb4, 0xed, 0xd7, 0x2a, 0x6d, 0x52, 0xdd, 0x70, 0xa2, 0x6a, 0xa3,
+ 0x34, 0x65, 0x9a, 0xec, 0x36, 0xb4, 0x32, 0x6c, 0x60, 0xa2, 0x36, 0x0c, 0xb7, 0xf8, 0xed, 0xd6,
+ 0xd2, 0x73, 0x59, 0x9d, 0x6d, 0xc4, 0x75, 0x59, 0xae, 0x2f, 0x88, 0x3f, 0x58, 0xb2, 0x41, 0x7f,
+ 0xcf, 0x82, 0xf1, 0xc4, 0x8d, 0x86, 0xd2, 0x8f, 0x66, 0xa6, 0xb2, 0x98, 0x84, 0xcb, 0x2f, 0xb0,
+ 0xe1, 0x33, 0x81, 0x0f, 0xba, 0x41, 0x38, 0xd9, 0x22, 0x3e, 0x2e, 0xec, 0x8a, 0x7a, 0xe9, 0xf9,
+ 0xec, 0xc6, 0x85, 0x11, 0x94, 0xe3, 0xc2, 0xfe, 0x60, 0xc9, 0x06, 0xdd, 0x80, 0x61, 0x91, 0x93,
+ 0xa6, 0xf4, 0x82, 0xe9, 0xfb, 0x15, 0xa9, 0x6b, 0xb0, 0x2c, 0x9f, 0xfc, 0x49, 0x38, 0xdf, 0x75,
+ 0x74, 0x3b, 0xd1, 0x3d, 0xe9, 0x5f, 0xb1, 0x40, 0xbf, 0x8c, 0x98, 0x79, 0xc6, 0xe8, 0x57, 0x60,
+ 0xb4, 0xca, 0x9f, 0x2b, 0xe1, 0xd7, 0x19, 0x07, 0x4d, 0xfb, 0xe7, 0x9c, 0x56, 0x86, 0x0d, 0x4c,
+ 0x7b, 0x11, 0x50, 0x77, 0x3a, 0xcf, 0x44, 0xa4, 0x89, 0xd5, 0x57, 0xa4, 0xc9, 0x6f, 0x5a, 0x30,
+ 0x66, 0xe8, 0x0c, 0x99, 0xbb, 0x0b, 0x17, 0x00, 0xb5, 0xdc, 0x20, 0xf0, 0x03, 0xfd, 0xa5, 0x0c,
+ 0x91, 0xbf, 0x90, 0xe5, 0x76, 0x5a, 0xed, 0x2a, 0xc5, 0x29, 0x35, 0xec, 0x7f, 0x34, 0x08, 0x71,
+ 0xa4, 0xae, 0xca, 0xea, 0x66, 0xf5, 0xcc, 0xea, 0xf6, 0x12, 0x14, 0xde, 0x0a, 0x7d, 0x6f, 0x23,
+ 0xce, 0xfd, 0xa6, 0xbe, 0xc5, 0xab, 0x95, 0xf5, 0x35, 0x86, 0xa9, 0x30, 0x18, 0xf6, 0xdb, 0x0b,
+ 0x6e, 0x33, 0xea, 0x4e, 0x0e, 0xf6, 0xea, 0x6b, 0x1c, 0x8e, 0x15, 0x06, 0x7b, 0xcb, 0x63, 0x97,
+ 0x28, 0xc3, 0x78, 0xfc, 0x96, 0x07, 0xcf, 0xd4, 0xcb, 0xca, 0xd0, 0x0c, 0x14, 0x95, 0x5d, 0x5d,
+ 0x98, 0xf9, 0xd5, 0x48, 0x29, 0xfb, 0x3b, 0x8e, 0x71, 0x98, 0x42, 0x28, 0x0c, 0xb1, 0xc2, 0x84,
+ 0x52, 0xc9, 0xe2, 0x78, 0x92, 0x30, 0xed, 0x72, 0xd9, 0x2e, 0xc1, 0x58, 0xb1, 0x4c, 0xf3, 0x99,
+ 0x16, 0x4f, 0xc3, 0x67, 0xaa, 0x87, 0x8d, 0xe7, 0xfb, 0x0d, 0x1b, 0x37, 0xe7, 0x76, 0xa1, 0xaf,
+ 0xb9, 0xfd, 0xb3, 0x03, 0x30, 0x7c, 0x8f, 0x04, 0x2c, 0x63, 0xe5, 0x0d, 0x18, 0xde, 0xe5, 0x3f,
+ 0x93, 0x97, 0xb4, 0x04, 0x06, 0x96, 0xe5, 0xf4, 0xbb, 0x6d, 0x75, 0xdc, 0x66, 0x6d, 0x3e, 0x5e,
+ 0xc5, 0xea, 0xbb, 0x95, 0x65, 0x01, 0x8e, 0x71, 0x68, 0x85, 0x3a, 0xd5, 0xec, 0x5b, 0x2d, 0x37,
+ 0x4a, 0x46, 0x10, 0xdd, 0x91, 0x05, 0x38, 0xc6, 0x41, 0x2f, 0xc0, 0x50, 0xdd, 0x8d, 0x36, 0x9d,
+ 0x7a, 0xd2, 0x45, 0x78, 0x87, 0x41, 0xb1, 0x28, 0x65, 0x3e, 0x26, 0x37, 0xda, 0x0c, 0x08, 0xb3,
+ 0xec, 0x76, 0xdd, 0xd6, 0xbe, 0xa3, 0x95, 0x61, 0x03, 0x93, 0x35, 0xc9, 0x17, 0x3d, 0x13, 0xbe,
+ 0x9f, 0xb8, 0x49, 0xb2, 0x00, 0xc7, 0x38, 0x74, 0xfe, 0x57, 0xfd, 0x56, 0xdb, 0x6d, 0x8a, 0x88,
+ 0x5a, 0x6d, 0xfe, 0xcf, 0x09, 0x38, 0x56, 0x18, 0x14, 0x9b, 0x8a, 0x30, 0x2a, 0x7e, 0x92, 0xef,
+ 0x26, 0x6c, 0x08, 0x38, 0x56, 0x18, 0xf6, 0x3d, 0x18, 0xe3, 0x2b, 0x79, 0xae, 0xe9, 0xb8, 0xad,
+ 0x3b, 0x73, 0xe8, 0x76, 0x57, 0xd8, 0xf8, 0x8d, 0x94, 0xb0, 0xf1, 0x4b, 0x46, 0xa5, 0xee, 0xf0,
+ 0x71, 0xfb, 0x3b, 0x39, 0x28, 0x9c, 0xe1, 0xd3, 0x33, 0x6d, 0xe3, 0xe9, 0x99, 0xac, 0x1f, 0x20,
+ 0x49, 0x7b, 0x76, 0x66, 0x3f, 0xf1, 0xec, 0xcc, 0x46, 0x96, 0xb7, 0x40, 0x8e, 0x7d, 0x72, 0xe6,
+ 0x07, 0x16, 0x5c, 0x94, 0xa8, 0x4c, 0xa8, 0x95, 0x5d, 0x8f, 0x05, 0x17, 0x9c, 0xfe, 0x30, 0xbf,
+ 0x67, 0x0c, 0xf3, 0xeb, 0xd9, 0x75, 0x59, 0xef, 0x47, 0xcf, 0xf7, 0xd0, 0xbe, 0x6f, 0x41, 0x29,
+ 0xad, 0xc2, 0x19, 0xbc, 0xb9, 0xf3, 0xae, 0xf9, 0xe6, 0xce, 0xbd, 0xd3, 0xe9, 0x79, 0x8f, 0xb7,
+ 0x77, 0x7e, 0xd0, 0xa3, 0xdf, 0xec, 0xa1, 0x9b, 0xa6, 0xdc, 0xee, 0xac, 0xac, 0x5c, 0x67, 0x9c,
+ 0x45, 0xfa, 0xbe, 0xd9, 0x84, 0xa1, 0x90, 0x79, 0xe2, 0xc5, 0x14, 0x58, 0xcc, 0x62, 0x13, 0xa4,
+ 0xf4, 0x84, 0xe9, 0x93, 0xfd, 0xc6, 0x82, 0x87, 0xfd, 0x1f, 0x2d, 0x18, 0x3d, 0xc3, 0x87, 0x95,
+ 0x7c, 0xf3, 0x23, 0xbf, 0x9a, 0xdd, 0x47, 0xee, 0xf1, 0x61, 0xff, 0xd5, 0x75, 0x30, 0xde, 0x30,
+ 0x42, 0xef, 0x42, 0x51, 0x6a, 0xa0, 0xf2, 0x76, 0x59, 0x96, 0x4f, 0x95, 0xa8, 0x6d, 0x46, 0x42,
+ 0x42, 0x1c, 0xf3, 0x4b, 0xc4, 0x3e, 0xe4, 0xfa, 0x8a, 0x7d, 0x78, 0xb2, 0x0f, 0x9d, 0xa4, 0xdb,
+ 0x07, 0x06, 0x4f, 0xc5, 0x3e, 0x70, 0x35, 0x73, 0xfb, 0xc0, 0xb3, 0x67, 0x6c, 0x1f, 0xd0, 0x8c,
+ 0xb5, 0xf9, 0xc7, 0x30, 0xd6, 0xbe, 0x0b, 0x17, 0x77, 0xe3, 0xcd, 0x5f, 0xcd, 0x24, 0xf1, 0x5e,
+ 0xcb, 0x8d, 0x54, 0xab, 0x00, 0x55, 0x64, 0xc2, 0x88, 0x78, 0x91, 0xa6, 0x36, 0xc4, 0x91, 0x13,
+ 0xf7, 0x52, 0xc8, 0xe1, 0x54, 0x26, 0x49, 0xab, 0xdb, 0x70, 0x1f, 0x56, 0xb7, 0xdf, 0xea, 0xf9,
+ 0x48, 0x73, 0xe1, 0x74, 0x1f, 0x69, 0x7e, 0xfa, 0xc4, 0x0f, 0x34, 0x3f, 0x1f, 0xbb, 0x40, 0x78,
+ 0xbc, 0x4d, 0xba, 0xbf, 0xe2, 0xeb, 0x49, 0xbf, 0x2a, 0xb0, 0xa1, 0xff, 0x7c, 0xb6, 0x5a, 0x4f,
+ 0x06, 0xbe, 0xd5, 0x91, 0xc7, 0xf0, 0xad, 0x26, 0x4c, 0xa0, 0xa3, 0x19, 0x99, 0x40, 0x3d, 0x98,
+ 0x70, 0x5b, 0x4e, 0x9d, 0x6c, 0x74, 0x9a, 0x4d, 0x1e, 0x96, 0x2b, 0x1f, 0x93, 0x49, 0x3d, 0x49,
+ 0xad, 0xf8, 0x55, 0xa7, 0x99, 0x7c, 0xb3, 0x4b, 0x85, 0x1f, 0x2f, 0x25, 0x28, 0xe1, 0x2e, 0xda,
+ 0x74, 0xc2, 0xb2, 0xec, 0x21, 0x24, 0xa2, 0xa3, 0xcd, 0x1c, 0x78, 0xe2, 0x35, 0xfd, 0xc5, 0x18,
+ 0x8c, 0x75, 0x1c, 0xb4, 0x0c, 0xc5, 0x9a, 0x17, 0x8a, 0x0b, 0x3d, 0xe3, 0x4c, 0x98, 0x7d, 0x8c,
+ 0x8a, 0xc0, 0xf9, 0xb5, 0x8a, 0xba, 0xca, 0x73, 0x35, 0x25, 0x31, 0x8d, 0x2a, 0xc7, 0x71, 0x7d,
+ 0xb4, 0xca, 0x88, 0x89, 0x7c, 0xe0, 0xdc, 0xaf, 0x76, 0xbd, 0x87, 0xe1, 0x6e, 0x7e, 0x4d, 0x66,
+ 0x34, 0x1f, 0x13, 0xec, 0x44, 0x62, 0xef, 0x98, 0x82, 0xf6, 0xa8, 0xcf, 0xf9, 0x63, 0x1f, 0xf5,
+ 0x61, 0x19, 0xa9, 0xa2, 0xa6, 0x32, 0xd3, 0x5f, 0xcb, 0x2c, 0x23, 0x55, 0x1c, 0xb1, 0x22, 0x32,
+ 0x52, 0xc5, 0x00, 0xac, 0xb3, 0x44, 0xeb, 0xbd, 0xdc, 0x15, 0x17, 0x98, 0xd0, 0x38, 0xb9, 0xf3,
+ 0x41, 0xb7, 0x5b, 0x5f, 0x3c, 0xd6, 0x6e, 0xdd, 0x65, 0x67, 0xbf, 0x74, 0x02, 0x3b, 0x7b, 0x83,
+ 0xe5, 0x0a, 0xba, 0x33, 0x27, 0x5c, 0x1b, 0x19, 0x28, 0x74, 0xec, 0x8a, 0x2f, 0x8f, 0x00, 0x62,
+ 0x3f, 0x31, 0x67, 0xd0, 0x33, 0xb0, 0xed, 0xca, 0x23, 0x07, 0xb6, 0x51, 0xf1, 0x1c, 0xc3, 0x59,
+ 0xd2, 0xa9, 0xbc, 0x10, 0xcf, 0x31, 0x18, 0xeb, 0x38, 0x49, 0xab, 0xf5, 0xd3, 0xa7, 0x66, 0xb5,
+ 0x9e, 0x3c, 0x03, 0xab, 0xf5, 0x33, 0x7d, 0x5b, 0xad, 0xdf, 0x87, 0x0b, 0x6d, 0xbf, 0x36, 0xef,
+ 0x86, 0x41, 0x87, 0xdd, 0x53, 0x28, 0x77, 0x6a, 0x75, 0x12, 0x31, 0xb3, 0xf7, 0xc8, 0xcd, 0x9b,
+ 0x7a, 0x23, 0xdb, 0x6c, 0x21, 0x4f, 0xef, 0xbe, 0xbc, 0x45, 0x22, 0xfe, 0x31, 0x93, 0xb5, 0xd8,
+ 0x81, 0x89, 0x85, 0x40, 0xa5, 0x14, 0xe2, 0x34, 0x3e, 0xba, 0xd1, 0xfc, 0xfa, 0xd9, 0x18, 0xcd,
+ 0x3f, 0x03, 0x85, 0xb0, 0xd1, 0x89, 0x6a, 0xfe, 0x9e, 0xc7, 0x3c, 0x23, 0x45, 0xf5, 0xac, 0x67,
+ 0xa1, 0x22, 0xe0, 0x0f, 0x0e, 0xa7, 0x26, 0xe4, 0x6f, 0xcd, 0xa4, 0x20, 0x20, 0xe8, 0xd7, 0x7a,
+ 0x44, 0x62, 0xdb, 0xa7, 0x19, 0x89, 0x7d, 0xe5, 0x44, 0x51, 0xd8, 0x69, 0x9e, 0x81, 0xe7, 0x3e,
+ 0x72, 0x9e, 0x81, 0x5f, 0xb5, 0x60, 0x6c, 0x57, 0xb7, 0xdf, 0x08, 0xef, 0x45, 0x06, 0x5e, 0x54,
+ 0xc3, 0x2c, 0x54, 0xb6, 0xa9, 0xb0, 0x33, 0x40, 0x0f, 0x92, 0x00, 0x6c, 0xb6, 0x24, 0xc5, 0xc3,
+ 0xfb, 0xfc, 0x93, 0xf2, 0xf0, 0xbe, 0xcf, 0x84, 0x99, 0x0c, 0xbe, 0x62, 0x2e, 0x8d, 0x6c, 0x03,
+ 0xbc, 0xa4, 0x60, 0x54, 0xf1, 0x5d, 0x3a, 0x3f, 0xf4, 0x55, 0x0b, 0x26, 0xe4, 0xe1, 0x4c, 0xd8,
+ 0x5f, 0x43, 0x11, 0xa2, 0x92, 0xe5, 0x99, 0x90, 0xc5, 0x38, 0x6e, 0x26, 0xf8, 0xe0, 0x2e, 0xce,
+ 0x54, 0xb4, 0xab, 0x88, 0x80, 0x7a, 0xc8, 0x22, 0xb1, 0x84, 0x22, 0x33, 0x1b, 0x83, 0xb1, 0x8e,
+ 0x83, 0x7e, 0x5d, 0x3d, 0xd7, 0x77, 0x23, 0xab, 0x27, 0xe4, 0x0d, 0x05, 0x35, 0x93, 0x37, 0xfb,
+ 0x1e, 0xd7, 0x13, 0xf5, 0x91, 0x7a, 0xf4, 0xef, 0x0f, 0x10, 0x9c, 0x4b, 0xbc, 0x4a, 0xfb, 0x71,
+ 0x33, 0xad, 0xeb, 0xb5, 0x64, 0x6e, 0xcd, 0x31, 0x89, 0x6f, 0xe4, 0xd7, 0x34, 0x12, 0x60, 0xe6,
+ 0x4e, 0x35, 0x01, 0xe6, 0xc0, 0xd9, 0x24, 0xc0, 0x9c, 0x38, 0x8d, 0x04, 0x98, 0xe7, 0x4f, 0x94,
+ 0x00, 0x53, 0x4b, 0x40, 0x3a, 0xf8, 0x90, 0x04, 0xa4, 0xb3, 0x30, 0x2e, 0xa3, 0x8c, 0x89, 0xc8,
+ 0x6c, 0xc8, 0x1d, 0x0c, 0x57, 0x44, 0x95, 0xf1, 0x39, 0xb3, 0x18, 0x27, 0xf1, 0xd1, 0x87, 0x16,
+ 0xe4, 0x3d, 0x56, 0x73, 0x28, 0xab, 0x9c, 0xde, 0xe6, 0xd4, 0x62, 0x07, 0x44, 0xb1, 0xfe, 0x64,
+ 0x5c, 0x55, 0x9e, 0xc1, 0x1e, 0xc8, 0x1f, 0x98, 0xb7, 0x00, 0xbd, 0x09, 0x25, 0x7f, 0x7b, 0xbb,
+ 0xe9, 0x3b, 0xb5, 0x38, 0x4b, 0xa7, 0xf4, 0x80, 0xf0, 0x5b, 0x22, 0x2a, 0x4b, 0xd9, 0x7a, 0x0f,
+ 0x3c, 0xdc, 0x93, 0x02, 0x3d, 0xe1, 0x8f, 0x87, 0x91, 0x1f, 0x90, 0x5a, 0x6c, 0x8d, 0x28, 0xb2,
+ 0x3e, 0x93, 0xcc, 0xfb, 0x5c, 0x31, 0xf9, 0xf0, 0xde, 0xab, 0x8f, 0x92, 0x28, 0xc5, 0xc9, 0x66,
+ 0xa1, 0x00, 0x2e, 0xb7, 0xd3, 0x8c, 0x21, 0xa1, 0x88, 0x8d, 0x3e, 0xce, 0x24, 0x23, 0x97, 0xee,
+ 0xe5, 0x54, 0x73, 0x4a, 0x88, 0x7b, 0x50, 0xd6, 0xf3, 0x77, 0x16, 0xce, 0x26, 0x7f, 0xa7, 0xf9,
+ 0x96, 0xf4, 0xd8, 0x99, 0xbf, 0x25, 0x8d, 0xfe, 0x4f, 0x6a, 0xaa, 0x59, 0x6e, 0x43, 0xa8, 0x67,
+ 0x3e, 0x27, 0x3e, 0x72, 0xe9, 0x66, 0xff, 0xbe, 0x05, 0x93, 0x7c, 0xe6, 0x25, 0x35, 0x57, 0xf6,
+ 0x4a, 0xff, 0xb9, 0x53, 0x71, 0x92, 0xb1, 0x78, 0x81, 0x8a, 0xc1, 0x95, 0xf9, 0x6e, 0x8e, 0x69,
+ 0x09, 0xfa, 0xe5, 0x14, 0x7d, 0x79, 0x3c, 0x2b, 0xab, 0x5c, 0x7a, 0x9a, 0xd2, 0x0b, 0x47, 0xfd,
+ 0xa8, 0xc8, 0xff, 0xb0, 0xa7, 0xd1, 0x10, 0xb1, 0xe6, 0xfd, 0xa5, 0x53, 0x32, 0x1a, 0xea, 0xb9,
+ 0x54, 0x4f, 0x62, 0x3a, 0x9c, 0xfc, 0x39, 0x91, 0xcc, 0xbd, 0xa7, 0x16, 0xb2, 0x65, 0x6a, 0x21,
+ 0x2b, 0x59, 0x26, 0x5c, 0xd6, 0xd5, 0xa1, 0xbf, 0x6a, 0xc1, 0xc5, 0x34, 0x21, 0x99, 0xd2, 0xa4,
+ 0xcf, 0x9b, 0x4d, 0xca, 0x50, 0xab, 0xd5, 0x1b, 0x94, 0x4d, 0x96, 0xd9, 0xef, 0x17, 0x35, 0x57,
+ 0x4d, 0x44, 0xda, 0xa7, 0xf8, 0x44, 0xfd, 0xd8, 0xff, 0x7f, 0xa2, 0xfe, 0x2c, 0x32, 0xd6, 0x1b,
+ 0x8f, 0xcd, 0xe7, 0x9f, 0xd4, 0x63, 0xf3, 0x43, 0x8f, 0xf2, 0xd8, 0xfc, 0xf0, 0x13, 0x7b, 0x6c,
+ 0xbe, 0xd0, 0xe7, 0x63, 0xf3, 0xc5, 0x8f, 0xe8, 0x63, 0xf3, 0xf1, 0x91, 0x74, 0x34, 0xf3, 0x23,
+ 0x69, 0x44, 0xda, 0xff, 0xef, 0x3d, 0x23, 0xff, 0x47, 0x39, 0x18, 0x57, 0x5b, 0xb7, 0x13, 0xee,
+ 0x54, 0x48, 0x74, 0x06, 0x71, 0x26, 0x7b, 0x46, 0x9c, 0x49, 0x96, 0xa6, 0x3d, 0xde, 0x85, 0x9e,
+ 0x51, 0x3d, 0x5f, 0x4c, 0x44, 0xf5, 0xdc, 0xcf, 0x9e, 0xf5, 0xf1, 0xc1, 0x3d, 0xff, 0xdd, 0x82,
+ 0x0b, 0x89, 0x1a, 0x67, 0x10, 0xf9, 0xb0, 0x6b, 0x46, 0x3e, 0xbc, 0x96, 0x79, 0xaf, 0x7b, 0x04,
+ 0x40, 0xfc, 0x46, 0xae, 0xab, 0xb7, 0x4c, 0x2f, 0xfc, 0x59, 0x0b, 0xf2, 0x91, 0x13, 0xee, 0xc8,
+ 0x20, 0x88, 0xcf, 0x9f, 0xca, 0x0c, 0x98, 0xa6, 0xbf, 0xc5, 0x6a, 0x55, 0xed, 0x63, 0x30, 0xcc,
+ 0xb9, 0x4f, 0xfe, 0x8c, 0x05, 0x10, 0x23, 0x3d, 0x29, 0x15, 0xc6, 0xfe, 0xed, 0x1c, 0x5c, 0x4a,
+ 0x9d, 0x46, 0xe8, 0x2b, 0xea, 0x90, 0xcf, 0x07, 0x6a, 0xeb, 0x94, 0xe6, 0xab, 0x7e, 0xd6, 0x1f,
+ 0x33, 0xce, 0xfa, 0xe2, 0x88, 0xff, 0xa4, 0x14, 0x50, 0x91, 0xd6, 0x59, 0x1b, 0xac, 0xff, 0x61,
+ 0xc1, 0x44, 0xf2, 0xb0, 0x71, 0x06, 0x22, 0x6b, 0xdf, 0x10, 0x59, 0xf7, 0xb2, 0xf7, 0x46, 0xf4,
+ 0x0c, 0x8b, 0xfb, 0x23, 0x2d, 0x1e, 0x50, 0x22, 0x9f, 0x81, 0xcc, 0xd8, 0x33, 0x65, 0x06, 0xce,
+ 0xbe, 0xc7, 0x3d, 0x84, 0xc6, 0xdb, 0x90, 0xe6, 0x90, 0xe9, 0x2f, 0x2d, 0x8c, 0x11, 0xd3, 0x9f,
+ 0xeb, 0x3b, 0xa6, 0xff, 0x17, 0x72, 0xdd, 0x43, 0xcc, 0x04, 0xd5, 0x07, 0x54, 0x35, 0xd3, 0x4e,
+ 0xbb, 0xd9, 0x65, 0xce, 0x30, 0xce, 0xd6, 0xaa, 0x8d, 0xc6, 0xc9, 0xda, 0xe0, 0x8c, 0xde, 0x8a,
+ 0x5b, 0x42, 0xbf, 0xd4, 0x43, 0x53, 0x30, 0xf5, 0x9a, 0xe6, 0xcc, 0x21, 0x70, 0x5f, 0xa3, 0xc4,
+ 0x5c, 0x13, 0x06, 0x6d, 0x7b, 0x0c, 0x46, 0x5e, 0x77, 0xdb, 0xca, 0x97, 0x32, 0xfd, 0xad, 0xef,
+ 0x5d, 0x7b, 0xea, 0xf7, 0xbe, 0x77, 0xed, 0xa9, 0xef, 0x7c, 0xef, 0xda, 0x53, 0x5f, 0x3a, 0xba,
+ 0x66, 0x7d, 0xeb, 0xe8, 0x9a, 0xf5, 0x7b, 0x47, 0xd7, 0xac, 0xef, 0x1c, 0x5d, 0xb3, 0xfe, 0xd3,
+ 0xd1, 0x35, 0xeb, 0xaf, 0xfd, 0xe7, 0x6b, 0x4f, 0xbd, 0x5e, 0x90, 0x7d, 0xfb, 0xbf, 0x01, 0x00,
+ 0x00, 0xff, 0xff, 0x4c, 0xa2, 0x9c, 0xc6, 0xfc, 0xab, 0x00, 0x00,
}
func (m *Amount) Marshal() (dAtA []byte, err error) {
@@ -6751,6 +6754,11 @@ func (m *LifecycleHook) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ i -= len(m.Expression)
+ copy(dAtA[i:], m.Expression)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Expression)))
+ i--
+ dAtA[i] = 0x22
if m.TemplateRef != nil {
{
size, err := m.TemplateRef.MarshalToSizedBuffer(dAtA[:i])
@@ -10138,6 +10146,37 @@ func (m *WorkflowSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ if len(m.Hooks) > 0 {
+ keysForHooks := make([]string, 0, len(m.Hooks))
+ for k := range m.Hooks {
+ keysForHooks = append(keysForHooks, string(k))
+ }
+ github_com_gogo_protobuf_sortkeys.Strings(keysForHooks)
+ for iNdEx := len(keysForHooks) - 1; iNdEx >= 0; iNdEx-- {
+ v := m.Hooks[LifecycleEvent(keysForHooks[iNdEx])]
+ baseI := i
+ {
+ size, err := (&v).MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenerated(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ i -= len(keysForHooks[iNdEx])
+ copy(dAtA[i:], keysForHooks[iNdEx])
+ i = encodeVarintGenerated(dAtA, i, uint64(len(keysForHooks[iNdEx])))
+ i--
+ dAtA[i] = 0xa
+ i = encodeVarintGenerated(dAtA, i, uint64(baseI-i))
+ i--
+ dAtA[i] = 0x2
+ i--
+ dAtA[i] = 0xca
+ }
+ }
if m.ArchiveLogs != nil {
i--
if *m.ArchiveLogs {
@@ -12337,6 +12376,8 @@ func (m *LifecycleHook) Size() (n int) {
l = m.TemplateRef.Size()
n += 1 + l + sovGenerated(uint64(l))
}
+ l = len(m.Expression)
+ n += 1 + l + sovGenerated(uint64(l))
return n
}
@@ -13706,6 +13747,15 @@ func (m *WorkflowSpec) Size() (n int) {
if m.ArchiveLogs != nil {
n += 3
}
+ if len(m.Hooks) > 0 {
+ for k, v := range m.Hooks {
+ _ = k
+ _ = v
+ l = v.Size()
+ mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l))
+ n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize))
+ }
+ }
return n
}
@@ -14658,6 +14708,7 @@ func (this *LifecycleHook) String() string {
`Template:` + fmt.Sprintf("%v", this.Template) + `,`,
`Arguments:` + strings.Replace(strings.Replace(this.Arguments.String(), "Arguments", "Arguments", 1), `&`, ``, 1) + `,`,
`TemplateRef:` + strings.Replace(this.TemplateRef.String(), "TemplateRef", "TemplateRef", 1) + `,`,
+ `Expression:` + fmt.Sprintf("%v", this.Expression) + `,`,
`}`,
}, "")
return s
@@ -15578,6 +15629,16 @@ func (this *WorkflowSpec) String() string {
mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k])
}
mapStringForNodeSelector += "}"
+ keysForHooks := make([]string, 0, len(this.Hooks))
+ for k := range this.Hooks {
+ keysForHooks = append(keysForHooks, string(k))
+ }
+ github_com_gogo_protobuf_sortkeys.Strings(keysForHooks)
+ mapStringForHooks := "LifecycleHooks{"
+ for _, k := range keysForHooks {
+ mapStringForHooks += fmt.Sprintf("%v: %v,", k, this.Hooks[LifecycleEvent(k)])
+ }
+ mapStringForHooks += "}"
s := strings.Join([]string{`&WorkflowSpec{`,
`Templates:` + repeatedStringForTemplates + `,`,
`Entrypoint:` + fmt.Sprintf("%v", this.Entrypoint) + `,`,
@@ -15618,6 +15679,7 @@ func (this *WorkflowSpec) String() string {
`PodMetadata:` + strings.Replace(this.PodMetadata.String(), "Metadata", "Metadata", 1) + `,`,
`TemplateDefaults:` + strings.Replace(this.TemplateDefaults.String(), "Template", "Template", 1) + `,`,
`ArchiveLogs:` + valueToStringGenerated(this.ArchiveLogs) + `,`,
+ `Hooks:` + mapStringForHooks + `,`,
`}`,
}, "")
return s
@@ -23586,6 +23648,38 @@ func (m *LifecycleHook) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Expression", 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.Expression = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -35424,6 +35518,135 @@ func (m *WorkflowSpec) Unmarshal(dAtA []byte) error {
}
b := bool(v != 0)
m.ArchiveLogs = &b
+ case 41:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Hooks", 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.Hooks == nil {
+ m.Hooks = make(LifecycleHooks)
+ }
+ var mapkey LifecycleEvent
+ mapvalue := &LifecycleHook{}
+ for iNdEx < postIndex {
+ entryPreIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ if fieldNum == 1 {
+ var stringLenmapkey uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLenmapkey |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLenmapkey := int(stringLenmapkey)
+ if intStringLenmapkey < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postStringIndexmapkey := iNdEx + intStringLenmapkey
+ if postStringIndexmapkey < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postStringIndexmapkey > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapkey = LifecycleEvent(dAtA[iNdEx:postStringIndexmapkey])
+ iNdEx = postStringIndexmapkey
+ } else if fieldNum == 2 {
+ var mapmsglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ mapmsglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if mapmsglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postmsgIndex := iNdEx + mapmsglen
+ if postmsgIndex < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if postmsgIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ mapvalue = &LifecycleHook{}
+ if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil {
+ return err
+ }
+ iNdEx = postmsgIndex
+ } else {
+ iNdEx = entryPreIndex
+ skippy, err := skipGenerated(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > postIndex {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+ m.Hooks[LifecycleEvent(mapkey)] = *mapvalue
+ 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 b16a4783af97..ad7831942018 100644
--- a/pkg/apis/workflow/v1alpha1/generated.proto
+++ b/pkg/apis/workflow/v1alpha1/generated.proto
@@ -658,6 +658,10 @@ message LifecycleHook {
// TemplateRef is the reference to the template resource to execute by the hook
optional TemplateRef templateRef = 3;
+
+ // Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not
+ // be retried and the retry strategy will be ignored
+ optional string expression = 4;
}
// A link to another app.
@@ -1729,6 +1733,10 @@ message WorkflowSpec {
// ArchiveLogs indicates if the container logs should be archived
optional bool archiveLogs = 40;
+
+ // Hooks holds the lifecycle hook which is invoked at lifecycle of
+ // step, irrespective of the success, failure, or error status of the primary step
+ map hooks = 41;
}
// WorkflowStatus contains overall status information about a workflow
diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go
index b9d65229dfbd..d7badd8b37a6 100644
--- a/pkg/apis/workflow/v1alpha1/openapi_generated.go
+++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go
@@ -2765,6 +2765,13 @@ func schema_pkg_apis_workflow_v1alpha1_LifecycleHook(ref common.ReferenceCallbac
Ref: ref("github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.TemplateRef"),
},
},
+ "expression": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
},
Required: []string{"template"},
},
@@ -6411,11 +6418,26 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowSpec(ref common.ReferenceCallback
Format: "",
},
},
+ "hooks": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step",
+ Type: []string{"object"},
+ AdditionalProperties: &spec.SchemaOrBool{
+ Allows: true,
+ Schema: &spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Default: map[string]interface{}{},
+ Ref: ref("github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.LifecycleHook"),
+ },
+ },
+ },
+ },
+ },
},
},
},
Dependencies: []string{
- "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metadata", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.RetryStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec"},
+ "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.LifecycleHook", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metadata", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.RetryStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec"},
}
}
@@ -7318,6 +7340,21 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowTemplateSpec(ref common.Reference
Format: "",
},
},
+ "hooks": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step",
+ Type: []string{"object"},
+ AdditionalProperties: &spec.SchemaOrBool{
+ Allows: true,
+ Schema: &spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Default: map[string]interface{}{},
+ Ref: ref("github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.LifecycleHook"),
+ },
+ },
+ },
+ },
+ },
"workflowMetadata": {
SchemaProps: spec.SchemaProps{
Description: "WorkflowMetadata contains some metadata of the workflow to be refer",
@@ -7328,7 +7365,7 @@ func schema_pkg_apis_workflow_v1alpha1_WorkflowTemplateSpec(ref common.Reference
},
},
Dependencies: []string{
- "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metadata", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.RetryStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
+ "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Arguments", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ArtifactRepositoryRef", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.ExecutorConfig", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.LifecycleHook", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metadata", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Metrics", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.PodGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.RetryStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Synchronization", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.TTLStrategy", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.Template", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.VolumeClaimGC", "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.WorkflowTemplateRef", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
}
}
diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go
index 60c7891e60f4..b5e8be4ccce1 100644
--- a/pkg/apis/workflow/v1alpha1/workflow_types.go
+++ b/pkg/apis/workflow/v1alpha1/workflow_types.go
@@ -373,6 +373,24 @@ type WorkflowSpec struct {
// ArchiveLogs indicates if the container logs should be archived
ArchiveLogs *bool `json:"archiveLogs,omitempty" protobuf:"varint,40,opt,name=archiveLogs"`
+
+ // Hooks holds the lifecycle hook which is invoked at lifecycle of
+ // step, irrespective of the success, failure, or error status of the primary step
+ Hooks LifecycleHooks `json:"hooks,omitempty" protobuf:"bytes,41,opt,name=hooks"`
+}
+
+func (wfs *WorkflowSpec) GetExitHook(args Arguments) *LifecycleHook {
+ if !wfs.HasExitHook() {
+ return nil
+ }
+ if wfs.OnExit != "" {
+ return &LifecycleHook{Template: wfs.OnExit, Arguments: args}
+ }
+ return wfs.Hooks.GetExitHook().WithArgs(args)
+}
+
+func (wfs *WorkflowSpec) HasExitHook() bool {
+ return (wfs.Hooks != nil && wfs.Hooks.HasExitHook()) || wfs.OnExit != ""
}
// GetVolumeClaimGC returns the VolumeClaimGC that was defined in the workflow spec. If none was provided, a default value is returned.
@@ -1203,6 +1221,10 @@ func (lchs LifecycleHooks) GetExitHook() *LifecycleHook {
return nil
}
+func (lchs LifecycleHooks) HasExitHook() bool {
+ return lchs.GetExitHook() != nil
+}
+
type LifecycleHook struct {
// Template is the name of the template to execute by the hook
Template string `json:"template," protobuf:"bytes,1,opt,name=template"`
@@ -1210,6 +1232,9 @@ type LifecycleHook struct {
Arguments Arguments `json:"arguments,omitempty" protobuf:"bytes,2,opt,name=arguments"`
// TemplateRef is the reference to the template resource to execute by the hook
TemplateRef *TemplateRef `json:"templateRef,omitempty" protobuf:"bytes,3,opt,name=templateRef"`
+ // Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not
+ // be retried and the retry strategy will be ignored
+ Expression string `json:"expression,omitempty" protobuf:"bytes,4,opt,name=expression"`
}
func (lch *LifecycleHook) WithArgs(args Arguments) *LifecycleHook {
@@ -1223,7 +1248,7 @@ func (lch *LifecycleHook) WithArgs(args Arguments) *LifecycleHook {
var _ TemplateReferenceHolder = &WorkflowStep{}
func (step *WorkflowStep) HasExitHook() bool {
- return (step.Hooks != nil && step.Hooks.GetExitHook() != nil) || step.OnExit != ""
+ return (step.Hooks != nil && step.Hooks.HasExitHook()) || step.OnExit != ""
}
func (step *WorkflowStep) GetExitHook(args Arguments) *LifecycleHook {
@@ -2541,7 +2566,7 @@ func (t *DAGTask) GetExitHook(args Arguments) *LifecycleHook {
}
func (t *DAGTask) HasExitHook() bool {
- return (t.Hooks != nil && t.Hooks.GetExitHook() != nil) || t.OnExit != ""
+ return (t.Hooks != nil && t.Hooks.HasExitHook()) || t.OnExit != ""
}
func (t *DAGTask) GetTemplate() *Template {
diff --git a/pkg/apis/workflow/v1alpha1/workflow_types_test.go b/pkg/apis/workflow/v1alpha1/workflow_types_test.go
index 881be5ba2527..e0e59c8bd127 100644
--- a/pkg/apis/workflow/v1alpha1/workflow_types_test.go
+++ b/pkg/apis/workflow/v1alpha1/workflow_types_test.go
@@ -1069,3 +1069,30 @@ func TestTemplateGetType(t *testing.T) {
tmpl := Template{HTTP: &HTTP{}}
assert.Equal(t, TemplateTypeHTTP, tmpl.GetType())
}
+
+func TestWfSpecGetExitHook(t *testing.T) {
+ wfSpec := WorkflowSpec{OnExit: "test"}
+ hooks := wfSpec.GetExitHook(wfSpec.Arguments)
+ assert.Equal(t, "test", hooks.Template)
+ wfSpec = WorkflowSpec{Hooks: LifecycleHooks{"exit": LifecycleHook{Template: "hook"}}}
+ hooks = wfSpec.GetExitHook(wfSpec.Arguments)
+ assert.Equal(t, "hook", hooks.Template)
+}
+
+func TestDagSpecGetExitHook(t *testing.T) {
+ dagTask := DAGTask{Name: "A", OnExit: "test"}
+ hooks := dagTask.GetExitHook(dagTask.Arguments)
+ assert.Equal(t, "test", hooks.Template)
+ dagTask = DAGTask{Name: "A", Hooks: LifecycleHooks{"exit": LifecycleHook{Template: "hook"}}}
+ hooks = dagTask.GetExitHook(dagTask.Arguments)
+ assert.Equal(t, "hook", hooks.Template)
+}
+
+func TestStepSpecGetExitHook(t *testing.T) {
+ step := WorkflowStep{Name: "A", OnExit: "test"}
+ hooks := step.GetExitHook(step.Arguments)
+ assert.Equal(t, "test", hooks.Template)
+ step = WorkflowStep{Name: "A", Hooks: LifecycleHooks{"exit": LifecycleHook{Template: "hook"}}}
+ hooks = step.GetExitHook(step.Arguments)
+ assert.Equal(t, "hook", hooks.Template)
+}
diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
index 9d21c5d5c314..0621b956e681 100644
--- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
@@ -3167,6 +3167,13 @@ func (in *WorkflowSpec) DeepCopyInto(out *WorkflowSpec) {
*out = new(bool)
**out = **in
}
+ if in.Hooks != nil {
+ in, out := &in.Hooks, &out.Hooks
+ *out = make(LifecycleHooks, len(*in))
+ for key, val := range *in {
+ (*out)[key] = *val.DeepCopy()
+ }
+ }
return
}
diff --git a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md
index 3fc623a0fc40..c4b0ff16703f 100644
--- a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md
+++ b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md
@@ -8,6 +8,7 @@
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**arguments** | [**IoArgoprojWorkflowV1alpha1Arguments**](IoArgoprojWorkflowV1alpha1Arguments.md) | | [optional]
+**expression** | **String** | Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored | [optional]
**template** | **String** | Template is the name of the template to execute by the hook |
**templateRef** | [**IoArgoprojWorkflowV1alpha1TemplateRef**](IoArgoprojWorkflowV1alpha1TemplateRef.md) | | [optional]
diff --git a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md
index 2f1389c41493..3de6152989a4 100644
--- a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md
+++ b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md
@@ -18,6 +18,7 @@ Name | Type | Description | Notes
**dnsPolicy** | **String** | Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. | [optional]
**entrypoint** | **String** | Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1. | [optional]
**executor** | [**IoArgoprojWorkflowV1alpha1ExecutorConfig**](IoArgoprojWorkflowV1alpha1ExecutorConfig.md) | | [optional]
+**hooks** | [**Map<String, IoArgoprojWorkflowV1alpha1LifecycleHook>**](IoArgoprojWorkflowV1alpha1LifecycleHook.md) | Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step | [optional]
**hostAliases** | [**List<io.kubernetes.client.openapi.models.V1HostAlias>**](io.kubernetes.client.openapi.models.V1HostAlias.md) | | [optional]
**hostNetwork** | **Boolean** | Host networking requested for this workflow pod. Default to false. | [optional]
**imagePullSecrets** | [**List<io.kubernetes.client.openapi.models.V1LocalObjectReference>**](io.kubernetes.client.openapi.models.V1LocalObjectReference.md) | ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod | [optional]
diff --git a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md
index ffea8fc2aff3..b92ba0efa72f 100644
--- a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md
+++ b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md
@@ -18,6 +18,7 @@ Name | Type | Description | Notes
**dnsPolicy** | **String** | Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. | [optional]
**entrypoint** | **String** | Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1. | [optional]
**executor** | [**IoArgoprojWorkflowV1alpha1ExecutorConfig**](IoArgoprojWorkflowV1alpha1ExecutorConfig.md) | | [optional]
+**hooks** | [**Map<String, IoArgoprojWorkflowV1alpha1LifecycleHook>**](IoArgoprojWorkflowV1alpha1LifecycleHook.md) | Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step | [optional]
**hostAliases** | [**List<io.kubernetes.client.openapi.models.V1HostAlias>**](io.kubernetes.client.openapi.models.V1HostAlias.md) | | [optional]
**hostNetwork** | **Boolean** | Host networking requested for this workflow pod. Default to false. | [optional]
**imagePullSecrets** | [**List<io.kubernetes.client.openapi.models.V1LocalObjectReference>**](io.kubernetes.client.openapi.models.V1LocalObjectReference.md) | ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod | [optional]
diff --git a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_lifecycle_hook.py b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_lifecycle_hook.py
index ecf32afd4690..d2a32eb7f8bc 100644
--- a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_lifecycle_hook.py
+++ b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_lifecycle_hook.py
@@ -91,6 +91,7 @@ def openapi_types():
return {
'template': (str,), # noqa: E501
'arguments': (IoArgoprojWorkflowV1alpha1Arguments,), # noqa: E501
+ 'expression': (str,), # noqa: E501
'template_ref': (IoArgoprojWorkflowV1alpha1TemplateRef,), # noqa: E501
}
@@ -102,6 +103,7 @@ def discriminator():
attribute_map = {
'template': 'template', # noqa: E501
'arguments': 'arguments', # noqa: E501
+ 'expression': 'expression', # noqa: E501
'template_ref': 'templateRef', # noqa: E501
}
@@ -150,6 +152,7 @@ def _from_openapi_data(cls, template, *args, **kwargs): # noqa: E501
through its discriminator because we passed in
_visited_composed_classes = (Animal,)
arguments (IoArgoprojWorkflowV1alpha1Arguments): [optional] # noqa: E501
+ expression (str): Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored. [optional] # noqa: E501
template_ref (IoArgoprojWorkflowV1alpha1TemplateRef): [optional] # noqa: E501
"""
@@ -237,6 +240,7 @@ def __init__(self, template, *args, **kwargs): # noqa: E501
through its discriminator because we passed in
_visited_composed_classes = (Animal,)
arguments (IoArgoprojWorkflowV1alpha1Arguments): [optional] # noqa: E501
+ expression (str): Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored. [optional] # noqa: E501
template_ref (IoArgoprojWorkflowV1alpha1TemplateRef): [optional] # noqa: E501
"""
diff --git a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_spec.py b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_spec.py
index 125d863203af..9720f36ed8db 100644
--- a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_spec.py
+++ b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_spec.py
@@ -35,6 +35,7 @@ def lazy_import():
from argo_workflows.model.io_argoproj_workflow_v1alpha1_arguments import IoArgoprojWorkflowV1alpha1Arguments
from argo_workflows.model.io_argoproj_workflow_v1alpha1_artifact_repository_ref import IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef
from argo_workflows.model.io_argoproj_workflow_v1alpha1_executor_config import IoArgoprojWorkflowV1alpha1ExecutorConfig
+ from argo_workflows.model.io_argoproj_workflow_v1alpha1_lifecycle_hook import IoArgoprojWorkflowV1alpha1LifecycleHook
from argo_workflows.model.io_argoproj_workflow_v1alpha1_metadata import IoArgoprojWorkflowV1alpha1Metadata
from argo_workflows.model.io_argoproj_workflow_v1alpha1_metrics import IoArgoprojWorkflowV1alpha1Metrics
from argo_workflows.model.io_argoproj_workflow_v1alpha1_pod_gc import IoArgoprojWorkflowV1alpha1PodGC
@@ -56,6 +57,7 @@ def lazy_import():
globals()['IoArgoprojWorkflowV1alpha1Arguments'] = IoArgoprojWorkflowV1alpha1Arguments
globals()['IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef'] = IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef
globals()['IoArgoprojWorkflowV1alpha1ExecutorConfig'] = IoArgoprojWorkflowV1alpha1ExecutorConfig
+ globals()['IoArgoprojWorkflowV1alpha1LifecycleHook'] = IoArgoprojWorkflowV1alpha1LifecycleHook
globals()['IoArgoprojWorkflowV1alpha1Metadata'] = IoArgoprojWorkflowV1alpha1Metadata
globals()['IoArgoprojWorkflowV1alpha1Metrics'] = IoArgoprojWorkflowV1alpha1Metrics
globals()['IoArgoprojWorkflowV1alpha1PodGC'] = IoArgoprojWorkflowV1alpha1PodGC
@@ -137,6 +139,7 @@ def openapi_types():
'dns_policy': (str,), # noqa: E501
'entrypoint': (str,), # noqa: E501
'executor': (IoArgoprojWorkflowV1alpha1ExecutorConfig,), # noqa: E501
+ 'hooks': ({str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)},), # noqa: E501
'host_aliases': ([HostAlias],), # noqa: E501
'host_network': (bool,), # noqa: E501
'image_pull_secrets': ([LocalObjectReference],), # noqa: E501
@@ -184,6 +187,7 @@ def discriminator():
'dns_policy': 'dnsPolicy', # noqa: E501
'entrypoint': 'entrypoint', # noqa: E501
'executor': 'executor', # noqa: E501
+ 'hooks': 'hooks', # noqa: E501
'host_aliases': 'hostAliases', # noqa: E501
'host_network': 'hostNetwork', # noqa: E501
'image_pull_secrets': 'imagePullSecrets', # noqa: E501
@@ -266,6 +270,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
dns_policy (str): Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.. [optional] # noqa: E501
entrypoint (str): Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1.. [optional] # noqa: E501
executor (IoArgoprojWorkflowV1alpha1ExecutorConfig): [optional] # noqa: E501
+ hooks ({str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)}): Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step. [optional] # noqa: E501
host_aliases ([HostAlias]): [optional] # noqa: E501
host_network (bool): Host networking requested for this workflow pod. Default to false.. [optional] # noqa: E501
image_pull_secrets ([LocalObjectReference]): ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod. [optional] # noqa: E501
@@ -386,6 +391,7 @@ def __init__(self, *args, **kwargs): # noqa: E501
dns_policy (str): Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.. [optional] # noqa: E501
entrypoint (str): Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1.. [optional] # noqa: E501
executor (IoArgoprojWorkflowV1alpha1ExecutorConfig): [optional] # noqa: E501
+ hooks ({str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)}): Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step. [optional] # noqa: E501
host_aliases ([HostAlias]): [optional] # noqa: E501
host_network (bool): Host networking requested for this workflow pod. Default to false.. [optional] # noqa: E501
image_pull_secrets ([LocalObjectReference]): ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod. [optional] # noqa: E501
diff --git a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_template_spec.py b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_template_spec.py
index d2e69554af56..8a7a9881453a 100644
--- a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_template_spec.py
+++ b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_workflow_template_spec.py
@@ -35,6 +35,7 @@ def lazy_import():
from argo_workflows.model.io_argoproj_workflow_v1alpha1_arguments import IoArgoprojWorkflowV1alpha1Arguments
from argo_workflows.model.io_argoproj_workflow_v1alpha1_artifact_repository_ref import IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef
from argo_workflows.model.io_argoproj_workflow_v1alpha1_executor_config import IoArgoprojWorkflowV1alpha1ExecutorConfig
+ from argo_workflows.model.io_argoproj_workflow_v1alpha1_lifecycle_hook import IoArgoprojWorkflowV1alpha1LifecycleHook
from argo_workflows.model.io_argoproj_workflow_v1alpha1_metadata import IoArgoprojWorkflowV1alpha1Metadata
from argo_workflows.model.io_argoproj_workflow_v1alpha1_metrics import IoArgoprojWorkflowV1alpha1Metrics
from argo_workflows.model.io_argoproj_workflow_v1alpha1_pod_gc import IoArgoprojWorkflowV1alpha1PodGC
@@ -57,6 +58,7 @@ def lazy_import():
globals()['IoArgoprojWorkflowV1alpha1Arguments'] = IoArgoprojWorkflowV1alpha1Arguments
globals()['IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef'] = IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef
globals()['IoArgoprojWorkflowV1alpha1ExecutorConfig'] = IoArgoprojWorkflowV1alpha1ExecutorConfig
+ globals()['IoArgoprojWorkflowV1alpha1LifecycleHook'] = IoArgoprojWorkflowV1alpha1LifecycleHook
globals()['IoArgoprojWorkflowV1alpha1Metadata'] = IoArgoprojWorkflowV1alpha1Metadata
globals()['IoArgoprojWorkflowV1alpha1Metrics'] = IoArgoprojWorkflowV1alpha1Metrics
globals()['IoArgoprojWorkflowV1alpha1PodGC'] = IoArgoprojWorkflowV1alpha1PodGC
@@ -139,6 +141,7 @@ def openapi_types():
'dns_policy': (str,), # noqa: E501
'entrypoint': (str,), # noqa: E501
'executor': (IoArgoprojWorkflowV1alpha1ExecutorConfig,), # noqa: E501
+ 'hooks': ({str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)},), # noqa: E501
'host_aliases': ([HostAlias],), # noqa: E501
'host_network': (bool,), # noqa: E501
'image_pull_secrets': ([LocalObjectReference],), # noqa: E501
@@ -187,6 +190,7 @@ def discriminator():
'dns_policy': 'dnsPolicy', # noqa: E501
'entrypoint': 'entrypoint', # noqa: E501
'executor': 'executor', # noqa: E501
+ 'hooks': 'hooks', # noqa: E501
'host_aliases': 'hostAliases', # noqa: E501
'host_network': 'hostNetwork', # noqa: E501
'image_pull_secrets': 'imagePullSecrets', # noqa: E501
@@ -270,6 +274,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
dns_policy (str): Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.. [optional] # noqa: E501
entrypoint (str): Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1.. [optional] # noqa: E501
executor (IoArgoprojWorkflowV1alpha1ExecutorConfig): [optional] # noqa: E501
+ hooks ({str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)}): Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step. [optional] # noqa: E501
host_aliases ([HostAlias]): [optional] # noqa: E501
host_network (bool): Host networking requested for this workflow pod. Default to false.. [optional] # noqa: E501
image_pull_secrets ([LocalObjectReference]): ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod. [optional] # noqa: E501
@@ -391,6 +396,7 @@ def __init__(self, *args, **kwargs): # noqa: E501
dns_policy (str): Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.. [optional] # noqa: E501
entrypoint (str): Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1.. [optional] # noqa: E501
executor (IoArgoprojWorkflowV1alpha1ExecutorConfig): [optional] # noqa: E501
+ hooks ({str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)}): Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step. [optional] # noqa: E501
host_aliases ([HostAlias]): [optional] # noqa: E501
host_network (bool): Host networking requested for this workflow pod. Default to false.. [optional] # noqa: E501
image_pull_secrets ([LocalObjectReference]): ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod. [optional] # noqa: E501
diff --git a/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md b/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md
index ae79b407d676..022b6ddaa650 100644
--- a/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md
+++ b/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md
@@ -456,6 +456,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -1809,6 +2008,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -3666,6 +3866,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -5212,6 +5413,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -7069,6 +7271,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -8466,44 +8669,243 @@ with argo_workflows.ApiClient() as api_client:
config_map_key_ref=ConfigMapKeySelector(
key="key_example",
name="name_example",
- optional=True,
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ artifact_repository_ref=IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef(
+ config_map="config_map_example",
+ key="key_example",
+ ),
+ automount_service_account_token=True,
+ dns_config=PodDNSConfig(
+ nameservers=[
+ "nameservers_example",
+ ],
+ options=[
+ PodDNSConfigOption(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ searches=[
+ "searches_example",
+ ],
+ ),
+ dns_policy="dns_policy_example",
+ entrypoint="entrypoint_example",
+ executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
+ service_account_name="service_account_name_example",
+ ),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
),
- default="default_example",
- event="event_example",
- expression="expression_example",
- jq_filter="jq_filter_example",
- json_path="json_path_example",
- parameter="parameter_example",
- path="path_example",
- supplied={},
- ),
+ ],
),
- ],
- ),
- artifact_repository_ref=IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef(
- config_map="config_map_example",
- key="key_example",
- ),
- automount_service_account_token=True,
- dns_config=PodDNSConfig(
- nameservers=[
- "nameservers_example",
- ],
- options=[
- PodDNSConfigOption(
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
name="name_example",
- value="value_example",
+ template="template_example",
),
- ],
- searches=[
- "searches_example",
- ],
- ),
- dns_policy="dns_policy_example",
- entrypoint="entrypoint_example",
- executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
- service_account_name="service_account_name_example",
- ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -9857,6 +10259,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -11714,6 +12117,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -13260,6 +13664,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -15117,6 +15522,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -16470,6 +16876,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -17823,6 +18428,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -19680,6 +20286,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -21226,6 +21833,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -23083,6 +23691,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
diff --git a/sdks/python/client/docs/CronWorkflowServiceApi.md b/sdks/python/client/docs/CronWorkflowServiceApi.md
index 2de538be4133..ff5df6e4f797 100644
--- a/sdks/python/client/docs/CronWorkflowServiceApi.md
+++ b/sdks/python/client/docs/CronWorkflowServiceApi.md
@@ -509,6 +509,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -1862,6 +2061,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -3719,6 +3919,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -5265,6 +5466,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -7122,6 +7324,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -8550,44 +8753,243 @@ with argo_workflows.ApiClient() as api_client:
config_map_key_ref=ConfigMapKeySelector(
key="key_example",
name="name_example",
- optional=True,
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ artifact_repository_ref=IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef(
+ config_map="config_map_example",
+ key="key_example",
+ ),
+ automount_service_account_token=True,
+ dns_config=PodDNSConfig(
+ nameservers=[
+ "nameservers_example",
+ ],
+ options=[
+ PodDNSConfigOption(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ searches=[
+ "searches_example",
+ ],
+ ),
+ dns_policy="dns_policy_example",
+ entrypoint="entrypoint_example",
+ executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
+ service_account_name="service_account_name_example",
+ ),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
),
- default="default_example",
- event="event_example",
- expression="expression_example",
- jq_filter="jq_filter_example",
- json_path="json_path_example",
- parameter="parameter_example",
- path="path_example",
- supplied={},
- ),
+ ],
),
- ],
- ),
- artifact_repository_ref=IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef(
- config_map="config_map_example",
- key="key_example",
- ),
- automount_service_account_token=True,
- dns_config=PodDNSConfig(
- nameservers=[
- "nameservers_example",
- ],
- options=[
- PodDNSConfigOption(
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
name="name_example",
- value="value_example",
+ template="template_example",
),
- ],
- searches=[
- "searches_example",
- ],
- ),
- dns_policy="dns_policy_example",
- entrypoint="entrypoint_example",
- executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
- service_account_name="service_account_name_example",
- ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -9941,6 +10343,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -11798,6 +12201,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -13344,6 +13748,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -15201,6 +15606,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -16739,6 +17145,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -18092,6 +18697,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -19949,6 +20555,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -21495,6 +22102,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -23352,6 +23960,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
diff --git a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md
index 0d166ee6c823..283ca30e77fd 100644
--- a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md
+++ b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1LifecycleHook.md
@@ -6,6 +6,7 @@ Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**template** | **str** | Template is the name of the template to execute by the hook |
**arguments** | [**IoArgoprojWorkflowV1alpha1Arguments**](IoArgoprojWorkflowV1alpha1Arguments.md) | | [optional]
+**expression** | **str** | Expression is a condition expression for when a node will be retried. If it evaluates to false, the node will not be retried and the retry strategy will be ignored | [optional]
**template_ref** | [**IoArgoprojWorkflowV1alpha1TemplateRef**](IoArgoprojWorkflowV1alpha1TemplateRef.md) | | [optional]
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]
diff --git a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md
index db35d29bfa3d..e1c6b943a031 100644
--- a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md
+++ b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowSpec.md
@@ -15,6 +15,7 @@ Name | Type | Description | Notes
**dns_policy** | **str** | Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. | [optional]
**entrypoint** | **str** | Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1. | [optional]
**executor** | [**IoArgoprojWorkflowV1alpha1ExecutorConfig**](IoArgoprojWorkflowV1alpha1ExecutorConfig.md) | | [optional]
+**hooks** | [**{str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)}**](IoArgoprojWorkflowV1alpha1LifecycleHook.md) | Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step | [optional]
**host_aliases** | [**[HostAlias]**](HostAlias.md) | | [optional]
**host_network** | **bool** | Host networking requested for this workflow pod. Default to false. | [optional]
**image_pull_secrets** | [**[LocalObjectReference]**](LocalObjectReference.md) | ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod | [optional]
diff --git a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md
index acad0676f93f..5349531a6847 100644
--- a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md
+++ b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateSpec.md
@@ -15,6 +15,7 @@ Name | Type | Description | Notes
**dns_policy** | **str** | Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. | [optional]
**entrypoint** | **str** | Entrypoint is a template reference to the starting point of the io.argoproj.workflow.v1alpha1. | [optional]
**executor** | [**IoArgoprojWorkflowV1alpha1ExecutorConfig**](IoArgoprojWorkflowV1alpha1ExecutorConfig.md) | | [optional]
+**hooks** | [**{str: (IoArgoprojWorkflowV1alpha1LifecycleHook,)}**](IoArgoprojWorkflowV1alpha1LifecycleHook.md) | Hooks holds the lifecycle hook which is invoked at lifecycle of step, irrespective of the success, failure, or error status of the primary step | [optional]
**host_aliases** | [**[HostAlias]**](HostAlias.md) | | [optional]
**host_network** | **bool** | Host networking requested for this workflow pod. Default to false. | [optional]
**image_pull_secrets** | [**[LocalObjectReference]**](LocalObjectReference.md) | ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod | [optional]
diff --git a/sdks/python/client/docs/WorkflowServiceApi.md b/sdks/python/client/docs/WorkflowServiceApi.md
index a0645602872a..c549222cbe3a 100644
--- a/sdks/python/client/docs/WorkflowServiceApi.md
+++ b/sdks/python/client/docs/WorkflowServiceApi.md
@@ -471,6 +471,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -1824,6 +2023,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -3681,6 +3881,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -5227,6 +5428,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -7084,6 +7286,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -10063,6 +10266,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -11920,6 +12124,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -12628,6 +12833,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -13981,6 +14385,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -15838,6 +16243,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -17384,6 +17790,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -19241,6 +19648,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -20672,6 +21080,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -22025,6 +22632,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -23882,6 +24490,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -25428,6 +26037,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -27285,6 +27895,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -30264,6 +30875,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -32121,6 +32733,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -32829,6 +33442,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -34182,6 +34994,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -36039,6 +36852,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -37585,6 +38399,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -39442,6 +40257,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
diff --git a/sdks/python/client/docs/WorkflowTemplateServiceApi.md b/sdks/python/client/docs/WorkflowTemplateServiceApi.md
index 75bf53ba14ad..1f8c505bfb64 100644
--- a/sdks/python/client/docs/WorkflowTemplateServiceApi.md
+++ b/sdks/python/client/docs/WorkflowTemplateServiceApi.md
@@ -458,6 +458,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -1811,6 +2010,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -3668,6 +3868,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -5214,6 +5415,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -7071,6 +7273,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -8475,44 +8678,243 @@ with argo_workflows.ApiClient() as api_client:
config_map_key_ref=ConfigMapKeySelector(
key="key_example",
name="name_example",
- optional=True,
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ artifact_repository_ref=IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef(
+ config_map="config_map_example",
+ key="key_example",
+ ),
+ automount_service_account_token=True,
+ dns_config=PodDNSConfig(
+ nameservers=[
+ "nameservers_example",
+ ],
+ options=[
+ PodDNSConfigOption(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ searches=[
+ "searches_example",
+ ],
+ ),
+ dns_policy="dns_policy_example",
+ entrypoint="entrypoint_example",
+ executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
+ service_account_name="service_account_name_example",
+ ),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
),
- default="default_example",
- event="event_example",
- expression="expression_example",
- jq_filter="jq_filter_example",
- json_path="json_path_example",
- parameter="parameter_example",
- path="path_example",
- supplied={},
- ),
+ ],
),
- ],
- ),
- artifact_repository_ref=IoArgoprojWorkflowV1alpha1ArtifactRepositoryRef(
- config_map="config_map_example",
- key="key_example",
- ),
- automount_service_account_token=True,
- dns_config=PodDNSConfig(
- nameservers=[
- "nameservers_example",
- ],
- options=[
- PodDNSConfigOption(
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
name="name_example",
- value="value_example",
+ template="template_example",
),
- ],
- searches=[
- "searches_example",
- ],
- ),
- dns_policy="dns_policy_example",
- entrypoint="entrypoint_example",
- executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
- service_account_name="service_account_name_example",
- ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -9866,6 +10268,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -11723,6 +12126,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -13269,6 +13673,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -15126,6 +15531,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -16491,6 +16897,205 @@ with argo_workflows.ApiClient() as api_client:
executor=IoArgoprojWorkflowV1alpha1ExecutorConfig(
service_account_name="service_account_name_example",
),
+ hooks={
+ "key": IoArgoprojWorkflowV1alpha1LifecycleHook(
+ arguments=IoArgoprojWorkflowV1alpha1Arguments(
+ artifacts=[
+ IoArgoprojWorkflowV1alpha1Artifact(
+ archive=IoArgoprojWorkflowV1alpha1ArchiveStrategy(
+ _none={},
+ tar=IoArgoprojWorkflowV1alpha1TarStrategy(
+ compression_level=1,
+ ),
+ zip={},
+ ),
+ archive_logs=True,
+ artifactory=IoArgoprojWorkflowV1alpha1ArtifactoryArtifact(
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ url="url_example",
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ _from="_from_example",
+ from_expression="from_expression_example",
+ gcs=IoArgoprojWorkflowV1alpha1GCSArtifact(
+ bucket="bucket_example",
+ key="key_example",
+ service_account_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ git=IoArgoprojWorkflowV1alpha1GitArtifact(
+ depth=1,
+ disable_submodules=True,
+ fetch=[
+ "fetch_example",
+ ],
+ insecure_ignore_host_key=True,
+ password_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ repo="repo_example",
+ revision="revision_example",
+ ssh_private_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ username_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ global_name="global_name_example",
+ hdfs=IoArgoprojWorkflowV1alpha1HDFSArtifact(
+ addresses=[
+ "addresses_example",
+ ],
+ force=True,
+ hdfs_user="hdfs_user_example",
+ krb_c_cache_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_config_config_map=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_keytab_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ krb_realm="krb_realm_example",
+ krb_service_principal_name="krb_service_principal_name_example",
+ krb_username="krb_username_example",
+ path="path_example",
+ ),
+ http=IoArgoprojWorkflowV1alpha1HTTPArtifact(
+ headers=[
+ IoArgoprojWorkflowV1alpha1Header(
+ name="name_example",
+ value="value_example",
+ ),
+ ],
+ url="url_example",
+ ),
+ mode=1,
+ name="name_example",
+ optional=True,
+ oss=IoArgoprojWorkflowV1alpha1OSSArtifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=True,
+ endpoint="endpoint_example",
+ key="key_example",
+ lifecycle_rule=IoArgoprojWorkflowV1alpha1OSSLifecycleRule(
+ mark_deletion_after_days=1,
+ mark_infrequent_access_after_days=1,
+ ),
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ security_token="security_token_example",
+ ),
+ path="path_example",
+ raw=IoArgoprojWorkflowV1alpha1RawArtifact(
+ data="data_example",
+ ),
+ recurse_mode=True,
+ s3=IoArgoprojWorkflowV1alpha1S3Artifact(
+ access_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ bucket="bucket_example",
+ create_bucket_if_not_present=IoArgoprojWorkflowV1alpha1CreateS3BucketOptions(
+ object_locking=True,
+ ),
+ encryption_options=IoArgoprojWorkflowV1alpha1S3EncryptionOptions(
+ enable_encryption=True,
+ kms_encryption_context="kms_encryption_context_example",
+ kms_key_id="kms_key_id_example",
+ server_side_customer_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ ),
+ endpoint="endpoint_example",
+ insecure=True,
+ key="key_example",
+ region="region_example",
+ role_arn="role_arn_example",
+ secret_key_secret=SecretKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ use_sdk_creds=True,
+ ),
+ sub_path="sub_path_example",
+ ),
+ ],
+ parameters=[
+ IoArgoprojWorkflowV1alpha1Parameter(
+ default="default_example",
+ description="description_example",
+ enum=[
+ "enum_example",
+ ],
+ global_name="global_name_example",
+ name="name_example",
+ value="value_example",
+ value_from=IoArgoprojWorkflowV1alpha1ValueFrom(
+ config_map_key_ref=ConfigMapKeySelector(
+ key="key_example",
+ name="name_example",
+ optional=True,
+ ),
+ default="default_example",
+ event="event_example",
+ expression="expression_example",
+ jq_filter="jq_filter_example",
+ json_path="json_path_example",
+ parameter="parameter_example",
+ path="path_example",
+ supplied={},
+ ),
+ ),
+ ],
+ ),
+ expression="expression_example",
+ template="template_example",
+ template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
+ cluster_scope=True,
+ name="name_example",
+ template="template_example",
+ ),
+ ),
+ },
host_aliases=[
HostAlias(
hostnames=[
@@ -17844,6 +18449,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -19701,6 +20307,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -21247,6 +21854,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
@@ -23104,6 +23712,7 @@ with argo_workflows.ApiClient() as api_client:
),
],
),
+ expression="expression_example",
template="template_example",
template_ref=IoArgoprojWorkflowV1alpha1TemplateRef(
cluster_scope=True,
diff --git a/util/template/expression_template.go b/util/template/expression_template.go
index 219ef55abe14..e2982c2dc8a2 100644
--- a/util/template/expression_template.go
+++ b/util/template/expression_template.go
@@ -58,7 +58,7 @@ func expressionReplace(w io.Writer, expression string, env map[string]interface{
return w.Write(resultMarshaled[1 : marshaledLength-1])
}
-func envMap(replaceMap map[string]string) map[string]interface{} {
+func EnvMap(replaceMap map[string]string) map[string]interface{} {
envMap := make(map[string]interface{})
for k, v := range replaceMap {
envMap[k] = v
diff --git a/util/template/template.go b/util/template/template.go
index 97f2580b6810..e776b31b8b5f 100644
--- a/util/template/template.go
+++ b/util/template/template.go
@@ -36,7 +36,7 @@ func (t *impl) Replace(replaceMap map[string]string, allowUnresolved bool) (stri
kind, expression := parseTag(tag)
switch kind {
case kindExpression:
- env := exprenv.GetFuncMap(envMap(replaceMap))
+ env := exprenv.GetFuncMap(EnvMap(replaceMap))
return expressionReplace(w, expression, env, allowUnresolved)
default:
return simpleReplace(w, tag, replaceMap, allowUnresolved)
diff --git a/workflow/controller/dag.go b/workflow/controller/dag.go
index 1f474d05b845..00fc56a13e7a 100644
--- a/workflow/controller/dag.go
+++ b/workflow/controller/dag.go
@@ -247,6 +247,21 @@ func (woc *wfOperationCtx) executeDAG(ctx context.Context, nodeName string, tmpl
// complete (since the DAG itself will have succeeded). To ensure that their exit handlers are run we also run them here. Note that
// calls to runOnExitNode are idempotent: it is fine if they are called more than once for the same task.
taskNode := dagCtx.getTaskNode(taskName)
+
+ if taskNode != nil {
+ task := dagCtx.GetTask(taskName)
+ scope, err := woc.buildLocalScopeFromTask(dagCtx, task)
+ if err != nil {
+ woc.markNodeError(node.Name, err)
+ return node, err
+ }
+ scope.addParamToScope(fmt.Sprintf("tasks.%s.status", task.Name), string(node.Phase))
+ _, err = woc.executeTmplLifeCycleHook(ctx, woc.globalParams.Merge(scope.getParameters()), dagCtx.GetTask(taskName).Hooks, taskNode, dagCtx.boundaryID, dagCtx.tmplCtx, "tasks."+taskName)
+ if err != nil {
+ woc.markNodeError(node.Name, err)
+ return node, err
+ }
+ }
if taskNode != nil && taskNode.Fulfilled() {
if taskNode.Completed() {
// Run the node's onExit node, if any. Since this is a target task, we don't need to consider the status
@@ -358,6 +373,21 @@ func (woc *wfOperationCtx) executeDAGTask(ctx context.Context, dagCtx *dagContex
woc.controller.syncManager.Release(woc.wf, node.ID, tmpl.Synchronization)
}
+ task := dagCtx.GetTask(taskName)
+ scope, err := woc.buildLocalScopeFromTask(dagCtx, task)
+ if err != nil {
+ woc.markNodeError(node.Name, err)
+ }
+ scope.addParamToScope(fmt.Sprintf("tasks.%s.status", task.Name), string(node.Phase))
+ hookCompleted, err := woc.executeTmplLifeCycleHook(ctx, woc.globalParams.Merge(scope.getParameters()), dagCtx.GetTask(taskName).Hooks, node, dagCtx.boundaryID, dagCtx.tmplCtx, "tasks."+taskName)
+ if err != nil {
+ woc.markNodeError(node.Name, err)
+ }
+ // Check all hooks are completes
+ if !hookCompleted {
+ return
+ }
+
if node.Completed() {
// Run the node's onExit node, if any.
hasOnExitNode, onExitNode, err := woc.runOnExitNode(ctx, task.GetExitHook(woc.execWf.Spec.Arguments), node, dagCtx.boundaryID, dagCtx.tmplCtx, "tasks."+taskName)
diff --git a/workflow/controller/hooks.go b/workflow/controller/hooks.go
new file mode 100644
index 000000000000..573b1a28e4ec
--- /dev/null
+++ b/workflow/controller/hooks.go
@@ -0,0 +1,91 @@
+package controller
+
+import (
+ "context"
+ "fmt"
+
+ wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
+ "github.com/argoproj/argo-workflows/v3/util/expr/argoexpr"
+ "github.com/argoproj/argo-workflows/v3/util/expr/env"
+ "github.com/argoproj/argo-workflows/v3/util/template"
+ "github.com/argoproj/argo-workflows/v3/workflow/templateresolution"
+)
+
+func (woc *wfOperationCtx) executeWfLifeCycleHook(ctx context.Context, tmplCtx *templateresolution.Context) error {
+ for hookName, hook := range woc.wf.Spec.Hooks {
+ //exit hook will be execute in runOnExitNode
+ if hookName == wfv1.ExitLifecycleEvent {
+ continue
+ }
+ execute, err := argoexpr.EvalBool(hook.Expression, env.GetFuncMap(template.EnvMap(woc.globalParams)))
+ if err != nil {
+ return err
+ }
+ if execute {
+ hookNodeName := generateLifeHookNodeName(woc.wf.ObjectMeta.Name, string(hookName))
+ woc.log.WithField("lifeCycleHook", hookName).WithField("node", hookNodeName).Infof("Running workflow level hooks")
+ _, err := woc.executeTemplate(ctx, hookNodeName, &wfv1.WorkflowStep{Template: hook.Template, TemplateRef: hook.TemplateRef}, tmplCtx, hook.Arguments, &executeTemplateOpts{})
+ if err != nil {
+ return err
+ }
+ woc.addChildNode(woc.wf.Name, hookNodeName)
+ }
+ }
+
+ return nil
+}
+
+func (woc *wfOperationCtx) executeTmplLifeCycleHook(ctx context.Context, envMap map[string]string, lifeCycleHooks wfv1.LifecycleHooks, parentNode *wfv1.NodeStatus, boundaryID string, tmplCtx *templateresolution.Context, prefix string) (bool, error) {
+ var hookNodes []*wfv1.NodeStatus
+ completed := false
+ for hookName, hook := range lifeCycleHooks {
+ //exit hook will be execute in runOnExitNode
+ if hookName == wfv1.ExitLifecycleEvent {
+ continue
+ }
+ execute, err := argoexpr.EvalBool(hook.Expression, env.GetFuncMap(template.EnvMap(envMap)))
+ if err != nil {
+ return completed, err
+ }
+ if execute {
+ outputs := parentNode.Outputs
+ if parentNode.Type == wfv1.NodeTypeRetry {
+ lastChildNode := getChildNodeIndex(parentNode, woc.wf.Status.Nodes, -1)
+ outputs = lastChildNode.Outputs
+ }
+ hookNodeName := generateLifeHookNodeName(parentNode.Name, string(hookName))
+ woc.log.WithField("lifeCycleHook", hookName).WithField("node", hookNodeName).WithField("hookName", hookName).Info("Running hooks")
+ resolvedArgs := hook.Arguments
+ var err error
+ if !resolvedArgs.IsEmpty() && outputs != nil {
+ resolvedArgs, err = woc.resolveExitTmplArgument(hook.Arguments, prefix, outputs)
+ if err != nil {
+ return completed, err
+ }
+ }
+ hookNode, err := woc.executeTemplate(ctx, hookNodeName, &wfv1.WorkflowStep{Template: hook.Template, TemplateRef: hook.TemplateRef}, tmplCtx, resolvedArgs, &executeTemplateOpts{
+ boundaryID: boundaryID,
+ })
+ if err != nil {
+ return completed, err
+ }
+ woc.addChildNode(parentNode.Name, hookNodeName)
+ hookNodes = append(hookNodes, hookNode)
+
+ }
+ }
+ completed = true
+
+ // All hook nodes are completed
+ for _, hookNode := range hookNodes {
+ if !hookNode.Fulfilled() {
+ completed = false
+ break
+ }
+ }
+ return completed, nil
+}
+
+func generateLifeHookNodeName(parentNodeName string, hookName string) string {
+ return fmt.Sprintf("%s.hooks.%s", parentNodeName, hookName)
+}
diff --git a/workflow/controller/hooks_test.go b/workflow/controller/hooks_test.go
new file mode 100644
index 000000000000..fa6e093a38d1
--- /dev/null
+++ b/workflow/controller/hooks_test.go
@@ -0,0 +1,775 @@
+package controller
+
+import (
+ "context"
+ "fmt"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+
+ wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
+)
+
+func TestExecuteWfLifeCycleHook(t *testing.T) {
+ wf := wfv1.MustUnmarshalWorkflow(`
+apiVersion: argoproj.io/v1alpha1
+kind: Workflow
+metadata:
+ name: lifecycle-hook-bgsf6
+ namespace: argo
+ resourceVersion: "33638"
+spec:
+ entrypoint: main
+ hooks:
+ exit:
+ template: http
+ error:
+ expression: workflow.status == "Error"
+ template: http
+ running:
+ expression: workflow.status == "Running"
+ template: http
+ templates:
+ - name: main
+ steps:
+ - - name: step1
+ template: heads
+ - container:
+ args:
+ - echo "it was heads"
+ command:
+ - sh
+ - -c
+ image: alpine:3.6
+ name: ""
+ name: heads
+ - http:
+ url: https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json
+ name: http
+status:
+ artifactRepositoryRef:
+ artifactRepository:
+ archiveLogs: true
+ s3:
+ accessKeySecret:
+ key: accesskey
+ name: my-minio-cred
+ bucket: my-bucket
+ endpoint: minio:9000
+ insecure: true
+ secretKeySecret:
+ key: secretkey
+ name: my-minio-cred
+ configMap: artifact-repositories
+ key: default-v1
+ namespace: argo
+ conditions:
+ - status: "False"
+ type: PodRunning
+ - status: "True"
+ type: Completed
+ finishedAt: "2022-01-26T19:25:42Z"
+ nodes:
+ lifecycle-hook-bgsf6:
+ children:
+ - lifecycle-hook-bgsf6-2367710970
+ displayName: lifecycle-hook-bgsf6
+ finishedAt: "2022-01-26T19:25:42Z"
+ id: lifecycle-hook-bgsf6
+ name: lifecycle-hook-bgsf6
+ outboundNodes:
+ - lifecycle-hook-bgsf6-3057272397
+ phase: Error
+ progress: 1/1
+ resourcesDuration:
+ cpu: 4
+ memory: 2
+ startedAt: "2022-01-26T19:23:48Z"
+ templateName: main
+ templateScope: local/lifecycle-hook-bgsf6
+ type: Steps
+ lifecycle-hook-bgsf6-2367710970:
+ boundaryID: lifecycle-hook-bgsf6
+ children:
+ - lifecycle-hook-bgsf6-3057272397
+ displayName: '[0]'
+ finishedAt: "2022-01-26T19:25:42Z"
+ id: lifecycle-hook-bgsf6-2367710970
+ name: lifecycle-hook-bgsf6[0]
+ phase: Error
+ progress: 1/1
+ resourcesDuration:
+ cpu: 4
+ memory: 2
+ startedAt: "2022-01-26T19:23:48Z"
+ templateScope: local/lifecycle-hook-bgsf6
+ type: StepGroup
+ lifecycle-hook-bgsf6-3057272397:
+ boundaryID: lifecycle-hook-bgsf6
+ displayName: step1
+ finishedAt: "2022-01-26T19:25:41Z"
+ hostNodeName: k3d-k3s-default-server-0
+ id: lifecycle-hook-bgsf6-3057272397
+ name: lifecycle-hook-bgsf6[0].step1
+ outputs:
+ artifacts:
+ - name: main-logs
+ s3:
+ key: lifecycle-hook-bgsf6/lifecycle-hook-bgsf6-3057272397/main.log
+ exitCode: "0"
+ phase: Error
+ progress: 1/1
+ resourcesDuration:
+ cpu: 4
+ memory: 2
+ startedAt: "2022-01-26T19:23:48Z"
+ templateName: heads
+ templateScope: local/lifecycle-hook-bgsf6
+ type: Pod
+ phase: Error
+ progress: 1/1
+ resourcesDuration:
+ cpu: 4
+ memory: 2
+ startedAt: "2022-01-26T19:23:48Z"
+`)
+
+ cancel, controller := newController(wf)
+ defer cancel()
+
+ ctx := context.Background()
+ woc := newWorkflowOperationCtx(wf, controller)
+ woc.operate(ctx)
+ node := woc.wf.Status.Nodes.FindByDisplayName("lifecycle-hook-bgsf6.hooks.error")
+ assert.NotNil(t, node)
+ node = woc.wf.Status.Nodes.FindByDisplayName("lifecycle-hook-bgsf6.hooks.running")
+ assert.Nil(t, node)
+}
+
+func TestExecuteTmplLifeCycleHook(t *testing.T) {
+ wf := wfv1.MustUnmarshalWorkflow(`
+apiVersion: argoproj.io/v1alpha1
+kind: Workflow
+metadata:
+ name: lifecycle-hook-tmpl-levelg8mqq
+ namespace: argo
+spec:
+ entrypoint: main
+ templates:
+ - name: main
+ steps:
+ - - hooks:
+ running:
+ expression: steps.step1.status == "Running"
+ template: http
+ error:
+ expression: steps.step1.status == "Error"
+ template: http
+ name: step1
+ template: echo
+ - container:
+ args:
+ - echo "it was heads"
+ command:
+ - sh
+ - -c
+ image: alpine:3.6
+ name: echo
+ - http:
+ url: https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json
+ name: http
+status:
+ conditions:
+ - status: "False"
+ type: PodRunning
+ - status: "True"
+ type: Completed
+ finishedAt: "2022-01-26T21:28:37Z"
+ nodes:
+ lifecycle-hook-tmpl-levelg8mqq:
+ children:
+ - lifecycle-hook-tmpl-levelg8mqq-2902815070
+ displayName: lifecycle-hook-tmpl-levelg8mqq
+ finishedAt: "2022-01-26T21:28:37Z"
+ id: lifecycle-hook-tmpl-levelg8mqq
+ name: lifecycle-hook-tmpl-levelg8mqq
+ outboundNodes:
+ - lifecycle-hook-tmpl-levelg8mqq-3824639481
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-26T21:28:33Z"
+ templateName: main
+ templateScope: local/lifecycle-hook-tmpl-levelg8mqq
+ type: Steps
+ lifecycle-hook-tmpl-levelg8mqq-2902815070:
+ boundaryID: lifecycle-hook-tmpl-levelg8mqq
+ children:
+ - lifecycle-hook-tmpl-levelg8mqq-3824639481
+ displayName: '[0]'
+ finishedAt: "2022-01-26T21:28:37Z"
+ id: lifecycle-hook-tmpl-levelg8mqq-2902815070
+ name: lifecycle-hook-tmpl-levelg8mqq[0]
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-26T21:28:33Z"
+ templateScope: local/lifecycle-hook-tmpl-levelg8mqq
+ type: StepGroup
+ lifecycle-hook-tmpl-levelg8mqq-3824639481:
+ boundaryID: lifecycle-hook-tmpl-levelg8mqq
+ children:
+ - lifecycle-hook-tmpl-levelg8mqq-4216202210
+ displayName: step1
+ finishedAt: "2022-01-26T21:28:36Z"
+ hostNodeName: k3d-k3s-default-server-0
+ id: lifecycle-hook-tmpl-levelg8mqq-3824639481
+ name: lifecycle-hook-tmpl-levelg8mqq[0].step1
+ outputs:
+ artifacts:
+ - name: main-logs
+ s3:
+ key: lifecycle-hook-tmpl-levelg8mqq/lifecycle-hook-tmpl-levelg8mqq-3824639481/main.log
+ exitCode: "0"
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-26T21:28:33Z"
+ templateName: echo
+ templateScope: local/lifecycle-hook-tmpl-levelg8mqq
+ type: Pod
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-26T21:28:33Z"
+`)
+
+ cancel, controller := newController(wf)
+ defer cancel()
+
+ ctx := context.Background()
+ woc := newWorkflowOperationCtx(wf, controller)
+ woc.operate(ctx)
+ node := woc.wf.Status.Nodes.FindByDisplayName("step1.hooks.error")
+ assert.NotNil(t, node)
+ node = woc.wf.Status.Nodes.FindByDisplayName("step1.hooks.running")
+ assert.Nil(t, node)
+}
+
+const wftWithHook = `
+apiVersion: argoproj.io/v1alpha1
+kind: WorkflowTemplate
+metadata:
+ name: workflow-template-whalesay-template
+ namespace: default
+spec:
+ hooks:
+ exit:
+ template: http
+ running:
+ expression: workflow.status == "Running"
+ template: http
+ templates:
+ - name: main
+ steps:
+ - - name: step-1
+ hooks:
+ exit:
+ expression: steps["step-1"].status == "Running"
+ template: http
+ error:
+ expression: steps["step-1"].status == "Error"
+ template: http
+ template: echo
+ - - name: step2
+ hooks:
+ exit:
+ expression: steps.step2.status == "Running"
+ template: http
+ error:
+ expression: steps.step2.status == "Error"
+ template: http
+ template: echo
+
+ - name: echo
+ container:
+ image: alpine:3.6
+ command: [sh, -c]
+ args: ["echo \"it was heads\""]
+
+ - name: http
+ http:
+ # url: http://dummy.restapiexample.com/api/v1/employees
+ url: "https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json"
+ volumes:
+ - name: data
+ emptyDir: {}
+`
+
+func TestWorkflowTemplateRefWithHook(t *testing.T) {
+ wf := wfv1.MustUnmarshalWorkflow(`apiVersion: argoproj.io/v1alpha1
+kind: Workflow
+metadata:
+ name: workflow-template-whalesay-template-hjgcg
+spec:
+ arguments:
+ parameters:
+ - name: message
+ value: test
+ entrypoint: main
+ workflowTemplateRef:
+ name: workflow-template-whalesay-template
+status:
+ conditions:
+ - status: "False"
+ type: PodRunning
+ - status: "True"
+ type: Completed
+ estimatedDuration: 6
+ finishedAt: "2022-01-28T00:09:11Z"
+ nodes:
+ workflow-template-whalesay-template-hjgcg:
+ children:
+ - workflow-template-whalesay-template-hjgcg-2088741593
+ displayName: workflow-template-whalesay-template-hjgcg
+ estimatedDuration: 4
+ finishedAt: "2022-01-28T00:09:11Z"
+ id: workflow-template-whalesay-template-hjgcg
+ name: workflow-template-whalesay-template-hjgcg
+ outboundNodes:
+ - workflow-template-whalesay-template-hjgcg-2492429498
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 2
+ memory: 0
+ startedAt: "2022-01-28T00:09:02Z"
+ templateName: main
+ templateScope: local/
+ type: Steps
+ workflow-template-whalesay-template-hjgcg-1408741:
+ boundaryID: workflow-template-whalesay-template-hjgcg
+ children:
+ - workflow-template-whalesay-template-hjgcg-1411106350
+ - workflow-template-whalesay-template-hjgcg-412929452
+ - workflow-template-whalesay-template-hjgcg-948010596
+ displayName: step-1
+ finishedAt: "2022-01-28T00:09:05Z"
+ hostNodeName: k3d-k3s-default-server-0
+ id: workflow-template-whalesay-template-hjgcg-1408741
+ name: workflow-template-whalesay-template-hjgcg[0].step-1
+ outputs:
+ artifacts:
+ - name: main-logs
+ s3:
+ key: workflow-template-whalesay-template-hjgcg/workflow-template-whalesay-template-hjgcg-1408741/main.log
+ exitCode: "0"
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-28T00:09:02Z"
+ templateName: echo
+ templateScope: local/
+ type: Pod
+ workflow-template-whalesay-template-hjgcg-948010596:
+ boundaryID: workflow-template-whalesay-template-hjgcg
+ children:
+ - workflow-template-whalesay-template-hjgcg-2492429498
+ displayName: '[1]'
+ finishedAt: "2022-01-28T00:09:11Z"
+ id: workflow-template-whalesay-template-hjgcg-948010596
+ name: workflow-template-whalesay-template-hjgcg[1]
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-28T00:09:07Z"
+ templateScope: local/
+ type: StepGroup
+ workflow-template-whalesay-template-hjgcg-2088741593:
+ boundaryID: workflow-template-whalesay-template-hjgcg
+ children:
+ - workflow-template-whalesay-template-hjgcg-1408741
+ displayName: '[0]'
+ finishedAt: "2022-01-28T00:09:07Z"
+ id: workflow-template-whalesay-template-hjgcg-2088741593
+ name: workflow-template-whalesay-template-hjgcg[0]
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 2
+ memory: 0
+ startedAt: "2022-01-28T00:09:02Z"
+ templateScope: local/
+ type: StepGroup
+ workflow-template-whalesay-template-hjgcg-2492429498:
+ boundaryID: workflow-template-whalesay-template-hjgcg
+ children:
+ - workflow-template-whalesay-template-hjgcg-369778373
+ - workflow-template-whalesay-template-hjgcg-2107567333
+ displayName: step2
+ finishedAt: "2022-01-28T00:09:10Z"
+ hostNodeName: k3d-k3s-default-server-0
+ id: workflow-template-whalesay-template-hjgcg-2492429498
+ name: workflow-template-whalesay-template-hjgcg[1].step2
+ outputs:
+ artifacts:
+ - name: main-logs
+ s3:
+ key: workflow-template-whalesay-template-hjgcg/workflow-template-whalesay-template-hjgcg-2492429498/main.log
+ exitCode: "0"
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-28T00:09:07Z"
+ templateName: echo
+ templateScope: local/
+ type: Pod
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 2
+ memory: 0
+ startedAt: "2022-01-28T00:09:02Z"
+ storedTemplates:
+ namespaced/workflow-template-whalesay-template/echo:
+ container:
+ args:
+ - echo "it was heads"
+ command:
+ - sh
+ - -c
+ image: alpine:3.6
+ name: ""
+ resources: {}
+ inputs: {}
+ metadata: {}
+ name: echo
+ outputs: {}
+ namespaced/workflow-template-whalesay-template/main:
+ inputs: {}
+ metadata: {}
+ name: main
+ outputs: {}
+ steps:
+ - - hooks:
+ exit:
+ expression: steps["step-1"].status == "Running"
+ template: http
+ success:
+ expression: steps["step-1"].status == "Succeeded"
+ template: http
+ name: step-1
+ template: echo
+ - - hooks:
+ exit:
+ expression: steps.step2.status == "Running"
+ template: http
+ success:
+ expression: steps.step2.status == "Succeeded"
+ template: http
+ name: step2
+ template: echo
+ storedWorkflowTemplateSpec:
+ activeDeadlineSeconds: 300
+ arguments:
+ parameters:
+ - name: message
+ value: test
+ entrypoint: main
+ hooks:
+ exit:
+ template: http
+ running:
+ expression: workflow.status == "Running"
+ template: http
+ podSpecPatch: |
+ terminationGracePeriodSeconds: 3
+ templates:
+ - name: main
+ steps:
+ - - hooks:
+ exit:
+ template: http
+ error:
+ expression: steps["step-1"].status == "Error"
+ template: http
+ name: step-1
+ template: echo
+ - - hooks:
+ exit:
+ expression: steps.step2.status == "Running"
+ template: http
+ error:
+ expression: steps.step2.status == "Error"
+ template: http
+ name: step2
+ template: echo
+ - container:
+ args:
+ - echo "it was heads"
+ command:
+ - sh
+ - -c
+ image: alpine:3.6
+ name: ""
+ name: echo
+ - http:
+ url: https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json
+ name: http
+ ttlStrategy:
+ secondsAfterCompletion: 600
+ volumes:
+ - emptyDir: {}
+ name: data
+ workflowTemplateRef:
+ name: workflow-template-whalesay-template
+`)
+ cancel, controller := newController(wf, wfv1.MustUnmarshalWorkflowTemplate(wftWithHook))
+ defer cancel()
+
+ ctx := context.Background()
+ woc := newWorkflowOperationCtx(wf, controller)
+ woc.operate(ctx)
+ assert.NotNil(t, woc.wf.Status.Nodes.FindByDisplayName("step-1.hooks.error"))
+}
+
+func TestTemplateRefWithHook(t *testing.T) {
+ wf := wfv1.MustUnmarshalWorkflow(`apiVersion: argoproj.io/v1alpha1
+kind: Workflow
+metadata:
+ name: workflow-template-whalesay-template-1
+ namespace: default
+spec:
+
+ entrypoint: main
+
+ templates:
+ - name: main
+ steps:
+ - - hooks:
+ exit:
+ expression: steps["step-1"].status == "Running"
+ templateRef:
+ name: workflow-template-whalesay-template
+ template: http
+ error:
+ expression: steps["step-1"].status == "Error"
+ template: ""
+ templateRef:
+ name: workflow-template-whalesay-template
+ template: http
+ name: step-1
+ templateRef:
+ name: workflow-template-whalesay-template
+ template: main
+ ttlStrategy:
+ secondsAfterCompletion: 600
+status:
+ conditions:
+ - status: "False"
+ type: PodRunning
+ - status: "True"
+ type: Completed
+ finishedAt: "2022-01-28T07:01:04Z"
+ nodes:
+ workflow-template-whalesay-template-1:
+ children:
+ - workflow-template-whalesay-template-1-1761665519
+ displayName: workflow-template-whalesay-template-1
+ finishedAt: "2022-01-28T07:01:04Z"
+ id: workflow-template-whalesay-template-1
+ name: workflow-template-whalesay-template-1
+ outboundNodes:
+ - workflow-template-whalesay-template-1-79192944
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 3
+ memory: 0
+ startedAt: "2022-01-28T07:00:55Z"
+ templateName: main
+ templateScope: local/workflow-template-whalesay-template-1
+ type: Steps
+ workflow-template-whalesay-template-1-1236010667:
+ boundaryID: workflow-template-whalesay-template-1-1438125631
+ children:
+ - workflow-template-whalesay-template-1-2715724931
+ displayName: '[0]'
+ finishedAt: "2022-01-28T07:01:00Z"
+ id: workflow-template-whalesay-template-1-1236010667
+ name: workflow-template-whalesay-template-1[0].step-1[0]
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 3
+ memory: 0
+ startedAt: "2022-01-28T07:00:55Z"
+ templateScope: namespaced/workflow-template-whalesay-template
+ type: StepGroup
+ workflow-template-whalesay-template-1-1438125631:
+ boundaryID: workflow-template-whalesay-template-1
+ children:
+ - workflow-template-whalesay-template-1-1236010667
+ - workflow-template-whalesay-template-1-986640140
+ - workflow-template-whalesay-template-1-1359034694
+ displayName: step-1
+ finishedAt: "2022-01-28T07:01:04Z"
+ id: workflow-template-whalesay-template-1-1438125631
+ name: workflow-template-whalesay-template-1[0].step-1
+ outboundNodes:
+ - workflow-template-whalesay-template-1-79192944
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 3
+ memory: 0
+ startedAt: "2022-01-28T07:00:55Z"
+ templateRef:
+ name: workflow-template-whalesay-template
+ template: main
+ templateScope: local/workflow-template-whalesay-template-1
+ type: Steps
+ workflow-template-whalesay-template-1-1761665519:
+ boundaryID: workflow-template-whalesay-template-1
+ children:
+ - workflow-template-whalesay-template-1-1438125631
+ displayName: '[0]'
+ finishedAt: "2022-01-28T07:01:04Z"
+ id: workflow-template-whalesay-template-1-1761665519
+ name: workflow-template-whalesay-template-1[0]
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 3
+ memory: 0
+ startedAt: "2022-01-28T07:00:55Z"
+ templateScope: local/workflow-template-whalesay-template-1
+ type: StepGroup
+ workflow-template-whalesay-template-1-2377035854:
+ boundaryID: workflow-template-whalesay-template-1-1438125631
+ children:
+ - workflow-template-whalesay-template-1-79192944
+ displayName: '[1]'
+ finishedAt: "2022-01-28T07:01:04Z"
+ id: workflow-template-whalesay-template-1-2377035854
+ name: workflow-template-whalesay-template-1[0].step-1[1]
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 2
+ memory: 0
+ startedAt: "2022-01-28T07:01:00Z"
+ templateScope: namespaced/workflow-template-whalesay-template
+ type: StepGroup
+ workflow-template-whalesay-template-1-2715724931:
+ boundaryID: workflow-template-whalesay-template-1-1438125631
+ children:
+ - workflow-template-whalesay-template-1-3456567280
+ - workflow-template-whalesay-template-1-1403479850
+ - workflow-template-whalesay-template-1-2377035854
+ displayName: step-1
+ finishedAt: "2022-01-28T07:00:58Z"
+ hostNodeName: k3d-k3s-default-server-0
+ id: workflow-template-whalesay-template-1-2715724931
+ name: workflow-template-whalesay-template-1[0].step-1[0].step-1
+ outputs:
+ artifacts:
+ - name: main-logs
+ s3:
+ key: workflow-template-whalesay-template-1/workflow-template-whalesay-template-1-2715724931/main.log
+ exitCode: "0"
+ phase: Running
+ progress: 1/1
+ resourcesDuration:
+ cpu: 1
+ memory: 0
+ startedAt: "2022-01-28T07:00:55Z"
+ templateName: echo
+ templateScope: namespaced/workflow-template-whalesay-template
+ type: Pod
+ phase: Running
+ progress: 2/2
+ resourcesDuration:
+ cpu: 3
+ memory: 0
+ startedAt: "2022-01-28T07:00:55Z"
+ storedTemplates:
+ namespaced/workflow-template-whalesay-template/echo:
+ container:
+ args:
+ - echo "it was heads"
+ command:
+ - sh
+ - -c
+ image: alpine:3.6
+ name: ""
+ resources: {}
+ inputs: {}
+ metadata: {}
+ name: echo
+ outputs: {}
+ namespaced/workflow-template-whalesay-template/http:
+ http:
+ url: https://raw.githubusercontent.com/argoproj/argo-workflows/4e450e250168e6b4d51a126b784e90b11a0162bc/pkg/apis/workflow/v1alpha1/generated.swagger.json
+ inputs: {}
+ metadata: {}
+ name: http
+ outputs: {}
+ namespaced/workflow-template-whalesay-template/main:
+ inputs: {}
+ metadata: {}
+ name: main
+ outputs: {}
+ steps:
+ - - arguments: {}
+ hooks:
+ exit:
+ arguments: {}
+ expression: steps["step-1"].status == "Running"
+ template: http
+ error:
+ arguments: {}
+ expression: steps["step-1"].status == "Error"
+ template: http
+ name: step-1
+ template: echo
+ - - arguments: {}
+ hooks:
+ exit:
+ arguments: {}
+ expression: steps.step2.status == "Running"
+ template: http
+ error:
+ arguments: {}
+ expression: steps.step2.status == "Error"
+ template: http
+ name: step2
+ template: echo
+
+`)
+ cancel, controller := newController(wf, wfv1.MustUnmarshalWorkflowTemplate(wftWithHook))
+ defer cancel()
+
+ ctx := context.Background()
+ woc := newWorkflowOperationCtx(wf, controller)
+ woc.operate(ctx)
+ for _, node := range woc.wf.Status.Nodes {
+ fmt.Println(node.DisplayName, node.Phase)
+ }
+ assert.NotNil(t, woc.wf.Status.Nodes.FindByDisplayName("step-1.hooks.error"))
+
+}
diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go
index 1051fbdef9b4..892293fbae99 100644
--- a/workflow/controller/operator.go
+++ b/workflow/controller/operator.go
@@ -357,14 +357,6 @@ func (woc *wfOperationCtx) operate(ctx context.Context) {
return
}
- // Reconcile TaskSet and Agent for HTTP templates
- woc.taskSetReconciliation(ctx)
-
- if node == nil || !node.Fulfilled() {
- // node can be nil if a workflow created immediately in a parallelism == 0 state
- return
- }
-
workflowStatus := map[wfv1.NodePhase]wfv1.WorkflowPhase{
wfv1.NodePending: wfv1.WorkflowPending,
wfv1.NodeRunning: wfv1.WorkflowRunning,
@@ -375,10 +367,22 @@ func (woc *wfOperationCtx) operate(ctx context.Context) {
wfv1.NodeOmitted: wfv1.WorkflowSucceeded,
}[node.Phase]
- var onExitNode *wfv1.NodeStatus
- if woc.execWf.Spec.OnExit != "" && woc.GetShutdownStrategy().ShouldExecute(true) {
- woc.globalParams[common.GlobalVarWorkflowStatus] = string(workflowStatus)
+ woc.globalParams[common.GlobalVarWorkflowStatus] = string(workflowStatus)
+
+ err = woc.executeWfLifeCycleHook(ctx, tmplCtx)
+ if err != nil {
+ woc.markNodeError(node.Name, err)
+ }
+ // Reconcile TaskSet and Agent for HTTP templates
+ woc.taskSetReconciliation(ctx)
+
+ if !node.Fulfilled() {
+ // node can be nil if a workflow created immediately in a parallelism == 0 state
+ return
+ }
+ var onExitNode *wfv1.NodeStatus
+ if woc.execWf.Spec.HasExitHook() && woc.GetShutdownStrategy().ShouldExecute(true) {
var failures []failedNodeStatus
for _, node := range woc.wf.Status.Nodes {
if node.Phase == wfv1.NodeFailed || node.Phase == wfv1.NodeError {
@@ -403,7 +407,8 @@ func (woc *wfOperationCtx) operate(ctx context.Context) {
woc.log.Infof("Running OnExit handler: %s", woc.execWf.Spec.OnExit)
onExitNodeName := common.GenerateOnExitNodeName(woc.wf.ObjectMeta.Name)
- onExitNode, err = woc.executeTemplate(ctx, onExitNodeName, &wfv1.WorkflowStep{Template: woc.execWf.Spec.OnExit}, tmplCtx, woc.execWf.Spec.Arguments, &executeTemplateOpts{onExitTemplate: true})
+ exitHook := woc.execWf.Spec.GetExitHook(woc.execWf.Spec.Arguments)
+ onExitNode, err = woc.executeTemplate(ctx, onExitNodeName, &wfv1.WorkflowStep{Template: exitHook.Template, TemplateRef: exitHook.TemplateRef}, tmplCtx, exitHook.Arguments, &executeTemplateOpts{onExitTemplate: true})
if err != nil {
x := fmt.Errorf("error in exit template execution : %w", err)
switch err {
@@ -1820,6 +1825,9 @@ func (woc *wfOperationCtx) executeTemplate(ctx context.Context, nodeName string,
localParams[common.LocalVarRetries] = strconv.Itoa(len(retryParentNode.Children))
processedTmpl, err = common.SubstituteParams(processedTmpl, map[string]string{}, localParams)
+ if errorsutil.IsTransientErr(err) {
+ return node, err
+ }
if err != nil {
return woc.initializeNodeOrMarkError(node, nodeName, templateScope, orgTmpl, opts.boundaryID, err), err
}
diff --git a/workflow/controller/steps.go b/workflow/controller/steps.go
index 609e5d551962..2acfe5434816 100644
--- a/workflow/controller/steps.go
+++ b/workflow/controller/steps.go
@@ -269,6 +269,16 @@ func (woc *wfOperationCtx) executeStepGroup(ctx context.Context, stepGroup []wfv
for _, childNodeID := range node.Children {
childNode := woc.wf.Status.Nodes[childNodeID]
step := nodeSteps[childNode.Name]
+ stepsCtx.scope.addParamToScope(fmt.Sprintf("steps.%s.status", childNode.DisplayName), string(childNode.Phase))
+ hookCompleted, err := woc.executeTmplLifeCycleHook(ctx, woc.globalParams.Merge(stepsCtx.scope.getParameters()), step.Hooks, &childNode, stepsCtx.boundaryID, stepsCtx.tmplCtx, "steps."+step.Name)
+ if err != nil {
+ woc.markNodeError(node.Name, err)
+ }
+ // Check all hooks are completed
+ if !hookCompleted {
+ return node
+ }
+
if !childNode.Fulfilled() {
completed = false
} else if childNode.Completed() {
diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go
index f2f8a623c58e..3ff68b87602c 100644
--- a/workflow/validate/validate.go
+++ b/workflow/validate/validate.go
@@ -1254,7 +1254,6 @@ func (ctx *templateValidationCtx) validateDAG(scope map[string]interface{}, tmpl
if err = verifyNoCycles(tmpl, dagValidationCtx); err != nil {
return err
}
-
err = resolveAllVariables(scope, ctx.globalParams, tmpl.DAG.Target)
if err != nil {
return errors.Errorf(errors.CodeBadRequest, "templates.%s.targets %s", tmpl.Name, err.Error())
@@ -1267,6 +1266,10 @@ func (ctx *templateValidationCtx) validateDAG(scope map[string]interface{}, tmpl
resolvedTmpl := resolvedTemplates[task.Name]
// add all tasks outputs to scope so that a nested DAGs can have outputs
prefix := fmt.Sprintf("tasks.%s", task.Name)
+ // add self status reference for hooks
+ if task.Hooks != nil {
+ scope[fmt.Sprintf("%s.status", prefix)] = true
+ }
ctx.addOutputsToScope(resolvedTmpl, prefix, scope, false, false)
if task.HasExitHook() {
ctx.addOutputsToScope(resolvedTmpl, prefix, scope, false, false)
diff --git a/workflow/validate/validate_dag_test.go b/workflow/validate/validate_dag_test.go
index a640713896d4..b831561fcb73 100644
--- a/workflow/validate/validate_dag_test.go
+++ b/workflow/validate/validate_dag_test.go
@@ -616,7 +616,6 @@ func TestDAGStatusReference(t *testing.T) {
if assert.NotNil(t, err) {
assert.Contains(t, err.Error(), "failed to resolve {{tasks.B.status}}")
}
-
_, err = validate(dagStatusNoFutureReferenceWhenFutureReferenceHasChild)
// Can't reference the status of steps that have not run yet, even if the referenced steps have children
if assert.NotNil(t, err) {