diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index d7f7953a347c..9ab690ffabfc 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -1495,6 +1495,10 @@ "title": "Artifactory contains artifactory artifact location details", "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.ArtifactoryArtifact" }, + "gcs": { + "title": "GCS contains GCS artifact location details", + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.GCSArtifact" + }, "git": { "title": "Git contains git artifact location details", "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.GitArtifact" @@ -1790,6 +1794,33 @@ } } }, + "io.argoproj.workflow.v1alpha1.GCSArtifact": { + "type": "object", + "title": "GCSArtifact is the location of a GCS artifact", + "properties": { + "gCSBucket": { + "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.GCSBucket" + }, + "key": { + "type": "string", + "title": "Key is the path in the bucket where the artifact resides" + } + } + }, + "io.argoproj.workflow.v1alpha1.GCSBucket": { + "type": "object", + "title": "GCSBucket contains the access information for interfacring with a GCS bucket", + "properties": { + "bucket": { + "type": "string", + "title": "Bucket is the name of the bucket" + }, + "serviceAccountKeySecret": { + "title": "ServiceAccountKeySecret is the secret selector to the bucket's service account key", + "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector" + } + } + }, "io.argoproj.workflow.v1alpha1.Gauge": { "type": "object", "title": "Gauge is a Gauge prometheus metric", diff --git a/config/config.go b/config/config.go index d2a76d3d3e7c..c91763bb7cb0 100644 --- a/config/config.go +++ b/config/config.go @@ -116,6 +116,8 @@ type ArtifactRepository struct { HDFS *HDFSArtifactRepository `json:"hdfs,omitempty"` // OSS stores artifact in a OSS-compliant object store OSS *OSSArtifactRepository `json:"oss,omitempty"` + // GCS stores artifact in a GCS object store + GCS *GCSArtifactRepository `json:"gcs,omitempty"` } func (a *ArtifactRepository) IsArchiveLogs() bool { @@ -184,6 +186,14 @@ type OSSArtifactRepository struct { KeyFormat string `json:"keyFormat,omitempty"` } +// GCSArtifactRepository defines the controller configuration for a GCS artifact repository +type GCSArtifactRepository struct { + wfv1.GCSBucket `json:",inline"` + + // KeyFormat is defines the format of how to store keys. Can reference workflow variables + KeyFormat string `json:"keyFormat,omitempty"` +} + // ArtifactoryArtifactRepository defines the controller configuration for an artifactory artifact repository type ArtifactoryArtifactRepository struct { wfv1.ArtifactoryAuth `json:",inline"` diff --git a/docs/configure-artifact-repository.md b/docs/configure-artifact-repository.md index de3ae009c557..3f17eca4aeea 100644 --- a/docs/configure-artifact-repository.md +++ b/docs/configure-artifact-repository.md @@ -1,8 +1,9 @@ # Configuring Your Artifact Repository -To run Argo workflows that use artifacts, you must configure and use an artifact repository. -Argo supports any S3 compatible artifact repository such as AWS, GCS and Minio. -This section shows how to configure the artifact repository. Subsequent sections will show how to use it. +To run Argo workflows that use artifacts, you must configure and use an artifact +repository. Argo supports any S3 compatible artifact repository such as AWS, GCS +and Minio. This section shows how to configure the artifact repository. +Subsequent sections will show how to use it. ## Configuring Minio @@ -13,27 +14,35 @@ $ helm repo update $ helm install argo-artifacts stable/minio --set service.type=LoadBalancer --set fullnameOverride=argo-artifacts ``` -Login to the Minio UI using a web browser (port 9000) after obtaining the external IP using `kubectl`. +Login to the Minio UI using a web browser (port 9000) after obtaining the +external IP using `kubectl`. + ``` $ kubectl get service argo-artifacts ``` On Minikube: + ``` $ minikube service --url argo-artifacts ``` -NOTE: When minio is installed via Helm, it uses the following hard-wired default credentials, -which you will use to login to the UI: -* AccessKey: AKIAIOSFODNN7EXAMPLE -* SecretKey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY +NOTE: When minio is installed via Helm, it uses the following hard-wired default +credentials, which you will use to login to the UI: -Create a bucket named `my-bucket` from the Minio UI. +- AccessKey: AKIAIOSFODNN7EXAMPLE +- SecretKey: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY +Create a bucket named `my-bucket` from the Minio UI. ## Configuring AWS S3 -Create your bucket and access keys for the bucket. AWS access keys have the same permissions as the user they are associated with. In particular, you cannot create access keys with reduced scope. If you want to limit the permissions for an access key, you will need to create a user with just the permissions you want to associate with the access key. Otherwise, you can just create an access key using your existing user account. +Create your bucket and access keys for the bucket. AWS access keys have the same +permissions as the user they are associated with. In particular, you cannot +create access keys with reduced scope. If you want to limit the permissions for +an access key, you will need to create a user with just the permissions you want +to associate with the access key. Otherwise, you can just create an access key +using your existing user account. ``` $ export mybucket=bucket249 @@ -58,8 +67,9 @@ $ aws iam put-user-policy --user-name $mybucket-user --policy-name $mybucket-pol $ aws iam create-access-key --user-name $mybucket-user > access-key.json ``` - -NOTE: if you want argo to figure out which region your buckets belong in, you must additionally set the following statement policy. Otherwise, you must specify a bucket region in your workflow configuration. +NOTE: if you want argo to figure out which region your buckets belong in, you +must additionally set the following statement policy. Otherwise, you must +specify a bucket region in your workflow configuration. ``` ... @@ -74,38 +84,117 @@ NOTE: if you want argo to figure out which region your buckets belong in, you mu ``` ## Configuring GCS (Google Cloud Storage) -Create a bucket from the GCP Console (https://console.cloud.google.com/storage/browser). -Enable S3 compatible access and create an access key. -Note that S3 compatible access is on a per project rather than per bucket basis. -- Navigate to Storage > Settings (https://console.cloud.google.com/storage/settings). +Create a bucket from the GCP Console +(https://console.cloud.google.com/storage/browser). + +There are 2 ways to configure a Google Cloud Storage. + +### Through Native GCS APIs + +- Create and download a Google Cloud service account key. +- Create a kubernetes secret to store the key. +- Configure `gcs` artifact as following in the yaml. + +```yaml +artifacts: + - name: message + path: /tmp/message + gcs: + bucket: my-bucket-name + key: path/in/bucket + # serviceAccountKeySecret is a secret selector. + # It references the k8s secret named 'my-gcs-credentials'. + # This secret is expected to have have the key 'serviceAccountKey', + # containing the base64 encoded credentials + # to the bucket. + # + # If it's running on GKE and Workload Identity is used, + # serviceAccountKeySecret is not needed. + serviceAccountKeySecret: + name: my-gcs-credentials + key: serviceAccountKey +``` + +If it's a GEK cluster, and Workload Identity is configured, there's no need to +create the Service Account key and store it as a K8s secret, +`serviceAccountKeySecret` is also not needed in this case. Please follow the +link to configure Workload Identity +(https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity). + +### Use S3 APIs + +Enable S3 compatible access and create an access key. Note that S3 compatible +access is on a per project rather than per bucket basis. + +- Navigate to Storage > Settings + (https://console.cloud.google.com/storage/settings). - Enable interoperability access if needed. - Create a new key if needed. +- Confiture `s3` artifact as following exmaple. + +```yaml +artifacts: + - name: my-output-artifact + path: /my-ouput-artifact + s3: + endpoint: storage.googleapis.com + bucket: my-gcs-bucket-name + # NOTE that all output artifacts are automatically tarred and + # gzipped before saving. So as a best practice, .tgz or .tar.gz + # should be incorporated into the key name so the resulting file + # has an accurate file extension. + key: path/in/bucket/my-output-artifact.tgz + accessKeySecret: + name: my-gcs-s3-credentials + key: accessKey + secretKeySecret: + name: my-gcs-s3-credentials + key: secretKey +``` # Configure the Default Artifact Repository -In order for Argo to use your artifact repository, you must configure it as the default repository. -Edit the workflow-controller config map with the correct endpoint and access/secret keys for your repository. +In order for Argo to use your artifact repository, you can configure it as the +default repository. Edit the workflow-controller config map with the correct +endpoint and access/secret keys for your repository. + +## S3 compatible artifact repository bucket (such as AWS, GCS and Minio) Use the `endpoint` corresponding to your S3 provider: + - AWS: s3.amazonaws.com - GCS: storage.googleapis.com - Minio: my-minio-endpoint.default:9000 -The `key` is name of the object in the `bucket` The `accessKeySecret` and `secretKeySecret` are secret selectors that reference the specified kubernetes secret. The secret is expected to have the keys 'accessKey' and 'secretKey', containing the base64 encoded credentials to the bucket. +The `key` is name of the object in the `bucket` The `accessKeySecret` and +`secretKeySecret` are secret selectors that reference the specified kubernetes +secret. The secret is expected to have the keys 'accessKey' and 'secretKey', +containing the base64 encoded credentials to the bucket. -For AWS, the `accessKeySecret` and `secretKeySecret` correspond to AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY respectively. +For AWS, the `accessKeySecret` and `secretKeySecret` correspond to +AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY respectively. -EC2 provides a metadata API via which applications using the AWS SDK may assume IAM roles associated with the instance. If you are running argo on EC2 and the instance role allows access to your S3 bucket, you can configure the workflow step pods to assume the role. To do so, simply omit the `accessKeySecret` and `secretKeySecret` fields. +EC2 provides a metadata API via which applications using the AWS SDK may assume +IAM roles associated with the instance. If you are running argo on EC2 and the +instance role allows access to your S3 bucket, you can configure the workflow +step pods to assume the role. To do so, simply omit the `accessKeySecret` and +`secretKeySecret` fields. -For GCS, the `accessKeySecret` and `secretKeySecret` for S3 compatible access can be obtained from the GCP Console. Note that S3 compatible access is on a per project rather than per bucket basis. -- Navigate to Storage > Settings (https://console.cloud.google.com/storage/settings). +For GCS, the `accessKeySecret` and `secretKeySecret` for S3 compatible access +can be obtained from the GCP Console. Note that S3 compatible access is on a per +project rather than per bucket basis. + +- Navigate to Storage > Settings + (https://console.cloud.google.com/storage/settings). - Enable interoperability access if needed. - Create a new key if needed. -For Minio, the `accessKeySecret` and `secretKeySecret` naturally correspond the AccessKey and SecretKey. +For Minio, the `accessKeySecret` and `secretKeySecret` naturally correspond the +AccessKey and SecretKey. Example: + ``` $ kubectl edit configmap workflow-controller-configmap -n argo # assumes argo was installed in the argo namespace ... @@ -124,13 +213,40 @@ data: key: secretkey useSDKCreds: true #tells argo to use AWS SDK's default provider chain, enable for things like IRSA support ``` -The secrets are retrieved from the namespace you use to run your workflows. Note that you can specify a `keyPrefix`. + +The secrets are retrieved from the namespace you use to run your workflows. Note +that you can specify a `keyPrefix`. + +## Google Cloud Storage (GCS) + +Argo also can use native GCS APIs to access a Google Cloud Storage bucket. + +`serviceAccountKeySecret` refereces to a k8 secret which stores a Google Cloud +service account key to access the bucket. + +Example: + +``` +$ kubectl edit configmap workflow-controller-configmap -n argo # assumes argo was installed in the argo namespace +... +data: + config: | + artifactRepository: + gcs: + bucket: my-bucket + keyFormat: prefix/in/bucket #optional, it could reference workflow variables, such as "{{workflow.name}}/{{pod.name}}" + serviceAccountKeySecret: + name: my-gcs-credentials + key: serviceAccountKey +``` # Accessing Non-Default Artifact Repositories -This section shows how to access artifacts from non-default artifact repositories. +This section shows how to access artifacts from non-default artifact +repositories. -The `endpoint`, `accessKeySecret` and `secretKeySecret` are the same as for configuring the default artifact repository described previously. +The `endpoint`, `accessKeySecret` and `secretKeySecret` are the same as for +configuring the default artifact repository described previously. ``` templates: diff --git a/examples/README.md b/examples/README.md index f5bcf7494a11..d06252c1acf4 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1196,7 +1196,7 @@ In the above example, we create a sidecar container that runs nginx as a simple ## Hardwired Artifacts -With Argo, you can use any container image that you like to generate any kind of artifact. In practice, however, we find certain types of artifacts are very common, so there is built-in support for git, http, and s3 artifacts. +With Argo, you can use any container image that you like to generate any kind of artifact. In practice, however, we find certain types of artifacts are very common, so there is built-in support for git, http, gcs and s3 artifacts. ```yaml apiVersion: argoproj.io/v1alpha1 @@ -1222,7 +1222,7 @@ spec: mode: 0755 http: url: https://storage.googleapis.com/kubernetes-release/release/v1.8.0/bin/linux/amd64/kubectl - # Copy an s3 bucket and place it at /s3 + # Copy an s3 compatible artifact repository bucket (such as AWS, GCS and Minio) and place it at /s3 - name: objects path: /s3 s3: diff --git a/examples/input-artifact-gcs.yaml b/examples/input-artifact-gcs.yaml new file mode 100644 index 000000000000..d6f13fd87b7f --- /dev/null +++ b/examples/input-artifact-gcs.yaml @@ -0,0 +1,38 @@ +# This example demonstrates the loading of a hard-wired input artifact from a GCP storage. +# +# It uses a GCP Service Account Key stored as a regular Kubernetes secret, to access GCP storage. +# To create the secret required for this example, first run the following command: +# +# $ kubectl create secret generic my-gcs-credentials --from-file=serviceAccountKey= +# +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: input-artifact-gcs- +spec: + entrypoint: input-artifact-gcs-example + templates: + - name: input-artifact-gcs-example + inputs: + artifacts: + - name: my-art + path: /my-artifact + gcs: + bucket: my-bucket-name + # key could be either a file or a directory. + key: path/in/bucket + # serviceAccountKeySecret is a secret selector. + # It references the k8s secret named 'my-gcs-credentials'. + # This secret is expected to have have the key 'serviceAccountKey', + # containing the base64 encoded Google Cloud Service Account Key (json) + # to the bucket. + # + # If it's running on GKE, and Workload Identity is used, + # serviceAccountKeySecret is not needed. + serviceAccountKeySecret: + name: my-gcs-credentials + key: serviceAccountKey + container: + image: debian:latest + command: [sh, -c] + args: ["ls -l /my-artifact"] diff --git a/go.mod b/go.mod index d6da1e4f824e..4176846998b6 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,8 @@ module github.com/argoproj/argo go 1.13 require ( - cloud.google.com/go v0.51.0 // indirect + cloud.google.com/go v0.55.0 // indirect + cloud.google.com/go/storage v1.6.0 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible github.com/ajg/form v1.5.1 // indirect github.com/aliyun/aliyun-oss-go-sdk v2.0.6+incompatible @@ -73,12 +74,12 @@ require ( github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect github.com/yudai/pp v2.0.1+incompatible // indirect golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d - golang.org/x/net v0.0.0-20200226121028-0de0cce0169b - golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect - golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 // indirect - golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect - google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb - google.golang.org/grpc v1.26.0 + golang.org/x/net v0.0.0-20200301022130-244492dfa37a + golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d + golang.org/x/tools v0.0.0-20200323210725-ef1313dc6d0a // indirect + google.golang.org/api v0.20.0 + google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24 + google.golang.org/grpc v1.28.0 gopkg.in/gavv/httpexpect.v2 v2.0.0 gopkg.in/ini.v1 v1.52.0 // indirect gopkg.in/jcmturner/goidentity.v2 v2.0.0 // indirect diff --git a/go.sum b/go.sum index 5de87c1a15ae..7642b5fcec37 100644 --- a/go.sum +++ b/go.sum @@ -5,12 +5,30 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM= -cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.55.0 h1:eoz/lYxKSL4CNAiaUJ0ZfD1J3bfMYbU5B3rwM1C1EIU= +cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= +cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1 h1:W9tAK3E57P75u0XLLR82LZyw8VpAnhmyTOxW9qzmyj8= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0 h1:Lpy6hKgdcl7a3WGSfJIFmxmcdjSpP6OmBEfcOv1Y680= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-autorest v11.1.2+incompatible h1:viZ3tV5l4gE2Sw0xrasFHytCGtzYCrT+um/rrSQ1BfA= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -58,6 +76,7 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/colinmarc/hdfs v1.1.4-0.20180805212432-9746310a4d31 h1:ow7T77012NSZVW0uOWoQxz3yj9fHKYeZ4QmNrMtWMbM= github.com/colinmarc/hdfs v1.1.4-0.20180805212432-9746310a4d31/go.mod h1:vSBumefK4HA5uiRSwNP+3ofgrEoScpCS2MMWcWXEuQ4= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -83,7 +102,9 @@ github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= @@ -101,7 +122,9 @@ github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-ini/ini v1.51.1 h1:/QG3cj23k5V8mOl4JnNzUNhc1kr/jzMiNsNuWKcx8gM= github.com/go-ini/ini v1.51.1/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -148,15 +171,20 @@ github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -166,20 +194,26 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= @@ -229,6 +263,7 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -392,9 +427,13 @@ github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3Ifn github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= github.com/yudai/pp v2.0.1+incompatible h1:Q4//iY4pNF6yPLZIigmvcl7k/bPgrcTPIFIcmawg5bI= github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -415,7 +454,13 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299 h1:zQpM52jfKHG6II1ISZY1ZcpygvuSFZpLwfluuF89XOg= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -424,13 +469,21 @@ golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -452,8 +505,13 @@ golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -468,6 +526,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -486,12 +546,19 @@ golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d h1:62ap6LNOjDU6uGmKXHJbSfciMoV+FeI1sRXx/pLDL44= +golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -523,18 +590,42 @@ golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDq golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4 h1:Toz2IK7k8rbltAXwNAxKcn9OzqyNfMUhUNjz3sL0NMk= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200323210725-ef1313dc6d0a h1:QpsrlnR31DN2tCItRzamUXN4oAe3U00ru8f0ik9HSYI= +golang.org/x/tools v0.0.0-20200323210725-ef1313dc6d0a/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -550,15 +641,30 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb h1:ADPHZzpzM4tk4V4S5cnCrr5SwzvlrPRmqqCuJDB8UTs= google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24 h1:IGPykv426z7LZSVPlaPufOyphngM4at5uZ7x5alaFvE= +google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -610,6 +716,8 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.0.0-20191004120003-3a12735a829a/go.mod h1:ceHJE/vDjU8jKnRV6Vqn/+vyZmC6NvOluInN+RhQkIs= k8s.io/api v0.0.0-20191219150132-17cfeff5d095 h1:FrhAejQ5P6ZoV9nl5X9sqSNYd13yKAHEDP0fBnklKFw= k8s.io/api v0.0.0-20191219150132-17cfeff5d095/go.mod h1:VTIBWh+oVNX3+w6a85XIJE6jGsm0GCZKZmRQ6cdjfyA= @@ -634,6 +742,8 @@ k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3 k8s.io/utils v0.0.0-20191218082557-f07c713de883 h1:TA8t8OLS8m3/0dtTckekO0pCQ7qMnD19fsZTQEgCSKQ= k8s.io/utils v0.0.0-20191218082557-f07c713de883/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/pkg/apiclient/cronworkflow/cron-workflow.swagger.json b/pkg/apiclient/cronworkflow/cron-workflow.swagger.json index bd2d41b7c0d8..e49ffd9016bc 100644 --- a/pkg/apiclient/cronworkflow/cron-workflow.swagger.json +++ b/pkg/apiclient/cronworkflow/cron-workflow.swagger.json @@ -457,6 +457,10 @@ "oss": { "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.OSSArtifact", "title": "OSS contains OSS artifact location details" + }, + "gcs": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact", + "title": "GCS contains GCS artifact location details" } }, "description": "ArtifactLocation describes a location for a single or multiple artifacts.\nIt is used as single artifact in the context of inputs/outputs (e.g. outputs.artifacts.artname).\nIt is also used to describe the location of multiple artifacts such as the archive location\nof a single workflow step, which the executor will use as a default location to store its files." @@ -719,6 +723,33 @@ }, "description": "ExecutorConfig holds configurations of an executor container." }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact": { + "type": "object", + "properties": { + "gCSBucket": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket" + }, + "key": { + "type": "string", + "title": "Key is the path in the bucket where the artifact resides" + } + }, + "title": "GCSArtifact is the location of a GCS artifact" + }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket": { + "type": "object", + "properties": { + "bucket": { + "type": "string", + "title": "Bucket is the name of the bucket" + }, + "serviceAccountKeySecret": { + "$ref": "#/definitions/k8s.io.api.core.v1.SecretKeySelector", + "title": "ServiceAccountKeySecret is the secret selector to the bucket's service account key" + } + }, + "title": "GCSBucket contains the access information for interfacring with a GCS bucket" + }, "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Gauge": { "type": "object", "properties": { diff --git a/pkg/apiclient/workflow/workflow.swagger.json b/pkg/apiclient/workflow/workflow.swagger.json index 5a24ec2ada2d..f57bc51dedfc 100644 --- a/pkg/apiclient/workflow/workflow.swagger.json +++ b/pkg/apiclient/workflow/workflow.swagger.json @@ -813,6 +813,10 @@ "oss": { "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.OSSArtifact", "title": "OSS contains OSS artifact location details" + }, + "gcs": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact", + "title": "GCS contains GCS artifact location details" } }, "description": "ArtifactLocation describes a location for a single or multiple artifacts.\nIt is used as single artifact in the context of inputs/outputs (e.g. outputs.artifacts.artname).\nIt is also used to describe the location of multiple artifacts such as the archive location\nof a single workflow step, which the executor will use as a default location to store its files." @@ -995,6 +999,33 @@ }, "description": "ExecutorConfig holds configurations of an executor container." }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact": { + "type": "object", + "properties": { + "gCSBucket": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket" + }, + "key": { + "type": "string", + "title": "Key is the path in the bucket where the artifact resides" + } + }, + "title": "GCSArtifact is the location of a GCS artifact" + }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket": { + "type": "object", + "properties": { + "bucket": { + "type": "string", + "title": "Bucket is the name of the bucket" + }, + "serviceAccountKeySecret": { + "$ref": "#/definitions/k8s.io.api.core.v1.SecretKeySelector", + "title": "ServiceAccountKeySecret is the secret selector to the bucket's service account key" + } + }, + "title": "GCSBucket contains the access information for interfacring with a GCS bucket" + }, "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Gauge": { "type": "object", "properties": { diff --git a/pkg/apiclient/workflowarchive/workflow-archive.swagger.json b/pkg/apiclient/workflowarchive/workflow-archive.swagger.json index 2ceb7774ba4a..c0a75a3f0b40 100644 --- a/pkg/apiclient/workflowarchive/workflow-archive.swagger.json +++ b/pkg/apiclient/workflowarchive/workflow-archive.swagger.json @@ -244,6 +244,10 @@ "oss": { "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.OSSArtifact", "title": "OSS contains OSS artifact location details" + }, + "gcs": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact", + "title": "GCS contains GCS artifact location details" } }, "description": "ArtifactLocation describes a location for a single or multiple artifacts.\nIt is used as single artifact in the context of inputs/outputs (e.g. outputs.artifacts.artname).\nIt is also used to describe the location of multiple artifacts such as the archive location\nof a single workflow step, which the executor will use as a default location to store its files." @@ -426,6 +430,33 @@ }, "description": "ExecutorConfig holds configurations of an executor container." }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact": { + "type": "object", + "properties": { + "gCSBucket": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket" + }, + "key": { + "type": "string", + "title": "Key is the path in the bucket where the artifact resides" + } + }, + "title": "GCSArtifact is the location of a GCS artifact" + }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket": { + "type": "object", + "properties": { + "bucket": { + "type": "string", + "title": "Bucket is the name of the bucket" + }, + "serviceAccountKeySecret": { + "$ref": "#/definitions/k8s.io.api.core.v1.SecretKeySelector", + "title": "ServiceAccountKeySecret is the secret selector to the bucket's service account key" + } + }, + "title": "GCSBucket contains the access information for interfacring with a GCS bucket" + }, "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Gauge": { "type": "object", "properties": { diff --git a/pkg/apiclient/workflowtemplate/workflow-template.swagger.json b/pkg/apiclient/workflowtemplate/workflow-template.swagger.json index 539e3ebee061..8a61ccf2c6ba 100644 --- a/pkg/apiclient/workflowtemplate/workflow-template.swagger.json +++ b/pkg/apiclient/workflowtemplate/workflow-template.swagger.json @@ -416,6 +416,10 @@ "oss": { "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.OSSArtifact", "title": "OSS contains OSS artifact location details" + }, + "gcs": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact", + "title": "GCS contains GCS artifact location details" } }, "description": "ArtifactLocation describes a location for a single or multiple artifacts.\nIt is used as single artifact in the context of inputs/outputs (e.g. outputs.artifacts.artname).\nIt is also used to describe the location of multiple artifacts such as the archive location\nof a single workflow step, which the executor will use as a default location to store its files." @@ -587,6 +591,33 @@ }, "description": "ExecutorConfig holds configurations of an executor container." }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact": { + "type": "object", + "properties": { + "gCSBucket": { + "$ref": "#/definitions/github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket" + }, + "key": { + "type": "string", + "title": "Key is the path in the bucket where the artifact resides" + } + }, + "title": "GCSArtifact is the location of a GCS artifact" + }, + "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket": { + "type": "object", + "properties": { + "bucket": { + "type": "string", + "title": "Bucket is the name of the bucket" + }, + "serviceAccountKeySecret": { + "$ref": "#/definitions/k8s.io.api.core.v1.SecretKeySelector", + "title": "ServiceAccountKeySecret is the secret selector to the bucket's service account key" + } + }, + "title": "GCSBucket contains the access information for interfacring with a GCS bucket" + }, "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Gauge": { "type": "object", "properties": { diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 64d7a8ee05b6..9841db9e4dd1 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -539,10 +539,66 @@ func (m *ExecutorConfig) XXX_DiscardUnknown() { var xxx_messageInfo_ExecutorConfig proto.InternalMessageInfo +func (m *GCSArtifact) Reset() { *m = GCSArtifact{} } +func (*GCSArtifact) ProtoMessage() {} +func (*GCSArtifact) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{18} +} +func (m *GCSArtifact) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GCSArtifact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GCSArtifact) XXX_Merge(src proto.Message) { + xxx_messageInfo_GCSArtifact.Merge(m, src) +} +func (m *GCSArtifact) XXX_Size() int { + return m.Size() +} +func (m *GCSArtifact) XXX_DiscardUnknown() { + xxx_messageInfo_GCSArtifact.DiscardUnknown(m) +} + +var xxx_messageInfo_GCSArtifact proto.InternalMessageInfo + +func (m *GCSBucket) Reset() { *m = GCSBucket{} } +func (*GCSBucket) ProtoMessage() {} +func (*GCSBucket) Descriptor() ([]byte, []int) { + return fileDescriptor_c23edafa7e7ea072, []int{19} +} +func (m *GCSBucket) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GCSBucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *GCSBucket) XXX_Merge(src proto.Message) { + xxx_messageInfo_GCSBucket.Merge(m, src) +} +func (m *GCSBucket) XXX_Size() int { + return m.Size() +} +func (m *GCSBucket) XXX_DiscardUnknown() { + xxx_messageInfo_GCSBucket.DiscardUnknown(m) +} + +var xxx_messageInfo_GCSBucket proto.InternalMessageInfo + func (m *Gauge) Reset() { *m = Gauge{} } func (*Gauge) ProtoMessage() {} func (*Gauge) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{18} + return fileDescriptor_c23edafa7e7ea072, []int{20} } func (m *Gauge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -570,7 +626,7 @@ var xxx_messageInfo_Gauge proto.InternalMessageInfo func (m *GitArtifact) Reset() { *m = GitArtifact{} } func (*GitArtifact) ProtoMessage() {} func (*GitArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{19} + return fileDescriptor_c23edafa7e7ea072, []int{21} } func (m *GitArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -598,7 +654,7 @@ var xxx_messageInfo_GitArtifact proto.InternalMessageInfo func (m *HDFSArtifact) Reset() { *m = HDFSArtifact{} } func (*HDFSArtifact) ProtoMessage() {} func (*HDFSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{20} + return fileDescriptor_c23edafa7e7ea072, []int{22} } func (m *HDFSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -626,7 +682,7 @@ var xxx_messageInfo_HDFSArtifact proto.InternalMessageInfo func (m *HDFSConfig) Reset() { *m = HDFSConfig{} } func (*HDFSConfig) ProtoMessage() {} func (*HDFSConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{21} + return fileDescriptor_c23edafa7e7ea072, []int{23} } func (m *HDFSConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -654,7 +710,7 @@ var xxx_messageInfo_HDFSConfig proto.InternalMessageInfo func (m *HDFSKrbConfig) Reset() { *m = HDFSKrbConfig{} } func (*HDFSKrbConfig) ProtoMessage() {} func (*HDFSKrbConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{22} + return fileDescriptor_c23edafa7e7ea072, []int{24} } func (m *HDFSKrbConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -682,7 +738,7 @@ var xxx_messageInfo_HDFSKrbConfig proto.InternalMessageInfo func (m *HTTPArtifact) Reset() { *m = HTTPArtifact{} } func (*HTTPArtifact) ProtoMessage() {} func (*HTTPArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{23} + return fileDescriptor_c23edafa7e7ea072, []int{25} } func (m *HTTPArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -710,7 +766,7 @@ var xxx_messageInfo_HTTPArtifact proto.InternalMessageInfo func (m *Histogram) Reset() { *m = Histogram{} } func (*Histogram) ProtoMessage() {} func (*Histogram) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{24} + return fileDescriptor_c23edafa7e7ea072, []int{26} } func (m *Histogram) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -738,7 +794,7 @@ var xxx_messageInfo_Histogram proto.InternalMessageInfo func (m *Inputs) Reset() { *m = Inputs{} } func (*Inputs) ProtoMessage() {} func (*Inputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{25} + return fileDescriptor_c23edafa7e7ea072, []int{27} } func (m *Inputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -766,7 +822,7 @@ var xxx_messageInfo_Inputs proto.InternalMessageInfo func (m *Item) Reset() { *m = Item{} } func (*Item) ProtoMessage() {} func (*Item) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{26} + return fileDescriptor_c23edafa7e7ea072, []int{28} } func (m *Item) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -794,7 +850,7 @@ var xxx_messageInfo_Item proto.InternalMessageInfo func (m *ItemValue) Reset() { *m = ItemValue{} } func (*ItemValue) ProtoMessage() {} func (*ItemValue) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{27} + return fileDescriptor_c23edafa7e7ea072, []int{29} } func (m *ItemValue) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -822,7 +878,7 @@ var xxx_messageInfo_ItemValue proto.InternalMessageInfo func (m *Link) Reset() { *m = Link{} } func (*Link) ProtoMessage() {} func (*Link) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{28} + return fileDescriptor_c23edafa7e7ea072, []int{30} } func (m *Link) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -850,7 +906,7 @@ var xxx_messageInfo_Link proto.InternalMessageInfo func (m *Metadata) Reset() { *m = Metadata{} } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{29} + return fileDescriptor_c23edafa7e7ea072, []int{31} } func (m *Metadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -878,7 +934,7 @@ var xxx_messageInfo_Metadata proto.InternalMessageInfo func (m *MetricLabel) Reset() { *m = MetricLabel{} } func (*MetricLabel) ProtoMessage() {} func (*MetricLabel) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{30} + return fileDescriptor_c23edafa7e7ea072, []int{32} } func (m *MetricLabel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -906,7 +962,7 @@ var xxx_messageInfo_MetricLabel proto.InternalMessageInfo func (m *Metrics) Reset() { *m = Metrics{} } func (*Metrics) ProtoMessage() {} func (*Metrics) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{31} + return fileDescriptor_c23edafa7e7ea072, []int{33} } func (m *Metrics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -934,7 +990,7 @@ var xxx_messageInfo_Metrics proto.InternalMessageInfo func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} func (*NodeStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{32} + return fileDescriptor_c23edafa7e7ea072, []int{34} } func (m *NodeStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -962,7 +1018,7 @@ var xxx_messageInfo_NodeStatus proto.InternalMessageInfo func (m *NoneStrategy) Reset() { *m = NoneStrategy{} } func (*NoneStrategy) ProtoMessage() {} func (*NoneStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{33} + return fileDescriptor_c23edafa7e7ea072, []int{35} } func (m *NoneStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -990,7 +1046,7 @@ var xxx_messageInfo_NoneStrategy proto.InternalMessageInfo func (m *OSSArtifact) Reset() { *m = OSSArtifact{} } func (*OSSArtifact) ProtoMessage() {} func (*OSSArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{34} + return fileDescriptor_c23edafa7e7ea072, []int{36} } func (m *OSSArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1018,7 +1074,7 @@ var xxx_messageInfo_OSSArtifact proto.InternalMessageInfo func (m *OSSBucket) Reset() { *m = OSSBucket{} } func (*OSSBucket) ProtoMessage() {} func (*OSSBucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{35} + return fileDescriptor_c23edafa7e7ea072, []int{37} } func (m *OSSBucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1046,7 +1102,7 @@ var xxx_messageInfo_OSSBucket proto.InternalMessageInfo func (m *Outputs) Reset() { *m = Outputs{} } func (*Outputs) ProtoMessage() {} func (*Outputs) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{36} + return fileDescriptor_c23edafa7e7ea072, []int{38} } func (m *Outputs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1074,7 +1130,7 @@ var xxx_messageInfo_Outputs proto.InternalMessageInfo func (m *ParallelSteps) Reset() { *m = ParallelSteps{} } func (*ParallelSteps) ProtoMessage() {} func (*ParallelSteps) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{37} + return fileDescriptor_c23edafa7e7ea072, []int{39} } func (m *ParallelSteps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1102,7 +1158,7 @@ var xxx_messageInfo_ParallelSteps proto.InternalMessageInfo func (m *Parameter) Reset() { *m = Parameter{} } func (*Parameter) ProtoMessage() {} func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{38} + return fileDescriptor_c23edafa7e7ea072, []int{40} } func (m *Parameter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1130,7 +1186,7 @@ var xxx_messageInfo_Parameter proto.InternalMessageInfo func (m *PodGC) Reset() { *m = PodGC{} } func (*PodGC) ProtoMessage() {} func (*PodGC) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{39} + return fileDescriptor_c23edafa7e7ea072, []int{41} } func (m *PodGC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1158,7 +1214,7 @@ var xxx_messageInfo_PodGC proto.InternalMessageInfo func (m *Prometheus) Reset() { *m = Prometheus{} } func (*Prometheus) ProtoMessage() {} func (*Prometheus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{40} + return fileDescriptor_c23edafa7e7ea072, []int{42} } func (m *Prometheus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1186,7 +1242,7 @@ var xxx_messageInfo_Prometheus proto.InternalMessageInfo func (m *RawArtifact) Reset() { *m = RawArtifact{} } func (*RawArtifact) ProtoMessage() {} func (*RawArtifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{41} + return fileDescriptor_c23edafa7e7ea072, []int{43} } func (m *RawArtifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1214,7 +1270,7 @@ var xxx_messageInfo_RawArtifact proto.InternalMessageInfo func (m *ResourceTemplate) Reset() { *m = ResourceTemplate{} } func (*ResourceTemplate) ProtoMessage() {} func (*ResourceTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{42} + return fileDescriptor_c23edafa7e7ea072, []int{44} } func (m *ResourceTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1242,7 +1298,7 @@ var xxx_messageInfo_ResourceTemplate proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{43} + return fileDescriptor_c23edafa7e7ea072, []int{45} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1270,7 +1326,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *S3Artifact) Reset() { *m = S3Artifact{} } func (*S3Artifact) ProtoMessage() {} func (*S3Artifact) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{44} + return fileDescriptor_c23edafa7e7ea072, []int{46} } func (m *S3Artifact) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1298,7 +1354,7 @@ var xxx_messageInfo_S3Artifact proto.InternalMessageInfo func (m *S3Bucket) Reset() { *m = S3Bucket{} } func (*S3Bucket) ProtoMessage() {} func (*S3Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{45} + return fileDescriptor_c23edafa7e7ea072, []int{47} } func (m *S3Bucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1326,7 +1382,7 @@ var xxx_messageInfo_S3Bucket proto.InternalMessageInfo func (m *ScriptTemplate) Reset() { *m = ScriptTemplate{} } func (*ScriptTemplate) ProtoMessage() {} func (*ScriptTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{46} + return fileDescriptor_c23edafa7e7ea072, []int{48} } func (m *ScriptTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1354,7 +1410,7 @@ var xxx_messageInfo_ScriptTemplate proto.InternalMessageInfo func (m *Sequence) Reset() { *m = Sequence{} } func (*Sequence) ProtoMessage() {} func (*Sequence) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{47} + return fileDescriptor_c23edafa7e7ea072, []int{49} } func (m *Sequence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1382,7 +1438,7 @@ var xxx_messageInfo_Sequence proto.InternalMessageInfo func (m *SuspendTemplate) Reset() { *m = SuspendTemplate{} } func (*SuspendTemplate) ProtoMessage() {} func (*SuspendTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{48} + return fileDescriptor_c23edafa7e7ea072, []int{50} } func (m *SuspendTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1410,7 +1466,7 @@ var xxx_messageInfo_SuspendTemplate proto.InternalMessageInfo func (m *TTLStrategy) Reset() { *m = TTLStrategy{} } func (*TTLStrategy) ProtoMessage() {} func (*TTLStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{49} + return fileDescriptor_c23edafa7e7ea072, []int{51} } func (m *TTLStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1438,7 +1494,7 @@ var xxx_messageInfo_TTLStrategy proto.InternalMessageInfo func (m *TarStrategy) Reset() { *m = TarStrategy{} } func (*TarStrategy) ProtoMessage() {} func (*TarStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{50} + return fileDescriptor_c23edafa7e7ea072, []int{52} } func (m *TarStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1466,7 +1522,7 @@ var xxx_messageInfo_TarStrategy proto.InternalMessageInfo func (m *Template) Reset() { *m = Template{} } func (*Template) ProtoMessage() {} func (*Template) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{51} + return fileDescriptor_c23edafa7e7ea072, []int{53} } func (m *Template) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1494,7 +1550,7 @@ var xxx_messageInfo_Template proto.InternalMessageInfo func (m *TemplateRef) Reset() { *m = TemplateRef{} } func (*TemplateRef) ProtoMessage() {} func (*TemplateRef) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{52} + return fileDescriptor_c23edafa7e7ea072, []int{54} } func (m *TemplateRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1522,7 +1578,7 @@ var xxx_messageInfo_TemplateRef proto.InternalMessageInfo func (m *UserContainer) Reset() { *m = UserContainer{} } func (*UserContainer) ProtoMessage() {} func (*UserContainer) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{53} + return fileDescriptor_c23edafa7e7ea072, []int{55} } func (m *UserContainer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1550,7 +1606,7 @@ var xxx_messageInfo_UserContainer proto.InternalMessageInfo func (m *ValueFrom) Reset() { *m = ValueFrom{} } func (*ValueFrom) ProtoMessage() {} func (*ValueFrom) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{54} + return fileDescriptor_c23edafa7e7ea072, []int{56} } func (m *ValueFrom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1578,7 +1634,7 @@ var xxx_messageInfo_ValueFrom proto.InternalMessageInfo func (m *Workflow) Reset() { *m = Workflow{} } func (*Workflow) ProtoMessage() {} func (*Workflow) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{55} + return fileDescriptor_c23edafa7e7ea072, []int{57} } func (m *Workflow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1606,7 +1662,7 @@ var xxx_messageInfo_Workflow proto.InternalMessageInfo func (m *WorkflowList) Reset() { *m = WorkflowList{} } func (*WorkflowList) ProtoMessage() {} func (*WorkflowList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{56} + return fileDescriptor_c23edafa7e7ea072, []int{58} } func (m *WorkflowList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1634,7 +1690,7 @@ var xxx_messageInfo_WorkflowList proto.InternalMessageInfo func (m *WorkflowSpec) Reset() { *m = WorkflowSpec{} } func (*WorkflowSpec) ProtoMessage() {} func (*WorkflowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{57} + return fileDescriptor_c23edafa7e7ea072, []int{59} } func (m *WorkflowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1662,7 +1718,7 @@ var xxx_messageInfo_WorkflowSpec proto.InternalMessageInfo func (m *WorkflowStatus) Reset() { *m = WorkflowStatus{} } func (*WorkflowStatus) ProtoMessage() {} func (*WorkflowStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{58} + return fileDescriptor_c23edafa7e7ea072, []int{60} } func (m *WorkflowStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1690,7 +1746,7 @@ var xxx_messageInfo_WorkflowStatus proto.InternalMessageInfo func (m *WorkflowStep) Reset() { *m = WorkflowStep{} } func (*WorkflowStep) ProtoMessage() {} func (*WorkflowStep) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{59} + return fileDescriptor_c23edafa7e7ea072, []int{61} } func (m *WorkflowStep) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1718,7 +1774,7 @@ var xxx_messageInfo_WorkflowStep proto.InternalMessageInfo func (m *WorkflowTemplate) Reset() { *m = WorkflowTemplate{} } func (*WorkflowTemplate) ProtoMessage() {} func (*WorkflowTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{60} + return fileDescriptor_c23edafa7e7ea072, []int{62} } func (m *WorkflowTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1746,7 +1802,7 @@ var xxx_messageInfo_WorkflowTemplate proto.InternalMessageInfo func (m *WorkflowTemplateList) Reset() { *m = WorkflowTemplateList{} } func (*WorkflowTemplateList) ProtoMessage() {} func (*WorkflowTemplateList) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{61} + return fileDescriptor_c23edafa7e7ea072, []int{63} } func (m *WorkflowTemplateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1774,7 +1830,7 @@ var xxx_messageInfo_WorkflowTemplateList proto.InternalMessageInfo func (m *WorkflowTemplateSpec) Reset() { *m = WorkflowTemplateSpec{} } func (*WorkflowTemplateSpec) ProtoMessage() {} func (*WorkflowTemplateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_c23edafa7e7ea072, []int{62} + return fileDescriptor_c23edafa7e7ea072, []int{64} } func (m *WorkflowTemplateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1818,6 +1874,8 @@ func init() { proto.RegisterType((*DAGTask)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTask") proto.RegisterType((*DAGTemplate)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.DAGTemplate") proto.RegisterType((*ExecutorConfig)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.ExecutorConfig") + proto.RegisterType((*GCSArtifact)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSArtifact") + proto.RegisterType((*GCSBucket)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GCSBucket") proto.RegisterType((*Gauge)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.Gauge") proto.RegisterType((*GitArtifact)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.GitArtifact") proto.RegisterType((*HDFSArtifact)(nil), "github.com.argoproj.argo.pkg.apis.workflow.v1alpha1.HDFSArtifact") @@ -1880,375 +1938,379 @@ func init() { } var fileDescriptor_c23edafa7e7ea072 = []byte{ - // 5879 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4d, 0x6c, 0x1c, 0xc9, - 0x75, 0xbf, 0x86, 0xe4, 0x0c, 0x67, 0xde, 0x90, 0x12, 0x55, 0xa2, 0xa4, 0x59, 0x5a, 0xcb, 0x91, - 0x7b, 0xff, 0xbb, 0x7f, 0x6d, 0xb2, 0x26, 0xbd, 0x5a, 0x6f, 0xb2, 0xfe, 0xd8, 0x0f, 0x0e, 0x29, - 0x4a, 0xd4, 0x07, 0x49, 0xbf, 0xa1, 0xa4, 0xd8, 0xbb, 0xb0, 0xd3, 0x9c, 0xae, 0x99, 0x69, 0x71, - 0xa6, 0xbb, 0xdd, 0xd5, 0x23, 0x2e, 0xbd, 0x09, 0xe2, 0x18, 0x09, 0x9c, 0x0f, 0x18, 0x88, 0x11, - 0xc0, 0x30, 0x60, 0x04, 0x08, 0x7c, 0x48, 0x2e, 0xc9, 0x31, 0x57, 0x1f, 0x8c, 0x1c, 0x0c, 0x5f, - 0x62, 0xe4, 0x12, 0x23, 0x08, 0x68, 0x2f, 0x83, 0x04, 0x0e, 0x1c, 0xc0, 0x97, 0x00, 0x01, 0x88, - 0x1c, 0x82, 0xfa, 0xe8, 0xea, 0x8f, 0x69, 0x4a, 0x54, 0x0f, 0x25, 0x38, 0xb0, 0x6f, 0xd3, 0xef, - 0xbd, 0xfa, 0xbd, 0xea, 0xea, 0xaa, 0x57, 0xef, 0xbd, 0x7a, 0x35, 0xb0, 0xdc, 0xb1, 0x83, 0xee, - 0x60, 0x7b, 0xa1, 0xe5, 0xf6, 0x17, 0x4d, 0xbf, 0xe3, 0x7a, 0xbe, 0xfb, 0x40, 0xfc, 0x58, 0xf4, - 0x76, 0x3a, 0x8b, 0xa6, 0x67, 0xb3, 0xc5, 0x5d, 0xd7, 0xdf, 0x69, 0xf7, 0xdc, 0xdd, 0xc5, 0x87, - 0xaf, 0x9a, 0x3d, 0xaf, 0x6b, 0xbe, 0xba, 0xd8, 0xa1, 0x0e, 0xf5, 0xcd, 0x80, 0x5a, 0x0b, 0x9e, - 0xef, 0x06, 0x2e, 0x79, 0x2d, 0x02, 0x59, 0x08, 0x41, 0xc4, 0x8f, 0x05, 0x6f, 0xa7, 0xb3, 0xc0, - 0x41, 0x16, 0x42, 0x90, 0x85, 0x10, 0x64, 0xee, 0x63, 0x31, 0xcd, 0x1d, 0x97, 0x2b, 0xe4, 0x58, - 0xdb, 0x83, 0xb6, 0x78, 0x12, 0x0f, 0xe2, 0x97, 0xd4, 0x31, 0x67, 0xec, 0xbc, 0xc1, 0x16, 0x6c, - 0x97, 0x77, 0x69, 0xb1, 0xe5, 0xfa, 0x74, 0xf1, 0xe1, 0x50, 0x3f, 0xe6, 0x5e, 0x8e, 0xc9, 0x78, - 0x6e, 0xcf, 0x6e, 0xed, 0x2d, 0x3e, 0x7c, 0x75, 0x9b, 0x06, 0xc3, 0x5d, 0x9e, 0xfb, 0x44, 0x24, - 0xda, 0x37, 0x5b, 0x5d, 0xdb, 0xa1, 0xfe, 0x5e, 0xf4, 0xca, 0x7d, 0x1a, 0x98, 0x59, 0x0a, 0x16, - 0x8f, 0x6a, 0xe5, 0x0f, 0x9c, 0xc0, 0xee, 0xd3, 0xa1, 0x06, 0xbf, 0xf1, 0xb8, 0x06, 0xac, 0xd5, - 0xa5, 0x7d, 0x33, 0xdd, 0xce, 0xf8, 0x87, 0x02, 0x9c, 0x59, 0xf2, 0x5b, 0x5d, 0xfb, 0x21, 0x6d, - 0x06, 0x9c, 0xd1, 0xd9, 0x23, 0xef, 0xc2, 0x78, 0x60, 0xfa, 0xb5, 0xc2, 0xe5, 0xc2, 0x95, 0xea, - 0xd5, 0x77, 0x16, 0x72, 0x8c, 0xf9, 0xc2, 0x96, 0xe9, 0x87, 0x70, 0x8d, 0xc9, 0x83, 0xfd, 0xfa, - 0xf8, 0x96, 0xe9, 0x23, 0x47, 0x25, 0x5f, 0x84, 0x09, 0xc7, 0x75, 0x68, 0x6d, 0x4c, 0xa0, 0x2f, - 0xe5, 0x42, 0x5f, 0x77, 0x1d, 0xdd, 0xdb, 0x46, 0xf9, 0x60, 0xbf, 0x3e, 0xc1, 0x29, 0x28, 0x80, - 0x8d, 0x9f, 0x17, 0xa0, 0xb2, 0xe4, 0x77, 0x06, 0x7d, 0xea, 0x04, 0x8c, 0xf8, 0x00, 0x9e, 0xe9, - 0x9b, 0x7d, 0x1a, 0x50, 0x9f, 0xd5, 0x0a, 0x97, 0xc7, 0xaf, 0x54, 0xaf, 0xbe, 0x95, 0x4b, 0xe9, - 0x66, 0x08, 0xd3, 0x20, 0xdf, 0xdf, 0xaf, 0x9f, 0x3a, 0xd8, 0xaf, 0x83, 0x26, 0x31, 0x8c, 0x69, - 0x21, 0x0e, 0x54, 0x4c, 0x3f, 0xb0, 0xdb, 0x66, 0x2b, 0x60, 0xb5, 0x31, 0xa1, 0xf2, 0xcd, 0x5c, - 0x2a, 0x97, 0x14, 0x4a, 0xe3, 0xac, 0xd2, 0x58, 0x09, 0x29, 0x0c, 0x23, 0x15, 0xc6, 0xcf, 0xc6, - 0xa1, 0x1c, 0x32, 0xc8, 0x65, 0x98, 0x70, 0xcc, 0x3e, 0x15, 0x5f, 0xaf, 0xd2, 0x98, 0x52, 0x0d, - 0x27, 0xd6, 0xcd, 0x3e, 0x1f, 0x20, 0xb3, 0x4f, 0xb9, 0x84, 0x67, 0x06, 0x5d, 0xf1, 0x05, 0x62, - 0x12, 0x9b, 0x66, 0xd0, 0x45, 0xc1, 0x21, 0x97, 0x60, 0xa2, 0xef, 0x5a, 0xb4, 0x36, 0x7e, 0xb9, - 0x70, 0xa5, 0x28, 0x07, 0xf8, 0x8e, 0x6b, 0x51, 0x14, 0x54, 0xde, 0xbe, 0xed, 0xbb, 0xfd, 0xda, - 0x44, 0xb2, 0xfd, 0xaa, 0xef, 0xf6, 0x51, 0x70, 0xc8, 0x9f, 0x16, 0x60, 0x26, 0xec, 0xde, 0x6d, - 0xb7, 0x65, 0x06, 0xb6, 0xeb, 0xd4, 0x8a, 0xe2, 0x83, 0x5f, 0x1b, 0x69, 0x20, 0x42, 0xb0, 0x46, - 0x4d, 0x69, 0x9d, 0x49, 0x73, 0x70, 0x48, 0x31, 0xb9, 0x0a, 0xd0, 0xe9, 0xb9, 0xdb, 0x66, 0x8f, - 0x8f, 0x41, 0xad, 0x24, 0x7a, 0xad, 0x3f, 0xe1, 0x75, 0xcd, 0xc1, 0x98, 0x14, 0xd9, 0x81, 0x49, - 0x53, 0xae, 0x8a, 0xda, 0xa4, 0xe8, 0xf7, 0x4a, 0xce, 0x7e, 0x27, 0x56, 0x56, 0xa3, 0x7a, 0xb0, - 0x5f, 0x9f, 0x54, 0x44, 0x0c, 0x35, 0x90, 0x57, 0xa0, 0xec, 0x7a, 0xbc, 0xab, 0x66, 0xaf, 0x56, - 0xbe, 0x5c, 0xb8, 0x52, 0x6e, 0xcc, 0xa8, 0xee, 0x95, 0x37, 0x14, 0x1d, 0xb5, 0x84, 0xf1, 0x5f, - 0x45, 0x18, 0x7a, 0x6b, 0xf2, 0x2a, 0x54, 0x15, 0xda, 0x6d, 0xb7, 0xc3, 0xc4, 0xc7, 0x2f, 0x37, - 0xce, 0x1c, 0xec, 0xd7, 0xab, 0x4b, 0x11, 0x19, 0xe3, 0x32, 0xe4, 0x3e, 0x8c, 0xb1, 0xd7, 0xd4, - 0x32, 0x7c, 0x3b, 0xd7, 0xdb, 0x35, 0x5f, 0xd3, 0x13, 0xb4, 0x74, 0xb0, 0x5f, 0x1f, 0x6b, 0xbe, - 0x86, 0x63, 0xec, 0x35, 0x6e, 0x3e, 0x3a, 0x76, 0x20, 0x26, 0x4f, 0x5e, 0xf3, 0x71, 0xdd, 0x0e, - 0x34, 0xb4, 0x30, 0x1f, 0xd7, 0xed, 0x00, 0x39, 0x2a, 0x37, 0x1f, 0xdd, 0x20, 0xf0, 0xc4, 0xe4, - 0xcb, 0x6b, 0x3e, 0x6e, 0x6c, 0x6d, 0x6d, 0x6a, 0x78, 0x31, 0xbb, 0x39, 0x05, 0x05, 0x30, 0xf9, - 0x80, 0x8f, 0xa4, 0xe4, 0xb9, 0xfe, 0x9e, 0x9a, 0xb5, 0x37, 0x46, 0x9a, 0xb5, 0xae, 0xbf, 0xa7, - 0xd5, 0xa9, 0x6f, 0xa2, 0x19, 0x18, 0xd7, 0x26, 0xde, 0xce, 0x6a, 0x33, 0x31, 0x49, 0x73, 0xbf, - 0xdd, 0xca, 0x6a, 0x33, 0xf5, 0x76, 0x2b, 0xab, 0x4d, 0x14, 0xc0, 0xfc, 0xdb, 0xf8, 0xe6, 0xae, - 0x9a, 0xd3, 0xf9, 0xbe, 0x0d, 0x9a, 0xbb, 0xc9, 0x6f, 0x83, 0xe6, 0x2e, 0x72, 0x54, 0x0e, 0xee, - 0x32, 0x26, 0xa6, 0x70, 0x5e, 0xf0, 0x8d, 0x66, 0x33, 0x09, 0xbe, 0xd1, 0x6c, 0x22, 0x47, 0x35, - 0x3a, 0x70, 0x3e, 0xe4, 0x20, 0xf5, 0x5c, 0x66, 0x8b, 0xd1, 0xa3, 0x6d, 0xb2, 0x08, 0x95, 0x96, - 0xeb, 0xb4, 0xed, 0xce, 0x1d, 0xd3, 0x53, 0x56, 0x4f, 0x9b, 0xcb, 0xe5, 0x90, 0x81, 0x91, 0x0c, - 0x79, 0x1e, 0xc6, 0x77, 0xe8, 0x9e, 0x32, 0x7f, 0x55, 0x25, 0x3a, 0x7e, 0x8b, 0xee, 0x21, 0xa7, - 0x1b, 0xdf, 0x2d, 0xc0, 0xb9, 0x8c, 0x2f, 0xc7, 0x9b, 0x0d, 0xfc, 0x9e, 0xd2, 0xa0, 0x9b, 0xdd, - 0xc5, 0xdb, 0xc8, 0xe9, 0xe4, 0x6b, 0x05, 0x38, 0x13, 0xfb, 0x94, 0x4b, 0x03, 0x65, 0x61, 0xf3, - 0x9b, 0x8e, 0x04, 0x56, 0xe3, 0xa2, 0xd2, 0x78, 0x26, 0xc5, 0xc0, 0xb4, 0x56, 0xe3, 0x9f, 0xc4, - 0x96, 0x9e, 0xa0, 0x11, 0x13, 0x4e, 0x0f, 0x18, 0xf5, 0xb9, 0xfd, 0x6f, 0xd2, 0x96, 0x4f, 0x03, - 0xb5, 0xbb, 0xbf, 0xb8, 0x20, 0xfd, 0x06, 0xde, 0x8b, 0x05, 0xee, 0xed, 0x2c, 0x3c, 0x7c, 0x75, - 0x41, 0x4a, 0xdc, 0xa2, 0x7b, 0x4d, 0xda, 0xa3, 0x1c, 0xa3, 0x41, 0x0e, 0xf6, 0xeb, 0xa7, 0xef, - 0x26, 0x00, 0x30, 0x05, 0xc8, 0x55, 0x78, 0x26, 0x63, 0xbb, 0xae, 0x6f, 0x29, 0x15, 0x63, 0x4f, - 0xac, 0x62, 0x33, 0x01, 0x80, 0x29, 0x40, 0xe3, 0x9b, 0x05, 0x98, 0x6c, 0x98, 0xad, 0x1d, 0xb7, - 0xdd, 0xe6, 0x46, 0xd3, 0x1a, 0xf8, 0x72, 0x6b, 0x91, 0xdf, 0x44, 0x1b, 0xcd, 0x15, 0x45, 0x47, - 0x2d, 0x41, 0x5e, 0x82, 0x92, 0x1c, 0x0e, 0xd1, 0xa9, 0x62, 0xe3, 0xb4, 0x92, 0x2d, 0xad, 0x0a, - 0x2a, 0x2a, 0x2e, 0x79, 0x1d, 0xaa, 0x7d, 0xf3, 0xfd, 0x10, 0x40, 0xd8, 0xb0, 0x4a, 0xe3, 0x9c, - 0x12, 0xae, 0xde, 0x89, 0x58, 0x18, 0x97, 0x33, 0xbe, 0x5e, 0x00, 0x3e, 0xd7, 0x2c, 0x5b, 0x28, - 0xfb, 0x02, 0x94, 0x58, 0x60, 0x06, 0x03, 0xa6, 0x3a, 0xb6, 0x1a, 0x2a, 0x6b, 0x0a, 0xea, 0xe1, - 0x7e, 0xfd, 0x58, 0x4e, 0xe1, 0x82, 0x46, 0x94, 0xed, 0x50, 0xa1, 0xf2, 0x0d, 0x38, 0xd8, 0xf3, - 0x68, 0x7a, 0x03, 0xdf, 0xda, 0xf3, 0x28, 0x0a, 0x8e, 0xf1, 0x39, 0x80, 0x65, 0xd7, 0x09, 0x6c, - 0x67, 0x40, 0x37, 0x1c, 0xf2, 0x02, 0x14, 0xa9, 0xef, 0xbb, 0xbe, 0xda, 0x16, 0xa6, 0x55, 0x83, - 0xe2, 0x35, 0x4e, 0x44, 0xc9, 0x93, 0x23, 0x64, 0xf7, 0xa8, 0x25, 0x60, 0xcb, 0xf1, 0x11, 0xe2, - 0x54, 0x54, 0x5c, 0x63, 0x01, 0x26, 0x97, 0xdd, 0x81, 0x13, 0x50, 0x9f, 0xe3, 0x3e, 0x34, 0x7b, - 0x83, 0xd0, 0xd7, 0xd0, 0xb8, 0xf7, 0x38, 0x11, 0x25, 0xcf, 0xf8, 0xc1, 0x18, 0x4c, 0x2d, 0xfb, - 0xae, 0x73, 0x5f, 0xcd, 0x70, 0xf2, 0xdb, 0x50, 0xe6, 0x2f, 0x68, 0x99, 0x81, 0xa9, 0x26, 0xe1, - 0xc7, 0x63, 0x33, 0x44, 0x0f, 0x47, 0xb4, 0x36, 0xb8, 0x34, 0x9f, 0x33, 0x1b, 0xdb, 0x0f, 0x68, - 0x2b, 0xb8, 0x43, 0x03, 0x33, 0xda, 0xbe, 0x23, 0x1a, 0x6a, 0x54, 0xd2, 0x81, 0x09, 0xe6, 0xd1, - 0x96, 0x9a, 0x7f, 0xf9, 0x3c, 0x8e, 0x78, 0x97, 0x9b, 0x1e, 0x6d, 0x45, 0xc3, 0xcc, 0x9f, 0x50, - 0x28, 0x20, 0xae, 0xfe, 0xd0, 0x72, 0xb3, 0xbb, 0x3e, 0xba, 0x2a, 0x01, 0x17, 0x0d, 0x7e, 0xf2, - 0xcb, 0x1b, 0x3f, 0x2a, 0xc0, 0x4c, 0x5c, 0xfc, 0xb6, 0xcd, 0x02, 0xf2, 0xde, 0xd0, 0x80, 0x2e, - 0x1c, 0x6f, 0x40, 0x79, 0x6b, 0x31, 0x9c, 0x7a, 0xe5, 0x84, 0x94, 0xd8, 0x60, 0xb6, 0xa1, 0x68, - 0x07, 0xb4, 0x1f, 0x3a, 0xb2, 0x4b, 0x23, 0xbf, 0x62, 0x34, 0x4f, 0xd6, 0x38, 0x2e, 0x4a, 0x78, - 0xe3, 0x7f, 0x8a, 0xc9, 0x57, 0xe3, 0xc3, 0xcc, 0x1d, 0xc9, 0xa9, 0xdd, 0x18, 0x41, 0xbd, 0x5f, - 0xbe, 0x4e, 0x24, 0x3e, 0xe7, 0xff, 0x53, 0x9d, 0x98, 0x8a, 0x53, 0x0f, 0x53, 0xcf, 0x98, 0x50, - 0xce, 0x4d, 0x0e, 0x8f, 0xa2, 0xac, 0x41, 0x2f, 0x5c, 0x7b, 0x7a, 0xe0, 0x9a, 0x8a, 0x8e, 0x5a, - 0x82, 0xbc, 0x07, 0x67, 0x5b, 0xae, 0xd3, 0x1a, 0xf8, 0x3e, 0x75, 0x5a, 0x7b, 0x9b, 0x22, 0x4a, - 0x54, 0x06, 0x65, 0x41, 0x35, 0x3b, 0xbb, 0x9c, 0x16, 0x38, 0xcc, 0x22, 0xe2, 0x30, 0x10, 0x79, - 0x19, 0x26, 0xd9, 0x80, 0x79, 0xd4, 0xb1, 0x84, 0x2b, 0x54, 0x6e, 0x9c, 0x51, 0x98, 0x93, 0x4d, - 0x49, 0xc6, 0x90, 0x4f, 0xee, 0xc2, 0x45, 0x16, 0xf0, 0x4d, 0xc2, 0xe9, 0xac, 0x50, 0xd3, 0xea, - 0xd9, 0x0e, 0x37, 0xd9, 0xae, 0x63, 0x31, 0xe1, 0xdd, 0x8c, 0x37, 0x3e, 0x72, 0xb0, 0x5f, 0xbf, - 0xd8, 0xcc, 0x16, 0xc1, 0xa3, 0xda, 0x92, 0x2f, 0xc0, 0x1c, 0x1b, 0xb4, 0x5a, 0x94, 0xb1, 0xf6, - 0xa0, 0x77, 0xd3, 0xdd, 0x66, 0x37, 0x6c, 0xc6, 0xf7, 0x9b, 0xdb, 0x76, 0xdf, 0x0e, 0x84, 0x07, - 0x53, 0x6c, 0xcc, 0x1f, 0xec, 0xd7, 0xe7, 0x9a, 0x47, 0x4a, 0xe1, 0x23, 0x10, 0x08, 0xc2, 0x05, - 0x69, 0x72, 0x86, 0xb0, 0x27, 0x05, 0xf6, 0xdc, 0xc1, 0x7e, 0xfd, 0xc2, 0x6a, 0xa6, 0x04, 0x1e, - 0xd1, 0x92, 0x7f, 0x41, 0x1e, 0x0c, 0x7f, 0x99, 0x07, 0xa0, 0xe5, 0xe4, 0x17, 0xdc, 0x52, 0x74, - 0xd4, 0x12, 0xe4, 0x41, 0x34, 0xf9, 0xf8, 0xa2, 0xa8, 0x55, 0x72, 0x5a, 0xab, 0x59, 0x1e, 0xa8, - 0xdc, 0x8f, 0x21, 0xf1, 0x85, 0x85, 0x09, 0x6c, 0xe3, 0x1f, 0x0b, 0x40, 0x86, 0x0d, 0x01, 0xb9, - 0x05, 0x25, 0xb3, 0x15, 0xf0, 0x30, 0x44, 0x86, 0xae, 0x2f, 0x64, 0x6d, 0xa6, 0x52, 0x15, 0xd2, - 0x36, 0xe5, 0x33, 0x84, 0x46, 0xd6, 0x63, 0x49, 0x34, 0x45, 0x05, 0x41, 0x5c, 0x38, 0xdb, 0x33, - 0x59, 0x10, 0xce, 0x55, 0x8b, 0xbf, 0xb2, 0x32, 0x92, 0xbf, 0x76, 0xbc, 0x97, 0xe2, 0x2d, 0x1a, - 0xe7, 0xf9, 0xcc, 0xbd, 0x9d, 0x06, 0xc2, 0x61, 0x6c, 0xe3, 0x7b, 0x25, 0x98, 0x5c, 0x59, 0xba, - 0xbe, 0x65, 0xb2, 0x9d, 0x63, 0xc4, 0xa5, 0xfc, 0xe3, 0xd0, 0xbe, 0xd7, 0x33, 0x83, 0xa1, 0xe5, - 0xb5, 0xa5, 0xe8, 0xa8, 0x25, 0x88, 0xcb, 0x83, 0x6c, 0x15, 0xe5, 0x2b, 0xf3, 0xfb, 0x56, 0x4e, - 0x47, 0x4b, 0xa1, 0xc4, 0xa3, 0x6c, 0x45, 0xc2, 0x48, 0x07, 0x61, 0x50, 0x0d, 0x95, 0x23, 0x6d, - 0xab, 0x00, 0x24, 0x67, 0x76, 0x24, 0xc2, 0x91, 0x01, 0x41, 0x8c, 0x80, 0x71, 0x2d, 0xe4, 0x13, - 0x30, 0x65, 0x51, 0xbe, 0x8a, 0xa9, 0xd3, 0xb2, 0x29, 0x5f, 0xb0, 0xe3, 0x7c, 0x5c, 0xb8, 0xe1, - 0x5a, 0x89, 0xd1, 0x31, 0x21, 0x45, 0x1e, 0x40, 0x65, 0xd7, 0x0e, 0xba, 0xc2, 0xbe, 0xd6, 0x4a, - 0x62, 0xe2, 0x7c, 0x32, 0x57, 0x47, 0x39, 0x42, 0x34, 0x2c, 0xf7, 0x43, 0x4c, 0x8c, 0xe0, 0xb9, - 0xfb, 0xcd, 0x1f, 0x44, 0x2a, 0x44, 0xac, 0xcc, 0x4a, 0xb2, 0x81, 0x60, 0x60, 0x24, 0x43, 0x18, - 0x4c, 0xf1, 0x87, 0x26, 0xfd, 0xd2, 0x80, 0xcf, 0x56, 0x15, 0x2e, 0xe4, 0x4b, 0x90, 0x84, 0x20, - 0x72, 0x44, 0xee, 0xc7, 0x60, 0x31, 0xa1, 0x84, 0xcf, 0xbe, 0xdd, 0x2e, 0x75, 0xc4, 0x12, 0x8e, - 0xcd, 0xbe, 0xfb, 0x5d, 0xea, 0xa0, 0xe0, 0x10, 0x17, 0xa0, 0xa5, 0x5d, 0xa6, 0x1a, 0x8c, 0x10, - 0x16, 0x47, 0x9e, 0x57, 0xe3, 0x34, 0xf7, 0x51, 0xa2, 0x67, 0x8c, 0xa9, 0xe0, 0x0e, 0x97, 0xeb, - 0x5c, 0x7b, 0xdf, 0x0e, 0x6a, 0x55, 0xd1, 0x29, 0xbd, 0x6a, 0x37, 0x04, 0x15, 0x15, 0xd7, 0xf8, - 0x5e, 0x01, 0xaa, 0x7c, 0x11, 0x85, 0x13, 0xff, 0x25, 0x28, 0x05, 0xa6, 0xdf, 0x51, 0x2e, 0x7c, - 0xac, 0xdd, 0x96, 0xa0, 0xa2, 0xe2, 0x12, 0x13, 0x8a, 0x81, 0xc9, 0x76, 0xc2, 0x8d, 0xfb, 0x33, - 0xb9, 0xde, 0x45, 0xad, 0xde, 0x68, 0xcf, 0xe6, 0x4f, 0x0c, 0x25, 0x32, 0xb9, 0x02, 0x65, 0x6e, - 0x68, 0x57, 0x4d, 0x26, 0xc3, 0xfd, 0x72, 0x63, 0x8a, 0xaf, 0xd6, 0x55, 0x45, 0x43, 0xcd, 0x35, - 0xde, 0x83, 0xd3, 0xd7, 0xde, 0xa7, 0xad, 0x41, 0xe0, 0xfa, 0x32, 0x26, 0x23, 0x37, 0x81, 0x30, - 0xea, 0x3f, 0xb4, 0x5b, 0x74, 0xa9, 0xd5, 0xe2, 0x0e, 0xe5, 0x7a, 0x64, 0x1d, 0xe6, 0x94, 0x36, - 0xd2, 0x1c, 0x92, 0xc0, 0x8c, 0x56, 0xc6, 0x3d, 0x28, 0x5e, 0x37, 0x07, 0x1d, 0x7a, 0x2c, 0x8f, - 0x94, 0xf7, 0xda, 0xa7, 0x66, 0x2f, 0x08, 0xad, 0x9f, 0xea, 0x35, 0x2a, 0x1a, 0x6a, 0xae, 0xf1, - 0x37, 0x13, 0x50, 0x8d, 0xa5, 0x22, 0xf8, 0x2c, 0xf2, 0xa9, 0xe7, 0xa6, 0x6d, 0x18, 0x8f, 0x47, - 0x51, 0x70, 0xb8, 0x0d, 0xf3, 0xe9, 0x43, 0x9b, 0xf1, 0xe0, 0x21, 0x65, 0xc3, 0x50, 0xd1, 0x51, - 0x4b, 0x90, 0x3a, 0x14, 0x2d, 0xea, 0x05, 0x5d, 0x31, 0x78, 0x13, 0x8d, 0x0a, 0xef, 0xea, 0x0a, - 0x27, 0xa0, 0xa4, 0x73, 0x81, 0x36, 0x0d, 0x5a, 0xdd, 0xda, 0x84, 0x58, 0xf7, 0x42, 0x60, 0x95, - 0x13, 0x50, 0xd2, 0x33, 0xe2, 0xba, 0xe2, 0xd3, 0x8f, 0xeb, 0x4a, 0x27, 0x1c, 0xd7, 0x11, 0x0f, - 0xce, 0x31, 0xd6, 0xdd, 0xf4, 0xed, 0x87, 0x66, 0x40, 0x45, 0x63, 0xa1, 0x67, 0xf2, 0x49, 0xf4, - 0x5c, 0x3c, 0xd8, 0xaf, 0x9f, 0x6b, 0x36, 0x6f, 0xa4, 0x51, 0x30, 0x0b, 0x9a, 0x34, 0xe1, 0xbc, - 0xed, 0x30, 0xda, 0x1a, 0xf8, 0x74, 0xad, 0xe3, 0xb8, 0x3e, 0xbd, 0xe1, 0x32, 0x0e, 0xa7, 0xf2, - 0x6f, 0xcf, 0xab, 0x8f, 0x76, 0x7e, 0x2d, 0x4b, 0x08, 0xb3, 0xdb, 0x1a, 0x3f, 0x28, 0xc0, 0x54, - 0x3c, 0xfb, 0x42, 0x18, 0x40, 0x77, 0x65, 0xb5, 0x29, 0x67, 0xbc, 0xf2, 0x5d, 0xdf, 0xce, 0x9d, - 0xd4, 0x91, 0x30, 0x51, 0xec, 0x13, 0xd1, 0x30, 0xa6, 0xe6, 0x18, 0xe9, 0xdd, 0x17, 0xa0, 0xd8, - 0x76, 0xfd, 0x16, 0x55, 0x6b, 0x56, 0xaf, 0x92, 0x55, 0x4e, 0x44, 0xc9, 0x33, 0x7e, 0x5a, 0x80, - 0x98, 0x06, 0xf2, 0x7b, 0x30, 0xcd, 0x75, 0xdc, 0xf2, 0xb7, 0x13, 0x6f, 0xd3, 0xc8, 0xfd, 0x36, - 0x1a, 0xa9, 0x71, 0x5e, 0xe9, 0x9f, 0x4e, 0x90, 0x31, 0xa9, 0x8f, 0xfc, 0x3a, 0x54, 0x4c, 0xcb, - 0xf2, 0x29, 0x63, 0x54, 0x9a, 0xb4, 0x4a, 0x63, 0x5a, 0xec, 0xd5, 0x21, 0x11, 0x23, 0x3e, 0x5f, - 0x86, 0x5d, 0xab, 0xcd, 0xf8, 0xcc, 0x56, 0x2e, 0xb7, 0x5e, 0x86, 0x5c, 0x09, 0xa7, 0xa3, 0x96, - 0x30, 0xbe, 0x3e, 0x01, 0x49, 0xdd, 0xc4, 0x82, 0x33, 0x3b, 0xfe, 0xf6, 0xf2, 0xb2, 0xd9, 0xea, - 0xe6, 0xca, 0x97, 0x9c, 0x3b, 0xd8, 0xaf, 0x9f, 0xb9, 0x95, 0x44, 0xc0, 0x34, 0xa4, 0xd2, 0x72, - 0x8b, 0xee, 0x05, 0xe6, 0x76, 0x9e, 0x94, 0x49, 0xa8, 0x25, 0x8e, 0x80, 0x69, 0x48, 0xf2, 0x3a, - 0x54, 0x77, 0xfc, 0xed, 0x70, 0x91, 0xa7, 0x53, 0x1a, 0xb7, 0x22, 0x16, 0xc6, 0xe5, 0xf8, 0x10, - 0xee, 0xf8, 0xdb, 0xdc, 0x28, 0x86, 0x99, 0x7e, 0x3d, 0x84, 0xb7, 0x14, 0x1d, 0xb5, 0x04, 0xf1, - 0x80, 0xec, 0x84, 0xa3, 0xa7, 0x93, 0x6e, 0xca, 0x16, 0x5d, 0xc9, 0x7a, 0x1b, 0x2d, 0x14, 0x7f, - 0xa1, 0x0b, 0xdc, 0xe6, 0xdf, 0x1a, 0xc2, 0xc1, 0x0c, 0x6c, 0xf2, 0x39, 0xb8, 0xb8, 0xe3, 0x6f, - 0xab, 0x0d, 0x62, 0xd3, 0xb7, 0x9d, 0x96, 0xed, 0x25, 0x52, 0xfc, 0x75, 0xd5, 0xdd, 0x8b, 0xb7, - 0xb2, 0xc5, 0xf0, 0xa8, 0xf6, 0xc6, 0xc7, 0x60, 0x2a, 0x9e, 0x22, 0x7e, 0x4c, 0xe6, 0xcf, 0xb8, - 0x0f, 0x15, 0x11, 0x64, 0x74, 0xb8, 0x77, 0xa3, 0x77, 0xa0, 0xf1, 0x47, 0xec, 0x40, 0x2f, 0xc2, - 0xe4, 0xf6, 0xa0, 0xb5, 0x43, 0x03, 0x26, 0x0c, 0x7b, 0x41, 0x9e, 0x0b, 0x34, 0x24, 0x09, 0x43, - 0x9e, 0xf1, 0x9f, 0x05, 0x28, 0xad, 0x39, 0xde, 0xe0, 0x97, 0xe4, 0x18, 0xeb, 0x3b, 0x13, 0x30, - 0xc1, 0x7d, 0x4a, 0x72, 0x45, 0xe5, 0xb7, 0x0a, 0x22, 0x3a, 0x9d, 0x8d, 0xe7, 0xb7, 0x0e, 0x13, - 0x79, 0x2e, 0xf2, 0x16, 0x94, 0x9c, 0x41, 0xff, 0x9e, 0xd9, 0x53, 0xd6, 0xee, 0xa5, 0xd0, 0x17, - 0x5a, 0x17, 0xd4, 0xc3, 0xfd, 0xfa, 0x2c, 0x75, 0x5a, 0xae, 0x65, 0x3b, 0x9d, 0xc5, 0x07, 0xcc, - 0x75, 0x16, 0xd6, 0x07, 0xfd, 0x6d, 0xea, 0xa3, 0x6a, 0xc5, 0xa3, 0xe8, 0x6d, 0xd7, 0xed, 0x71, - 0x80, 0xf1, 0x64, 0x14, 0xdd, 0x90, 0x64, 0x0c, 0xf9, 0xdc, 0xed, 0x62, 0x81, 0xcf, 0x25, 0x27, - 0x92, 0x6e, 0x57, 0x53, 0x50, 0x51, 0x71, 0x49, 0x1f, 0x4a, 0x7d, 0xd3, 0xe3, 0x72, 0x45, 0x31, - 0x64, 0xd7, 0x72, 0x3b, 0xde, 0x0b, 0x77, 0x04, 0xce, 0x35, 0x27, 0xf0, 0xf7, 0x22, 0x75, 0x92, - 0x88, 0x4a, 0x09, 0xb1, 0x61, 0xb2, 0x67, 0xb3, 0x80, 0xeb, 0x2b, 0x8d, 0x30, 0x2b, 0xb8, 0x3e, - 0x31, 0x45, 0xa3, 0x11, 0xb8, 0x2d, 0x61, 0x31, 0xc4, 0x9f, 0xdb, 0x83, 0x6a, 0xac, 0x47, 0x64, - 0x46, 0xa6, 0xd1, 0xc5, 0xaa, 0x10, 0x99, 0x73, 0xb2, 0x15, 0xce, 0xfd, 0xb1, 0x11, 0xc2, 0x31, - 0xdd, 0x13, 0xb5, 0x58, 0x3e, 0x35, 0xf6, 0x46, 0xe1, 0x53, 0xe5, 0x6f, 0xfd, 0x65, 0xfd, 0xd4, - 0x57, 0xfe, 0xe5, 0xf2, 0x29, 0xe3, 0xef, 0xc7, 0xa1, 0xa2, 0x45, 0xfe, 0x6f, 0xcf, 0x14, 0x3f, - 0x35, 0x53, 0x6e, 0x8e, 0x36, 0x5e, 0xc7, 0x9a, 0x2e, 0x4b, 0xc9, 0xe9, 0x32, 0xd5, 0xf8, 0xff, - 0xb1, 0x4f, 0x7d, 0xb8, 0x5f, 0xaf, 0x25, 0x07, 0x01, 0xcd, 0xdd, 0x3b, 0x94, 0x31, 0xb3, 0x43, - 0xa3, 0x69, 0xf0, 0xc9, 0xc7, 0x4d, 0x83, 0xd9, 0xf8, 0x34, 0xa8, 0x64, 0x7f, 0xc6, 0x1e, 0x4c, - 0xdc, 0xb6, 0x9d, 0xe3, 0x64, 0x05, 0x5e, 0x80, 0x22, 0x6b, 0xb9, 0x3a, 0xdb, 0xad, 0x0d, 0x6a, - 0x93, 0x13, 0x51, 0xf2, 0x42, 0x0b, 0x3d, 0x7e, 0x84, 0x85, 0xfe, 0xca, 0x38, 0x94, 0xc3, 0xbc, - 0x0b, 0xf9, 0xc3, 0x02, 0x54, 0x4d, 0xc7, 0x71, 0x03, 0x91, 0xba, 0x0f, 0x8d, 0xe9, 0x7a, 0xae, - 0xc1, 0x0f, 0x41, 0x17, 0x96, 0x22, 0x40, 0xf9, 0x01, 0xf4, 0x06, 0x1b, 0xe3, 0x60, 0x5c, 0x2f, - 0xf9, 0x12, 0x94, 0x7a, 0xe6, 0x36, 0xed, 0x85, 0xb6, 0x75, 0x6d, 0xb4, 0x1e, 0xdc, 0x16, 0x58, - 0xa9, 0xaf, 0x2f, 0x89, 0xa8, 0x14, 0xcd, 0xbd, 0x05, 0x33, 0xe9, 0x8e, 0x3e, 0xc9, 0xf7, 0xe3, - 0x9f, 0x3e, 0xa6, 0xe6, 0x49, 0x9a, 0x1a, 0x9f, 0x85, 0xea, 0x1d, 0x1a, 0xf8, 0x76, 0x4b, 0x00, - 0x84, 0x67, 0x70, 0x85, 0xec, 0x33, 0xb8, 0x68, 0x17, 0x1d, 0x7b, 0xc4, 0xc9, 0xc2, 0x97, 0x61, - 0x52, 0x42, 0x32, 0x1e, 0xbc, 0x7b, 0xbe, 0xdb, 0xa7, 0x41, 0x97, 0x0e, 0xc2, 0x2f, 0x9a, 0xcf, - 0xd1, 0xde, 0xd4, 0x30, 0x32, 0x78, 0x8f, 0x9e, 0x31, 0xa6, 0xc2, 0xf8, 0xdb, 0x29, 0x80, 0x75, - 0xd7, 0xa2, 0x2a, 0x4d, 0x37, 0x07, 0x63, 0xb6, 0xa5, 0xde, 0x06, 0x54, 0x67, 0xc7, 0xd6, 0x56, - 0x70, 0xcc, 0xb6, 0xf4, 0x14, 0x1f, 0x3b, 0x72, 0x8a, 0xbf, 0x0e, 0x55, 0xcb, 0x66, 0x5e, 0xcf, - 0xdc, 0x5b, 0xcf, 0xf0, 0xd0, 0x56, 0x22, 0x16, 0xc6, 0xe5, 0xc8, 0x2b, 0xca, 0xf8, 0x49, 0x2b, - 0x53, 0x4b, 0x19, 0xbf, 0x32, 0xef, 0x5e, 0xcc, 0x00, 0xbe, 0x01, 0x53, 0x61, 0x62, 0x49, 0x68, - 0x29, 0x8a, 0x56, 0xa1, 0xc9, 0x9c, 0xda, 0x8a, 0xf1, 0x30, 0x21, 0x99, 0x4e, 0x7c, 0x95, 0x9e, - 0x49, 0xe2, 0x6b, 0x05, 0x66, 0x58, 0xe0, 0xfa, 0xd4, 0x0a, 0x25, 0xd6, 0x56, 0x6a, 0x24, 0xf1, - 0xa2, 0x33, 0xcd, 0x14, 0x1f, 0x87, 0x5a, 0x90, 0x4d, 0x98, 0x0d, 0x3b, 0x11, 0x7f, 0xc1, 0xda, - 0x39, 0x81, 0x74, 0x49, 0x21, 0xcd, 0xde, 0xcf, 0x90, 0xc1, 0xcc, 0x96, 0xe4, 0xd3, 0x30, 0x1d, - 0x76, 0x53, 0x58, 0xa0, 0xda, 0xac, 0x80, 0xd2, 0x31, 0xcc, 0x56, 0x9c, 0x89, 0x49, 0x59, 0xf2, - 0x71, 0x28, 0x7a, 0x5d, 0x93, 0x51, 0x95, 0x27, 0x0b, 0xd3, 0x1c, 0xc5, 0x4d, 0x4e, 0x3c, 0xdc, - 0xaf, 0x57, 0xf8, 0x37, 0x13, 0x0f, 0x28, 0x05, 0xc9, 0x55, 0x80, 0x6d, 0x77, 0xe0, 0x58, 0xa6, - 0xbf, 0xb7, 0xb6, 0xa2, 0x52, 0xd6, 0xda, 0x6f, 0x6b, 0x68, 0x0e, 0xc6, 0xa4, 0xf8, 0x56, 0xd5, - 0x97, 0x46, 0x5b, 0xa5, 0xbb, 0xf4, 0x56, 0xa5, 0x6d, 0xb9, 0xe2, 0x93, 0x77, 0xa1, 0x22, 0xd2, - 0xfb, 0xd4, 0x5a, 0x0a, 0x54, 0xce, 0xeb, 0x49, 0x32, 0xc1, 0xda, 0x9f, 0x6b, 0x86, 0x20, 0x18, - 0xe1, 0x91, 0x2f, 0x00, 0xb4, 0x6d, 0xc7, 0x66, 0x5d, 0x81, 0x5e, 0x7d, 0x62, 0x74, 0xfd, 0x9e, - 0xab, 0x1a, 0x05, 0x63, 0x88, 0xe4, 0x67, 0x05, 0x38, 0xeb, 0x53, 0xe6, 0x0e, 0xfc, 0x16, 0x65, - 0xfa, 0xc8, 0xf6, 0xbc, 0x58, 0xfc, 0xf7, 0x72, 0xd6, 0x95, 0x85, 0x2b, 0x7a, 0x01, 0xd3, 0xc0, - 0xd2, 0xb2, 0xd2, 0xf0, 0xe4, 0x66, 0x88, 0x7f, 0x98, 0x45, 0xfc, 0xea, 0x8f, 0xeb, 0xf5, 0xe1, - 0x72, 0x42, 0x0d, 0xce, 0x67, 0xd4, 0x9f, 0xfc, 0xb8, 0x3e, 0x13, 0x3e, 0xeb, 0xc3, 0xe5, 0xe1, - 0xf7, 0xe2, 0x26, 0xd1, 0x73, 0xad, 0xb5, 0xcd, 0xda, 0x54, 0xd2, 0x24, 0x6e, 0x72, 0x22, 0x4a, - 0x1e, 0xb9, 0x02, 0x65, 0xcb, 0xa4, 0x7d, 0xd7, 0xa1, 0x56, 0x6d, 0x3a, 0x4a, 0x6d, 0xad, 0x28, - 0x1a, 0x6a, 0x2e, 0xf9, 0x22, 0x94, 0x6c, 0x11, 0x5a, 0xd4, 0x4e, 0x8b, 0x0f, 0xf3, 0xe9, 0x7c, - 0xce, 0x87, 0x80, 0x68, 0x00, 0xdf, 0x6b, 0xe4, 0x6f, 0x54, 0xb0, 0xa4, 0x05, 0x93, 0xee, 0x20, - 0x10, 0x1a, 0xce, 0x08, 0x0d, 0xf9, 0x12, 0x90, 0x1b, 0x12, 0x43, 0x46, 0x48, 0xea, 0x01, 0x43, - 0x64, 0xfe, 0xbe, 0xad, 0xae, 0xdd, 0xb3, 0x7c, 0xea, 0xd4, 0x66, 0x44, 0x4e, 0x40, 0xbc, 0xef, - 0xb2, 0xa2, 0xa1, 0xe6, 0x92, 0xdf, 0x84, 0x69, 0x77, 0x10, 0x88, 0x55, 0xc2, 0xbf, 0x32, 0xab, - 0x9d, 0x15, 0xe2, 0x67, 0xf9, 0x9a, 0xdd, 0x88, 0x33, 0x30, 0x29, 0x37, 0xb7, 0x02, 0x17, 0xb2, - 0xe7, 0xc2, 0xe3, 0xb6, 0xbf, 0xf1, 0xf8, 0xf6, 0x77, 0x1a, 0xa6, 0xe2, 0x45, 0x8b, 0xc6, 0x5f, - 0x14, 0xa0, 0x1a, 0xab, 0x75, 0x21, 0x2e, 0x54, 0xdc, 0x66, 0x53, 0x46, 0x80, 0x2a, 0xd5, 0xf0, - 0x56, 0xde, 0x02, 0x1a, 0x89, 0x12, 0x2d, 0x4e, 0x4d, 0xc2, 0x48, 0xc7, 0xe3, 0x8a, 0x60, 0xfe, - 0x6e, 0x0c, 0xa2, 0x76, 0xe4, 0x15, 0x28, 0x53, 0xc7, 0xf2, 0x5c, 0xdb, 0x09, 0xd2, 0xb5, 0x16, - 0xd7, 0x14, 0x1d, 0xb5, 0x04, 0xf7, 0x7f, 0x65, 0x04, 0xab, 0xd0, 0xb5, 0x37, 0xa2, 0x7a, 0xa1, - 0xb8, 0xa4, 0x0b, 0x67, 0x4c, 0x71, 0xfa, 0x17, 0x65, 0xfc, 0xc6, 0x9f, 0x28, 0xe3, 0xa7, 0x2b, - 0x62, 0x92, 0x28, 0x98, 0x86, 0xe5, 0x9a, 0x58, 0xd4, 0x5c, 0x68, 0x9a, 0xc8, 0xa5, 0xa9, 0x99, - 0x44, 0xc1, 0x34, 0xac, 0xf1, 0x8d, 0x31, 0x08, 0x67, 0xe9, 0x2f, 0x43, 0xcc, 0x4e, 0x0c, 0x28, - 0xf9, 0x94, 0x0d, 0x7a, 0x81, 0xf2, 0x5a, 0x84, 0x25, 0x40, 0x41, 0x41, 0xc5, 0x31, 0x76, 0x61, - 0x9a, 0xf7, 0xb6, 0xd7, 0xa3, 0xbd, 0x66, 0x40, 0x3d, 0x46, 0xda, 0x50, 0x64, 0xfc, 0x87, 0x1a, - 0x93, 0x11, 0x4f, 0xf3, 0x03, 0xea, 0xc5, 0xa2, 0x02, 0x8e, 0x8b, 0x12, 0xde, 0xf8, 0xe6, 0x18, - 0x54, 0xf4, 0x38, 0x1d, 0x23, 0xd4, 0x78, 0x11, 0x26, 0x2d, 0xda, 0x36, 0xf9, 0xdb, 0xa8, 0x75, - 0xc1, 0x8d, 0xce, 0x8a, 0x24, 0x61, 0xc8, 0x23, 0xf5, 0x64, 0x8a, 0xa7, 0x32, 0x94, 0xde, 0xd9, - 0x81, 0x8a, 0xf8, 0xb1, 0x1a, 0x56, 0xc9, 0xe6, 0xfd, 0xee, 0xf7, 0x42, 0x14, 0x99, 0xea, 0xd4, - 0x8f, 0x18, 0xe1, 0xa7, 0xaa, 0x5b, 0x8b, 0xc7, 0xa9, 0x6e, 0x35, 0x56, 0x81, 0x6f, 0x1b, 0xd7, - 0x97, 0xc9, 0x9b, 0x50, 0x66, 0xca, 0x24, 0xa9, 0x71, 0xf9, 0xa8, 0xae, 0x68, 0x50, 0xf4, 0xc3, - 0xfd, 0xfa, 0xb4, 0x10, 0x0e, 0x09, 0xa8, 0x9b, 0x18, 0x5f, 0x9b, 0x80, 0x98, 0x83, 0x7c, 0x8c, - 0x11, 0xb6, 0x52, 0x31, 0xcf, 0x3b, 0x79, 0x63, 0x9e, 0x30, 0x90, 0x90, 0x13, 0x2e, 0x19, 0xe6, - 0xf0, 0x7e, 0x74, 0x69, 0xcf, 0x53, 0xdf, 0x47, 0xf7, 0xe3, 0x06, 0xed, 0x79, 0x28, 0x38, 0xfa, - 0x38, 0x70, 0xe2, 0xc8, 0xe3, 0xc0, 0x77, 0xa1, 0xd8, 0x31, 0x07, 0x1d, 0xaa, 0x72, 0x98, 0x9f, - 0xca, 0x57, 0xc6, 0xca, 0x11, 0xe4, 0x04, 0x11, 0x3f, 0x51, 0x62, 0xf2, 0x09, 0xd2, 0x0d, 0x33, - 0x86, 0xca, 0x9f, 0xce, 0x37, 0x41, 0x74, 0xde, 0x51, 0x4e, 0x10, 0xfd, 0x88, 0x11, 0x3e, 0xdf, - 0x88, 0x5b, 0xb2, 0x60, 0x4b, 0x1d, 0xa8, 0x7c, 0x26, 0xe7, 0xa9, 0xa6, 0xc0, 0x90, 0x6b, 0x42, - 0x3d, 0x60, 0x88, 0x6c, 0x2c, 0x42, 0x35, 0x56, 0x17, 0xca, 0xc7, 0x57, 0x97, 0x23, 0xc5, 0xc6, - 0x77, 0xc5, 0x0c, 0x4c, 0x14, 0x1c, 0xe3, 0x70, 0x0c, 0xb4, 0xdb, 0x13, 0x3f, 0xda, 0x34, 0x5b, - 0xb1, 0x8a, 0xbe, 0x44, 0x21, 0x83, 0xeb, 0xa0, 0xe2, 0x72, 0x27, 0xbc, 0x4f, 0xfd, 0x8e, 0xde, - 0x4e, 0xd5, 0x72, 0xd5, 0x4e, 0xf8, 0x9d, 0x38, 0x13, 0x93, 0xb2, 0x7c, 0x33, 0xeb, 0x9b, 0x8e, - 0xdd, 0xa6, 0x2c, 0x48, 0x9f, 0x0d, 0xdc, 0x51, 0x74, 0xd4, 0x12, 0xe4, 0x3a, 0x9c, 0x65, 0x34, - 0xd8, 0xd8, 0x75, 0xa8, 0xaf, 0x0b, 0x2c, 0x54, 0xc5, 0xcd, 0x73, 0xa1, 0x2f, 0xd8, 0x4c, 0x0b, - 0xe0, 0x70, 0x1b, 0x11, 0xd0, 0xc8, 0x62, 0x17, 0x5d, 0xd6, 0xa7, 0x56, 0x6b, 0x14, 0xd0, 0xa4, - 0xf8, 0x38, 0xd4, 0x82, 0xa3, 0xb4, 0x4d, 0xbb, 0x37, 0xf0, 0x69, 0x84, 0x52, 0x4a, 0xa2, 0xac, - 0xa6, 0xf8, 0x38, 0xd4, 0xc2, 0xf8, 0xf7, 0x02, 0x4c, 0x23, 0x0d, 0xfc, 0x3d, 0x3d, 0x28, 0x75, - 0x28, 0xf6, 0x44, 0x6d, 0x4d, 0x41, 0xd4, 0xd6, 0x88, 0x29, 0x2b, 0x4b, 0x69, 0x24, 0x9d, 0xac, - 0x40, 0xd5, 0xe7, 0x2d, 0x54, 0x1d, 0x93, 0x1c, 0x70, 0x23, 0x8c, 0x51, 0x31, 0x62, 0x1d, 0x26, - 0x1f, 0x31, 0xde, 0x8c, 0x38, 0x30, 0xb9, 0x2d, 0xeb, 0x37, 0xd5, 0x56, 0x9f, 0x6f, 0x2e, 0xaa, - 0x1a, 0x50, 0x71, 0x5e, 0x10, 0x16, 0x84, 0x1e, 0x46, 0x3f, 0x31, 0x54, 0x62, 0x7c, 0xab, 0x00, - 0x10, 0x55, 0xa9, 0x93, 0x1d, 0x28, 0xb3, 0xd7, 0x12, 0x4e, 0x56, 0xce, 0xb2, 0x03, 0x05, 0x12, - 0xab, 0xff, 0x52, 0x14, 0xd4, 0x0a, 0x1e, 0xe7, 0x61, 0xfd, 0x74, 0x1c, 0x74, 0xab, 0xa7, 0xe4, - 0x60, 0xbd, 0xc4, 0x37, 0xe7, 0x4e, 0x54, 0xc7, 0xaa, 0xe5, 0x50, 0x50, 0x51, 0x71, 0xb9, 0x17, - 0x1d, 0x1e, 0x68, 0xaa, 0xa9, 0x2d, 0xbc, 0xe8, 0xf0, 0xec, 0x13, 0x35, 0x37, 0xcb, 0x65, 0x2b, - 0x3e, 0x33, 0x97, 0xad, 0xf4, 0x54, 0x5c, 0x36, 0x1e, 0x2e, 0xfb, 0x6e, 0x8f, 0x2e, 0xe1, 0xba, - 0x0a, 0xcb, 0x75, 0xb8, 0x8c, 0x92, 0x8c, 0x21, 0x9f, 0xbc, 0x0e, 0xd5, 0x01, 0xa3, 0xcd, 0x95, - 0x5b, 0xcb, 0x3e, 0xb5, 0x98, 0x3a, 0x2b, 0xd6, 0x89, 0x9a, 0xbb, 0x11, 0x0b, 0xe3, 0x72, 0xc6, - 0x1f, 0x15, 0xe0, 0x74, 0xb3, 0xe5, 0xdb, 0x5e, 0xa0, 0x2d, 0xdd, 0xba, 0x28, 0x5a, 0x0f, 0x4c, - 0x1e, 0xff, 0xaa, 0xa9, 0xf8, 0xfc, 0x11, 0xc7, 0x64, 0x52, 0x28, 0x51, 0xd3, 0x2e, 0x49, 0x18, - 0x41, 0x88, 0x9c, 0xb3, 0xb0, 0xa5, 0xe9, 0x29, 0xd1, 0x14, 0x54, 0x54, 0x5c, 0xe3, 0xdb, 0x05, - 0x28, 0xeb, 0xa2, 0x98, 0x17, 0xa0, 0x28, 0xec, 0x77, 0xba, 0x5a, 0x42, 0x58, 0x77, 0x94, 0x3c, - 0x91, 0x7f, 0xe5, 0x21, 0xfd, 0x50, 0xfe, 0x95, 0x13, 0x51, 0xf2, 0xf8, 0x5c, 0xa7, 0x8e, 0x95, - 0xce, 0xbf, 0x5e, 0x73, 0x2c, 0xe4, 0x74, 0x51, 0x5b, 0xec, 0xfa, 0x7d, 0x33, 0x48, 0x67, 0xc4, - 0x57, 0x05, 0x15, 0x15, 0xd7, 0x78, 0x1b, 0xce, 0xa8, 0xea, 0x45, 0x3d, 0x50, 0x4f, 0x54, 0xe6, - 0x6d, 0xfc, 0x77, 0x01, 0xaa, 0x5b, 0x5b, 0xb7, 0xb5, 0x59, 0x43, 0xb8, 0xc0, 0x64, 0xb9, 0xe2, - 0x52, 0x3b, 0xa0, 0xfe, 0xb2, 0xdb, 0xf7, 0x7a, 0x54, 0x63, 0xa9, 0x1a, 0xc2, 0x66, 0xa6, 0x04, - 0x1e, 0xd1, 0x92, 0xac, 0xc1, 0xb9, 0x38, 0x47, 0x19, 0x6d, 0x55, 0x57, 0x2e, 0xab, 0x10, 0x86, - 0xd9, 0x98, 0xd5, 0x26, 0x0d, 0xa5, 0x2c, 0xb7, 0xba, 0x76, 0x35, 0x04, 0xa5, 0xd8, 0x98, 0xd5, - 0xc6, 0x98, 0x86, 0x6a, 0xec, 0xce, 0x9d, 0xf1, 0x9d, 0xe7, 0x40, 0x17, 0xcd, 0xfd, 0xaa, 0xf4, - 0x2e, 0x57, 0x06, 0xb2, 0xa5, 0x33, 0x24, 0xc5, 0xd1, 0x33, 0x24, 0x7a, 0xc6, 0xa7, 0xb2, 0x24, - 0x9d, 0x28, 0x4b, 0x52, 0x3a, 0x81, 0x2c, 0x89, 0x36, 0x5d, 0x43, 0x99, 0x92, 0x3f, 0x2e, 0xc0, - 0x94, 0xe3, 0x5a, 0x34, 0x34, 0x90, 0xb5, 0x49, 0xe1, 0x80, 0x6f, 0x8c, 0x34, 0x88, 0x32, 0x61, - 0xa6, 0x10, 0x65, 0x82, 0x4c, 0x27, 0x94, 0xe3, 0x2c, 0x4c, 0xa8, 0x26, 0xab, 0x50, 0x36, 0xdb, - 0x6d, 0xdb, 0xb1, 0x83, 0x3d, 0x55, 0xfd, 0x77, 0x29, 0xcb, 0xf6, 0x2d, 0x29, 0x19, 0xb9, 0x1b, - 0x85, 0x4f, 0xa8, 0xdb, 0xf2, 0xed, 0x5c, 0x17, 0xbe, 0x57, 0x46, 0xd8, 0xce, 0xc3, 0x33, 0x94, - 0x98, 0x23, 0x18, 0x16, 0xe9, 0x46, 0x75, 0xf0, 0x06, 0x94, 0x64, 0xf2, 0x4c, 0xe4, 0x49, 0xcb, - 0x32, 0xf0, 0x90, 0x89, 0x35, 0x54, 0x1c, 0xd2, 0x09, 0x03, 0xdb, 0xaa, 0x18, 0xdc, 0x46, 0xee, - 0x60, 0x5f, 0xc7, 0xca, 0xd9, 0x91, 0x2d, 0xb9, 0x19, 0xdf, 0x3e, 0xa6, 0x8e, 0xb3, 0x7d, 0x4c, - 0x1f, 0xb9, 0x75, 0x74, 0xa0, 0xc4, 0xc4, 0xe6, 0x24, 0x32, 0x86, 0xd5, 0xab, 0xcb, 0xf9, 0x5c, - 0xa2, 0xc4, 0xfe, 0x26, 0x47, 0x47, 0xd2, 0x50, 0xc1, 0x13, 0x17, 0xca, 0x61, 0x5a, 0x53, 0x25, - 0x1d, 0xf3, 0x9d, 0x8d, 0xa7, 0xc3, 0x86, 0xb0, 0x7c, 0x4f, 0x52, 0x51, 0x2b, 0x21, 0xef, 0xc2, - 0xb8, 0x65, 0x76, 0x54, 0xfa, 0xf1, 0x9d, 0xdc, 0xf5, 0x8f, 0xa1, 0x1a, 0x71, 0x1f, 0x6d, 0x65, - 0xe9, 0x3a, 0x72, 0x54, 0xb2, 0x13, 0x15, 0xe0, 0xcf, 0x8c, 0x70, 0xcd, 0x2b, 0xb5, 0xdf, 0xc9, - 0xf0, 0x6a, 0xa8, 0x84, 0xff, 0x1a, 0x4c, 0x3e, 0x74, 0x7b, 0x83, 0xbe, 0xca, 0x5b, 0x56, 0xaf, - 0xce, 0x65, 0x7d, 0xed, 0x7b, 0x42, 0x24, 0x32, 0x02, 0xf2, 0x99, 0x61, 0xd8, 0x96, 0x7c, 0xb5, - 0x00, 0xa7, 0xf9, 0xd2, 0xd1, 0xf3, 0x80, 0xd5, 0xc8, 0x08, 0x33, 0xf5, 0x2e, 0xe3, 0x1b, 0x63, - 0x38, 0xc3, 0x2e, 0x28, 0xb5, 0xa7, 0xd7, 0x12, 0x1a, 0x30, 0xa5, 0x91, 0x78, 0x50, 0x66, 0xb6, - 0x45, 0x5b, 0xa6, 0xcf, 0x6a, 0xe7, 0x4e, 0x4c, 0x7b, 0xe4, 0x89, 0x2b, 0x6c, 0xd4, 0x5a, 0xc8, - 0x1f, 0x88, 0xab, 0x79, 0xea, 0xe6, 0xab, 0xba, 0x8d, 0x3c, 0x7b, 0x92, 0xb7, 0x91, 0xcf, 0xc9, - 0x7b, 0x79, 0x09, 0x0d, 0x98, 0x56, 0x49, 0x36, 0xe0, 0xbc, 0x2c, 0xc4, 0x4f, 0xdf, 0xc2, 0x38, - 0x2f, 0xaa, 0x17, 0x9e, 0x3b, 0xd8, 0xaf, 0x9f, 0x5f, 0xca, 0x12, 0xc0, 0xec, 0x76, 0xe4, 0x03, - 0x98, 0xf6, 0xe3, 0x51, 0x5c, 0xed, 0xc2, 0x08, 0x35, 0x79, 0x89, 0x78, 0x50, 0xe6, 0xc5, 0x13, - 0x24, 0x4c, 0xea, 0x22, 0xaf, 0x42, 0xd5, 0x53, 0x96, 0xca, 0x66, 0xfd, 0xda, 0x45, 0xf1, 0x0e, - 0x62, 0x47, 0xdd, 0x8c, 0xc8, 0x18, 0x97, 0x21, 0x77, 0xa1, 0x1a, 0xb8, 0x3d, 0xea, 0xab, 0x83, - 0xf7, 0x9a, 0xf8, 0xf8, 0xf3, 0x59, 0x33, 0x79, 0x4b, 0x8b, 0x45, 0xee, 0x75, 0x44, 0x63, 0x18, - 0xc7, 0x21, 0x9f, 0x86, 0xe9, 0xf0, 0xd2, 0x8d, 0x2f, 0x92, 0x60, 0xcf, 0x25, 0xb3, 0x01, 0xcd, - 0x38, 0x13, 0x93, 0xb2, 0x3c, 0xbe, 0xf7, 0x7c, 0xdb, 0xf5, 0xed, 0x60, 0x6f, 0xb9, 0x67, 0x32, - 0x26, 0x00, 0xe6, 0x04, 0x80, 0x8e, 0xef, 0x37, 0xd3, 0x02, 0x38, 0xdc, 0x86, 0x07, 0x51, 0x21, - 0xb1, 0xf6, 0x11, 0xe1, 0xc0, 0x09, 0xb3, 0x14, 0xb6, 0x45, 0xcd, 0x3d, 0xa2, 0xf2, 0xf9, 0x52, - 0x9e, 0xca, 0x67, 0x62, 0xc1, 0x25, 0x73, 0x10, 0xb8, 0x7d, 0x4e, 0x48, 0x36, 0xd9, 0x72, 0x77, - 0xa8, 0x53, 0xbb, 0x2c, 0xf6, 0xaa, 0xcb, 0x07, 0xfb, 0xf5, 0x4b, 0x4b, 0x8f, 0x90, 0xc3, 0x47, - 0xa2, 0x90, 0x3e, 0x94, 0xa9, 0xaa, 0xde, 0xae, 0x7d, 0x74, 0x84, 0x4d, 0x22, 0x59, 0x02, 0x2e, - 0x07, 0x28, 0xa4, 0xa1, 0x56, 0x41, 0xb6, 0xa0, 0xda, 0x75, 0x59, 0xb0, 0xd4, 0xb3, 0x4d, 0x46, - 0x59, 0xed, 0x79, 0x31, 0x4f, 0x32, 0xf7, 0xb7, 0x1b, 0xa1, 0x58, 0x34, 0x4d, 0x6e, 0x44, 0x2d, - 0x31, 0x0e, 0x43, 0xa8, 0x88, 0x28, 0x07, 0xe2, 0xab, 0xb9, 0x4e, 0x40, 0xdf, 0x0f, 0x6a, 0xf3, - 0xe2, 0x5d, 0x5e, 0xca, 0x42, 0xde, 0x74, 0xad, 0x66, 0x52, 0x5a, 0xae, 0xf2, 0x14, 0x11, 0xd3, - 0x98, 0xe4, 0x0d, 0x98, 0xf2, 0x5c, 0xab, 0xe9, 0xd1, 0xd6, 0xa6, 0x19, 0xb4, 0xba, 0xb5, 0x7a, - 0xf2, 0x9c, 0x7d, 0x33, 0xc6, 0xc3, 0x84, 0x24, 0x8f, 0x06, 0x7c, 0xca, 0x06, 0xdb, 0x7d, 0x3b, - 0xd8, 0xa4, 0x8e, 0x65, 0x3b, 0x9d, 0x4d, 0xd7, 0x62, 0x35, 0x43, 0x7c, 0x42, 0x11, 0x0d, 0xe0, - 0x30, 0x1b, 0xb3, 0xda, 0x90, 0x16, 0x4c, 0xf6, 0x65, 0x69, 0x44, 0xed, 0x85, 0x11, 0xdc, 0x4a, - 0x55, 0x5e, 0x21, 0x37, 0x25, 0xf5, 0x80, 0x21, 0xf2, 0xdc, 0xdb, 0x70, 0x76, 0xc8, 0xff, 0x7b, - 0xa2, 0x9a, 0x90, 0xbf, 0xe2, 0xd1, 0x5a, 0xcc, 0xe3, 0x3e, 0xe9, 0x38, 0xe5, 0x3a, 0x9c, 0x55, - 0xff, 0x7e, 0xc2, 0x9d, 0x83, 0xde, 0x40, 0x5f, 0xe9, 0x8d, 0xe5, 0xee, 0x30, 0x2d, 0x80, 0xc3, - 0x6d, 0x8c, 0xbf, 0x2e, 0xc0, 0x74, 0x62, 0xbb, 0x39, 0xf1, 0xf8, 0x7d, 0x15, 0x48, 0xdf, 0xf6, - 0x7d, 0xd7, 0x97, 0x7b, 0xf6, 0x1d, 0xbe, 0xf6, 0x98, 0xba, 0x9d, 0x20, 0xaa, 0x62, 0xef, 0x0c, - 0x71, 0x31, 0xa3, 0x85, 0xf1, 0x6f, 0x05, 0x88, 0x8e, 0x09, 0x74, 0x29, 0x78, 0xe1, 0xc8, 0x52, - 0xf0, 0x57, 0xa0, 0xfc, 0x80, 0xb9, 0xce, 0x66, 0x54, 0x30, 0xae, 0x07, 0xf4, 0x66, 0x73, 0x63, - 0x5d, 0x48, 0x6a, 0x09, 0x21, 0xfd, 0xa5, 0x55, 0xbb, 0x17, 0x0c, 0x97, 0x55, 0xdf, 0xfc, 0xac, - 0xa4, 0xa3, 0x96, 0x20, 0x8b, 0x50, 0xd1, 0x27, 0x53, 0x2a, 0xf0, 0xd7, 0x83, 0xa0, 0x8f, 0x65, - 0x30, 0x92, 0x21, 0x2f, 0x47, 0xe7, 0x2f, 0xc5, 0x64, 0x26, 0x26, 0x7d, 0x06, 0x63, 0x7c, 0x77, - 0x0c, 0xca, 0xcf, 0xf0, 0x46, 0x71, 0x2b, 0x71, 0xa3, 0xf8, 0x04, 0xae, 0x9f, 0x66, 0xdd, 0x26, - 0xde, 0x49, 0xdd, 0x26, 0x5e, 0x1e, 0xf1, 0x5c, 0xec, 0x91, 0x37, 0x89, 0x7f, 0x58, 0x80, 0xa9, - 0x67, 0x78, 0x8b, 0x78, 0x3b, 0x79, 0x8b, 0xf8, 0xcd, 0x91, 0x5e, 0xed, 0x88, 0x1b, 0xc4, 0xff, - 0x7c, 0x01, 0x12, 0xb7, 0x77, 0x89, 0x03, 0x95, 0xd0, 0x16, 0x84, 0x67, 0x8d, 0x6f, 0x8e, 0x14, - 0xef, 0x46, 0xf3, 0x37, 0xa4, 0x30, 0x8c, 0x54, 0x90, 0xab, 0x00, 0x94, 0x1b, 0x41, 0x99, 0xc7, - 0x1d, 0x4b, 0x1e, 0xc5, 0x5d, 0xd3, 0x1c, 0x8c, 0x49, 0x3d, 0xfb, 0x5c, 0x4a, 0xb6, 0xf7, 0x31, - 0xf1, 0x54, 0xbc, 0x8f, 0x4b, 0x27, 0xee, 0x7d, 0x3c, 0xff, 0xf4, 0xbd, 0x8f, 0x58, 0xac, 0x55, - 0x1c, 0x21, 0xd6, 0xfa, 0x00, 0x66, 0xe5, 0xcf, 0xe5, 0x9e, 0x69, 0xf7, 0xf5, 0x7c, 0x51, 0x55, - 0xda, 0x2f, 0x67, 0xfa, 0x1c, 0xd4, 0x67, 0x36, 0x0b, 0xa8, 0x13, 0xdc, 0x8b, 0x5a, 0x46, 0x55, - 0x6a, 0xf7, 0x32, 0xe0, 0x30, 0x53, 0x49, 0xda, 0x39, 0x9f, 0x3c, 0x86, 0x73, 0xfe, 0xed, 0x02, - 0x9c, 0x37, 0xb3, 0xfe, 0x60, 0x45, 0xa5, 0x68, 0x6e, 0x8e, 0x14, 0x2a, 0x25, 0x10, 0x55, 0xa8, - 0x93, 0xc5, 0xc2, 0xec, 0x3e, 0x90, 0x17, 0xa3, 0x68, 0xbb, 0x22, 0x26, 0x55, 0x76, 0x9c, 0xfc, - 0xf5, 0x74, 0x96, 0x0b, 0xc4, 0x68, 0x37, 0x47, 0x36, 0xd8, 0x27, 0x90, 0xe9, 0xaa, 0x8e, 0x90, - 0xe9, 0x4a, 0x45, 0x4e, 0x53, 0x27, 0x14, 0x39, 0x39, 0x30, 0x63, 0xf7, 0xcd, 0x0e, 0xdd, 0x1c, - 0xf4, 0x7a, 0xf2, 0x34, 0x84, 0xd5, 0xa6, 0x05, 0x76, 0xe6, 0x9d, 0x1d, 0x1e, 0xc9, 0xf6, 0xd2, - 0x97, 0xcd, 0xf5, 0xb9, 0xe3, 0x5a, 0x0a, 0x09, 0x87, 0xb0, 0xf9, 0xb4, 0xe4, 0x1e, 0xf9, 0x3a, - 0x0d, 0xf8, 0x68, 0x8b, 0x24, 0x90, 0xfa, 0x97, 0xaa, 0x1b, 0x11, 0x19, 0xe3, 0x32, 0xe4, 0x16, - 0x54, 0x2c, 0x87, 0xa9, 0x53, 0xc7, 0x33, 0xc2, 0x4a, 0x7d, 0x8c, 0xdb, 0xb6, 0x95, 0xf5, 0xa6, - 0x3e, 0x6f, 0xbc, 0x94, 0x51, 0x62, 0xa7, 0xf9, 0x18, 0xb5, 0x27, 0x77, 0x04, 0x98, 0xba, 0xc0, - 0x26, 0xb3, 0x36, 0x97, 0x8f, 0x70, 0xfe, 0x57, 0xd6, 0xc3, 0xfb, 0x76, 0xd3, 0x4a, 0x9d, 0xba, - 0x96, 0x16, 0x21, 0xc4, 0x6e, 0xf0, 0x9e, 0x7d, 0xd4, 0x0d, 0x5e, 0x72, 0x17, 0x2e, 0x06, 0x41, - 0x2f, 0x91, 0xca, 0x57, 0x55, 0x8c, 0xa2, 0xa4, 0xb5, 0x28, 0xff, 0x80, 0x61, 0x6b, 0xeb, 0x76, - 0x96, 0x08, 0x1e, 0xd5, 0x56, 0x64, 0xc5, 0x83, 0x9e, 0x0e, 0xfe, 0xe7, 0x47, 0xc9, 0x8a, 0x47, - 0x67, 0x26, 0x2a, 0x2b, 0x1e, 0x11, 0x30, 0xae, 0xe5, 0xe8, 0x24, 0xc6, 0xb9, 0x9c, 0x49, 0x8c, - 0x78, 0xdc, 0x3c, 0xfb, 0xc8, 0xb8, 0x79, 0x28, 0xce, 0x3f, 0xff, 0x04, 0x71, 0xfe, 0xbb, 0xa2, - 0x7c, 0xf2, 0xfa, 0xb2, 0xca, 0x91, 0xe4, 0xab, 0xe7, 0x10, 0x75, 0x30, 0xf2, 0x70, 0x5c, 0xfc, - 0x44, 0x89, 0x49, 0x36, 0x61, 0xd6, 0x73, 0xad, 0xa1, 0x34, 0x81, 0x48, 0x8a, 0xc4, 0xca, 0x8c, - 0x37, 0x33, 0x64, 0x30, 0xb3, 0xa5, 0x30, 0xe0, 0x11, 0xbd, 0x56, 0x13, 0x03, 0x23, 0x0d, 0x78, - 0x44, 0xc6, 0xb8, 0x4c, 0x3a, 0x6a, 0x7e, 0xee, 0xa9, 0x45, 0xcd, 0x73, 0xcf, 0x20, 0x6a, 0xfe, - 0xc8, 0xb1, 0xa3, 0xe6, 0xdf, 0x85, 0x73, 0x9e, 0x6b, 0xad, 0xd8, 0xcc, 0x1f, 0x88, 0x7f, 0xc8, - 0x6b, 0x0c, 0xac, 0x0e, 0x0d, 0x44, 0xd8, 0x5d, 0xbd, 0x7a, 0x35, 0xde, 0x49, 0xf9, 0x47, 0x9d, - 0x0b, 0xea, 0x8f, 0x3a, 0xc5, 0x22, 0x4f, 0xb5, 0x12, 0xae, 0xb9, 0x88, 0xb4, 0x33, 0x98, 0x98, - 0xa5, 0x27, 0x1e, 0x69, 0x5f, 0x7e, 0x5a, 0x91, 0x36, 0x79, 0x07, 0xca, 0xac, 0x3b, 0x08, 0x2c, - 0x77, 0xd7, 0x11, 0xf9, 0x97, 0x8a, 0xfe, 0xfb, 0x9a, 0x72, 0x53, 0xd1, 0x0f, 0xf7, 0xeb, 0x33, - 0xe1, 0xef, 0x58, 0xa5, 0x96, 0xa2, 0x8c, 0x1e, 0xab, 0xff, 0xc7, 0x14, 0x9c, 0x4e, 0xfd, 0x37, - 0x89, 0xae, 0x66, 0x2f, 0x1c, 0xb7, 0x9a, 0x3d, 0x51, 0x6e, 0x3e, 0xf6, 0x54, 0xcb, 0xcd, 0xc7, - 0x4f, 0xbc, 0xdc, 0x3c, 0x56, 0x56, 0x3f, 0xf1, 0x98, 0xb2, 0xfa, 0x25, 0x38, 0xd3, 0x72, 0xfb, - 0x9e, 0xb8, 0x8c, 0xac, 0xca, 0x8d, 0x65, 0x40, 0xab, 0xab, 0x12, 0x96, 0x93, 0x6c, 0x4c, 0xcb, - 0x93, 0xdf, 0x81, 0xa2, 0x23, 0x1a, 0x96, 0x46, 0xb8, 0x9e, 0x94, 0xfc, 0x60, 0xc2, 0x87, 0x51, - 0x37, 0x84, 0xc2, 0x64, 0x7d, 0x51, 0xd0, 0x0e, 0xc3, 0x1f, 0x28, 0x95, 0x92, 0xf7, 0xa0, 0xe6, - 0xb6, 0xdb, 0x3d, 0xd7, 0xb4, 0xa2, 0x92, 0xf8, 0x7b, 0xdc, 0x3b, 0x55, 0xc7, 0x5f, 0x95, 0xc6, - 0x65, 0x05, 0x50, 0xdb, 0x38, 0x42, 0x0e, 0x8f, 0x44, 0xe0, 0xae, 0xe6, 0x99, 0xe4, 0x55, 0x0d, - 0x56, 0xab, 0x88, 0xd7, 0xfc, 0xad, 0x93, 0x78, 0xcd, 0xe4, 0xbd, 0x10, 0xf5, 0xc2, 0x51, 0x3d, - 0x48, 0x92, 0x8b, 0xe9, 0x9e, 0x10, 0x1f, 0x2e, 0x78, 0x59, 0x8e, 0x38, 0x53, 0x47, 0xa6, 0x8f, - 0x0a, 0x07, 0xe6, 0x95, 0x96, 0x0b, 0x99, 0xae, 0x3c, 0xc3, 0x23, 0x90, 0xe3, 0xc5, 0xf2, 0xe5, - 0xa7, 0x56, 0x2c, 0xef, 0x89, 0x9c, 0x95, 0x2a, 0x1a, 0xab, 0x8e, 0x50, 0x8e, 0xac, 0x0b, 0xc9, - 0xa2, 0x35, 0xa3, 0x49, 0x0c, 0x23, 0x25, 0xe4, 0xe7, 0x99, 0x37, 0x34, 0xa4, 0xf7, 0xfa, 0xf9, - 0x93, 0xf8, 0xd4, 0xbf, 0x68, 0xb7, 0x34, 0xe6, 0xf6, 0xe4, 0xb5, 0xb0, 0x23, 0x2f, 0xc8, 0xdd, - 0x4d, 0x5e, 0x91, 0x7d, 0x7b, 0xc4, 0x6b, 0x2a, 0xf1, 0xcb, 0x79, 0xbf, 0x5f, 0x80, 0xd9, 0xac, - 0xa9, 0x9f, 0xd1, 0x8b, 0x66, 0xb2, 0x17, 0xa3, 0x25, 0x45, 0xe2, 0x7d, 0x38, 0x99, 0xcb, 0x12, - 0xdf, 0x28, 0xc5, 0x12, 0x39, 0x01, 0xf5, 0x7e, 0x55, 0xc0, 0x92, 0xab, 0x80, 0x25, 0xf1, 0x2f, - 0x50, 0xc5, 0x67, 0xf8, 0x2f, 0x50, 0xa5, 0x1c, 0xff, 0x02, 0x35, 0xf9, 0x2c, 0xff, 0x05, 0xaa, - 0x7c, 0xcc, 0x7f, 0x81, 0xaa, 0xfc, 0xe2, 0xfc, 0x0b, 0xd4, 0x87, 0x05, 0x98, 0x49, 0x5f, 0x53, - 0x7c, 0x06, 0x89, 0xef, 0x9d, 0x44, 0xe2, 0x7b, 0x6d, 0x24, 0x9b, 0xad, 0xaf, 0x46, 0x1e, 0x91, - 0x00, 0x37, 0x7e, 0x52, 0x80, 0xa1, 0xab, 0x98, 0xcf, 0x20, 0x37, 0xfd, 0x20, 0x99, 0x9b, 0xbe, - 0x76, 0x22, 0x2f, 0x79, 0x44, 0x8e, 0xfa, 0xcf, 0x33, 0x5e, 0x51, 0xe4, 0xaa, 0x3f, 0x78, 0x5a, - 0x7f, 0x74, 0x39, 0x9b, 0xf5, 0x47, 0x97, 0xc9, 0x3f, 0xb6, 0x6c, 0x2c, 0x7c, 0xff, 0xc3, 0xf9, - 0x53, 0x3f, 0xfc, 0x70, 0xfe, 0xd4, 0x8f, 0x3e, 0x9c, 0x3f, 0xf5, 0x95, 0x83, 0xf9, 0xc2, 0xf7, - 0x0f, 0xe6, 0x0b, 0x3f, 0x3c, 0x98, 0x2f, 0xfc, 0xe8, 0x60, 0xbe, 0xf0, 0x93, 0x83, 0xf9, 0xc2, - 0x9f, 0xfd, 0xeb, 0xfc, 0xa9, 0xcf, 0x97, 0x43, 0x05, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x37, - 0x2f, 0x93, 0x9b, 0xcc, 0x61, 0x00, 0x00, + // 5949 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5c, 0x5d, 0x6c, 0x1b, 0xd9, + 0x75, 0x36, 0x25, 0x91, 0x22, 0x0f, 0x25, 0x4b, 0xbe, 0x96, 0x6d, 0xae, 0xe2, 0x15, 0x9d, 0xd9, + 0xee, 0xd6, 0xdb, 0x6e, 0xa4, 0xac, 0x9d, 0x6d, 0x37, 0x3f, 0xfb, 0x23, 0x4a, 0x96, 0x2d, 0xff, + 0x48, 0xca, 0xa1, 0x6c, 0x37, 0xd9, 0x45, 0xd2, 0x11, 0xe7, 0x92, 0x1c, 0x8b, 0x9c, 0x99, 0xcc, + 0x1d, 0x5a, 0xab, 0x6c, 0x8b, 0x6e, 0x83, 0x16, 0xe9, 0x0f, 0x02, 0x34, 0x28, 0x10, 0x04, 0x08, + 0x0a, 0x14, 0x79, 0x68, 0x5f, 0xda, 0xc7, 0xf6, 0x31, 0x0f, 0x41, 0x1f, 0x82, 0xbc, 0x34, 0xed, + 0x4b, 0x83, 0xa2, 0x50, 0xb2, 0x2a, 0x5a, 0xa4, 0x48, 0x81, 0x3c, 0x16, 0x10, 0xfa, 0x50, 0xdc, + 0x9f, 0xb9, 0xf3, 0xc3, 0xa1, 0x2d, 0x93, 0xb2, 0x91, 0x22, 0x79, 0xe3, 0x9c, 0x73, 0xee, 0x77, + 0x66, 0xee, 0xcf, 0xb9, 0xe7, 0x9c, 0x7b, 0x2e, 0x61, 0xa5, 0x65, 0x07, 0xed, 0xde, 0xce, 0x62, + 0xc3, 0xed, 0x2e, 0x99, 0x7e, 0xcb, 0xf5, 0x7c, 0xf7, 0x81, 0xf8, 0xb1, 0xe4, 0xed, 0xb6, 0x96, + 0x4c, 0xcf, 0x66, 0x4b, 0x7b, 0xae, 0xbf, 0xdb, 0xec, 0xb8, 0x7b, 0x4b, 0x0f, 0x5f, 0x35, 0x3b, + 0x5e, 0xdb, 0x7c, 0x75, 0xa9, 0x45, 0x1d, 0xea, 0x9b, 0x01, 0xb5, 0x16, 0x3d, 0xdf, 0x0d, 0x5c, + 0x72, 0x35, 0x02, 0x59, 0x0c, 0x41, 0xc4, 0x8f, 0x45, 0x6f, 0xb7, 0xb5, 0xc8, 0x41, 0x16, 0x43, + 0x90, 0xc5, 0x10, 0x64, 0xfe, 0x63, 0x31, 0xcd, 0x2d, 0x97, 0x2b, 0xe4, 0x58, 0x3b, 0xbd, 0xa6, + 0x78, 0x12, 0x0f, 0xe2, 0x97, 0xd4, 0x31, 0x6f, 0xec, 0xbe, 0xce, 0x16, 0x6d, 0x97, 0xbf, 0xd2, + 0x52, 0xc3, 0xf5, 0xe9, 0xd2, 0xc3, 0xbe, 0xf7, 0x98, 0x7f, 0x39, 0x26, 0xe3, 0xb9, 0x1d, 0xbb, + 0xb1, 0xbf, 0xf4, 0xf0, 0xd5, 0x1d, 0x1a, 0xf4, 0xbf, 0xf2, 0xfc, 0x27, 0x22, 0xd1, 0xae, 0xd9, + 0x68, 0xdb, 0x0e, 0xf5, 0xf7, 0xa3, 0x4f, 0xee, 0xd2, 0xc0, 0xcc, 0x52, 0xb0, 0x34, 0xa8, 0x95, + 0xdf, 0x73, 0x02, 0xbb, 0x4b, 0xfb, 0x1a, 0xfc, 0xc6, 0xe3, 0x1a, 0xb0, 0x46, 0x9b, 0x76, 0xcd, + 0x74, 0x3b, 0xe3, 0x1f, 0x73, 0x30, 0xb3, 0xec, 0x37, 0xda, 0xf6, 0x43, 0x5a, 0x0f, 0x38, 0xa3, + 0xb5, 0x4f, 0xde, 0x81, 0xf1, 0xc0, 0xf4, 0x2b, 0xb9, 0x4b, 0xb9, 0xcb, 0xe5, 0x2b, 0x6f, 0x2f, + 0x0e, 0xd1, 0xe7, 0x8b, 0xdb, 0xa6, 0x1f, 0xc2, 0xd5, 0x26, 0x0f, 0x0f, 0xaa, 0xe3, 0xdb, 0xa6, + 0x8f, 0x1c, 0x95, 0x7c, 0x11, 0x26, 0x1c, 0xd7, 0xa1, 0x95, 0x31, 0x81, 0xbe, 0x3c, 0x14, 0xfa, + 0x86, 0xeb, 0xe8, 0xb7, 0xad, 0x15, 0x0f, 0x0f, 0xaa, 0x13, 0x9c, 0x82, 0x02, 0xd8, 0xf8, 0x59, + 0x0e, 0x4a, 0xcb, 0x7e, 0xab, 0xd7, 0xa5, 0x4e, 0xc0, 0x88, 0x0f, 0xe0, 0x99, 0xbe, 0xd9, 0xa5, + 0x01, 0xf5, 0x59, 0x25, 0x77, 0x69, 0xfc, 0x72, 0xf9, 0xca, 0x9b, 0x43, 0x29, 0xdd, 0x0a, 0x61, + 0x6a, 0xe4, 0x7b, 0x07, 0xd5, 0x53, 0x87, 0x07, 0x55, 0xd0, 0x24, 0x86, 0x31, 0x2d, 0xc4, 0x81, + 0x92, 0xe9, 0x07, 0x76, 0xd3, 0x6c, 0x04, 0xac, 0x32, 0x26, 0x54, 0xbe, 0x31, 0x94, 0xca, 0x65, + 0x85, 0x52, 0x3b, 0xa3, 0x34, 0x96, 0x42, 0x0a, 0xc3, 0x48, 0x85, 0xf1, 0xd3, 0x71, 0x28, 0x86, + 0x0c, 0x72, 0x09, 0x26, 0x1c, 0xb3, 0x4b, 0xc5, 0xe8, 0x95, 0x6a, 0x53, 0xaa, 0xe1, 0xc4, 0x86, + 0xd9, 0xe5, 0x1d, 0x64, 0x76, 0x29, 0x97, 0xf0, 0xcc, 0xa0, 0x2d, 0x46, 0x20, 0x26, 0xb1, 0x65, + 0x06, 0x6d, 0x14, 0x1c, 0x72, 0x11, 0x26, 0xba, 0xae, 0x45, 0x2b, 0xe3, 0x97, 0x72, 0x97, 0xf3, + 0xb2, 0x83, 0xef, 0xb8, 0x16, 0x45, 0x41, 0xe5, 0xed, 0x9b, 0xbe, 0xdb, 0xad, 0x4c, 0x24, 0xdb, + 0xaf, 0xf9, 0x6e, 0x17, 0x05, 0x87, 0xfc, 0x69, 0x0e, 0x66, 0xc3, 0xd7, 0xbb, 0xed, 0x36, 0xcc, + 0xc0, 0x76, 0x9d, 0x4a, 0x5e, 0x0c, 0xf8, 0xb5, 0x91, 0x3a, 0x22, 0x04, 0xab, 0x55, 0x94, 0xd6, + 0xd9, 0x34, 0x07, 0xfb, 0x14, 0x93, 0x2b, 0x00, 0xad, 0x8e, 0xbb, 0x63, 0x76, 0x78, 0x1f, 0x54, + 0x0a, 0xe2, 0xad, 0xf5, 0x10, 0x5e, 0xd7, 0x1c, 0x8c, 0x49, 0x91, 0x5d, 0x98, 0x34, 0xe5, 0xaa, + 0xa8, 0x4c, 0x8a, 0xf7, 0x5e, 0x1d, 0xf2, 0xbd, 0x13, 0x2b, 0xab, 0x56, 0x3e, 0x3c, 0xa8, 0x4e, + 0x2a, 0x22, 0x86, 0x1a, 0xc8, 0x2b, 0x50, 0x74, 0x3d, 0xfe, 0xaa, 0x66, 0xa7, 0x52, 0xbc, 0x94, + 0xbb, 0x5c, 0xac, 0xcd, 0xaa, 0xd7, 0x2b, 0x6e, 0x2a, 0x3a, 0x6a, 0x09, 0xe3, 0x9f, 0x0a, 0xd0, + 0xf7, 0xd5, 0xe4, 0x55, 0x28, 0x2b, 0xb4, 0xdb, 0x6e, 0x8b, 0x89, 0xc1, 0x2f, 0xd6, 0x66, 0x0e, + 0x0f, 0xaa, 0xe5, 0xe5, 0x88, 0x8c, 0x71, 0x19, 0x72, 0x1f, 0xc6, 0xd8, 0x55, 0xb5, 0x0c, 0xdf, + 0x1a, 0xea, 0xeb, 0xea, 0x57, 0xf5, 0x04, 0x2d, 0x1c, 0x1e, 0x54, 0xc7, 0xea, 0x57, 0x71, 0x8c, + 0x5d, 0xe5, 0xe6, 0xa3, 0x65, 0x07, 0x62, 0xf2, 0x0c, 0x6b, 0x3e, 0xae, 0xdb, 0x81, 0x86, 0x16, + 0xe6, 0xe3, 0xba, 0x1d, 0x20, 0x47, 0xe5, 0xe6, 0xa3, 0x1d, 0x04, 0x9e, 0x98, 0x7c, 0xc3, 0x9a, + 0x8f, 0x1b, 0xdb, 0xdb, 0x5b, 0x1a, 0x5e, 0xcc, 0x6e, 0x4e, 0x41, 0x01, 0x4c, 0xde, 0xe7, 0x3d, + 0x29, 0x79, 0xae, 0xbf, 0xaf, 0x66, 0xed, 0x8d, 0x91, 0x66, 0xad, 0xeb, 0xef, 0x6b, 0x75, 0x6a, + 0x4c, 0x34, 0x03, 0xe3, 0xda, 0xc4, 0xd7, 0x59, 0x4d, 0x26, 0x26, 0xe9, 0xd0, 0x5f, 0xb7, 0xba, + 0x56, 0x4f, 0x7d, 0xdd, 0xea, 0x5a, 0x1d, 0x05, 0x30, 0x1f, 0x1b, 0xdf, 0xdc, 0x53, 0x73, 0x7a, + 0xb8, 0xb1, 0x41, 0x73, 0x2f, 0x39, 0x36, 0x68, 0xee, 0x21, 0x47, 0xe5, 0xe0, 0x2e, 0x63, 0x62, + 0x0a, 0x0f, 0x0b, 0xbe, 0x59, 0xaf, 0x27, 0xc1, 0x37, 0xeb, 0x75, 0xe4, 0xa8, 0x62, 0x56, 0x35, + 0x58, 0xa5, 0x34, 0xca, 0xac, 0x5a, 0x49, 0x81, 0x5f, 0x5f, 0xa9, 0x23, 0x47, 0x35, 0x5a, 0x70, + 0x2e, 0xe4, 0x20, 0xf5, 0x5c, 0x66, 0x8b, 0xa1, 0xa1, 0x4d, 0xb2, 0x04, 0xa5, 0x86, 0xeb, 0x34, + 0xed, 0xd6, 0x1d, 0xd3, 0x53, 0x26, 0x55, 0xdb, 0xe2, 0x95, 0x90, 0x81, 0x91, 0x0c, 0x79, 0x1e, + 0xc6, 0x77, 0xe9, 0xbe, 0xb2, 0xad, 0x65, 0x25, 0x3a, 0x7e, 0x8b, 0xee, 0x23, 0xa7, 0x1b, 0xdf, + 0xc9, 0xc1, 0xd9, 0x8c, 0x69, 0xc1, 0x9b, 0xf5, 0xfc, 0x8e, 0xd2, 0xa0, 0x9b, 0xdd, 0xc5, 0xdb, + 0xc8, 0xe9, 0xe4, 0xab, 0x39, 0x98, 0x89, 0xcd, 0x93, 0xe5, 0x9e, 0x32, 0xdf, 0xc3, 0xdb, 0xa5, + 0x04, 0x56, 0xed, 0x82, 0xd2, 0x38, 0x93, 0x62, 0x60, 0x5a, 0xab, 0xf1, 0x2f, 0xc2, 0x5f, 0x48, + 0xd0, 0x88, 0x09, 0xa7, 0x7b, 0x8c, 0xfa, 0x7c, 0x73, 0xa9, 0xd3, 0x86, 0x4f, 0x03, 0xe5, 0x3a, + 0xbc, 0xb8, 0x28, 0x9d, 0x12, 0xfe, 0x16, 0x8b, 0xdc, 0x95, 0x5a, 0x7c, 0xf8, 0xea, 0xa2, 0x94, + 0xb8, 0x45, 0xf7, 0xeb, 0xb4, 0x43, 0x39, 0x46, 0x8d, 0x1c, 0x1e, 0x54, 0x4f, 0xdf, 0x4d, 0x00, + 0x60, 0x0a, 0x90, 0xab, 0xf0, 0x4c, 0xc6, 0xf6, 0x5c, 0xdf, 0x52, 0x2a, 0xc6, 0x9e, 0x58, 0xc5, + 0x56, 0x02, 0x00, 0x53, 0x80, 0xc6, 0x37, 0x72, 0x30, 0x59, 0x33, 0x1b, 0xbb, 0x6e, 0xb3, 0xc9, + 0x2d, 0xb2, 0xd5, 0xf3, 0xe5, 0xbe, 0x25, 0xc7, 0x44, 0x5b, 0xe4, 0x55, 0x45, 0x47, 0x2d, 0x41, + 0x5e, 0x82, 0x82, 0xec, 0x0e, 0xf1, 0x52, 0xf9, 0xda, 0x69, 0x25, 0x5b, 0x58, 0x13, 0x54, 0x54, + 0x5c, 0xf2, 0x1a, 0x94, 0xbb, 0xe6, 0x7b, 0x21, 0x80, 0x30, 0x90, 0xa5, 0xda, 0x59, 0x25, 0x5c, + 0xbe, 0x13, 0xb1, 0x30, 0x2e, 0x67, 0x7c, 0x2d, 0x07, 0x7c, 0xae, 0x59, 0xb6, 0x50, 0xf6, 0x05, + 0x28, 0xb0, 0xc0, 0x0c, 0x7a, 0x4c, 0xbd, 0xd8, 0x5a, 0xa8, 0xac, 0x2e, 0xa8, 0x47, 0x07, 0xd5, + 0x63, 0x79, 0x9c, 0x8b, 0x1a, 0x51, 0xb6, 0x43, 0x85, 0xca, 0x77, 0xf7, 0x60, 0xdf, 0xa3, 0x69, + 0xef, 0x60, 0x7b, 0xdf, 0xa3, 0x28, 0x38, 0xc6, 0xe7, 0x00, 0x56, 0x5c, 0x27, 0xb0, 0x9d, 0x1e, + 0xdd, 0x74, 0xc8, 0x0b, 0x90, 0xa7, 0xbe, 0xef, 0xfa, 0x6a, 0xcf, 0x99, 0x56, 0x0d, 0xf2, 0xd7, + 0x38, 0x11, 0x25, 0x4f, 0xf6, 0x90, 0xdd, 0xa1, 0x96, 0x80, 0x2d, 0xc6, 0x7b, 0x88, 0x53, 0x51, + 0x71, 0x8d, 0x45, 0x98, 0x5c, 0x71, 0x7b, 0x4e, 0x40, 0x7d, 0x8e, 0xfb, 0xd0, 0xec, 0xf4, 0x42, + 0x47, 0x46, 0xe3, 0xde, 0xe3, 0x44, 0x94, 0x3c, 0xe3, 0xfb, 0x63, 0x30, 0xb5, 0xe2, 0xbb, 0xce, + 0x7d, 0x35, 0xc3, 0xc9, 0x6f, 0x43, 0x91, 0x7f, 0xa0, 0x65, 0x06, 0xa6, 0x9a, 0x84, 0x1f, 0x8f, + 0xcd, 0x10, 0xdd, 0x1d, 0xd1, 0xda, 0xe0, 0xd2, 0x7c, 0xce, 0x6c, 0xee, 0x3c, 0xa0, 0x8d, 0xe0, + 0x0e, 0x0d, 0xcc, 0xc8, 0x37, 0x88, 0x68, 0xa8, 0x51, 0x49, 0x0b, 0x26, 0x98, 0x47, 0x1b, 0x6a, + 0xfe, 0x0d, 0xe7, 0xce, 0xc4, 0x5f, 0xb9, 0xee, 0xd1, 0x46, 0xd4, 0xcd, 0xfc, 0x09, 0x85, 0x02, + 0xe2, 0xea, 0x81, 0x96, 0x3b, 0xe9, 0xf5, 0xd1, 0x55, 0x09, 0xb8, 0xa8, 0xf3, 0x93, 0x23, 0x6f, + 0xfc, 0x30, 0x07, 0xb3, 0x71, 0xf1, 0xdb, 0x36, 0x0b, 0xc8, 0xbb, 0x7d, 0x1d, 0xba, 0x78, 0xbc, + 0x0e, 0xe5, 0xad, 0x45, 0x77, 0xea, 0x95, 0x13, 0x52, 0x62, 0x9d, 0xd9, 0x84, 0xbc, 0x1d, 0xd0, + 0x6e, 0xe8, 0x25, 0x2f, 0x8f, 0xfc, 0x89, 0xd1, 0x3c, 0x59, 0xe7, 0xb8, 0x28, 0xe1, 0x8d, 0xff, + 0xcd, 0x27, 0x3f, 0x8d, 0x77, 0x33, 0xf7, 0x52, 0xa7, 0xf6, 0x62, 0x04, 0xf5, 0x7d, 0xc3, 0xbd, + 0x44, 0x62, 0x38, 0x7f, 0x45, 0xbd, 0xc4, 0x54, 0x9c, 0x7a, 0x94, 0x7a, 0xc6, 0x84, 0x72, 0x6e, + 0x72, 0x78, 0x88, 0x66, 0xf5, 0x3a, 0xe1, 0xda, 0xd3, 0x1d, 0x57, 0x57, 0x74, 0xd4, 0x12, 0xe4, + 0x5d, 0x38, 0xd3, 0x70, 0x9d, 0x46, 0xcf, 0xf7, 0xa9, 0xd3, 0xd8, 0xdf, 0x12, 0x21, 0xa8, 0x32, + 0x28, 0x8b, 0xaa, 0xd9, 0x99, 0x95, 0xb4, 0xc0, 0x51, 0x16, 0x11, 0xfb, 0x81, 0xc8, 0xcb, 0x30, + 0xc9, 0x7a, 0xcc, 0xa3, 0x8e, 0x25, 0xfc, 0xac, 0x62, 0x6d, 0x46, 0x61, 0x4e, 0xd6, 0x25, 0x19, + 0x43, 0x3e, 0xb9, 0x0b, 0x17, 0x58, 0xc0, 0x37, 0x09, 0xa7, 0xb5, 0x4a, 0x4d, 0xab, 0x63, 0x3b, + 0xdc, 0x64, 0xbb, 0x8e, 0xc5, 0x84, 0xeb, 0x34, 0x5e, 0xfb, 0xc8, 0xe1, 0x41, 0xf5, 0x42, 0x3d, + 0x5b, 0x04, 0x07, 0xb5, 0x25, 0x5f, 0x80, 0x79, 0xd6, 0x6b, 0x34, 0x28, 0x63, 0xcd, 0x5e, 0xe7, + 0xa6, 0xbb, 0xc3, 0x6e, 0xd8, 0x8c, 0xef, 0x37, 0xb7, 0xed, 0xae, 0x1d, 0x08, 0xf7, 0x28, 0x5f, + 0x5b, 0x38, 0x3c, 0xa8, 0xce, 0xd7, 0x07, 0x4a, 0xe1, 0x23, 0x10, 0x08, 0xc2, 0x79, 0x69, 0x72, + 0xfa, 0xb0, 0x27, 0x05, 0xf6, 0xfc, 0xe1, 0x41, 0xf5, 0xfc, 0x5a, 0xa6, 0x04, 0x0e, 0x68, 0xc9, + 0x47, 0x90, 0x47, 0xda, 0x5f, 0xe6, 0xd1, 0x6d, 0x31, 0x39, 0x82, 0xdb, 0x8a, 0x8e, 0x5a, 0x82, + 0x3c, 0x88, 0x26, 0x1f, 0x5f, 0x14, 0xca, 0xb1, 0x79, 0x72, 0x6b, 0x35, 0xc7, 0xa3, 0xa0, 0xfb, + 0x31, 0x24, 0xbe, 0xb0, 0x30, 0x81, 0x6d, 0xfc, 0x73, 0x0e, 0x48, 0xbf, 0x21, 0x20, 0xb7, 0xa0, + 0x60, 0x36, 0x02, 0x1e, 0xe3, 0xc8, 0xb8, 0xf8, 0x85, 0xac, 0xcd, 0x54, 0xaa, 0x42, 0xda, 0xa4, + 0x7c, 0x86, 0xd0, 0xc8, 0x7a, 0x2c, 0x8b, 0xa6, 0xa8, 0x20, 0x88, 0x0b, 0x67, 0x3a, 0x26, 0x0b, + 0xc2, 0xb9, 0x6a, 0xf1, 0x4f, 0x56, 0x46, 0xf2, 0xd7, 0x8e, 0xf7, 0x51, 0xbc, 0x45, 0xed, 0x1c, + 0x9f, 0xb9, 0xb7, 0xd3, 0x40, 0xd8, 0x8f, 0x6d, 0x7c, 0xb7, 0x00, 0x93, 0xab, 0xcb, 0xd7, 0xb7, + 0x4d, 0xb6, 0x7b, 0x8c, 0xa0, 0x97, 0x0f, 0x0e, 0xed, 0x7a, 0x1d, 0x33, 0xe8, 0x5b, 0x5e, 0xdb, + 0x8a, 0x8e, 0x5a, 0x82, 0xb8, 0x3c, 0x82, 0x57, 0x29, 0x04, 0x65, 0x7e, 0xdf, 0x1c, 0xd2, 0xd1, + 0x52, 0x28, 0xf1, 0x10, 0x5e, 0x91, 0x30, 0xd2, 0x41, 0x18, 0x94, 0x43, 0xe5, 0x48, 0x9b, 0x2a, + 0xba, 0x19, 0x32, 0xf5, 0x12, 0xe1, 0xc8, 0x68, 0x23, 0x46, 0xc0, 0xb8, 0x16, 0xf2, 0x09, 0x98, + 0xb2, 0x28, 0x5f, 0xc5, 0xd4, 0x69, 0xd8, 0x94, 0x2f, 0xd8, 0x71, 0xde, 0x2f, 0xdc, 0x70, 0xad, + 0xc6, 0xe8, 0x98, 0x90, 0x22, 0x0f, 0xa0, 0xb4, 0x67, 0x07, 0x6d, 0x61, 0x5f, 0x2b, 0x05, 0x31, + 0x71, 0x3e, 0x39, 0xd4, 0x8b, 0x72, 0x84, 0xa8, 0x5b, 0xee, 0x87, 0x98, 0x18, 0xc1, 0x73, 0xf7, + 0x9b, 0x3f, 0x88, 0x3c, 0x8b, 0x58, 0x99, 0xa5, 0x64, 0x03, 0xc1, 0xc0, 0x48, 0x86, 0x30, 0x98, + 0xe2, 0x0f, 0x75, 0xfa, 0xa5, 0x1e, 0x9f, 0xad, 0x2a, 0x16, 0x19, 0x2e, 0xfb, 0x12, 0x82, 0xc8, + 0x1e, 0xb9, 0x1f, 0x83, 0xc5, 0x84, 0x12, 0x3e, 0xfb, 0xf6, 0xda, 0xd4, 0x11, 0x4b, 0x38, 0x36, + 0xfb, 0xee, 0xb7, 0xa9, 0x83, 0x82, 0x43, 0x5c, 0x80, 0x86, 0x76, 0x99, 0x2a, 0x30, 0x42, 0xcc, + 0x1d, 0x79, 0x5e, 0xb5, 0xd3, 0xdc, 0x47, 0x89, 0x9e, 0x31, 0xa6, 0x82, 0x3b, 0x5c, 0xae, 0x73, + 0xed, 0x3d, 0x3b, 0xa8, 0x94, 0xc5, 0x4b, 0xe9, 0x55, 0xbb, 0x29, 0xa8, 0xa8, 0xb8, 0xc6, 0x77, + 0x73, 0x50, 0xe6, 0x8b, 0x28, 0x9c, 0xf8, 0x2f, 0x41, 0x21, 0x30, 0xfd, 0x96, 0x72, 0xe1, 0x63, + 0xed, 0xb6, 0x05, 0x15, 0x15, 0x97, 0x98, 0x90, 0x0f, 0x4c, 0xb6, 0x1b, 0x6e, 0xdc, 0x9f, 0x19, + 0xea, 0x5b, 0xd4, 0xea, 0x8d, 0xf6, 0x6c, 0xfe, 0xc4, 0x50, 0x22, 0x93, 0xcb, 0x50, 0xe4, 0x86, + 0x76, 0xcd, 0x64, 0x32, 0x97, 0x50, 0xac, 0x4d, 0xf1, 0xd5, 0xba, 0xa6, 0x68, 0xa8, 0xb9, 0xc6, + 0xbb, 0x70, 0xfa, 0xda, 0x7b, 0xb4, 0xd1, 0x0b, 0x5c, 0x5f, 0xc6, 0x64, 0xe4, 0x26, 0x10, 0x46, + 0xfd, 0x87, 0x76, 0x83, 0x2e, 0x37, 0x1a, 0xdc, 0xa1, 0xdc, 0x88, 0xac, 0xc3, 0xbc, 0xd2, 0x46, + 0xea, 0x7d, 0x12, 0x98, 0xd1, 0xca, 0xf8, 0x8b, 0x1c, 0x94, 0x63, 0x91, 0x23, 0xb7, 0x0d, 0xad, + 0x95, 0x7a, 0xad, 0xd7, 0xd8, 0xd5, 0x81, 0xce, 0x9b, 0xc3, 0x86, 0xa3, 0x12, 0x25, 0x9a, 0xd3, + 0x9a, 0x84, 0x91, 0x8e, 0xc7, 0x85, 0x94, 0x7f, 0x9f, 0x83, 0xa8, 0x1d, 0x1f, 0xc0, 0x9d, 0xe8, + 0xd5, 0x62, 0x03, 0xa8, 0x70, 0x15, 0x97, 0x7c, 0x90, 0x83, 0x0b, 0xc9, 0x8f, 0x15, 0xf1, 0xd2, + 0x93, 0x87, 0x56, 0x55, 0xa5, 0xe0, 0x42, 0x3d, 0x1b, 0x0d, 0x07, 0xa9, 0x31, 0xee, 0x41, 0xfe, + 0xba, 0xd9, 0x6b, 0xd1, 0x63, 0xb9, 0xfa, 0x7c, 0x3a, 0xf8, 0xd4, 0xec, 0x04, 0xe1, 0xb6, 0xa2, + 0xa6, 0x03, 0x2a, 0x1a, 0x6a, 0xae, 0xf1, 0x37, 0x13, 0x50, 0x8e, 0x25, 0x90, 0xf8, 0xf2, 0xf4, + 0xa9, 0xe7, 0xa6, 0x37, 0x07, 0x1e, 0xe8, 0xa3, 0xe0, 0xf0, 0xcd, 0xc1, 0xa7, 0x0f, 0x6d, 0xc6, + 0xa3, 0xb2, 0xd4, 0xe6, 0x80, 0x8a, 0x8e, 0x5a, 0x82, 0x54, 0x21, 0x6f, 0x51, 0x2f, 0x68, 0x8b, + 0x59, 0x39, 0x51, 0x2b, 0xf1, 0x57, 0x5d, 0xe5, 0x04, 0x94, 0x74, 0x2e, 0xd0, 0xa4, 0x41, 0xa3, + 0x5d, 0x99, 0x10, 0x06, 0x55, 0x08, 0xac, 0x71, 0x02, 0x4a, 0x7a, 0x46, 0xc0, 0x9c, 0x7f, 0xfa, + 0x01, 0x73, 0xe1, 0x84, 0x03, 0x66, 0xe2, 0xc1, 0x59, 0xc6, 0xda, 0x5b, 0xbe, 0xfd, 0xd0, 0x0c, + 0x68, 0x34, 0x7b, 0x26, 0x9f, 0x44, 0xcf, 0x85, 0xc3, 0x83, 0xea, 0xd9, 0x7a, 0xfd, 0x46, 0x1a, + 0x05, 0xb3, 0xa0, 0x49, 0x1d, 0xce, 0xd9, 0x0e, 0xa3, 0x8d, 0x9e, 0x4f, 0xd7, 0x5b, 0x8e, 0xeb, + 0xd3, 0x1b, 0x2e, 0xe3, 0x70, 0x2a, 0x6b, 0xfa, 0xbc, 0x1a, 0xb4, 0x73, 0xeb, 0x59, 0x42, 0x98, + 0xdd, 0xd6, 0xf8, 0x7e, 0x0e, 0xa6, 0xe2, 0x39, 0x33, 0xc2, 0x00, 0xda, 0xab, 0x6b, 0x75, 0x69, + 0x4a, 0xd4, 0x0a, 0x7f, 0x6b, 0xe8, 0x54, 0x9c, 0x84, 0x89, 0x82, 0xca, 0x88, 0x86, 0x31, 0x35, + 0xc7, 0x48, 0xca, 0xbf, 0x00, 0xf9, 0xa6, 0xeb, 0x37, 0xa8, 0x32, 0x86, 0x7a, 0x95, 0xac, 0x71, + 0x22, 0x4a, 0x9e, 0xf1, 0x93, 0x1c, 0xc4, 0x34, 0x90, 0xdf, 0x83, 0x69, 0xae, 0xe3, 0x96, 0xbf, + 0x93, 0xf8, 0x9a, 0xda, 0xd0, 0x5f, 0xa3, 0x91, 0x6a, 0xe7, 0x94, 0xfe, 0xe9, 0x04, 0x19, 0x93, + 0xfa, 0xc8, 0xaf, 0x43, 0xc9, 0xb4, 0x2c, 0x9f, 0x32, 0x46, 0xe5, 0x5e, 0x51, 0xaa, 0x4d, 0x0b, + 0x27, 0x28, 0x24, 0x62, 0xc4, 0xe7, 0xcb, 0xb0, 0x6d, 0x35, 0x19, 0x9f, 0xd9, 0x2a, 0x96, 0xd1, + 0xcb, 0x90, 0x2b, 0xe1, 0x74, 0xd4, 0x12, 0xc6, 0xd7, 0x26, 0x20, 0xa9, 0x9b, 0x58, 0x30, 0xb3, + 0xeb, 0xef, 0xac, 0xac, 0x98, 0x8d, 0xf6, 0x50, 0x89, 0xa8, 0xb3, 0x87, 0x07, 0xd5, 0x99, 0x5b, + 0x49, 0x04, 0x4c, 0x43, 0x2a, 0x2d, 0xb7, 0xe8, 0x7e, 0x60, 0xee, 0x0c, 0x63, 0x30, 0x43, 0x2d, + 0x71, 0x04, 0x4c, 0x43, 0x92, 0xd7, 0xa0, 0xbc, 0xeb, 0xef, 0x84, 0x8b, 0x3c, 0x9d, 0x2b, 0xba, + 0x15, 0xb1, 0x30, 0x2e, 0xc7, 0xbb, 0x70, 0xd7, 0xdf, 0xe1, 0x46, 0x31, 0x3c, 0x9f, 0xd1, 0x5d, + 0x78, 0x4b, 0xd1, 0x51, 0x4b, 0x10, 0x0f, 0xc8, 0x6e, 0xd8, 0x7b, 0x3a, 0x9b, 0xa9, 0x6c, 0xd1, + 0xe5, 0xac, 0xaf, 0xd1, 0x42, 0xf1, 0x0f, 0x3a, 0xcf, 0x37, 0xd3, 0x5b, 0x7d, 0x38, 0x98, 0x81, + 0x4d, 0x3e, 0x07, 0x17, 0x76, 0xfd, 0x1d, 0xb5, 0x55, 0x6c, 0xf9, 0xb6, 0xd3, 0xb0, 0xbd, 0xc4, + 0xc1, 0x8c, 0xde, 0x4e, 0x6e, 0x65, 0x8b, 0xe1, 0xa0, 0xf6, 0xc6, 0xc7, 0x60, 0x2a, 0x9e, 0xd8, + 0x7f, 0x4c, 0x4a, 0xd5, 0xb8, 0x0f, 0x25, 0x11, 0xbd, 0xb5, 0xb8, 0xdb, 0xa8, 0x77, 0xa0, 0xf1, + 0x47, 0xec, 0x40, 0x2f, 0xc2, 0xa4, 0xdc, 0x3c, 0x99, 0x30, 0xec, 0x39, 0x79, 0x9a, 0x23, 0xf7, + 0x55, 0x86, 0x21, 0xcf, 0xf8, 0xef, 0x1c, 0x14, 0xd6, 0x1d, 0xaf, 0xf7, 0x0b, 0x72, 0xf8, 0xf8, + 0xed, 0x09, 0x98, 0xe0, 0xce, 0x3a, 0xb9, 0xac, 0x12, 0x87, 0x39, 0x11, 0xf6, 0xcf, 0xc5, 0x13, + 0x87, 0x47, 0x89, 0x04, 0x22, 0x79, 0x13, 0x0a, 0x4e, 0xaf, 0x7b, 0xcf, 0xec, 0x28, 0x6b, 0xf7, + 0x52, 0xe8, 0xa3, 0x6c, 0x08, 0xea, 0xd1, 0x41, 0x75, 0x8e, 0x3a, 0x0d, 0xd7, 0xb2, 0x9d, 0xd6, + 0xd2, 0x03, 0xe6, 0x3a, 0x8b, 0x1b, 0xbd, 0xee, 0x0e, 0xf5, 0x51, 0xb5, 0x22, 0x2f, 0xc3, 0xe4, + 0x8e, 0xeb, 0x76, 0x38, 0xc0, 0x78, 0x32, 0x3d, 0x51, 0x93, 0x64, 0x0c, 0xf9, 0xdc, 0x1d, 0x62, + 0x81, 0xcf, 0x25, 0x27, 0x92, 0xee, 0x50, 0x5d, 0x50, 0x51, 0x71, 0x49, 0x17, 0x0a, 0x5d, 0xd3, + 0xe3, 0x72, 0x79, 0xd1, 0x65, 0xd7, 0x86, 0x8e, 0x68, 0x16, 0xef, 0x08, 0x9c, 0x6b, 0x4e, 0xe0, + 0xef, 0x47, 0xea, 0x24, 0x11, 0x95, 0x12, 0x62, 0xc3, 0x64, 0xc7, 0x66, 0x01, 0xd7, 0x57, 0x18, + 0x61, 0x56, 0x70, 0x7d, 0x62, 0x8a, 0x46, 0x3d, 0x70, 0x5b, 0xc2, 0x62, 0x88, 0x3f, 0xbf, 0x0f, + 0xe5, 0xd8, 0x1b, 0x91, 0x59, 0xe9, 0x4c, 0x8a, 0x55, 0x21, 0xfc, 0x47, 0xb2, 0x1d, 0xce, 0xfd, + 0xb1, 0x11, 0x7c, 0x59, 0xfd, 0x26, 0x6a, 0xb1, 0x7c, 0x6a, 0xec, 0xf5, 0xdc, 0xa7, 0x8a, 0xdf, + 0xfc, 0xcb, 0xea, 0xa9, 0x0f, 0xfe, 0xed, 0xd2, 0x29, 0xe3, 0x1f, 0xc6, 0xa1, 0xa4, 0x45, 0xfe, + 0x7f, 0xcf, 0x14, 0x3f, 0x35, 0x53, 0x6e, 0x8e, 0xd6, 0x5f, 0xc7, 0x9a, 0x2e, 0xcb, 0xc9, 0xe9, + 0x32, 0x55, 0xfb, 0xd5, 0xd8, 0x50, 0x1f, 0x1d, 0x54, 0x2b, 0xc9, 0x4e, 0x40, 0x73, 0xef, 0x0e, + 0x65, 0xcc, 0x6c, 0xd1, 0x68, 0x1a, 0x7c, 0xf2, 0x71, 0xd3, 0x60, 0x2e, 0x3e, 0x0d, 0x4a, 0xd9, + 0xc3, 0xd8, 0x81, 0x89, 0xdb, 0xb6, 0x73, 0x9c, 0x74, 0xcb, 0x0b, 0x90, 0x67, 0x0d, 0x57, 0x1f, + 0x23, 0x68, 0x83, 0x5a, 0xe7, 0x44, 0x94, 0xbc, 0xd0, 0x42, 0x8f, 0x0f, 0xb0, 0xd0, 0x1f, 0x8c, + 0x43, 0x31, 0x4c, 0x68, 0x91, 0x3f, 0xcc, 0x41, 0xd9, 0x74, 0x1c, 0x37, 0x10, 0x67, 0x22, 0xa1, + 0x31, 0xdd, 0x18, 0xaa, 0xf3, 0x43, 0xd0, 0xc5, 0xe5, 0x08, 0x50, 0x0e, 0x80, 0xde, 0x60, 0x63, + 0x1c, 0x8c, 0xeb, 0x25, 0x5f, 0x82, 0x42, 0xc7, 0xdc, 0xa1, 0x9d, 0xd0, 0xb6, 0xae, 0x8f, 0xf6, + 0x06, 0xb7, 0x05, 0x56, 0x6a, 0xf4, 0x25, 0x11, 0x95, 0xa2, 0xf9, 0x37, 0x61, 0x36, 0xfd, 0xa2, + 0x4f, 0x32, 0x7e, 0x7c, 0xe8, 0x63, 0x6a, 0x9e, 0xa4, 0xa9, 0xf1, 0x59, 0x28, 0xdf, 0xa1, 0x81, + 0x6f, 0x37, 0x04, 0x40, 0x18, 0x89, 0xe6, 0xb2, 0x23, 0xd1, 0x68, 0x17, 0x1d, 0x7b, 0xc4, 0x91, + 0xcd, 0x97, 0x61, 0x52, 0x42, 0x32, 0xe2, 0x02, 0x78, 0xbe, 0xdb, 0xa5, 0x41, 0x9b, 0xf6, 0xc2, + 0x11, 0x1d, 0xce, 0xd1, 0xde, 0xd2, 0x30, 0x32, 0x2b, 0x12, 0x3d, 0x63, 0x4c, 0x85, 0xf1, 0xb7, + 0x53, 0x00, 0x1b, 0xae, 0x45, 0x55, 0xfe, 0x73, 0x1e, 0xc6, 0x6c, 0x4b, 0x7d, 0x0d, 0xa8, 0x97, + 0x1d, 0x5b, 0x5f, 0xc5, 0x31, 0xdb, 0xd2, 0x53, 0x7c, 0x6c, 0xe0, 0x14, 0x7f, 0x0d, 0xca, 0x96, + 0xcd, 0xbc, 0x8e, 0xb9, 0xbf, 0x91, 0xe1, 0xa1, 0xad, 0x46, 0x2c, 0x8c, 0xcb, 0x91, 0x57, 0x94, + 0xf1, 0x93, 0x56, 0xa6, 0x92, 0x32, 0x7e, 0x45, 0xfe, 0x7a, 0x31, 0x03, 0xf8, 0x3a, 0x4c, 0x85, + 0x19, 0x3b, 0xa1, 0x25, 0x2f, 0x5a, 0x85, 0x26, 0x73, 0x6a, 0x3b, 0xc6, 0xc3, 0x84, 0x64, 0x3a, + 0xa3, 0x58, 0x78, 0x26, 0x19, 0xc5, 0x55, 0x98, 0x65, 0x81, 0xeb, 0x53, 0x2b, 0x94, 0x58, 0x5f, + 0xad, 0x90, 0xc4, 0x87, 0xce, 0xd6, 0x53, 0x7c, 0xec, 0x6b, 0x41, 0xb6, 0x60, 0x2e, 0x7c, 0x89, + 0xf8, 0x07, 0x56, 0xce, 0x0a, 0xa4, 0x8b, 0x0a, 0x69, 0xee, 0x7e, 0x86, 0x0c, 0x66, 0xb6, 0x24, + 0x9f, 0x86, 0xe9, 0xf0, 0x35, 0x85, 0x05, 0xaa, 0xcc, 0x09, 0x28, 0x1d, 0xc3, 0x6c, 0xc7, 0x99, + 0x98, 0x94, 0x25, 0x1f, 0x87, 0xbc, 0xd7, 0x36, 0x19, 0x55, 0x09, 0xc8, 0x30, 0x7f, 0x94, 0xdf, + 0xe2, 0xc4, 0xa3, 0x83, 0x6a, 0x89, 0x8f, 0x99, 0x78, 0x40, 0x29, 0x48, 0xae, 0x00, 0xec, 0xb8, + 0x3d, 0xc7, 0x32, 0xfd, 0xfd, 0xf5, 0x55, 0x75, 0x16, 0xa0, 0xfd, 0xb6, 0x9a, 0xe6, 0x60, 0x4c, + 0x8a, 0x6f, 0x55, 0x5d, 0x69, 0xb4, 0x55, 0x1e, 0x51, 0x6f, 0x55, 0xda, 0x96, 0x2b, 0x3e, 0x79, + 0x07, 0x4a, 0xe2, 0xdc, 0x84, 0x5a, 0xcb, 0x81, 0x4a, 0x26, 0x3e, 0x49, 0x8a, 0x5d, 0xfb, 0x73, + 0xf5, 0x10, 0x04, 0x23, 0x3c, 0xf2, 0x05, 0x80, 0xa6, 0xed, 0xd8, 0xac, 0x2d, 0xd0, 0xcb, 0x4f, + 0x8c, 0xae, 0xbf, 0x73, 0x4d, 0xa3, 0x60, 0x0c, 0x91, 0xfc, 0x34, 0x07, 0x67, 0x7c, 0xca, 0xdc, + 0x9e, 0xdf, 0xa0, 0x4c, 0x9f, 0x85, 0x9f, 0x13, 0x8b, 0xff, 0xde, 0x90, 0xd5, 0x80, 0xe1, 0x8a, + 0x5e, 0xc4, 0x34, 0xb0, 0xb4, 0xac, 0x34, 0x3c, 0x12, 0xeb, 0xe3, 0x1f, 0x65, 0x11, 0xbf, 0xf2, + 0xa3, 0x6a, 0xb5, 0xbf, 0x08, 0x54, 0x83, 0xf3, 0x19, 0xf5, 0x27, 0x3f, 0xaa, 0xce, 0x86, 0xcf, + 0xfa, 0xd4, 0xbe, 0xff, 0xbb, 0xb8, 0x49, 0xf4, 0x5c, 0x6b, 0x7d, 0xab, 0x32, 0x95, 0x34, 0x89, + 0x5b, 0x9c, 0x88, 0x92, 0x47, 0x2e, 0x43, 0xd1, 0x32, 0x69, 0xd7, 0x75, 0xa8, 0x55, 0x99, 0x8e, + 0x52, 0x5b, 0xab, 0x8a, 0x86, 0x9a, 0x4b, 0xbe, 0x08, 0x05, 0x5b, 0x84, 0x16, 0x95, 0xd3, 0x62, + 0x60, 0x3e, 0x3d, 0x9c, 0xf3, 0x21, 0x20, 0x6a, 0xc0, 0xf7, 0x1a, 0xf9, 0x1b, 0x15, 0x2c, 0x69, + 0xc0, 0xa4, 0xdb, 0x0b, 0x84, 0x86, 0x19, 0xa1, 0x61, 0xb8, 0xcc, 0xee, 0xa6, 0xc4, 0x90, 0x11, + 0x92, 0x7a, 0xc0, 0x10, 0x99, 0x7f, 0x6f, 0xa3, 0x6d, 0x77, 0x2c, 0x9f, 0x3a, 0x95, 0x59, 0x91, + 0x13, 0x10, 0xdf, 0xbb, 0xa2, 0x68, 0xa8, 0xb9, 0xe4, 0x37, 0x61, 0xda, 0xed, 0x05, 0x62, 0x95, + 0xf0, 0x51, 0x66, 0x95, 0x33, 0x42, 0xfc, 0x0c, 0x5f, 0xb3, 0x9b, 0x71, 0x06, 0x26, 0xe5, 0xe6, + 0x57, 0xe1, 0x7c, 0xf6, 0x5c, 0x78, 0xdc, 0xf6, 0x37, 0x1e, 0xdf, 0xfe, 0x4e, 0xc3, 0x54, 0xbc, + 0xd4, 0x54, 0xa4, 0x82, 0x63, 0x15, 0x4a, 0xc4, 0x85, 0x92, 0x5b, 0x3f, 0x89, 0x54, 0xf0, 0x66, + 0xbd, 0x2f, 0x15, 0xac, 0x49, 0x18, 0xe9, 0x78, 0x5c, 0x2a, 0xf8, 0xef, 0xc6, 0x20, 0x6a, 0x47, + 0x5e, 0x81, 0x22, 0x75, 0x2c, 0xcf, 0xb5, 0x9d, 0x20, 0x5d, 0xc4, 0x72, 0x4d, 0xd1, 0x51, 0x4b, + 0xc4, 0x12, 0xc7, 0x63, 0x8f, 0x4c, 0x1c, 0xb7, 0x61, 0xc6, 0x14, 0xc7, 0xaa, 0x51, 0xc6, 0x6f, + 0xfc, 0x89, 0x32, 0x7e, 0xba, 0xd4, 0x28, 0x89, 0x82, 0x69, 0x58, 0xae, 0x89, 0x45, 0xcd, 0x85, + 0xa6, 0x89, 0xa1, 0x34, 0xd5, 0x93, 0x28, 0x98, 0x86, 0x35, 0xbe, 0x3e, 0x06, 0xe1, 0x2c, 0xfd, + 0x45, 0x88, 0xd9, 0x89, 0x01, 0x05, 0x9f, 0xb2, 0x5e, 0x27, 0x50, 0x5e, 0x8b, 0xb0, 0x04, 0x28, + 0x28, 0xa8, 0x38, 0xc6, 0x1e, 0x4c, 0xf3, 0xb7, 0xed, 0x74, 0x68, 0xa7, 0x1e, 0x50, 0x8f, 0x91, + 0x26, 0xe4, 0x19, 0xff, 0xa1, 0xfa, 0x64, 0xc4, 0x32, 0x89, 0x80, 0x7a, 0xb1, 0xa8, 0x80, 0xe3, + 0xa2, 0x84, 0x37, 0xbe, 0x31, 0x06, 0x25, 0xdd, 0x4f, 0xc7, 0x08, 0x35, 0x5e, 0x84, 0x49, 0x8b, + 0x36, 0x4d, 0xfe, 0x35, 0x6a, 0x5d, 0x70, 0xa3, 0xb3, 0x2a, 0x49, 0x18, 0xf2, 0x48, 0x35, 0x99, + 0xe2, 0x29, 0xf5, 0xa5, 0x77, 0x76, 0xa1, 0x24, 0x7e, 0xac, 0x85, 0xb5, 0xcd, 0xc3, 0x8e, 0xfb, + 0xbd, 0x10, 0x45, 0xa6, 0x3a, 0xf5, 0x23, 0x46, 0xf8, 0xa9, 0x9a, 0xe4, 0xfc, 0x71, 0x6a, 0x92, + 0x8d, 0x35, 0xe0, 0xdb, 0xc6, 0xf5, 0x15, 0xf2, 0x06, 0x14, 0x99, 0x32, 0x49, 0xaa, 0x5f, 0x3e, + 0xaa, 0x4b, 0x45, 0x14, 0xfd, 0xe8, 0xa0, 0x3a, 0x2d, 0x84, 0x43, 0x02, 0xea, 0x26, 0xc6, 0x57, + 0x27, 0x20, 0xe6, 0x20, 0x1f, 0xa3, 0x87, 0xad, 0x54, 0xcc, 0xf3, 0xf6, 0xb0, 0x31, 0x4f, 0x18, + 0x48, 0xc8, 0x09, 0x97, 0x0c, 0x73, 0xf8, 0x7b, 0xb4, 0x69, 0xc7, 0x53, 0xe3, 0xa3, 0xdf, 0xe3, + 0x06, 0xed, 0x78, 0x28, 0x38, 0xfa, 0x9c, 0x75, 0x62, 0xe0, 0x39, 0xeb, 0x3b, 0x90, 0x6f, 0x99, + 0xbd, 0x16, 0x55, 0x39, 0xcc, 0x4f, 0x0d, 0x77, 0x2e, 0xc7, 0x11, 0xe4, 0x04, 0x11, 0x3f, 0x51, + 0x62, 0xf2, 0x09, 0xd2, 0x0e, 0x33, 0x86, 0xca, 0x9f, 0x1e, 0x6e, 0x82, 0xe8, 0xbc, 0xa3, 0x9c, + 0x20, 0xfa, 0x11, 0x23, 0x7c, 0xbe, 0x11, 0x37, 0x64, 0x25, 0x9c, 0x3a, 0x50, 0xf9, 0xcc, 0x90, + 0xc7, 0xc5, 0x02, 0x43, 0xae, 0x09, 0xf5, 0x80, 0x21, 0xb2, 0xb1, 0x04, 0xe5, 0x58, 0x35, 0x2f, + 0xef, 0x5f, 0x5d, 0xe7, 0x15, 0xeb, 0xdf, 0x55, 0x33, 0x30, 0x51, 0x70, 0x8c, 0xa3, 0x31, 0xd0, + 0x6e, 0x4f, 0xfc, 0xcc, 0xd8, 0x6c, 0xc4, 0x4a, 0x25, 0x13, 0x15, 0x22, 0xae, 0x83, 0x8a, 0xcb, + 0x9d, 0xf0, 0x2e, 0xf5, 0x5b, 0x7a, 0x3b, 0x55, 0xcb, 0x55, 0x3b, 0xe1, 0x77, 0xe2, 0x4c, 0x4c, + 0xca, 0xf2, 0xcd, 0xac, 0x6b, 0x3a, 0x76, 0x93, 0xb2, 0x20, 0x7d, 0x36, 0x70, 0x47, 0xd1, 0x51, + 0x4b, 0x90, 0xeb, 0x70, 0x86, 0xd1, 0x60, 0x73, 0xcf, 0xa1, 0xbe, 0xae, 0x5c, 0x51, 0xa5, 0x4c, + 0xcf, 0x85, 0xbe, 0x60, 0x3d, 0x2d, 0x80, 0xfd, 0x6d, 0x44, 0x40, 0x23, 0xab, 0x88, 0x74, 0xbd, + 0xa4, 0x5a, 0xad, 0x51, 0x40, 0x93, 0xe2, 0x63, 0x5f, 0x0b, 0x8e, 0xd2, 0x34, 0xed, 0x4e, 0xcf, + 0xa7, 0x11, 0x4a, 0x21, 0x89, 0xb2, 0x96, 0xe2, 0x63, 0x5f, 0x0b, 0xe3, 0x3f, 0x73, 0x30, 0x8d, + 0x34, 0xf0, 0xf7, 0x75, 0xa7, 0x54, 0x21, 0xdf, 0x11, 0x45, 0x4b, 0x39, 0x51, 0xb4, 0x24, 0xa6, + 0xac, 0xac, 0x51, 0x92, 0x74, 0xb2, 0x0a, 0x65, 0x9f, 0xb7, 0x50, 0x05, 0x62, 0xb2, 0xc3, 0x8d, + 0x30, 0x46, 0xc5, 0x88, 0x75, 0x94, 0x7c, 0xc4, 0x78, 0x33, 0xe2, 0xc0, 0xe4, 0x8e, 0x2c, 0x8c, + 0x55, 0x5b, 0xfd, 0x70, 0x73, 0x51, 0x15, 0xd7, 0x8a, 0xf3, 0x82, 0xb0, 0xd2, 0xf6, 0x28, 0xfa, + 0x89, 0xa1, 0x12, 0xe3, 0x9b, 0x39, 0x80, 0xe8, 0x6e, 0x01, 0xd9, 0x85, 0x22, 0xbb, 0x9a, 0x70, + 0xb2, 0x86, 0xac, 0xe7, 0x50, 0x20, 0xb1, 0xc2, 0x3a, 0x45, 0x41, 0xad, 0xe0, 0x71, 0x1e, 0xd6, + 0x4f, 0xc6, 0x41, 0xb7, 0x7a, 0x4a, 0x0e, 0xd6, 0x4b, 0x7c, 0x73, 0x6e, 0x45, 0x05, 0xc2, 0x5a, + 0x0e, 0x05, 0x15, 0x15, 0x97, 0x7b, 0xd1, 0xe1, 0x81, 0xa6, 0x9a, 0xda, 0xc2, 0x8b, 0x0e, 0xcf, + 0x3e, 0x51, 0x73, 0xb3, 0x5c, 0xb6, 0xfc, 0x33, 0x73, 0xd9, 0x0a, 0x4f, 0xc5, 0x65, 0xe3, 0xe1, + 0xb2, 0xef, 0x76, 0xe8, 0x32, 0x6e, 0xa8, 0xb0, 0x5c, 0x87, 0xcb, 0x28, 0xc9, 0x18, 0xf2, 0xc9, + 0x6b, 0x50, 0xee, 0x31, 0x5a, 0x5f, 0xbd, 0xb5, 0xe2, 0x53, 0x8b, 0xa9, 0xb3, 0x62, 0x9d, 0xa8, + 0xb9, 0x1b, 0xb1, 0x30, 0x2e, 0x67, 0xfc, 0x51, 0x0e, 0x4e, 0xd7, 0x1b, 0xbe, 0xed, 0x05, 0xda, + 0xd2, 0x6d, 0x88, 0xdb, 0x00, 0x81, 0xc9, 0xe3, 0x5f, 0x35, 0x15, 0x9f, 0x1f, 0x70, 0x4c, 0x26, + 0x85, 0x12, 0x97, 0x05, 0x24, 0x09, 0x23, 0x08, 0x91, 0x73, 0x16, 0xb6, 0x34, 0x3d, 0x25, 0xea, + 0x82, 0x8a, 0x8a, 0x6b, 0x7c, 0x2b, 0x07, 0x45, 0x5d, 0x6d, 0xf4, 0x02, 0xe4, 0x85, 0xfd, 0x4e, + 0x57, 0x4b, 0x08, 0xeb, 0x8e, 0x92, 0x27, 0xf2, 0xaf, 0x3c, 0xa4, 0xef, 0xcb, 0xbf, 0x72, 0x22, + 0x4a, 0x1e, 0x9f, 0xeb, 0xd4, 0xb1, 0xd2, 0xf9, 0xd7, 0x6b, 0x8e, 0x85, 0x9c, 0x2e, 0x8a, 0xb6, + 0x5d, 0xbf, 0x6b, 0x06, 0xe9, 0x8c, 0xf8, 0x9a, 0xa0, 0xa2, 0xe2, 0x1a, 0x6f, 0xc1, 0x8c, 0x2a, + 0x0b, 0xd5, 0x1d, 0xf5, 0x44, 0xf5, 0xf3, 0xc6, 0xff, 0xe4, 0xa0, 0xbc, 0xbd, 0x7d, 0x5b, 0x9b, + 0x35, 0x84, 0xf3, 0x4c, 0xd6, 0x81, 0x2e, 0x37, 0x03, 0xea, 0xaf, 0xb8, 0x5d, 0xaf, 0x43, 0x35, + 0x96, 0x2a, 0xce, 0xac, 0x67, 0x4a, 0xe0, 0x80, 0x96, 0x64, 0x1d, 0xce, 0xc6, 0x39, 0xca, 0x68, + 0xab, 0x82, 0x7d, 0x59, 0x85, 0xd0, 0xcf, 0xc6, 0xac, 0x36, 0x69, 0x28, 0x65, 0xb9, 0xd5, 0x65, + 0xb9, 0x3e, 0x28, 0xc5, 0xc6, 0xac, 0x36, 0xc6, 0x34, 0x94, 0x63, 0x37, 0x25, 0x8d, 0x6f, 0x3f, + 0x07, 0xba, 0x1a, 0xf1, 0x97, 0x35, 0x8d, 0x43, 0x65, 0x20, 0x1b, 0x3a, 0x43, 0x92, 0x1f, 0x3d, + 0x43, 0xa2, 0x67, 0x7c, 0x2a, 0x4b, 0xd2, 0x8a, 0xb2, 0x24, 0x85, 0x13, 0xc8, 0x92, 0x68, 0xd3, + 0xd5, 0x97, 0x29, 0xf9, 0xe3, 0x1c, 0x4c, 0x39, 0xae, 0x45, 0x43, 0x03, 0x59, 0x99, 0x14, 0x0e, + 0xf8, 0xe6, 0x48, 0x9d, 0x28, 0x13, 0x66, 0x0a, 0x51, 0x26, 0xc8, 0x74, 0x42, 0x39, 0xce, 0xc2, + 0x84, 0x6a, 0xb2, 0x06, 0x45, 0xb3, 0xd9, 0xb4, 0x1d, 0x3b, 0xd8, 0x57, 0x65, 0x95, 0x17, 0xb3, + 0x6c, 0xdf, 0xb2, 0x92, 0x91, 0xbb, 0x51, 0xf8, 0x84, 0xba, 0x2d, 0xdf, 0xce, 0xf5, 0x8d, 0x82, + 0xd2, 0x08, 0xdb, 0x79, 0x78, 0x86, 0x12, 0x73, 0x04, 0xc3, 0xea, 0xe7, 0xe8, 0x82, 0x81, 0x01, + 0x05, 0x99, 0x3c, 0x13, 0x79, 0xd2, 0xa2, 0x0c, 0x3c, 0x64, 0x62, 0x0d, 0x15, 0x87, 0xb4, 0xc2, + 0xc0, 0xb6, 0x2c, 0x3a, 0xb7, 0x36, 0x74, 0xb0, 0xaf, 0x63, 0xe5, 0xec, 0xc8, 0x96, 0xdc, 0x8c, + 0x6f, 0x1f, 0x53, 0xc7, 0xd9, 0x3e, 0xa6, 0x07, 0x6e, 0x1d, 0x2d, 0x28, 0x30, 0xb1, 0x39, 0x89, + 0x8c, 0x61, 0xf9, 0xca, 0xca, 0x70, 0x2e, 0x51, 0x62, 0x7f, 0x93, 0xbd, 0x23, 0x69, 0xa8, 0xe0, + 0x89, 0x0b, 0xc5, 0x30, 0xad, 0xa9, 0x92, 0x8e, 0xc3, 0x9d, 0x8d, 0xa7, 0xc3, 0x86, 0xb0, 0x7c, + 0x4f, 0x52, 0x51, 0x2b, 0x21, 0xef, 0xc0, 0xb8, 0x65, 0xb6, 0x54, 0xfa, 0xf1, 0xed, 0xa1, 0x0b, + 0x4b, 0x43, 0x35, 0xe2, 0xa2, 0xdf, 0xea, 0xf2, 0x75, 0xe4, 0xa8, 0x64, 0x37, 0xba, 0xd9, 0x30, + 0x3b, 0xc2, 0xfd, 0xb9, 0xd4, 0x7e, 0x27, 0xc3, 0xab, 0xbe, 0xbb, 0x11, 0xd7, 0x60, 0xf2, 0xa1, + 0xdb, 0xe9, 0x75, 0x55, 0xde, 0xb2, 0x7c, 0x65, 0x3e, 0x6b, 0xb4, 0xef, 0x09, 0x91, 0xc8, 0x08, + 0xc8, 0x67, 0x86, 0x61, 0x5b, 0xf2, 0x95, 0x1c, 0x9c, 0xe6, 0x4b, 0x47, 0xcf, 0x03, 0x56, 0x21, + 0x23, 0xcc, 0xd4, 0xbb, 0x8c, 0x6f, 0x8c, 0xe1, 0x0c, 0x3b, 0xaf, 0xd4, 0x9e, 0x5e, 0x4f, 0x68, + 0xc0, 0x94, 0x46, 0xe2, 0x41, 0x91, 0xd9, 0x16, 0x6d, 0x98, 0x3e, 0xab, 0x9c, 0x3d, 0x31, 0xed, + 0x91, 0x27, 0xae, 0xb0, 0x51, 0x6b, 0x21, 0x7f, 0x20, 0xee, 0x3c, 0xaa, 0xfb, 0xca, 0xea, 0x0e, + 0xf9, 0xdc, 0x49, 0xde, 0x21, 0x3f, 0x2b, 0x2f, 0x3c, 0x26, 0x34, 0x60, 0x5a, 0x25, 0xd9, 0x84, + 0x73, 0xf2, 0x86, 0x43, 0xfa, 0x7a, 0xcb, 0x39, 0x51, 0xbd, 0xf0, 0xdc, 0xe1, 0x41, 0xf5, 0xdc, + 0x72, 0x96, 0x00, 0x66, 0xb7, 0x23, 0xef, 0xc3, 0xb4, 0x1f, 0x8f, 0xe2, 0x2a, 0xe7, 0x47, 0xa8, + 0xc9, 0x4b, 0xc4, 0x83, 0x32, 0x2f, 0x9e, 0x20, 0x61, 0x52, 0x17, 0x79, 0x15, 0xca, 0x9e, 0xb2, + 0x54, 0x36, 0xeb, 0x56, 0x2e, 0x88, 0x6f, 0x10, 0x3b, 0xea, 0x56, 0x44, 0xc6, 0xb8, 0x0c, 0xb9, + 0x0b, 0xe5, 0xc0, 0xed, 0x50, 0x5f, 0x1d, 0xbc, 0x57, 0xc4, 0xe0, 0x2f, 0x64, 0xcd, 0xe4, 0x6d, + 0x2d, 0x16, 0xb9, 0xd7, 0x11, 0x8d, 0x61, 0x1c, 0x87, 0x7c, 0x1a, 0xa6, 0xc3, 0xdb, 0x4c, 0xbe, + 0x48, 0x82, 0x3d, 0x97, 0xcc, 0x06, 0xd4, 0xe3, 0x4c, 0x4c, 0xca, 0xf2, 0xf8, 0xde, 0xf3, 0x6d, + 0xd7, 0xb7, 0x83, 0xfd, 0x95, 0x8e, 0xc9, 0x98, 0x00, 0x98, 0x17, 0x00, 0x3a, 0xbe, 0xdf, 0x4a, + 0x0b, 0x60, 0x7f, 0x1b, 0x1e, 0x44, 0x85, 0xc4, 0xca, 0x47, 0x84, 0x03, 0x27, 0xcc, 0x52, 0xd8, + 0x16, 0x35, 0x77, 0x40, 0x49, 0xf9, 0xc5, 0x61, 0x4a, 0xca, 0x89, 0x05, 0x17, 0xcd, 0x5e, 0xe0, + 0x76, 0x39, 0x21, 0xd9, 0x64, 0xdb, 0xdd, 0xa5, 0x4e, 0xe5, 0x92, 0xd8, 0xab, 0x2e, 0x1d, 0x1e, + 0x54, 0x2f, 0x2e, 0x3f, 0x42, 0x0e, 0x1f, 0x89, 0x42, 0xba, 0x50, 0xa4, 0xaa, 0x2c, 0xbe, 0xf2, + 0xd1, 0x11, 0x36, 0x89, 0x64, 0x6d, 0xbd, 0xec, 0xa0, 0x90, 0x86, 0x5a, 0x05, 0xd9, 0x86, 0x72, + 0xdb, 0x65, 0xc1, 0x72, 0xc7, 0x36, 0x19, 0x65, 0x95, 0xe7, 0xc5, 0x3c, 0xc9, 0xdc, 0xdf, 0x6e, + 0x84, 0x62, 0xd1, 0x34, 0xb9, 0x11, 0xb5, 0xc4, 0x38, 0x0c, 0xa1, 0x22, 0xa2, 0xec, 0x89, 0x51, + 0x73, 0x9d, 0x80, 0xbe, 0x17, 0x54, 0x16, 0xc4, 0xb7, 0xbc, 0x94, 0x85, 0xbc, 0xe5, 0x5a, 0xf5, + 0xa4, 0xb4, 0x5c, 0xe5, 0x29, 0x22, 0xa6, 0x31, 0xc9, 0xeb, 0x30, 0xe5, 0xb9, 0x56, 0xdd, 0xa3, + 0x8d, 0x2d, 0x33, 0x68, 0xb4, 0x2b, 0xd5, 0xe4, 0x39, 0xfb, 0x56, 0x8c, 0x87, 0x09, 0x49, 0x1e, + 0x0d, 0xf8, 0x94, 0xf5, 0x76, 0xba, 0x76, 0xb0, 0x45, 0x1d, 0xcb, 0x76, 0x5a, 0x5b, 0xae, 0xc5, + 0x2a, 0x86, 0x18, 0x42, 0x11, 0x0d, 0x60, 0x3f, 0x1b, 0xb3, 0xda, 0x90, 0x06, 0x4c, 0x76, 0x65, + 0x69, 0x44, 0xe5, 0x85, 0x11, 0xdc, 0x4a, 0x55, 0x5e, 0x21, 0x37, 0x25, 0xf5, 0x80, 0x21, 0xf2, + 0xfc, 0x5b, 0x70, 0xa6, 0xcf, 0xff, 0x7b, 0xa2, 0x9a, 0x90, 0xbf, 0xe2, 0xd1, 0x5a, 0xcc, 0xe3, + 0x3e, 0xe9, 0x38, 0xe5, 0x3a, 0x9c, 0x51, 0xff, 0x59, 0xc3, 0x9d, 0x83, 0x4e, 0x4f, 0xdf, 0x95, + 0x8e, 0xe5, 0xee, 0x30, 0x2d, 0x80, 0xfd, 0x6d, 0x8c, 0xbf, 0xce, 0xc1, 0x74, 0x62, 0xbb, 0x39, + 0xf1, 0xf8, 0x7d, 0x0d, 0x48, 0xd7, 0xf6, 0x7d, 0xd7, 0x97, 0x7b, 0xf6, 0x1d, 0xbe, 0xf6, 0x98, + 0xba, 0x9d, 0x20, 0xaa, 0x62, 0xef, 0xf4, 0x71, 0x31, 0xa3, 0x85, 0xf1, 0x1f, 0x39, 0x88, 0x8e, + 0x09, 0x74, 0x29, 0x78, 0x6e, 0x60, 0x29, 0xf8, 0x2b, 0x50, 0x7c, 0xc0, 0x5c, 0x67, 0x2b, 0x2a, + 0x18, 0xd7, 0x1d, 0x7a, 0xb3, 0xbe, 0xb9, 0x21, 0x24, 0xb5, 0x84, 0x90, 0xfe, 0xd2, 0x9a, 0xdd, + 0x09, 0xfa, 0xcb, 0xaa, 0x6f, 0x7e, 0x56, 0xd2, 0x51, 0x4b, 0x90, 0x25, 0x28, 0xe9, 0x93, 0x29, + 0x15, 0xf8, 0xeb, 0x4e, 0xd0, 0xc7, 0x32, 0x18, 0xc9, 0x90, 0x97, 0xa3, 0xf3, 0x97, 0x7c, 0x32, + 0x13, 0x93, 0x3e, 0x83, 0x31, 0xbe, 0x33, 0x06, 0xc5, 0x67, 0x78, 0x55, 0xbb, 0x91, 0xb8, 0xaa, + 0x7d, 0x02, 0xf7, 0x7a, 0xb3, 0xae, 0x69, 0xef, 0xa6, 0xae, 0x69, 0xaf, 0x8c, 0x78, 0x2e, 0xf6, + 0xc8, 0x2b, 0xda, 0x3f, 0xc8, 0xc1, 0xd4, 0x33, 0xbc, 0x9e, 0xbd, 0x93, 0xbc, 0x9e, 0xfd, 0xc6, + 0x48, 0x9f, 0x36, 0xe0, 0x6a, 0xf6, 0xbf, 0x9e, 0x87, 0xc4, 0xb5, 0x68, 0xe2, 0x40, 0x29, 0xb4, + 0x05, 0xe1, 0x59, 0xe3, 0x1b, 0x23, 0xc5, 0xbb, 0xd1, 0xfc, 0x0d, 0x29, 0x0c, 0x23, 0x15, 0xe4, + 0x0a, 0x00, 0xe5, 0x46, 0x50, 0xe6, 0x71, 0xc7, 0x92, 0x47, 0x71, 0xd7, 0x34, 0x07, 0x63, 0x52, + 0xcf, 0x3e, 0x97, 0x92, 0xed, 0x7d, 0x4c, 0x3c, 0x15, 0xef, 0xe3, 0xe2, 0x89, 0x7b, 0x1f, 0xcf, + 0x3f, 0x7d, 0xef, 0x23, 0x16, 0x6b, 0xe5, 0x47, 0x88, 0xb5, 0xde, 0x87, 0x39, 0xf9, 0x73, 0xa5, + 0x63, 0xda, 0x5d, 0x3d, 0x5f, 0x54, 0x95, 0xf6, 0xcb, 0x99, 0x3e, 0x07, 0xf5, 0x99, 0xcd, 0x02, + 0xea, 0x04, 0xf7, 0xa2, 0x96, 0x51, 0x95, 0xda, 0xbd, 0x0c, 0x38, 0xcc, 0x54, 0x92, 0x76, 0xce, + 0x27, 0x8f, 0xe1, 0x9c, 0x7f, 0x2b, 0x07, 0xe7, 0xcc, 0xac, 0x7f, 0xae, 0x51, 0x29, 0x9a, 0x9b, + 0x23, 0x85, 0x4a, 0x09, 0x44, 0x15, 0xea, 0x64, 0xb1, 0x30, 0xfb, 0x1d, 0xc8, 0x8b, 0x51, 0xb4, + 0x5d, 0x12, 0x93, 0x2a, 0x3b, 0x4e, 0xfe, 0x5a, 0x3a, 0xcb, 0x05, 0xa2, 0xb7, 0xeb, 0x23, 0x1b, + 0xec, 0x13, 0xc8, 0x74, 0x95, 0x47, 0xc8, 0x74, 0xa5, 0x22, 0xa7, 0xa9, 0x13, 0x8a, 0x9c, 0x1c, + 0x98, 0xb5, 0xbb, 0x66, 0x8b, 0x6e, 0xf5, 0x3a, 0x1d, 0x79, 0x1a, 0xc2, 0x2a, 0xd3, 0x02, 0x3b, + 0xf3, 0xce, 0x0e, 0x8f, 0x64, 0x3b, 0xe9, 0x5b, 0xfc, 0xfa, 0xdc, 0x71, 0x3d, 0x85, 0x84, 0x7d, + 0xd8, 0x7c, 0x5a, 0x72, 0x8f, 0x7c, 0x83, 0x06, 0xbc, 0xb7, 0x45, 0x12, 0x48, 0xfd, 0xb7, 0xd8, + 0x8d, 0x88, 0x8c, 0x71, 0x19, 0x72, 0x0b, 0x4a, 0x96, 0xc3, 0xd4, 0xa9, 0xe3, 0x8c, 0xb0, 0x52, + 0x1f, 0xe3, 0xb6, 0x6d, 0x75, 0xa3, 0xae, 0xcf, 0x1b, 0x2f, 0x66, 0x94, 0xd8, 0x69, 0x3e, 0x46, + 0xed, 0xc9, 0x1d, 0x01, 0xa6, 0x2e, 0xb0, 0xc9, 0xac, 0xcd, 0xa5, 0x01, 0xce, 0xff, 0xea, 0x46, + 0x78, 0xdf, 0x6e, 0x5a, 0xa9, 0x53, 0xd7, 0xd2, 0x22, 0x84, 0xd8, 0xd5, 0xe8, 0x33, 0x8f, 0xba, + 0x1a, 0x4d, 0xee, 0xc2, 0x85, 0x20, 0xe8, 0x24, 0x52, 0xf9, 0xaa, 0x8a, 0x51, 0x94, 0xb4, 0xe6, + 0xe5, 0x3f, 0x5b, 0x6c, 0x6f, 0xdf, 0xce, 0x12, 0xc1, 0x41, 0x6d, 0x45, 0x56, 0x3c, 0xe8, 0xe8, + 0xe0, 0x7f, 0x61, 0x94, 0xac, 0x78, 0x74, 0x66, 0xa2, 0xb2, 0xe2, 0x11, 0x01, 0xe3, 0x5a, 0x06, + 0x27, 0x31, 0xce, 0x0e, 0x99, 0xc4, 0x88, 0xc7, 0xcd, 0x73, 0x8f, 0x8c, 0x9b, 0xfb, 0xe2, 0xfc, + 0x73, 0x4f, 0x10, 0xe7, 0xbf, 0x23, 0xca, 0x27, 0xaf, 0xaf, 0xa8, 0x1c, 0xc9, 0x70, 0xf5, 0x1c, + 0xa2, 0x0e, 0x46, 0x1e, 0x8e, 0x8b, 0x9f, 0x28, 0x31, 0xc9, 0x16, 0xcc, 0x79, 0xae, 0xd5, 0x97, + 0x26, 0x10, 0x49, 0x91, 0x58, 0x99, 0xf1, 0x56, 0x86, 0x0c, 0x66, 0xb6, 0x14, 0x06, 0x3c, 0xa2, + 0x57, 0x2a, 0xa2, 0x63, 0xa4, 0x01, 0x8f, 0xc8, 0x18, 0x97, 0x49, 0x47, 0xcd, 0xcf, 0x3d, 0xb5, + 0xa8, 0x79, 0xfe, 0x19, 0x44, 0xcd, 0x1f, 0x39, 0x76, 0xd4, 0xfc, 0xbb, 0x70, 0xd6, 0x73, 0xad, + 0x55, 0x9b, 0xf9, 0x3d, 0xf1, 0xbf, 0x86, 0xb5, 0x9e, 0xd5, 0xa2, 0x81, 0x08, 0xbb, 0xcb, 0x57, + 0xae, 0xc4, 0x5f, 0x52, 0xfe, 0xbd, 0xea, 0xa2, 0xfa, 0x7b, 0x55, 0xb1, 0xc8, 0x53, 0xad, 0x84, + 0x6b, 0x2e, 0x22, 0xed, 0x0c, 0x26, 0x66, 0xe9, 0x89, 0x47, 0xda, 0x97, 0x9e, 0x56, 0xa4, 0x4d, + 0xde, 0x86, 0x22, 0x6b, 0xf7, 0x02, 0xcb, 0xdd, 0x73, 0x44, 0xfe, 0xa5, 0xa4, 0xff, 0x17, 0xa8, + 0x58, 0x57, 0xf4, 0xa3, 0x83, 0xea, 0x6c, 0xf8, 0x3b, 0x56, 0xa9, 0xa5, 0x28, 0xa3, 0xc7, 0xea, + 0xff, 0x35, 0x05, 0xa7, 0x53, 0x7f, 0xfa, 0xa2, 0xab, 0xd9, 0x73, 0xc7, 0xad, 0x66, 0x4f, 0x94, + 0x9b, 0x8f, 0x3d, 0xd5, 0x72, 0xf3, 0xf1, 0x13, 0x2f, 0x37, 0x8f, 0x95, 0xd5, 0x4f, 0x3c, 0xa6, + 0xac, 0x7e, 0x19, 0x66, 0x1a, 0x6e, 0xd7, 0x13, 0x97, 0x91, 0x55, 0xb9, 0xb1, 0x0c, 0x68, 0x75, + 0x55, 0xc2, 0x4a, 0x92, 0x8d, 0x69, 0x79, 0xf2, 0x3b, 0x90, 0x77, 0x44, 0xc3, 0xc2, 0x08, 0xd7, + 0x93, 0x92, 0x03, 0x26, 0x7c, 0x18, 0x75, 0x43, 0x28, 0x4c, 0xd6, 0xe7, 0x05, 0xed, 0x28, 0xfc, + 0x81, 0x52, 0x29, 0x79, 0x17, 0x2a, 0x6e, 0xb3, 0xd9, 0x71, 0x4d, 0x2b, 0x2a, 0x89, 0xbf, 0xc7, + 0xbd, 0x53, 0x75, 0xfc, 0x55, 0xaa, 0x5d, 0x52, 0x00, 0x95, 0xcd, 0x01, 0x72, 0x38, 0x10, 0x81, + 0xbb, 0x9a, 0x33, 0xc9, 0xab, 0x1a, 0xac, 0x52, 0x12, 0x9f, 0xf9, 0x5b, 0x27, 0xf1, 0x99, 0xc9, + 0x7b, 0x21, 0xea, 0x83, 0xa3, 0x7a, 0x90, 0x24, 0x17, 0xd3, 0x6f, 0x42, 0x7c, 0x38, 0xef, 0x65, + 0x39, 0xe2, 0x4c, 0x1d, 0x99, 0x3e, 0x2a, 0x1c, 0x58, 0x50, 0x5a, 0xce, 0x67, 0xba, 0xf2, 0x0c, + 0x07, 0x20, 0xc7, 0x8b, 0xe5, 0x8b, 0x4f, 0xad, 0x58, 0xde, 0x13, 0x39, 0x2b, 0x55, 0x34, 0x56, + 0x1e, 0xa1, 0x1c, 0x59, 0x17, 0x92, 0x45, 0x6b, 0x46, 0x93, 0x18, 0x46, 0x4a, 0xc8, 0xcf, 0x32, + 0x6f, 0x68, 0x48, 0xef, 0xf5, 0xf3, 0x27, 0x31, 0xd4, 0x3f, 0x6f, 0xb7, 0x34, 0xe6, 0xf7, 0xe5, + 0xb5, 0xb0, 0x81, 0x17, 0xe4, 0xee, 0x26, 0xaf, 0xc8, 0xbe, 0x35, 0xe2, 0x35, 0x95, 0xf8, 0xe5, + 0xbc, 0xdf, 0xcf, 0xc1, 0x5c, 0xd6, 0xd4, 0xcf, 0x78, 0x8b, 0x7a, 0xf2, 0x2d, 0x46, 0x4b, 0x8a, + 0xc4, 0xdf, 0xe1, 0x64, 0x2e, 0x4b, 0x7c, 0xbd, 0x10, 0x4b, 0xe4, 0x04, 0xd4, 0xfb, 0x65, 0x01, + 0xcb, 0x50, 0x05, 0x2c, 0x89, 0xbf, 0xd7, 0xca, 0x3f, 0xc3, 0xbf, 0xd7, 0x2a, 0x0c, 0xf1, 0xf7, + 0x5a, 0x93, 0xcf, 0xf2, 0xef, 0xb5, 0x8a, 0xc7, 0xfc, 0x7b, 0xad, 0xd2, 0xcf, 0xcf, 0xdf, 0x6b, + 0x7d, 0x98, 0x83, 0xd9, 0xf4, 0x35, 0xc5, 0x67, 0x90, 0xf8, 0xde, 0x4d, 0x24, 0xbe, 0xd7, 0x47, + 0xb2, 0xd9, 0xfa, 0x6a, 0xe4, 0x80, 0x04, 0xb8, 0xf1, 0xe3, 0x1c, 0xf4, 0x5d, 0xc5, 0x7c, 0x06, + 0xb9, 0xe9, 0x07, 0xc9, 0xdc, 0xf4, 0xb5, 0x13, 0xf9, 0xc8, 0x01, 0x39, 0xea, 0x3f, 0xcf, 0xf8, + 0x44, 0x91, 0xab, 0x7e, 0xff, 0x69, 0xfd, 0x83, 0xe8, 0x5c, 0xd6, 0x3f, 0x88, 0x26, 0xff, 0x31, + 0xb4, 0xb6, 0xf8, 0xbd, 0x0f, 0x17, 0x4e, 0xfd, 0xe0, 0xc3, 0x85, 0x53, 0x3f, 0xfc, 0x70, 0xe1, + 0xd4, 0x07, 0x87, 0x0b, 0xb9, 0xef, 0x1d, 0x2e, 0xe4, 0x7e, 0x70, 0xb8, 0x90, 0xfb, 0xe1, 0xe1, + 0x42, 0xee, 0xc7, 0x87, 0x0b, 0xb9, 0x3f, 0xfb, 0xf7, 0x85, 0x53, 0x9f, 0x2f, 0x86, 0x0a, 0xfe, + 0x2f, 0x00, 0x00, 0xff, 0xff, 0x57, 0xf6, 0x05, 0x46, 0x82, 0x63, 0x00, 0x00, } func (m *ArchiveStrategy) Marshal() (dAtA []byte, err error) { @@ -2447,6 +2509,18 @@ func (m *ArtifactLocation) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.GCS != nil { + { + size, err := m.GCS.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } if m.OSS != nil { { size, err := m.OSS.MarshalToSizedBuffer(dAtA[:i]) @@ -3227,6 +3301,82 @@ func (m *ExecutorConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *GCSArtifact) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GCSArtifact) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GCSArtifact) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0x12 + { + size, err := m.GCSBucket.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GCSBucket) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GCSBucket) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GCSBucket) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ServiceAccountKeySecret.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Bucket) + copy(dAtA[i:], m.Bucket) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Bucket))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *Gauge) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3573,9 +3723,9 @@ func (m *Histogram) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = l if len(m.Buckets) > 0 { for iNdEx := len(m.Buckets) - 1; iNdEx >= 0; iNdEx-- { - f34 := math.Float64bits(float64(m.Buckets[iNdEx])) + f37 := math.Float64bits(float64(m.Buckets[iNdEx])) i -= 8 - encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(f34)) + encoding_binary.LittleEndian.PutUint64(dAtA[i:], uint64(f37)) i-- dAtA[i] = 0x21 } @@ -6556,6 +6706,10 @@ func (m *ArtifactLocation) Size() (n int) { l = m.OSS.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.GCS != nil { + l = m.GCS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -6809,6 +6963,32 @@ func (m *ExecutorConfig) Size() (n int) { return n } +func (m *GCSArtifact) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.GCSBucket.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GCSBucket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Bucket) + n += 1 + l + sovGenerated(uint64(l)) + l = m.ServiceAccountKeySecret.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *Gauge) Size() (n int) { if m == nil { return 0 @@ -8028,6 +8208,7 @@ func (this *ArtifactLocation) String() string { `HDFS:` + strings.Replace(this.HDFS.String(), "HDFSArtifact", "HDFSArtifact", 1) + `,`, `Raw:` + strings.Replace(this.Raw.String(), "RawArtifact", "RawArtifact", 1) + `,`, `OSS:` + strings.Replace(this.OSS.String(), "OSSArtifact", "OSSArtifact", 1) + `,`, + `GCS:` + strings.Replace(this.GCS.String(), "GCSArtifact", "GCSArtifact", 1) + `,`, `}`, }, "") return s @@ -8223,6 +8404,28 @@ func (this *ExecutorConfig) String() string { }, "") return s } +func (this *GCSArtifact) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GCSArtifact{`, + `GCSBucket:` + strings.Replace(strings.Replace(this.GCSBucket.String(), "GCSBucket", "GCSBucket", 1), `&`, ``, 1) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `}`, + }, "") + return s +} +func (this *GCSBucket) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GCSBucket{`, + `Bucket:` + fmt.Sprintf("%v", this.Bucket) + `,`, + `ServiceAccountKeySecret:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServiceAccountKeySecret), "SecretKeySelector", "v1.SecretKeySelector", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *Gauge) String() string { if this == nil { return "nil" @@ -9875,6 +10078,42 @@ func (m *ArtifactLocation) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GCS", 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.GCS == nil { + m.GCS = &GCSArtifact{} + } + if err := m.GCS.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -12028,6 +12267,242 @@ func (m *ExecutorConfig) Unmarshal(dAtA []byte) error { } return nil } +func (m *GCSArtifact) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GCSArtifact: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GCSArtifact: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GCSBucket", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GCSBucket.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", 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.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GCSBucket) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GCSBucket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GCSBucket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bucket", 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.Bucket = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountKeySecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ServiceAccountKeySecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Gauge) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 3270519d343d..85a3aaaba262 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -91,6 +91,9 @@ message ArtifactLocation { // OSS contains OSS artifact location details optional OSSArtifact oss = 8; + + // GCS contains GCS artifact location details + optional GCSArtifact gcs = 9; } message ArtifactRepositoryRef { @@ -269,6 +272,23 @@ message ExecutorConfig { optional string serviceAccountName = 1; } +// GCSArtifact is the location of a GCS artifact +message GCSArtifact { + optional GCSBucket gCSBucket = 1; + + // Key is the path in the bucket where the artifact resides + optional string key = 2; +} + +// GCSBucket contains the access information for interfacring with a GCS bucket +message GCSBucket { + // Bucket is the name of the bucket + optional string bucket = 1; + + // ServiceAccountKeySecret is the secret selector to the bucket's service account key + optional k8s.io.api.core.v1.SecretKeySelector serviceAccountKeySecret = 2; +} + // Gauge is a Gauge prometheus metric message Gauge { // Value is the value of the metric diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go index d6cae105b8c4..1534230800f4 100644 --- a/pkg/apis/workflow/v1alpha1/workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/workflow_types.go @@ -701,6 +701,9 @@ type ArtifactLocation struct { // OSS contains OSS artifact location details OSS *OSSArtifact `json:"oss,omitempty" protobuf:"bytes,8,opt,name=oss"` + + // GCS contains GCS artifact location details + GCS *GCSArtifact `json:"gcs,omitempty" protobuf:"bytes,9,opt,name=gcs"` } type ArtifactRepositoryRef struct { @@ -1356,6 +1359,28 @@ func (h *HTTPArtifact) HasLocation() bool { return h != nil && h.URL != "" } +// GCSBucket contains the access information for interfacring with a GCS bucket +type GCSBucket struct { + + // Bucket is the name of the bucket + Bucket string `json:"bucket" protobuf:"bytes,1,opt,name=bucket"` + + // ServiceAccountKeySecret is the secret selector to the bucket's service account key + ServiceAccountKeySecret apiv1.SecretKeySelector `json:"serviceAccountKeySecret,omitempty" protobuf:"bytes,2,opt,name=serviceAccountKeySecret"` +} + +// GCSArtifact is the location of a GCS artifact +type GCSArtifact struct { + GCSBucket `json:",inline" protobuf:"bytes,1,opt,name=gCSBucket"` + + // Key is the path in the bucket where the artifact resides + Key string `json:"key" protobuf:"bytes,2,opt,name=key"` +} + +func (g *GCSArtifact) HasLocation() bool { + return g != nil && g.Bucket != "" && g.Key != "" +} + // OSSBucket contains the access information required for interfacing with an OSS bucket type OSSBucket struct { // Endpoint is the hostname of the bucket endpoint @@ -1609,7 +1634,8 @@ func (a *Artifact) HasLocation() bool { a.Artifactory.HasLocation() || a.Raw.HasLocation() || a.HDFS.HasLocation() || - a.OSS.HasLocation() + a.OSS.HasLocation() || + a.GCS.HasLocation() } // GetTemplateByName retrieves a defined template by its name diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index b4ac0005d2e0..b26d09d981c1 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -139,6 +139,11 @@ func (in *ArtifactLocation) DeepCopyInto(out *ArtifactLocation) { *out = new(OSSArtifact) (*in).DeepCopyInto(*out) } + if in.GCS != nil { + in, out := &in.GCS, &out.GCS + *out = new(GCSArtifact) + (*in).DeepCopyInto(*out) + } return } @@ -508,6 +513,40 @@ func (in *ExecutorConfig) DeepCopy() *ExecutorConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GCSArtifact) DeepCopyInto(out *GCSArtifact) { + *out = *in + in.GCSBucket.DeepCopyInto(&out.GCSBucket) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCSArtifact. +func (in *GCSArtifact) DeepCopy() *GCSArtifact { + if in == nil { + return nil + } + out := new(GCSArtifact) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GCSBucket) DeepCopyInto(out *GCSBucket) { + *out = *in + in.ServiceAccountKeySecret.DeepCopyInto(&out.ServiceAccountKeySecret) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCSBucket. +func (in *GCSBucket) DeepCopy() *GCSBucket { + if in == nil { + return nil + } + out := new(GCSBucket) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Gauge) DeepCopyInto(out *Gauge) { *out = *in diff --git a/workflow/artifacts/artifacts.go b/workflow/artifacts/artifacts.go index e00c5f40835f..ee3435441d07 100644 --- a/workflow/artifacts/artifacts.go +++ b/workflow/artifacts/artifacts.go @@ -3,6 +3,7 @@ package executor import ( "fmt" + "github.com/argoproj/argo/workflow/artifacts/gcs" "github.com/argoproj/argo/workflow/artifacts/oss" wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" @@ -135,5 +136,19 @@ func NewDriver(art *wfv1.Artifact, ri resource.Interface) (ArtifactDriver, error return &driver, nil } + if art.GCS != nil { + driver := gcs.GCSArtifactDriver{} + if art.GCS.ServiceAccountKeySecret.Name != "" { + serviceAccountKeyBytes, err := ri.GetSecret(art.GCS.ServiceAccountKeySecret.Name, art.GCS.ServiceAccountKeySecret.Key) + if err != nil { + return nil, err + } + serviceAccountKey := string(serviceAccountKeyBytes) + driver.ServiceAccountKey = serviceAccountKey + } + // key is not set, assume it is using Workload Idendity + return &driver, nil + } + return nil, ErrUnsupportedDriver } diff --git a/workflow/artifacts/gcs/gcs.go b/workflow/artifacts/gcs/gcs.go new file mode 100644 index 000000000000..5bfca1573efe --- /dev/null +++ b/workflow/artifacts/gcs/gcs.go @@ -0,0 +1,234 @@ +package gcs + +import ( + "context" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" + + "cloud.google.com/go/storage" + log "github.com/sirupsen/logrus" + "golang.org/x/oauth2/google" + "google.golang.org/api/iterator" + "google.golang.org/api/option" + "k8s.io/apimachinery/pkg/util/wait" + + "github.com/argoproj/pkg/file" + + wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1" +) + +// GCSArtifactDriver is a driver for GCS +type GCSArtifactDriver struct { + ServiceAccountKey string +} + +func (g *GCSArtifactDriver) newGCSClient() (*storage.Client, error) { + if g.ServiceAccountKey != "" { + return newGCSClientWithCredential(g.ServiceAccountKey) + } + // Assume it uses Workload Identity + return newGCSClientDefault() +} + +func newGCSClientWithCredential(serviceAccountJSON string) (*storage.Client, error) { + ctx := context.Background() + creds, err := google.CredentialsFromJSON(ctx, []byte(serviceAccountJSON), storage.ScopeReadWrite) + if err != nil { + return nil, fmt.Errorf("GCS client CredentialsFromJSON: %v", err) + } + client, err := storage.NewClient(ctx, option.WithCredentials(creds)) + if err != nil { + return nil, fmt.Errorf("GCS storage.NewClient with credential: %v", err) + } + return client, nil +} + +func newGCSClientDefault() (*storage.Client, error) { + ctx := context.Background() + client, err := storage.NewClient(ctx) + if err != nil { + return nil, fmt.Errorf("GCS storage.NewClient: %v", err) + } + return client, nil +} + +// Load function downloads objects from GCS +func (g *GCSArtifactDriver) Load(inputArtifact *wfv1.Artifact, path string) error { + err := wait.ExponentialBackoff(wait.Backoff{Duration: time.Second * 2, Factor: 2.0, Steps: 5, Jitter: 0.1}, + func() (bool, error) { + log.Infof("GCS Load path: %s, key: %s", path, inputArtifact.GCS.Key) + gcsClient, err := g.newGCSClient() + if err != nil { + log.Warnf("Failed to create new GCS client: %v", err) + return false, nil + } + defer gcsClient.Close() + err = downloadObjects(gcsClient, inputArtifact.GCS.Bucket, inputArtifact.GCS.Key, path) + if err != nil { + log.Warnf("Failed to download objects from GCS: %v", err) + return false, nil + } + return true, nil + }) + return err +} + +// download all the objects of a key from the bucket +func downloadObjects(client *storage.Client, bucket, key, path string) error { + objNames, err := listByPrefix(client, bucket, key, "") + if err != nil { + return err + } + for _, objName := range objNames { + err = downloadObject(client, bucket, key, objName, path) + if err != nil { + return fmt.Errorf("download object: %v", err) + } + } + return nil +} + +// download an object from the bucket +func downloadObject(client *storage.Client, bucket, key, objName, path string) error { + objPrefix := filepath.Clean(key) + relObjPath := strings.TrimPrefix(objName, objPrefix) + localPath := filepath.Join(path, relObjPath) + objectDir, _ := filepath.Split(localPath) + if objectDir != "" { + if err := os.MkdirAll(objectDir, 0700); err != nil { + return fmt.Errorf("mkdir %s: %v", objectDir, err) + } + } + ctx := context.Background() + rc, err := client.Bucket(bucket).Object(objName).NewReader(ctx) + if err != nil { + return fmt.Errorf("new bucket reader: %v", err) + } + defer rc.Close() + out, err := os.Create(localPath) + if err != nil { + return fmt.Errorf("os create %s: %v", localPath, err) + } + defer out.Close() + _, err = io.Copy(out, rc) + if err != nil { + return fmt.Errorf("io copy: %v", err) + } + return nil +} + +// list all the object names of the prefix in the bucket +func listByPrefix(client *storage.Client, bucket, prefix, delim string) ([]string, error) { + ctx := context.Background() + ctx, cancel := context.WithTimeout(ctx, time.Second*30) + defer cancel() + it := client.Bucket(bucket).Objects(ctx, &storage.Query{ + Prefix: prefix, + Delimiter: delim, + }) + results := []string{} + for { + attrs, err := it.Next() + if err == iterator.Done { + break + } + if err != nil { + return nil, err + } + results = append(results, attrs.Name) + } + return results, nil +} + +// Save an artifact to GCS compliant storage, e.g., uploading a local file to GCS bucket +func (g *GCSArtifactDriver) Save(path string, outputArtifact *wfv1.Artifact) error { + err := wait.ExponentialBackoff(wait.Backoff{Duration: time.Second * 2, Factor: 2.0, Steps: 5, Jitter: 0.1}, + func() (bool, error) { + log.Infof("GCS Save path: %s, key: %s", path, outputArtifact.GCS.Key) + client, err := g.newGCSClient() + if err != nil { + log.Warnf("Failed to create new GCS client: %v", err) + return false, nil + } + err = uploadObjects(client, outputArtifact.GCS.Bucket, outputArtifact.GCS.Key, path) + if err != nil { + log.Warnf("Failed to upload objects: %v", err) + } + return true, nil + }) + return err +} + +// list all the file relative paths under a dir +// path is suppoese to be a dir +// relPath is a given relative path to be inserted in front +func listFileRelPaths(path string, relPath string) ([]string, error) { + results := []string{} + files, err := ioutil.ReadDir(path) + if err != nil { + return nil, err + } + for _, file := range files { + if file.IsDir() { + fs, err := listFileRelPaths(path+file.Name()+"/", relPath+file.Name()+"/") + if err != nil { + return nil, err + } + results = append(results, fs...) + } else { + results = append(results, relPath+file.Name()) + } + } + return results, nil +} + +// upload a local file or dir to GCS +func uploadObjects(client *storage.Client, bucket, key, path string) error { + isDir, err := file.IsDirectory(path) + if err != nil { + return fmt.Errorf("test if %s is a dir: %v", path, err) + } + if isDir { + dirName := filepath.Clean(path) + "/" + keyPrefix := filepath.Clean(key) + "/" + fileRelPaths, err := listFileRelPaths(dirName, "") + if err != nil { + return err + } + for _, relPath := range fileRelPaths { + err = uploadObject(client, bucket, keyPrefix+relPath, dirName+relPath) + if err != nil { + return fmt.Errorf("upload %s: %v", dirName+relPath, err) + } + } + } else { + err = uploadObject(client, bucket, filepath.Clean(key), path) + if err != nil { + return fmt.Errorf("upload %s: %v", path, err) + } + } + return nil +} + +// upload an object to GCS +func uploadObject(client *storage.Client, bucket, key, localPath string) error { + f, err := os.Open(localPath) + if err != nil { + return fmt.Errorf("os open: %v", err) + } + defer f.Close() + ctx := context.Background() + wc := client.Bucket(bucket).Object(key).NewWriter(ctx) + if _, err = io.Copy(wc, f); err != nil { + return fmt.Errorf("io copy: %v", err) + } + if err := wc.Close(); err != nil { + return fmt.Errorf("writer close: %v", err) + } + return nil +} diff --git a/workflow/controller/workflowpod.go b/workflow/controller/workflowpod.go index 4f70aa225e2a..0c69e789fd0a 100644 --- a/workflow/controller/workflowpod.go +++ b/workflow/controller/workflowpod.go @@ -850,7 +850,7 @@ func (woc *wfOperationCtx) addArchiveLocation(pod *apiv1.Pod, tmpl *wfv1.Templat var needLocation bool if tmpl.ArchiveLocation != nil { - if tmpl.ArchiveLocation.S3 != nil || tmpl.ArchiveLocation.Artifactory != nil || tmpl.ArchiveLocation.HDFS != nil || tmpl.ArchiveLocation.OSS != nil { + if tmpl.ArchiveLocation.S3 != nil || tmpl.ArchiveLocation.Artifactory != nil || tmpl.ArchiveLocation.HDFS != nil || tmpl.ArchiveLocation.OSS != nil || tmpl.ArchiveLocation.GCS != nil { // User explicitly set the location. nothing else to do. return nil } @@ -917,6 +917,19 @@ func (woc *wfOperationCtx) addArchiveLocation(pod *apiv1.Pod, tmpl *wfv1.Templat }, Key: artLocationKey, } + } else if gcsLocation := woc.artifactRepository.GCS; gcsLocation != nil { + woc.log.Debugf("Setting GCS artifact repository information") + artLocationKey := gcsLocation.KeyFormat + if artLocationKey == "" { + artLocationKey = common.DefaultArchivePattern + } + tmpl.ArchiveLocation.GCS = &wfv1.GCSArtifact{ + GCSBucket: wfv1.GCSBucket{ + Bucket: gcsLocation.Bucket, + ServiceAccountKeySecret: gcsLocation.ServiceAccountKeySecret, + }, + Key: artLocationKey, + } } else { return errors.Errorf(errors.CodeBadRequest, "controller is not configured with a default archive location") } @@ -1110,6 +1123,8 @@ func createArchiveLocationSecret(tmpl *wfv1.Template, volMap map[string]apiv1.Vo } else if ossRepo := tmpl.ArchiveLocation.OSS; ossRepo != nil { createSecretVal(volMap, &ossRepo.AccessKeySecret, uniqueKeyMap) createSecretVal(volMap, &ossRepo.SecretKeySecret, uniqueKeyMap) + } else if gcsRepo := tmpl.ArchiveLocation.GCS; gcsRepo != nil { + createSecretVal(volMap, &gcsRepo.ServiceAccountKeySecret, uniqueKeyMap) } } @@ -1130,6 +1145,8 @@ func createSecretVolume(volMap map[string]apiv1.Volume, art wfv1.Artifact, keyMa } else if art.OSS != nil { createSecretVal(volMap, &art.OSS.AccessKeySecret, keyMap) createSecretVal(volMap, &art.OSS.SecretKeySecret, keyMap) + } else if art.GCS != nil { + createSecretVal(volMap, &art.GCS.ServiceAccountKeySecret, keyMap) } } diff --git a/workflow/executor/executor.go b/workflow/executor/executor.go index 400495ee973f..9228cad29c27 100644 --- a/workflow/executor/executor.go +++ b/workflow/executor/executor.go @@ -272,6 +272,10 @@ func (we *WorkflowExecutor) saveArtifact(mainCtrID string, art *wfv1.Artifact) e shallowCopy := *we.Template.ArchiveLocation.OSS art.OSS = &shallowCopy art.OSS.Key = path.Join(art.OSS.Key, fileName) + } else if we.Template.ArchiveLocation.GCS != nil { + shallowCopy := *we.Template.ArchiveLocation.GCS + art.GCS = &shallowCopy + art.GCS.Key = path.Join(art.GCS.Key, fileName) } else { return errors.Errorf(errors.CodeBadRequest, "Unable to determine path to store %s. Archive location provided no information", art.Name) } @@ -500,6 +504,10 @@ func (we *WorkflowExecutor) SaveLogs() (*wfv1.Artifact, error) { shallowCopy := *we.Template.ArchiveLocation.HDFS art.HDFS = &shallowCopy art.HDFS.Path = path.Join(art.HDFS.Path, fileName) + } else if we.Template.ArchiveLocation.GCS != nil { + shallowCopy := *we.Template.ArchiveLocation.GCS + art.GCS = &shallowCopy + art.GCS.Key = path.Join(art.GCS.Key, fileName) } else { return nil, errors.Errorf(errors.CodeBadRequest, "Unable to determine path to store %s. Archive location provided no information", art.Name) }